{"playlists":[{"id":"clugmksn70rgn7l2rrag","title":"『NEORT』×『Pop Up! YohaS』 Digital Art Show","description":"Artworks submited by users for the projection mapping art show.\nhttps://neort.io/challenge/cl0tss4n70rtc72b48v0","user":{"id":"9Bqy2IWae5gAXfMSM4cHStP2dxP2","customId":"r21nomi","name":"NIINOMI","biography":"Creative Coder.\nI mainly use GLSL, WebGL.\nRecently, TouchDesigner, Houdini and Unity.\n\nhttps://niinomi.art","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/9Bqy2IWae5gAXfMSM4cHStP2dxP2.jpg","createdAt":1548912457000,"updatedAt":1735357681608},"arts":[{"id":"cl65064n70rtc72b4r4g","title":"Christmas","description":"\"Christmas\"\ncode by E.C.H (Eiichi Ishii)\n","createdAt":1699500062,"updatedAt":1699508488,"user":{"id":"jpe3kEu3j3R7kPPVLmQx5L1cLuD2","customId":"ech","name":"えいいち(E.C.H) ","biography":"たぶんアーティスト。美術と音楽と映画と、写真、お酒が好きです。作品制作してます。クリエイティブコーディング #CreativeCoding #Processing #p5js #openFrameworks #SonicPi #PureData #TouchDesigner","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/jpe3kEu3j3R7kPPVLmQx5L1cLuD2.png","createdAt":1573355006000,"updatedAt":1733824346259},"codes":[{"id":"cl6507kn70rtc72b4r5g","type":0,"text":"","artId":"cl65064n70rtc72b4r4g","libraries":[]},{"id":"cl6507kn70rtc72b4r60","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"cl65064n70rtc72b4r4g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cl6507kn70rtc72b4r6g","type":2,"text":"let num = 200;\r\nlet rnum = 300;\r\nlet cnum = 18;\r\nlet ps = new Array(num);\r\nlet rs = new Array(rnum);\r\nlet cp = [\"#ff0000\", \"#4db56a\", \"#e6b422\", \"#FFFFFF\"];\r\n\r\nfunction setup() {\r\n createCanvas(1920, 970);\r\n colorMode(HSB, 360, 100, 100, 100);\r\n angleMode(DEGREES);\r\n strokeCap(SQUARE);\r\n\r\n for (let i = 0; i \u003c num; i++) {\r\n ps[i] = new particles();\r\n }\r\n\r\n for (let j = 0; j \u003c rnum; j++) {\r\n rs[j] = new rains();\r\n }\r\n}\r\n\r\nfunction draw() {\r\n background(0, 0, 0);\r\n\r\n for (let j = 0; j \u003c rnum; j++) {\r\n rs[j].update();\r\n rs[j].display();\r\n }\r\n\r\n for (let i = 0; i \u003c num; i++) {\r\n ps[i].update();\r\n ps[i].display();\r\n }\r\n}\r\n\r\nclass particles {\r\n constructor() {\r\n this.mx = random(width);\r\n this.my = random(height);\r\n this.amx = random(-1, 1);\r\n this.amy = random(-1, 1);\r\n this.angle = random(360);\r\n this.anam = random(-1, 1);\r\n this.mr = random(width / 100, width / 20);\r\n this.z = height / 4;\r\n this.mxn = random(-this.z, this.z);\r\n this.myn = random(-this.z, this.z);\r\n this.mc = color(random(cp));\r\n this.cn = random(30);\r\n this.seedx = random(0.0002, 0.002);\r\n this.seedy = random(0.0002, 0.002);\r\n this.cseed = random(0.01, 0.1);\r\n this.sqn = random(1);\r\n this.san = random(360);\r\n this.pn = random(1, this.mr / 2.5);\r\n this.swn = random(2);\r\n }\r\n\r\n update() {\r\n this.mx += this.amx;\r\n this.my += this.amy;\r\n if (this.mx \u003e width + this.z || this.mx \u003c -this.z) {\r\n this.amx = -this.amx;\r\n }\r\n if (this.my \u003e height + this.z || this.my \u003c -this.z) {\r\n this.amy = -this.amy;\r\n }\r\n this.angle += this.anam;\r\n if (this.angle \u003e 360 || this.angle \u003c 0) {\r\n this.angle = 0;\r\n }\r\n }\r\n\r\n display() {\r\n push();\r\n translate(this.mx, this.my);\r\n rotate(this.angle);\r\n\r\n let adx = map(noise(this.mxn), 0, 1, -this.z, this.z);\r\n let ady = map(noise(this.myn), 0, 1, -this.z, this.z);\r\n this.mxn += this.seedx;\r\n this.myn += this.seedy;\r\n translate(adx, ady);\r\n\r\n let alp = map(noise(this.cn), 0, 1, 0, 30);\r\n this.cn += this.cseed;\r\n\r\n this.mc.setAlpha(alp);\r\n fill(this.mc);\r\n noStroke();\r\n\r\n for (let er = this.mr; er \u003e 0; er -= this.mr / 10) {\r\n ellipse(0, 0, er, er);\r\n }\r\n\r\n for (let j = 0; j \u003c 10; j++) {\r\n let sq = sqrt(noise(j, this.sn));\r\n let sangle = map(noise(j, this.san), 0, 1, 0, 360);\r\n let pr = map(noise(j, this.pn), 0, 1, 1, this.mr / 2.5);\r\n push();\r\n translate(sq * this.mr * 1.5 * cos(sangle), sq * this.mr * 1.5 * sin(sangle));\r\n rotate(sangle);\r\n\r\n let sw = noise(j, this.swn);\r\n\r\n if (sw \u003c 0.5) {\r\n this.mc.setAlpha(alp * 1.5);\r\n fill(this.mc);\r\n noStroke();\r\n } else if (sw \u003e 0.5) {\r\n this.mc.setAlpha(100);\r\n stroke(this.mc);\r\n strokeWeight(pr / 10);\r\n noFill();\r\n }\r\n rect(0, 0, pr, pr);\r\n pop();\r\n }\r\n this.san += 0.005;\r\n this.pn += 0.01;\r\n this.swn += 0.01;\r\n pop();\r\n }\r\n}\r\n\r\nclass rains {\r\n constructor() {\r\n this.rx = random(width);\r\n this.ry = random(height);\r\n this.amy = random(10, 100);\r\n this.lig = random(80);\r\n this.lr = random(1, width/400);\r\n this.rhue = random(180, 280);\r\n }\r\n\r\n update() {\r\n this.ry += this.amy;\r\n if (this.ry \u003e height) {\r\n this.rx = random(width);\r\n this.ry = 0;\r\n this.amy = random(10, 100);\r\n this.lig = random(80);\r\n }\r\n }\r\n\r\n display() {\r\n stroke(this.rhue, 100, this.lig, 50);\r\n strokeWeight(this.lr);\r\n line(this.rx, 0, this.rx, this.ry);\r\n }\r\n}","artId":"cl65064n70rtc72b4r4g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.min.js"]}],"like":6,"thumbFileName":"cl65064n70rtc72b4r4g.png","selectedThumbFileName":"cl65064n70rtc72b4r4g.png","thumbnailFileUrl":"","resourceFileName":"cl65064n70rtc72b4r4g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmbqYFSZXWqP7wq5XBmAnf6VquSucJiMmQruxA8Nm6Vvuz","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g0169g","name":"Processing"},{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"bmqr67s3p9f7m1g02kr0","name":"creativecoding"},{"id":"bmqr81c3p9f7m1g02kt0","name":"japan"},{"id":"bne4dlk3p9f5erb52j0g","name":"generative"},{"id":"bo4c6ts3p9fc827hca80","name":"art"},{"id":"btq2f543p9f6ru0r4i3g","name":"JavaScript"},{"id":"c92gd3s3p9f0i94dj8h0","name":"programming"},{"id":"c92ge9s3p9f0i94dj8j0","name":"E.C.H"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cl9ihkkn70rtc72b5b50","title":"Winter Memory","description":"イルミネーションが煌々とする街で「あれ買って!」と駄々をこねたあの景色、 \nクリスマスツリーの前で友達と一緒に写真を撮ったあの景色、 \n折角の日に恋人と大喧嘩して泣き腫らした目で見たあの景色、 \n仕事の帰りに「もうクリスマスか、今年もあっという間だなー」とふと周りを見て思ったあの景色。 \n \nいつか見たクリスマスの景色と思い出がふわふわと舞うイメージで制作しました。\n","createdAt":1699976435,"updatedAt":1700787802,"user":{"id":"41ZPio2ccjQJrC0xydc4JTYeUCy1","customId":"41ZPio2ccjQJrC0xydc4JTYeUCy1","name":"ritoco","biography":"Colorful patterns are created with \" p5.js \" . I promise to take you to a dream world of colors and shapes.  Twitter https://twitter.com/t_ritoco","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/41ZPio2ccjQJrC0xydc4JTYeUCy1.jpg","createdAt":1678516809857,"updatedAt":1724916028455},"codes":[{"id":"cl9ihm4n70rtc72b5b60","type":0,"text":"","artId":"cl9ihkkn70rtc72b5b50","libraries":[]},{"id":"cl9ihm4n70rtc72b5b6g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}\n\n@media screen and (max-width: 480px) {\n canvas {\n max-height: 400px;\n max-width: 400px;\n }\n}","artId":"cl9ihkkn70rtc72b5b50","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cl9ihm4n70rtc72b5b70","type":2,"text":"let artColor = [\"#025E73\", \"#76E5DD\", \"#F34766\", \"#0ABFAD\", \"#F2A20C\", \"#F24F13\", '#8E07F9', \"#F1E645\"];\nlet pos = 0;\nlet pos2 = 0;\nlet step = 50;\nlet step2 = 10;\nfunction setup() {\n createCanvas(1920, 970);\n strokeWeight(30);\n myPal();\n}\nfunction myPal() {\n let pallet = int(random(artColor.length));\n objColor = artColor[pallet];\n artColor.splice(pallet, 2);\n artColor = shuffle(artColor);\n}\n\n\n\nfunction objA() {\n push();\n blendMode(SCREEN);\n x = pos2 + width;\n for (objY = 10; objY \u003c height / 10; objY += step2) {\n for (t = width / 3; t--;) {\n\n fill(artColor[1]);\n stroke(random(40));\n rect((objX = cos((x + t) * 31.0) * width) * 10.0, objY + (objX / 20.0) * PI * sin(x + t), t / 50.0);\n\n fill(artColor[3]);\n ellipse((objX = cos((x + t) * 3.0) * width) * 10.0, objY + (objX / 20.0) * PI * sin(x + t),\n t / 25.0);\n\n fill(artColor[4]);\n stroke(random(20));\n ellipse((objX = cos((x + t) * 10.0) * width) * 10.0, objY + (objX * 10) * PI * sin(x + t),\n t / 100.0);\n rotate(PI / 4000);\n }\n\n }\n pos2--;\n pop();\n\n}\nfunction objB() {\n push();\n blendMode(ADD);\n fill(artColor[1]);\n x = pos + width;\n for (objY = 0; objY \u003c height / 10; objY += step) {\n for (t = width / 6; t--;) {\n stroke(artColor[2]);\n circle((objX = sin((x - t) * width) * 3000), objY + (objX / 1.5) * PI * sin(x - t), t / 0.95);\n circle((objX = cos((x + t) * 3.0) * width) * 10.0, objY + (objX / 20.0) * PI * sin(x + t), t / 30.0);\n rotate(PI / 3000);\n }\n }\n pos--;\n pop();\n}\n\n\nfunction draw() {\n clear();\n background('#061133');\n objA();\n objB();\n}\n","artId":"cl9ihkkn70rtc72b5b50","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.min.js"]}],"like":4,"thumbFileName":"cl9ihkkn70rtc72b5b50.png","selectedThumbFileName":"cl9ihkkn70rtc72b5b50.png","thumbnailFileUrl":"","resourceFileName":"cl9ihkkn70rtc72b5b50.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZjWMrPs1Xi62pAbK2n2Nqee48PtbVtL9ZzfY1pRD2wM2","resourceType":1,"metadataUrl":"","tags":[{"id":"brs6iac3p9ffuj8oh6n0","name":"p5js "},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cla780sn70rtc72b5f3g","title":"Ribbons","description":"小さい頃母はケーキ屋さんで働いていて、クリスマスに素敵な時間を過ごすことはあまりなかった。\nただただプレゼントが楽しみだった。\nクリスマスの夜のどきどきした気持ち。\nリボンをほどく高揚感。\n","createdAt":1700033543,"updatedAt":1700033543,"user":{"id":"IICO7eleq7RVcrsx14LWP1u8NHj2","customId":"IICO7eleq7RVcrsx14LWP1u8NHj2","name":"センバク","biography":"","image":"https://pbs.twimg.com/profile_images/1300538765/kaojapanesegirl_normal.jpg","createdAt":1590824917000,"updatedAt":1726813373382},"codes":[{"id":"cla781sn70rtc72b5f4g","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.js\"\u003e\u003c/script\u003e\n","artId":"cla780sn70rtc72b5f3g","libraries":[]},{"id":"cla781sn70rtc72b5f50","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"cla780sn70rtc72b5f3g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cla781sn70rtc72b5f5g","type":2,"text":"/*\nChristmas by Senbaku\nhttps://twitter.com/senbaku\nhttps://openprocessing.org/user/207560/\n*/\n\n\nlet t = 0.0;\nlet vel = 1;\nlet seed;\nlet wSize;\nlet palette_selected,palette_selected2,palette_selected3;\n\nfunction setup() {\n\tseed = random(100000);\n\tcreateCanvas(1920, 970);\n\twSize = min(width, height)\n\tpixelDensity(2)\n\tangleMode(DEGREES);\n\trectMode(CENTER)\n\n\t//texture\n\tpg = createGraphics(width, height);\n\tpg.noStroke();\n\tfor (let i = 0; i \u003c 300000; i++) {\n\t\tlet x = random(width);\n\t\tlet y = random(height);\n\t\tlet n = noise(x * 0.01, y * 0.01) * wSize * 0.002;\n\t\tlet textureCol = color('#f8ca00');\n\t\ttextureCol.setAlpha(30)\n\t\tpg.fill(textureCol);\n\t\tpg.rect(x, y, n, n);\n\t}\n\t//background_grid\n\tbg_ribbon = createGraphics(width, height);\n\tlet bg_ribbonnum = 20;\n\tlet iteration = min(width, height) / bg_ribbonnum;\n\tbg_ribbon.drawingContext.setLineDash([wSize * 0.002, wSize * 0.005]);\n\tbg_ribbon.strokeWeight(wSize * 0.001)\n\tlet cc = color('#ff4e50')\n\tbg_ribbon.stroke(cc)\n\tfor (let i = 0; i \u003c width; i += iteration) {\n\t\tfor (let j = 0; j \u003c height; j += iteration) {\n\t\t\tbg_ribbon.line(0, j, width, j)\n\t\t\tbg_ribbon.line(i, 0, i, height)\n\t\t}\n\t}\n}\n\nfunction draw() {\n\trandomSeed(seed);\n\tbackground(0);\n\timage(bg_ribbon, 0, 0)\n\tcirclePacking()\n\timage(pg, 0, 0)\n\tt += vel;\n}\n\nfunction circlePacking() {\n\tnoStroke();\n\tpush();\n\tlet points = [];\n\tconst count = 600;\n\tfor (let i = 0; i \u003c count; i++) {\n\t\tlet s = random(wSize * 0.01, wSize * 0.2);\n\t\tlet x = random(width);\n\t\tlet y = random(height);\n\t\tlet add = true;\n\t\tfor (let j = 0; j \u003c points.length; j++) {\n\t\t\tlet p = points[j];\n\t\t\tif (dist(x, y, p.x, p.y) \u003c (s + p.z) * 0.6) {\n\t\t\t\tadd = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (add) points.push(createVector(x, y, s));\n\t}\n\tfor (let i = 0; i \u003c points.length; i++) {\n\t\tlet p = points[i];\n\t\tlet r = p.z - 5;\n\t\tr = constrain(r, wSize * 0.04, wSize * 0.4)\n\t\tlet direction = random([-1, 1])\n\t\tlet randTime = random(30)\n\t\tpush();\n\t\ttranslate(p.x, p.y);\n\t\trotate(random(-5, 5) + (5 * sin(t + randTime) * direction))\n\t\tlet ran = random();\n\t\tif (ran \u003c 0.5) {\n\t\t\tpush();\n\t\t\tpalette_selected = random(palettes);\n\t\t\tribbons_bold(0, 0, r)\n\t\t\tpop();\n\t\t} else if (ran \u003c 0.7) {\n\t\t\tpush();\n\t\t\tpalette_selected2 = random(palettes);\n\t\t\tribbons_thin(0, 0, r)\n\t\t\tpop();\n\t\t} else if (ran \u003c 0.8) {\n\t\t\tlet redCol = [\"#641220\", \"#6e1423\", \"#85182a\", \"#a11d33\", \"#a71e34\", \"#b21e35\", \"#bd1f36\", \"#c71f37\", \"#da1e37\", \"#e01e37\"];\n\t\t\tpalette_selected3 = redCol;\n\t\t\tribbons_giftBow(0, 0, r)\n\t\t} else {\n\t\t\t//star\n\t\t\tpush();\n\t\t\tlet starCol = [\"#fff75e\", \"#ffe94e\", \"#ffda3d\", \"#fdc43f\", \"#fdb833\"];\n\t\t\tfill(random(starCol));\n\t\t\tr = constrain(r, wSize * 0.001, wSize * 0.05)\n\t\t\trotate(random(45))\n\t\t\tlet angle = 360 / 6;\n\t\t\tlet r2 = r / 2;\n\t\t\tbeginShape();\n\t\t\tfor (let a = 0; a \u003c 360; a += angle) {\n\t\t\t\tlet x = cos(a) * r;\n\t\t\t\tlet y = sin(a) * r;\n\t\t\t\tvertex(x, y);\n\t\t\t\tx = cos(a + (angle / 2)) * r2;\n\t\t\t\ty = sin(a + (angle / 2)) * r2;\n\t\t\t\tvertex(x, y);\n\t\t\t}\n\t\t\tendShape(CLOSE);\n\t\t\t//halo\n\t\t\tlet radius = r;\n\t\t\tfor (let i = 0; i \u003c 360; i += 360 / 40) {\n\t\t\t\tlet haloRaidus = radius * random(1.2, 1.5)\n\t\t\t\tstroke(random(starCol));\n\t\t\t\tlet ex = radius * sin(i);\n\t\t\t\tlet ey = radius * cos(i);\n\t\t\t\tlet outEx = haloRaidus * sin(i);\n\t\t\t\tlet outEy = haloRaidus * cos(i);\n\t\t\t\tline(ex, ey, outEx, outEy);\n\t\t\t}\n\t\t\tpop();\n\t\t}\n\t\tpop();\n\t}\n}\n\nfunction giftBowParts(x, y, size) {\n\tnoStroke();\n\tpush();\n\ttranslate(x, y)\n\tfill(random(palette_selected3))\n\n\tbeginShape();\n\tvertex(-size / 2, size / 2)\n\tvertex(-size * 0.15, -size * 0.55);\n\tbezierVertex(0, -size * 0.6, 0, -size * 0.6, size * 0.15, -size * 0.55)\n\tvertex(size / 2, size / 2)\n\tbezierVertex(0, size * 0.7, 0, size * 0.7, -size / 2, size / 2)\n\tendShape();\n\n\tpop();\n}\n\nfunction drawBowSegment(adjustment, randomSize, num, partsSize, sizes) {\n\tpush();\n\tlet psize = sizes * 0.5\n\trotate(adjustment)\n\tfor (let i = 0; i \u003c 360; i += 360 / num) {\n\t\tlet radius = sizes * randomSize;\n\t\tlet ex = radius * sin(i);\n\t\tlet ey = radius * cos(i);\n\t\tlet angle = atan2(ey, ex)\n\t\tpush();\n\t\ttranslate(ex, ey)\n\t\trotate(angle + 90)\n\t\tgiftBowParts(0, 0, psize * partsSize);\n\t\tpop();\n\t}\n\tpop();\n}\n\nfunction ribbons_giftBow(x, y, sizes) {\n\tlet psize = sizes * 0.5;\n\tpush();\n\ttranslate(x, y);\n\tdrawBowSegment(20, random(0.5, 0.6), 8, 0.8, sizes)\n\tdrawBowSegment(0, random(0.4, 0.5), 4, 1, sizes)\n\tdrawBowSegment(40, random(0.3, 0.4), 4, 1, sizes)\n\tpush();\n\ttranslate(sizes * 0.1, -sizes * 0.1)\n\trotate(55)\n\tgiftBowParts(0, 0, psize * 0.9);\n\tpop();\n\tpop();\n}\n\nfunction draw_tail_bold(sizes, hsize) {\n\tpush();\n\tlet tailRLength;\n\tif (random() \u003c 0.7) {\n\t\ttailRLength = sizes * random(0.8, 1.2)\n\t} else {\n\t\ttailRLength = sizes * random(2, 4.2)\n\t}\n\tlet ribbonWidth = hsize * 0.5;\n\tfill(random(palette_selected))\n\ttranslate(ribbonWidth / 4, 0);\n\n\tlet pos2 = createVector(random(-hsize / 2, hsize / 2), tailRLength / 2);\n\tlet pos3 = createVector(random(-hsize / 2, hsize / 2), tailRLength / 2);\n\tlet pos4 = createVector(random(-hsize / 2, -hsize), tailRLength)\n\tbeginShape();\n\tvertex(0, 0);\n\tbezierVertex(pos2.x, pos2.y, pos3.x, pos3.y, pos4.x, pos4.y)\n\n\tlet steps = 16;\n\tpush();\n\tlet mx = bezierPoint(pos4.x, pos3.x, pos2.x, 0, 1 / steps);\n\tlet my = bezierPoint(pos4.y, pos3.y, pos2.y, 0, 1 / steps);\n\tlet mtx = bezierTangent(pos4.x, pos3.x, pos2.x, 0, 1 / steps);\n\tlet mty = bezierTangent(pos4.y, pos3.y, pos2.y, 0, 1 / steps);\n\tlet ma = atan2(mty, mtx);\n\tvertex(cos(ma) * (-ribbonWidth * 0.5) + mx, sin(ma) * (ribbonWidth * 0.5) + my)\n\tpop();\n\n\tfor (let i = 0; i \u003c= steps; i++) {\n\t\tlet t = i / steps;\n\t\tlet x = bezierPoint(pos4.x, pos3.x, pos2.x, 0, t);\n\t\tlet y = bezierPoint(pos4.y, pos3.y, pos2.y, 0, t);\n\t\tlet tx = bezierTangent(pos4.x, pos3.x, pos2.x, 0, t);\n\t\tlet ty = bezierTangent(pos4.y, pos3.y, pos2.y, 0, t);\n\t\tlet a = atan2(ty, tx);\n\t\ta -= 90;\n\t\tvertex(cos(a) * ribbonWidth + x, sin(a) * ribbonWidth + y)\n\t}\n\tvertex(0, 0)\n\tendShape();\n\tpop();\n}\n\nfunction draw_bow_bold(sizes, hsize, ribbonWidth) {\n\tpush();\n\tlet bowWidth = sizes * 0.7\n\tfill(random(palette_selected))\n\trotate(random(-25, 25))\n\tbeginShape();\n\tvertex(0, -ribbonWidth / 2);\n\tbezierVertex(hsize / 2, -ribbonWidth, hsize, -ribbonWidth * 1.5, bowWidth, -ribbonWidth)\n\tvertex(bowWidth, -ribbonWidth)\n\tvertex(bowWidth, ribbonWidth)\n\tbezierVertex(hsize, ribbonWidth * 1.5, hsize / 2, ribbonWidth, 0, ribbonWidth / 2)\n\tendShape();\n\tbeginShape();\n\tfill(random(palette_selected))\n\tvertex(0, ribbonWidth / 2)\n\tbezierVertex(hsize / 2, ribbonWidth * 0.5, hsize, ribbonWidth * 0.5, bowWidth, ribbonWidth)\n\tbezierVertex(hsize, ribbonWidth * 1.5, hsize / 2, ribbonWidth, 0, ribbonWidth / 2)\n\tendShape()\n\tpop();\n}\n\nfunction ribbons_bold(x, y, sizes) {\n\tnoStroke();\n\tlet hsize = sizes / 2;\n\tlet rNum = random(3, 5);\n\tlet ribbonWidth = hsize * 0.3;\n\tpush();\n\ttranslate(x, y);\n\t//tail\n\tpush();\n\tdraw_tail_bold(sizes, hsize)\n\tpush();\n\tscale(-1, 1)\n\tdraw_tail_bold(sizes, hsize)\n\tpop();\n\tpop();\n\t//bow\n\tfor (let i = 0; i \u003c rNum; i++) {\n\t\tdraw_bow_bold(sizes, hsize, ribbonWidth)\n\t\tpush();\n\t\tscale(-1, 1)\n\t\tdraw_bow_bold(sizes, hsize, ribbonWidth)\n\t\tpop();\n\t}\n\t//knot\n\tlet knotSize = sizes * 0.3\n\tfill(random(palette_selected));\n\tbeginShape();\n\tvertex(-knotSize * 0.3, -knotSize * 0.5);\n\tvertex(knotSize * 0.3, -knotSize * 0.5);\n\tbezierVertex(knotSize * 0.4, 0, knotSize * 0.4, 0, knotSize * 0.3, knotSize * 0.5)\n\tvertex(-knotSize * 0.3, knotSize * 0.5);\n\tbezierVertex(-knotSize * 0.4, 0, -knotSize * 0.4, 0, -knotSize * 0.3, -knotSize * 0.5)\n\tendShape();\n\tpop();\n}\n\n\nfunction draw_bow_thin(hsize) {\n\tlet rNum = random(3, 5)\n\tpush();\n\tfor (let i = 0; i \u003c rNum; i++) {\n\t\tstroke(random(palette_selected2))\n\t\trotate(random(-35, 35))\n\t\tbeginShape();\n\t\tvertex(0, 0);\n\t\tbezierVertex(hsize, -hsize * (random(0.4, 1)), hsize, hsize * (random(0.4, 1)), 0, 0)\n\t\tendShape();\n\t}\n\tpop();\n}\n\nfunction draw_tail_thin(sizes) {\n\tlet hsize = sizes / 2;\n\tlet tailRLength = sizes * random(0.8, 2.2);\n\tstroke(random(palette_selected2))\n\tbeginShape();\n\tvertex(0, 0);\n\tbezierVertex(random(-hsize, hsize), tailRLength / 2, random(-hsize, hsize), tailRLength / 2, random(0, hsize), tailRLength)\n\tendShape();\n}\n\nfunction ribbons_thin(x, y, sizes) {\n\tlet hsize = sizes / 2;\n\tpush();\n\ttranslate(x, y);\n\tnoFill();\n\tstrokeWeight(sizes * 0.03)\n\n\t//tail\n\tdraw_tail_thin(sizes)\n\tpush();\n\tscale(-1, 1);\n\tdraw_tail_thin(sizes);\n\tpop();\n\n\t//bow\n\tdraw_bow_thin(hsize);\n\tpush();\n\tscale(-1, 1)\n\tdraw_bow_thin(hsize);\n\tpop();\n\n\t//knot\n\tlet knotSize = sizes * 0.05\n\tfill(random(palette_selected2))\n\tnoStroke();\n\trect(0, 0, knotSize * 0.8, knotSize, knotSize * 0.3)\n\tpop();\n}\n\n//palettes----------------------------------------\nconst palettes = [\n\t[\"#e9dbce\", \"#fceade\", \"#ea526f\", \"#e2c290\", \"#6b2d5c\", \"#25ced1\"],\n\t[\"#223843\", \"#e9dbce\", \"#eff1f3\", \"#dbd3d8\", \"#d8b4a0\", \"#d77a61\"],\n\t[\"#e29578\", \"#ffffff\", \"#006d77\", \"#83c5be\", \"#ffddd2\", \"#edf6f9\"],\n\t[\"#e9dbce\", \"#ffffff\", \"#cc3528\", \"#028090\", \"#00a896\", \"#f8c522\"],\n\t[\"#e9dbce\", \"#f8f7c1\", \"#f46902\", \"#da506a\", \"#fae402\", \"#92accc\"],\n\t[\"#e42268\", \"#fb8075\", \"#761871\", \"#5b7d9c\", \"#a38cb4\", \"#476590\"],\n\t['#f9b4ab', '#fdebd3', '#264e70', '#679186', '#bbd4ce'],\n\t['#1f306e', '#553772', '#8f3b76', '#c7417b', '#f5487f'],\n\t['#e0f0ea', '#95adbe', '#574f7d', '#503a65', '#3c2a4d'],\n\t['#413e4a', '#73626e', '#b38184', '#f0b49e', '#f7e4be'],\n\t['#ff4e50', '#fc913a', '#f9d423', '#ede574', '#e1f5c4'],\n\t['#99b898', '#fecea8', '#ff847c', '#e84a5f', '#2a363b'],\n\t['#69d2e7', '#a7dbd8', '#e0e4cc', '#f38630', '#fa6900'],\n\t['#fe4365', '#fc9d9a', '#f9cdad', '#c8c8a9', '#83af9b'],\n\t['#ecd078', '#d95b43', '#c02942', '#542437', '#53777a'],\n\t['#556270', '#4ecdc4', '#c7f464', '#ff6b6b', '#c44d58'],\n\t['#774f38', '#e08e79', '#f1d4af', '#ece5ce', '#c5e0dc'],\n\t['#e8ddcb', '#cdb380', '#036564', '#033649', '#031634'],\n\t['#490a3d', '#bd1550', '#e97f02', '#f8ca00', '#8a9b0f'],\n\t['#594f4f', '#547980', '#45ada8', '#9de0ad', '#e5fcc2'],\n\t['#00a0b0', '#6a4a3c', '#cc333f', '#eb6841', '#edc951'],\n\t['#5bc0eb', '#fde74c', '#9bc53d', '#e55934', '#fa7921'],\n\t['#ed6a5a', '#f4f1bb', '#9bc1bc', '#5ca4a9', '#e6ebe0'],\n\t['#ef476f', '#ffd166', '#06d6a0', '#118ab2', '#073b4c'],\n\t['#22223b', '#4a4e69', '#9a8c98', '#c9ada7', '#f2e9e4'],\n\t['#114b5f', '#1a936f', '#88d498', '#c6dabf', '#f3e9d2'],\n\t['#ff9f1c', '#ffbf69', '#ffffff', '#cbf3f0', '#2ec4b6'],\n\t['#3d5a80', '#98c1d9', '#e0fbfc', '#ee6c4d', '#293241'],\n\t['#06aed5', '#086788', '#f0c808', '#fff1d0', '#dd1c1a'],\n\t['#540d6e', '#ee4266', '#ffd23f', '#3bceac', '#0ead69'],\n\t['#c9cba3', '#ffe1a8', '#e26d5c', '#723d46', '#472d30'],\n\t[\"#3c4cad\", \"#5FB49C\", \"#e8a49c\"],\n\t[\"#1c3560\", \"#f2efdb\", \"#fea985\", \"#ff6343\"],\n\t[\"#e0d7c5\", \"#488a50\", \"#b59a55\", \"#bf5513\", \"#3b6fb6\", \"#4f3224\", \"#9a7f6e\"], //o-ball\n [\"#ffb53c\", \"#eeb3a3\", \"#f3553c\", \"#642a02\"],//bloodOrange\n\t[\"#DEEFB7\", \"#5FB49C\", \"#ed6a5a\"],\n\t[\"#2B2B2B\",\"#91B3E1\",\"#2F5FB3\",\"#3D4B89\",\"#AE99E8\",\"#DBE2EC\"]//clipper_tea.snore\u0026peace.\n];","artId":"cla780sn70rtc72b5f3g","libraries":[]}],"like":5,"thumbFileName":"cla780sn70rtc72b5f3g.png","selectedThumbFileName":"cla780sn70rtc72b5f3g.png","thumbnailFileUrl":"","resourceFileName":"cla780sn70rtc72b5f3g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVc7fYSzjJohJuwLGACkBgvzHXyMyjXdUiZmJL7vGutHH","resourceType":1,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cla8mvsn70rtc72b5fd0","title":"Midnight Serenade: A Dance of Winter's Elegance","description":"このアートワークは、\"Midnight Serenade: A Dance of Winter's Elegance\"(ミッドナイトセレナーデ:冬の優雅な舞)と名付けました。コンセプトは、冬の魔法のような本質とクリスマスの祝祭の精神を捉えることに焦点を当てています。このデジタルアート作品は、静かで穏やかな冬の夜の美しさを思わせる、暗いグラデーションの夜空に対して、そっと降り積もる雪の結晶を視覚化しています。それぞれユニークな形をした、柔らかく光る雪の結晶がキャンバスを横切って舞う様子は、静けさを作り出します。\n\n作成のポイントとしては、以下の三つです:\n\n背景グラデーション: 暗い青から柔らかいピンクへと移行するグラデーション背景が、夜空を表現しています。この暗い背景は雪の結晶の視認性を高め、シーンに深みを与えます。\n\n雪の結晶の生成: 自然の雪の多様性を模倣するために、異なるサイズと形の雪の結晶が生成されます。これは、各雪の結晶のサイズとポイント数を決定するためにランダム関数を使用しています。\n\n光の効果: 各雪の結晶には、魔法のような幻想的な外観を作り出すために、微妙な光の効果が与えています。これはp5.jsの描画コンテキストを使用して、ぼかし効果のあるシャドウ効果を適用しています。","createdAt":1700039558,"updatedAt":1700371693,"user":{"id":"amTsep78J0ge4363LXONVuOoqCL2","customId":"amTsep78J0ge4363LXONVuOoqCL2","name":"Ricky","biography":"","image":"","createdAt":1700038996991,"updatedAt":1701747455306},"codes":[{"id":"cla8n1kn70rtc72b5fe0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"cla8mvsn70rtc72b5fd0","libraries":[]},{"id":"cla8n1kn70rtc72b5feg","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"cla8mvsn70rtc72b5fd0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cla8n1kn70rtc72b5ff0","type":2,"text":"let snowflakes = [];\n\nfunction setup() {\n createCanvas(1920, 970);\n colorMode(RGB, 255, 255, 255, 255); // Set color mode to RGB with alpha\n}\n\nfunction draw() {\n // Adjusted darker dynamic background\n let from = color(50, 90, 140); // Slightly darker blue\n let to = color(205, 130, 130); // Adjusted darker pink\n for (let i = 0; i \u003c= height; i++) {\n let inter = map(i, 0, height, 0, 1);\n let c = lerpColor(from, to, inter);\n stroke(c);\n line(0, i, width, i);\n }\n\n let t = frameCount / 57;\n\n // Create snowflakes with varying number of points\n if (random(1) \u003c 0.3) {\n snowflakes.push(new Snowflake(random(6, 12))); // Larger and varying points\n }\n\n // Update and display snowflakes\n for (let flake of snowflakes) {\n flake.update(t); // Update snowflakes based on time\n flake.display(); // Display each snowflake\n }\n}\n\nclass Snowflake {\n constructor(points) {\n this.posX = random(width);\n this.posY = random(-50, 0);\n this.initialangle = random(0, 2 * PI);\n this.size = random(3, 6); // Larger size for better visibility\n this.points = points; // Number of points in the snowflake\n\n this.radius = sqrt(random(pow(width / 2, 2)));\n\n this.color = this.randomBrighterPastelColor(); // Using brighter pastel colors\n }\n\n update(time) {\n let w = 0.6; // Angular velocity\n let angle = w * time + this.initialangle;\n this.posX = width / 2 + this.radius * sin(angle);\n\n this.posY += pow(this.size, 0.3); // Falling speed based on size\n\n // Remove snowflake if it moves beyond the canvas\n if (this.posY \u003e height) {\n let index = snowflakes.indexOf(this);\n snowflakes.splice(index, 1);\n }\n }\n\n display() {\n drawingContext.shadowOffsetX = 0;\n drawingContext.shadowOffsetY = 0;\n drawingContext.shadowBlur = 9; // Glow effect\n drawingContext.shadowColor = color(255, 255, 255, 150);\n\n fill(this.color); // Fill with pastel color\n stroke(this.color); // Stroke with pastel color\n drawStar(this.posX, this.posY, this.size, this.size * 2, this.points);\n\n drawingContext.shadowBlur = 0; // Reset glow effect\n }\n\n randomBrighterPastelColor() {\n const alpha = 210; // Increased for brighter visibility\n const colors = [\n color(255, 202, 212, alpha), // Brighter pastel pink\n color(174, 238, 174, alpha), // Brighter pastel green\n color(203, 226, 240, alpha), // Brighter pastel blue\n color(255, 240, 240, alpha) // Very light pink\n ];\n return random(colors);\n }\n}\n\nfunction drawStar(x, y, radius1, radius2, npoints) {\n let angle = TWO_PI / npoints;\n let halfAngle = angle / 2.0;\n beginShape();\n for (let a = 0; a \u003c TWO_PI; a += angle) {\n let sx = x + cos(a) * radius2;\n let sy = y + sin(a) * radius2;\n vertex(sx, sy);\n sx = x + cos(a + halfAngle) * radius1;\n sy = y + sin(a + halfAngle) * radius1;\n vertex(sx, sy);\n }\n endShape(CLOSE);\n}\n","artId":"cla8mvsn70rtc72b5fd0","libraries":[]}],"like":1,"thumbFileName":"cla8mvsn70rtc72b5fd0.png","selectedThumbFileName":"cla8mvsn70rtc72b5fd0.png","thumbnailFileUrl":"","resourceFileName":"cla8mvsn70rtc72b5fd0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXBz3euE84JUqo686E78Zc7cLmj9DSYyrjjoNE6QbAbud","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clac3u4n70rtc72b5hp0","title":"Random walking in rhythm","description":"Random walking in rhythm","createdAt":1700053500,"updatedAt":1700053500,"user":{"id":"ctdhDGDqQwQSv15IHpAKaOh42hg2","customId":"gin","name":"ギン","biography":"Generative Artist\ntwitter(JP): https://twitter.com/gin_graphic\ntwitter(EN): https://twitter.com/ginzi_o\nlinktree: https://linktr.ee/gin_graphic","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ctdhDGDqQwQSv15IHpAKaOh42hg2.jpg","createdAt":1637141678304,"updatedAt":1702694434431},"codes":[{"id":"clac3v4n70rtc72b5hq0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"ja\"\u003e\n\u003chead\u003e\n \u003cmeta charset=\"UTF-8\"\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n \u003ctitle\u003eHello p5\u003c/title\u003e\n \u003clink rel=\"stylesheet\" href=\"main.css\"\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.js\"\u003e\u003c/script\u003e\n\n\u003c/head\u003e\n\u003cbody\u003e\n \u003cscript src=\"main.js\"\u003e\u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e","artId":"clac3u4n70rtc72b5hp0","libraries":[]},{"id":"clac3v4n70rtc72b5hqg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clac3u4n70rtc72b5hp0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clac3v4n70rtc72b5hr0","type":2,"text":"function setup() {\n\tcreateCanvas(1920,970)\n\tw = width\n\th = height\n\timg = createGraphics(w, h)\n\tlim = createGraphics(w, h)\n\tlim.background(255)\n\tlim.stroke(0)\n\tlim.noFill()\n\tlng = createGraphics(w, h)\n\tlng.background(0)\n\tlng.stroke(255)\n\tlng.noFill()\n\timg.colorMode(HSB);\n\timg.background(0)\n\timg.noStroke();\n\t//frameRate(30)\n\tmode = random()\u003c0.5\n\tx = random(0.25,0.75)*w\n\ty = random(0.25,0.75)*h\n\tpx = x\n\tpy = y\n\tt = 0\n ofs=[random(360),random(TAU),random(100),random(100),random(TAU),random(TAU)]\n}\n\nfunction draw() {\n\tif(t%20==0){mode = random()\u003c0.5}\n\tif (mode) {\n\t\timg.fill((t*2+ofs[0])%360, 100, 100, 0.5)\n\t} else{\n\t\timg.fill(random([0,100]), 0.5)\n\t}\n\tfor(let i=0;i\u003c3;i++){\n\t\tlet csize = w*0.03*sin(t*0.2+ofs[1]) + random(-1,1)*w*0.01\n\t\tlet nx = map(x, 0, width, 0, 1)\n\t\tlet ny = map(y, 0, height, 0, 1)\n\n\t\tlet xl = x + random(-1,1)*30 + noise(nx, ny, ofs[2])*30\n\t\tlet yl = y + random(-1,1)*30 + noise(nx, ny, ofs[3])*30\n\t\timg.circle(xl, yl, csize);\n\t\tlim.circle(xl, yl, csize)\n\t}\n\tlng.line(px, py, x, y)\n\tpx = x\n\tpy = y\n\tx = x + random(-1,1)*w*0.08*sin(t/50*TAU+y/h+ofs[4])\n\tx = (x+w)%w\n\ty = y + random(-1,1)*h*0.08*sin(t/50*TAU+x/w+ofs[5])\n\ty = (y+h)%h\n\t\n\tif(t%300 \u003c 100){image(img, 0, 0)}\n\telse if(t%300 \u003c 200){image(lng, 0, 0)}\n\telse {image(lim, 0, 0)}\n\t\n\tif(t\u003e60*12){setup()}\n\t\n\tt+=0.75\n}","artId":"clac3u4n70rtc72b5hp0","libraries":[]}],"like":2,"thumbFileName":"clac3u4n70rtc72b5hp0.png","selectedThumbFileName":"clac3u4n70rtc72b5hp0.png","thumbnailFileUrl":"","resourceFileName":"clac3u4n70rtc72b5hp0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmSYmKzVvSKmBXbTMtcqfoXNu2iyVQ7wmNnht9fBqdLLUA","resourceType":1,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clcgrekn70rtc72b5qtg","title":"吐く息は白く","description":"","createdAt":1700335040,"updatedAt":1700335040,"user":{"id":"i29YtpFCfyMF9EwbjVcp4EFVSGu1","customId":"i29YtpFCfyMF9EwbjVcp4EFVSGu1","name":"Okazz","biography":"https://twitter.com/okazz_","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/i29YtpFCfyMF9EwbjVcp4EFVSGu1.png","createdAt":1550934600000,"updatedAt":1709822849400},"codes":[{"id":"clcgrg4n70rtc72b5qug","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js\"\u003e\u003c/script\u003e","artId":"clcgrekn70rtc72b5qtg","libraries":[]},{"id":"clcgrg4n70rtc72b5qv0","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"clcgrekn70rtc72b5qtg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clcgrg4n70rtc72b5qvg","type":2,"text":"let objs = [];\nlet colors = ['#e3424a','#f70640', '#f78e2c', '#fdd903', '#63be93', '#ffffff', '#299dbf', '#f654a9', '#47A025'];\n\n\nfunction setup() {\n\tcreateCanvas(windowWidth, windowHeight);\n\tfor (let i = 0; i \u003c 400; i++) {\n\t\tobjs.push(new Objct());\n\t}\n\tdrawingContext.shadowOffsetX = 0;\n\tdrawingContext.shadowOffsetY = 0;\n\tdrawingContext.shadowBlur = 20;\n}\n\nfunction draw() {\n\tbackground('#00000090');\n\tfor (let i of objs) {\n\t\ti.show();\n\t\ti.move();\n\t}\n}\n\nclass Objct {\n\tconstructor() {\n\t\tthis.x = random(width);\n\t\tthis.y = random(height);\n\t\tthis.d = 0;\n\t\tthis.col = random(colors);\n\t\tthis.init();\n\t\tthis.t = -int(random(100));\n\t}\n\n\tshow() {\n\t\tpush();\n\t\tfill(this.col);\n\t\tdrawingContext.shadowColor = this.col;\n\t\tnoStroke();\n\t\tcircle(this.x, this.y, this.d);\n\t\tpop();\n\t}\n\n\tmove() {\n\t\tthis.t++;\n\t\tif (0 \u003c this.t \u0026\u0026 this.t \u003c this.t1) {\n\t\t\tlet n = norm(this.t, 0, this.t1 - 1);\n\t\t\tthis.d = this.dMax * sin(n * PI);\n\t\t}\n\t\tif (this.t \u003e this.t1) {\n\t\t\tthis.init();\n\t\t}\n\t\tthis.y -= this.yStep;\n\t}\n\n\tinit(){\n\t\tthis.t = 0;\n\t\tthis.x = random(width);\n\t\tthis.y = random(height);\n\t\tthis.t1 = int(random(25, 100));\n\t\tthis.yStep = random(0.002)*height;\n\t\tthis.dMax = random(0.03) * height;\n\t}\n}","artId":"clcgrekn70rtc72b5qtg","libraries":[]}],"like":4,"thumbFileName":"clcgrekn70rtc72b5qtg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"clcgrekn70rtc72b5qtg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmfUCoqU8R425t7Pf8jASvXZ2RVF84W2ftXxbAnt2oqUCF","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clcv3qcn70rtc72b5sg0","title":"Kaleidoscopic Flare","description":"","createdAt":1700393462,"updatedAt":1700393462,"user":{"id":"c4K0URETkfWbKzELIJEmzd15bje2","customId":"","name":"seohyo","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/c4K0URETkfWbKzELIJEmzd15bje2.jpg","createdAt":1670159287212,"updatedAt":1715483521757},"codes":[],"like":2,"thumbFileName":"","selectedThumbFileName":"clcv3qcn70rtc72b5sg0.png","thumbnailFileUrl":"","resourceFileName":"clcv3qcn70rtc72b5sg0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmcuZdDrjq85o9XerScXAypFk7mFaJpoYz4TE9nZeYkXLe","resourceType":2,"metadataUrl":"","tags":[{"id":"bmqr67s3p9f7m1g02kr0","name":"creativecoding"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"},{"id":"clcv3tkn70rtc72b5sh0","name":"nodebox"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cldq4i4n70rtc72b61v0","title":"Shimmering Memories","description":"クリスマスの時期に街を彩る、色鮮やかな光を表現しました。\n\nI have expressed the colorful lights shining in the city during the Christmas season.","createdAt":1700566294,"updatedAt":1700566294,"user":{"id":"zLZijD9Ur2gzlfoMhyBpFFjY1W92","customId":"zLZijD9Ur2gzlfoMhyBpFFjY1W92","name":"Asaka","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/zLZijD9Ur2gzlfoMhyBpFFjY1W92.png","createdAt":1700503280395,"updatedAt":1700913877671},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"cldq4i4n70rtc72b61v0.png","thumbnailFileUrl":"","resourceFileName":"cldq4i4n70rtc72b61v0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmcdv5J1bMriLW8bTgqJJ91UCvzhJ4XqyrAyVWUv5BHwg8","resourceType":2,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clfipq4n70rtc72b6adg","title":"dot","description":"","createdAt":1700736241,"updatedAt":1700736471,"user":{"id":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","customId":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","name":"暁の流星","biography":"https://twitter.com/teruru33550336","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kxRaHBGSlVbGNFln0YnNYdFUNIC3.png","createdAt":1568178895000,"updatedAt":1734018546583},"codes":[{"id":"clfipscn70rtc72b6aeg","type":0,"text":"\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"en\"\u003e\r\n \u003chead\u003e\r\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js\"\u003e\u003c/script\u003e\r\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\r\n \u003cmeta charset=\"utf-8\" /\u003e\r\n\r\n \u003c/head\u003e\r\n \u003cbody\u003e\r\n \u003cmain\u003e\r\n \u003c/main\u003e\r\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\r\n \u003c/body\u003e\r\n\u003c/html\u003e\r\n","artId":"clfipq4n70rtc72b6adg","libraries":[]},{"id":"clfipscn70rtc72b6af0","type":1,"text":"* {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"clfipq4n70rtc72b6adg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clfipscn70rtc72b6afg","type":2,"text":"const w = 1920\r\nconst h = 970\r\nconst num = 200\r\nlet b = []\r\nlet v = []\r\n\r\nfunction setup(){\r\n createCanvas(w,h)\r\n\tbackground(0)\r\n colorMode(HSB)\r\n\r\n for(let i=0;i\u003cnum;i++){\r\n b.push([(random(w/20)|0)*20,(random(h/20)|0)*20])\r\n v.push(random(4)|0)\r\n }\r\n}\r\n\r\nlet t=0\r\nfunction draw(){\r\n\tt++\r\n fill(0,0,0,.1)\r\n rect(0,0,w,h)\r\n\r\n\r\n for(let i=0;i\u003cnum;i++){\r\n fill(i/num*255,255,255)\r\n a=b[i]\r\n let u=t%4\r\n circle(a[0],a[1],5)\r\n\r\n if(u===0){\r\n let ang = PI/2*v[i]\r\n g=a[0]+cos(ang)*20\r\n n=a[1]+sin(ang)*20\r\n if(g\u003c0 || g\u003ew) g=(random(w/20)|0)*20\r\n if(n\u003c0 || n\u003eh) n=(random(h/20)|0)*20\r\n b[i]=[g,n]\r\n v[i]=random(4)|0\r\n }\r\n }\r\n}\r\n\r\n","artId":"clfipq4n70rtc72b6adg","libraries":[]}],"like":3,"thumbFileName":"clfipq4n70rtc72b6adg.png","selectedThumbFileName":"clfipq4n70rtc72b6adg.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmR7osKYPyHMPLZ2D1cGCTL35T27BPjEjFgQEiNRypkXWK","resourceFileName":"clfipq4n70rtc72b6adg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmRBE8zTkJRv6UKwAgYSZKoNyMzNhtvwDbYE7CyycYApvv","resourceType":1,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmTyJTvuqgVhoFMW32beXhcqMGhcqmoZvzF6bz9DNfq4wm","tags":[{"id":"clfipscn70rtc72b6ag0","name":"yohas_art "}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.01,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"clhmiscn70rtc72b6j3g","title":"クリスマスツリー","description":"クリスマスという文字を回転させて、ツリーのようにしました。","createdAt":1701013884,"updatedAt":1701042287,"user":{"id":"mVWv0IZUTTgsttdfGnrsnpv1V2q2","customId":"mVWv0IZUTTgsttdfGnrsnpv1V2q2","name":"Yutorehito_","biography":"","image":"","createdAt":1700990202360,"updatedAt":1701595649799},"codes":[{"id":"clhmiusn70rtc72b6j4g","type":0,"text":"","artId":"clhmiscn70rtc72b6j3g","libraries":[]},{"id":"clhmiusn70rtc72b6j50","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clhmiscn70rtc72b6j3g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clhmiv4n70rtc72b6j5g","type":2,"text":"let mojis = []\r\nlet agents = []\r\n\r\nfunction setup() {\r\n createCanvas(windowWidth, windowHeight);\r\n background(0)\r\n angleMode(DEGREES)\r\n cols = ['tomato','limegreen',\"yellow\",\"white\"]\r\n chara = [\"ク\",\"リ\",\"ス\",\"マ\",\"ス\"]\r\n for (let index = 0; index \u003c 1000; index++) {\r\n let newone = new moji(random(chara),\r\n random(cols),\r\n random(width),\r\n random(height),\r\n random(40),\r\n random(360))\r\n\r\n mojis.push(newone)\r\n agents.push(new agent(newone.posx,newone.posy,random(-100,100),random(-100,100))) \r\n\r\n }\r\n}\r\nlet counter = 0\r\n\r\nfunction draw() {\r\n background(0,1);\r\n push()\r\n translate(width/2,height/2)\r\n rotate(counter)\r\n counter = counter + frameCount*0.01;\r\n for (let index = 0; index \u003c mojis.length; index++) {\r\n mojis[index].viz()\r\n agents[index].update(random(-100,100), random(-1,1)) \r\n mojis[index].update(agents[index].pos.x,agents[index].pos.y)\r\n }\r\n pop()\r\n filter(BLUR,1)\r\n\r\n}\r\nfunction windowResized() {\r\n resizeCanvas(windowWidth, windowHeight);\r\n}\r\n\r\nclass moji{\r\n constructor(moji,col,posx,posy,fontsize,angle){\r\n this.posx = posx\r\n this.posy = posy\r\n this.text = moji\r\n this.fontsize = fontsize\r\n this.col = col\r\n this.angle = angle\r\n }\r\n update(newx,newy){\r\n this.posx = newx\r\n this.posy = newy\r\n }\r\n viz(){\r\n push()\r\n translate(width/2, height/2)\r\n rotate(this.angle)\r\n fill(this.col)\r\n textSize(this.fontsize);\r\n text(this.text,this.posx,this.posy)\r\n pop()\r\n }\r\n}\r\n\r\n\r\n\r\n\r\nclass agent {\r\n constructor(posx, posy, velx, vely) {\r\n this.prepos = createVector(posx, posy)\r\n this.pos = createVector(posx, posy)\r\n this.vel = createVector(velx, vely)\r\n this.force = createVector(0, 0)\r\n }\r\n update(fx, fy) {\r\n this.prepos = this.pos.copy()\r\n this.force = createVector(fx, fy)\r\n this.vel.add(this.force)\r\n this.vel.limit(8)\r\n this.force.mult(0)\r\n this.pos.add(this.vel)\r\n if (this.pos.x \u003e width) {\r\n this.pos.x = this.pos.x - width\r\n } else if (this.pos.x \u003c 0) {\r\n this.pos.x = this.pos.x + width\r\n } else if (this.pos.y \u003e height) {\r\n this.pos.y = this.pos.y - height\r\n } else if (this.pos.y \u003c 0) {\r\n this.pos.y = this.pos.y + height\r\n } else {\r\n \r\n }\r\n }\r\n \r\n}\r\n","artId":"clhmiscn70rtc72b6j3g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.min.js"]}],"like":0,"thumbFileName":"clhmiscn70rtc72b6j3g.png","selectedThumbFileName":"clhmiscn70rtc72b6j3g.png","thumbnailFileUrl":"","resourceFileName":"clhmiscn70rtc72b6j3g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmV6hu6sNRUGCRG8dHT1uapgfQoGRa38htjkowHXrLLBhg","resourceType":1,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clhrq4kn70rtc72b6jeg","title":"Fractal snowflake","description":"","createdAt":1701035289,"updatedAt":1701035289,"user":{"id":"rgJgzw2bbQOoTDmmUXQWYgjQfpw1","customId":"rgJgzw2bbQOoTDmmUXQWYgjQfpw1","name":"Taka Sato","biography":"Creative coding, Generative art, 3D modeling","image":"","createdAt":1701034336451,"updatedAt":1708021964459},"codes":[{"id":"clhrq6cn70rtc72b6jfg","type":0,"text":"\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"en\"\u003e\r\n \u003chead\u003e\r\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.js\"\u003e\u003c/script\u003e\r\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\r\n \u003cmeta charset=\"utf-8\" /\u003e\r\n\r\n \u003c/head\u003e\r\n \u003cbody\u003e\r\n \u003cmain\u003e\r\n \u003c/main\u003e\r\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\r\n \u003c/body\u003e\r\n\u003c/html\u003e\r\n","artId":"clhrq4kn70rtc72b6jeg","libraries":[]},{"id":"clhrq6cn70rtc72b6jg0","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"clhrq4kn70rtc72b6jeg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clhrq6cn70rtc72b6jgg","type":2,"text":"let snow_list = [];\r\nlet num_of_snow = 20;\r\nlet num_of_type = 3;\r\n\r\nlet c1, c2;\r\n\r\nlet section1 = 1000;\r\nlet section1_5 = 1275;\r\nlet section2 = 1550;\r\n\r\nfunction setup() {\r\n createCanvas(1920, 970);\r\n colorMode(HSB, 100);\r\n blendMode(BLEND);\r\n \r\n c1 = color(25, 0, 10);\r\n c2 = color(25, 0, 5);\r\n c3 = color(25, 0, 60);\r\n \r\n setInterval(wind, 5000); // 5000 ms = every 5 seconds\r\n \r\n for (let i=0; i\u003cnum_of_snow; i++) {\r\n snow_list.push(new Snowflake(random(width), random(height), random(num_of_type)) );\r\n }\r\n}\r\n\r\nfunction draw() {\r\n gradient_background(0, section1, c1, c2);\r\n gradient_background(section1, section1_5, c2, c3);\r\n gradient_background(section1_5, section2, c3, c2);\r\n gradient_background(section2, width, c2, c1);\r\n \r\n for (let i=0; i\u003cnum_of_snow; i++) {\r\n snow_list[i].show();\r\n }\r\n}\r\n\r\nfunction gradient_background(start_x, end_x, start_col, end_col){\r\n for(let x=start_x; x\u003cend_x; x++){\r\n n = map(x,start_x,end_x,0,1);\r\n let newc = lerpColor(start_col,end_col,n);\r\n stroke(newc);\r\n line(x,0,x,height);\r\n }\r\n}\r\n\r\n\r\nfunction wind() {\r\n let new_wind = createVector(random(-0.01, 0.01), random(-0.01, 0.09));\r\n for (let i=0; i\u003cnum_of_snow; i++) {\r\n snow_list[i].apply_force( new_wind );\r\n }\r\n}\r\nclass Snowflake {\r\n constructor(pos_x, pos_y, type_number) {\r\n this.quad_size = random(100, 300);\r\n this.quad_weight = pow( this.quad_size/100, 2 ) / 2;\r\n \r\n this.position = createVector( pos_x, pos_y ); \r\n this.velocity = createVector(random(-0.1, 0.1), random(1, 10) );\r\n this.velocity.div(this.quad_weight);\r\n \r\n this.acceleration = createVector(0,0);\r\n this.maxspeed = 10; // Maximum speed\r\n //this.maxforce = 0.05; // Maximum steering force\r\n \r\n this.theta = 0;\r\n this.rotation_speed = random(-PI/36, PI/36) / this.quad_weight;\r\n \r\n // define colors\r\n this.c_snow = color(0,0,100);\r\n if (random(1) \u003c 0.2) {\r\n this.c_snow = color(54,12,92);\r\n } \r\n // christmas red\r\n this.c_christmas = color(0,84,92);\r\n if (random(1) \u003c 0.4) {\r\n // christmas green\r\n this.c_christmas = color(33,84,64);\r\n }\r\n \r\n this.base_vertex = []; // Empty the array list\r\n\r\n if (type_number \u003c 1) {\r\n this.shape_Minkowski();\r\n } else if (type_number \u003c 2) {\r\n this.shape_koch();\r\n } else {\r\n this.shape_quardratic();\r\n }\r\n \r\n let iteration_time = 4;\r\n for(let i = 0; i \u003c iteration_time; i++) {\r\n for (let j=0; j \u003c this.base_vertex.length; j++) {\r\n this.base_vertex[j].nextLevel();\r\n }\r\n }\r\n }\r\n \r\n apply_force(new_wind_vector) {\r\n new_wind_vector.div(this.quad_weight);\r\n new_wind_vector.mult(1.58);\r\n this.acceleration = new_wind_vector;\r\n }\r\n \r\n show() {\r\n this.update();\r\n this.border();\r\n \r\n push();\r\n fill(this.change_color());\r\n translate(this.position.x, this.position.y);\r\n rotate(this.theta);\r\n beginShape();\r\n for (let j=0; j \u003c this.base_vertex.length; j++) {\r\n this.base_vertex[j].render();\r\n }\r\n endShape();\r\n pop();\r\n }\r\n \r\n change_color() {\r\n if (this.position.x \u003e= 1000 \u0026\u0026 this.position.x \u003c 1550 ) {\r\n return this.c_christmas;\r\n } else {\r\n return this.c_snow;\r\n }\r\n }\r\n \r\n update() {\r\n this.velocity.add(this.acceleration);\r\n this.velocity.limit(this.maxspeed);\r\n this.position.add(this.velocity);\r\n \r\n this.theta += this.rotation_speed;\r\n }\r\n \r\n border() {\r\n let margin = this.quad_size;\r\n \r\n if (this.position.x \u003c 0-margin) {\r\n this.position.x = width+margin;\r\n }\r\n if (this.position.x \u003e width+margin) {\r\n this.position.x = 0-margin;\r\n }\r\n if (this.position.y \u003c 0-margin) {\r\n this.position.y = height+margin;\r\n }\r\n if (this.position.y \u003e height+margin) {\r\n this.position.y = 0-margin;\r\n }\r\n }\r\n \r\n shape_koch() {\r\n let ave_x = this.quad_size/2;\r\n let ave_y = (this.quad_size/2*sqrt(3)) / 3;\r\n this.base_vertex.push(new KochFractal(-ave_x,ave_y, this.quad_size-ave_x,ave_y) );\r\n this.base_vertex.push(new KochFractal(this.quad_size/2-ave_x,this.quad_size/2*sqrt(3)+ave_y, -ave_x,ave_y) );\r\n this.base_vertex.push(new KochFractal(this.quad_size-ave_x,ave_y, this.quad_size/2-ave_x,this.quad_size/2*sqrt(3)+ave_y) );\r\n\r\n }\r\n \r\n shape_Minkowski() {\r\n this.base_vertex.push(new KochFractalMinkowski(-this.quad_size/2,this.quad_size/2, -this.quad_size/2,-this.quad_size/2));\r\n this.base_vertex.push(new KochFractalMinkowski(this.quad_size/2,this.quad_size/2, -this.quad_size/2,this.quad_size/2));\r\n this.base_vertex.push(new KochFractalMinkowski(this.quad_size/2,-this.quad_size/2, this.quad_size/2,this.quad_size/2));\r\n this.base_vertex.push(new KochFractalMinkowski(-this.quad_size/2,-this.quad_size/2, this.quad_size/2,-this.quad_size/2));\r\n }\r\n \r\n shape_quardratic() {\r\n this.base_vertex.push(new KochFractalQuadratic(-this.quad_size/2,this.quad_size/2, -this.quad_size/2,-this.quad_size/2));\r\n this.base_vertex.push(new KochFractalQuadratic(this.quad_size/2,this.quad_size/2, -this.quad_size/2,this.quad_size/2));\r\n this.base_vertex.push(new KochFractalQuadratic(this.quad_size/2,-this.quad_size/2, this.quad_size/2,this.quad_size/2));\r\n this.base_vertex.push(new KochFractalQuadratic(-this.quad_size/2,-this.quad_size/2, this.quad_size/2,-this.quad_size/2));\r\n \r\n }\r\n\r\n}\r\n// A class to describe one line segment in the fractal\r\n// Includes methods to calculate midp5.Vectors along the line according to the Koch algorithm\r\n\r\nclass KochLine {\r\n constructor(a,b) {\r\n // Two p5.Vectors,\r\n // start is the \"left\" p5.Vector and\r\n // end is the \"right p5.Vector\r\n this.start = a.copy();\r\n this.end = b.copy();\r\n }\r\n\r\ndisplay() {\r\n vertex(this.start.x, this.start.y);\r\n }\r\n\r\n kochA() {\r\n return this.start.copy();\r\n }\r\n\r\n kochB() {\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(3);\r\n v.add(this.start);\r\n return v;\r\n }\r\n \r\n kochC() {\r\n let a = this.start.copy(); // Start at the beginning\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(3);\r\n a.add(v); // Move to point B\r\n v.rotate(-PI/3); // Rotate 60 degrees\r\n // v.rotate(-PI/4); // Rotate 90 degrees\r\n a.add(v); // Move to point C\r\n return a;\r\n }\r\n\r\n kochD() {\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.mult(2/3.0);\r\n v.add(this.start);\r\n return v;\r\n }\r\n\r\n kochE() {\r\n return this.end.copy();\r\n }\r\n}\r\n\r\n// A class to manage the list of line segments in the snowflake pattern\r\n\r\nclass KochFractal {\r\n constructor(start_x, start_y, end_x, end_y) {\r\n this.start = createVector(start_x, start_y); // A p5.Vector for the start\r\n this.end = createVector(end_x, end_y); // A p5.Vector for the end\r\n this.lines = []; // An array to keep track of all the lines\r\n this.count = 0;\r\n this.restart();\r\n }\r\n\r\n nextLevel() {\r\n // For every line that is in the arraylist\r\n // create 4 more lines in a new arraylist\r\n this.lines = this.iterate(this.lines);\r\n this.count++;\r\n }\r\n\r\n restart() {\r\n this.count = 0; // Reset count\r\n this.lines = []; // Empty the array list\r\n this.lines.push(new KochLine(this.start,this.end)); // Add the initial line (from one end p5.Vector to the other)\r\n }\r\n\r\n getCount() {\r\n return this.count;\r\n }\r\n\r\n render() {\r\n noStroke();\r\n for(let i = 0; i \u003c this.lines.length; i++) {\r\n this.lines[i].display();\r\n }\r\n }\r\n\r\n // This is where the **MAGIC** happens\r\n // Step 1: Create an empty arraylist\r\n // Step 2: For every line currently in the arraylist\r\n // - calculate 4 line segments based on Koch algorithm\r\n // - add all 4 line segments into the new arraylist\r\n // Step 3: Return the new arraylist and it becomes the list of line segments for the structure\r\n\r\n // As we do this over and over again, each line gets broken into 4 lines, which gets broken into 4 lines, and so on. . .\r\n iterate(before) {\r\n let now = []; // Create emtpy list\r\n for(let i = 0; i \u003c this.lines.length; i++) {\r\n let l = this.lines[i];\r\n // Calculate 5 koch p5.Vectors (done for us by the line object)\r\n let a = l.kochA();\r\n let b = l.kochB();\r\n let c = l.kochC();\r\n let d = l.kochD();\r\n let e = l.kochE();\r\n // Make line segments between all the p5.Vectors and add them\r\n now.push(new KochLine(a,b));\r\n now.push(new KochLine(b,c));\r\n now.push(new KochLine(c,d));\r\n now.push(new KochLine(d,e));\r\n }\r\n return now;\r\n }\r\n}\r\n\r\nclass KochFractalMinkowski extends KochFractal {\r\n render() {\r\n noStroke();\r\n for(let i = 0; i \u003c this.lines.length; i++) {\r\n this.lines[i].display();\r\n }\r\n }\r\n \r\n restart() {\r\n this.count = 0; // Reset count\r\n this.lines = []; // Empty the array list\r\n this.lines.push(new KochLineMinkowski(this.start,this.end)); // Add the initial line (from one end p5.Vector to the other)\r\n }\r\n \r\n iterate(before) {\r\n let now = []; // Create emtpy list\r\n for(let i = 0; i \u003c this.lines.length; i++) {\r\n let l = this.lines[i];\r\n // Calculate 8 vectors\r\n let a = l.kochA();\r\n let b = l.kochB();\r\n let c = l.kochC();\r\n let d = l.kochD();\r\n let e = l.kochE();\r\n let f = l.kochF();\r\n let g = l.kochG();\r\n let h = l.kochH();\r\n // Make line segments between all the p5.Vectors and add them\r\n now.push(new KochLineMinkowski(a,b));\r\n now.push(new KochLineMinkowski(b,c));\r\n now.push(new KochLineMinkowski(c,d));\r\n now.push(new KochLineMinkowski(d,e));\r\n now.push(new KochLineMinkowski(e,f));\r\n now.push(new KochLineMinkowski(f,g));\r\n now.push(new KochLineMinkowski(g,h));\r\n }\r\n return now;\r\n }\r\n}\r\n\r\nclass KochLineMinkowski extends KochLine {\r\n display() {\r\n vertex(this.start.x, this.start.y);\r\n //vertex(this.end.x, this.end.y);\r\n }\r\n \r\n kochA() {\r\n return this.start.copy();\r\n }\r\n\r\n kochB() {\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(4);\r\n v.add(this.start);\r\n return v;\r\n }\r\n\r\n kochC() {\r\n let a = this.start.copy(); // Start at the beginning\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(4);\r\n a.add(v); // Move to point B\r\n // v.rotate(-PI/3); // Rotate 60 degrees\r\n v.rotate(-PI/2); // Rotate 90 degrees, turn -90 degree for antiflake\r\n a.add(v); // Move to point C\r\n return a;\r\n }\r\n \r\n kochD() {\r\n let a = this.start.copy(); // Start at the beginning\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(4);\r\n a.add(v); // Move to point B\r\n // v.rotate(-PI/3); // Rotate 60 degrees\r\n v.rotate(-PI/2); // Rotate 90 degrees\r\n a.add(v); // Move to point C\r\n v.rotate(PI/2); // Rotate back\r\n a.add(v); // Move to point D\r\n return a;\r\n }\r\n \r\n kochE() {\r\n let a = this.start.copy(); // Start at the beginning\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(4);\r\n a.add(v); // Move to point B\r\n a.add(v); // Move to interim point under D \r\n // v.rotate(-PI/3); // Rotate 60 degrees\r\n v.rotate(PI/2); // Rotate -90 degrees\r\n a.add(v); // Move to point E\r\n return a;\r\n }\r\n \r\n kochF() {\r\n let a = this.start.copy(); // Start at the beginning\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(4);\r\n a.add(v); // Move to point B\r\n a.add(v); // Move to interim point under D \r\n // v.rotate(-PI/3); // Rotate 60 degrees\r\n v.rotate(PI/2); // Rotate -90 degrees\r\n a.add(v); // Move to point E\r\n v.rotate(-PI/2); // Rotate back\r\n a.add(v); // Move to point F\r\n return a;\r\n }\r\n\r\n kochG() {\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.mult(3/4.0);\r\n v.add(this.start);\r\n return v;\r\n }\r\n\r\n kochH() {\r\n return this.end.copy();\r\n }\r\n}\r\nclass KochFractalQuadratic extends KochFractal {\r\n constructor(start_x, start_y, end_x, end_y) {\r\n super(start_x, start_y, end_x, end_y);\r\n }\r\n \r\n render() {\r\n noStroke();\r\n for(let i = 0; i \u003c this.lines.length; i++) {\r\n this.lines[i].display();\r\n }\r\n }\r\n \r\n restart() {\r\n this.count = 0; // Reset count\r\n this.lines = []; // Empty the array list\r\n this.lines.push(new KochLineQuardratic(this.start,this.end)); // Add the initial line (from one end p5.Vector to the other)\r\n }\r\n \r\n iterate(before) {\r\n let now = []; // Create emtpy list\r\n for(let i = 0; i \u003c this.lines.length; i++) {\r\n let l = this.lines[i];\r\n // Calculate 6 vectors\r\n let a = l.kochA();\r\n let b = l.kochB();\r\n let c = l.kochC();\r\n let d = l.kochD();\r\n let e = l.kochE();\r\n let f = l.kochF();\r\n // Make line segments between all the p5.Vectors and add them\r\n now.push(new KochLineQuardratic(a,b));\r\n now.push(new KochLineQuardratic(b,c));\r\n now.push(new KochLineQuardratic(c,d));\r\n now.push(new KochLineQuardratic(d,e));\r\n now.push(new KochLineQuardratic(e,f));\r\n }\r\n return now;\r\n }\r\n}\r\n\r\nclass KochLineQuardratic extends KochLine {\r\n constructor(a,b) {\r\n super(a,b);\r\n this.rotation_angle = PI/2;\r\n }\r\n\r\n display() {\r\n vertex(this.start.x, this.start.y);\r\n }\r\n \r\n kochA() {\r\n return this.start.copy();\r\n }\r\n\r\n kochB() {\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(3);\r\n v.add(this.start);\r\n return v;\r\n }\r\n\r\n kochC() {\r\n let a = this.start.copy(); // Start at the beginning\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(3);\r\n a.add(v); // Move to point B\r\n // v.rotate(-PI/3); // Rotate 60 degrees\r\n v.rotate(this.rotation_angle); // Rotate 90 degrees, turn -90 degree for antiflake\r\n a.add(v); // Move to point C\r\n return a;\r\n }\r\n \r\n kochD() {\r\n let a = this.start.copy(); // Start at the beginning\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.div(3);\r\n a.add(v); // Move to point B\r\n // v.rotate(-PI/3); // Rotate 60 degrees\r\n v.rotate(this.rotation_angle); // Rotate 90 degrees\r\n a.add(v); // Move to point C\r\n v.rotate(this.rotation_angle * -1); // Rotate back\r\n a.add(v); // Move to point D\r\n return a;\r\n }\r\n\r\n kochE() {\r\n let v = p5.Vector.sub(this.end, this.start);\r\n v.mult(2/3.0);\r\n v.add(this.start);\r\n return v;\r\n }\r\n\r\n kochF() {\r\n return this.end.copy();\r\n }\r\n}","artId":"clhrq4kn70rtc72b6jeg","libraries":[]}],"like":0,"thumbFileName":"clhrq4kn70rtc72b6jeg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"clhrq4kn70rtc72b6jeg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVvxH6kgj94xVPUFgL2UpjRVemzcbT79xhswgtUhKeAvV","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clhh0a4n70rtc72b6h30","title":"Synchristmas","description":"楽しい雰囲気や浮かれた気分は、どこからかやってきて、伝わっていく。1本の華やかに飾られたクリスマスツリーが風に揺られる。雪がしんしんと降る。どんなところにも宿る赤と緑の情緒。","createdAt":1701274142,"updatedAt":1701274142,"user":{"id":"n5LelSHvuzTiAOsslFmja6YllQk1","customId":"kyabe","name":"kyabe","biography":"Web: https://kyabe.net\nX: https://twitter.com/cab_kyabe\nGitHub: https://github.com/cabbage63\nBlueSky: https://bsky.app/profile/kyabe.net","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/n5LelSHvuzTiAOsslFmja6YllQk1.png","createdAt":1700988332551,"updatedAt":1708155709246},"codes":[{"id":"clhh0bsn70rtc72b6h40","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"clhh0a4n70rtc72b6h30","libraries":[]},{"id":"clhh0bsn70rtc72b6h4g","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"clhh0a4n70rtc72b6h30","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clhh0bsn70rtc72b6h50","type":2,"text":"/* \n * [Author]\n * Web: https://kyabe.net\n * Twitter(X): https://twitter.com/cab_kyabe\n * [Acknowledgment] \n * Template: \"TheRecordsXmasProjectionMapping\" by Taito Otani san\n */\n\nlet seed;\n\n\nfunction setup() {\n seed = random(10000);\n createCanvas(1920,970);\n frameRate(60);\n drawingContext.shadowOffsetX = 0;\n\tdrawingContext.shadowOffsetY = 0;\n}\n\nfunction draw() {\n randomSeed(seed);\n\n // Left area\n push();\n clip(()=\u003e{\n rect(0,0,1000,970);\n })\n background(COLORS.bg.left);\n drawLeftComponent();\n pop();\n\n\n // Center area\n push();\n clip(()=\u003e{\n rect(1000,0,550,970);\n })\n drawCenterComponent();\n pop();\n\n \n // Right area\n push();\n clip(()=\u003e{\n rect(1550,0,370,970);\n })\n background(COLORS.bg.right);\n drawRightComponent();\n pop();\n}\n\nfunction drawLeftComponent() {\n const {sizeX, sizeY} = AREA.left;\n const CL = COLORS.left;\n\n for(const _ of Array(30)){\n const c = random(CL.xmas);\n const LOOP_SEC = random(60*4, 60 * 4);\n const LINE_WIDTH = random(20,200);\n const y = - LINE_WIDTH/2 + (_easeInQuad((frameCount + random(LOOP_SEC)) % LOOP_SEC / LOOP_SEC)) * (sizeY + LINE_WIDTH);\n stroke(c);\n strokeWeight(LINE_WIDTH)\n line(0,y,sizeX,y);\n }\n}\n\n//////\n// Fir Tree\n/////\nfunction drawCenterComponent() {\n push();\n translate(AREA.center.begin_x, 0);\n const {sizeX, sizeY} = AREA.center;\n const CL = COLORS.center;\n const TREE_TOP_Y = sizeY * 0.1\n const TREE_BOTTOM_Y = sizeY * (1-0.1)\n const NUM_BRANCH = 11\n const DIFF = 30 * sin(frameCount/50)\n const convY2X = (y) =\u003e {\n return map(y, TREE_TOP_Y, TREE_BOTTOM_Y, sizeX/2 + DIFF, sizeX/2);\n }\n\n // sky\n fill(CL.sky);\n background(CL.sky);\n\n // starlights\n _drawStarlights(sizeX,sizeY);\n\n // ground\n push();\n const major_axis = sizeX*1.5;\n const minor_axis = 300;\n clip(()=\u003e{\n ellipse(sizeX/2, TREE_BOTTOM_Y, major_axis, minor_axis);\n });\n background(CL.ground);\n const noiseLevel = 255\n const noiseScale = 0.1;\n blendMode(SCREEN);\n for(const _ of Array(300)){\n const x = random(0, sizeX);\n const y = random(TREE_BOTTOM_Y - minor_axis/2, sizeY);\n const c = color(noise(x*noiseScale) * noiseLevel);\n c.setAlpha(random(30,80))\n fill(c);\n circle(x,y,random(5,100));\n }\n blendMode(BLEND);\n pop();\n\n // trunk\n noStroke();\n push();\n clip(()=\u003e{\n triangle(convY2X(TREE_TOP_Y), TREE_TOP_Y, sizeX/2+sizeX*0.1, TREE_BOTTOM_Y, sizeX/2-sizeX*0.1, TREE_BOTTOM_Y);\n })\n background(CL.trunk);\n for(let x=sizeX/2-sizeX*0.2; x\u003csizeX/2+sizeX*0.2; x+=random(1,5)){\n stroke(color(0,0,random(0,870),random(30,70)));\n line(x,0,x,sizeY);\n }\n pop();\n\n // branch\n stroke(CL.leaf);\n noFill();\n strokeWeight(2);\n for (let i = 0; i \u003c NUM_BRANCH; i++){\n _drawBranch(sizeX, sizeY, map(i, 0, NUM_BRANCH, TREE_TOP_Y+50, TREE_BOTTOM_Y-50), convY2X);\n }\n\n // Star\n noStroke();\n fill(CL.star);\n drawingContext.shadowBlur = 50;\n drawingContext.shadowColor = CL.star;\n _drawStar(convY2X(TREE_TOP_Y), TREE_TOP_Y, 25, 50);\n drawingContext.shadowBlur = 0;\n\n\n // Snow\n fill(CL.snow);\n _drawSnow(sizeX, sizeY);\n\n pop();\n}\n\nfunction _drawStarlights(sizeX, sizeY){\n noStroke();\n\n for(const _ of Array(100)){\n push();\n const c = color(random(COLORS.center.starlights));\n const period = 60;\n const phase = random(0, period);\n const diff = sin((PI*((frameCount + phase) % period) / period))\n const w = random(sizeX/400, sizeX/200) * (1 + diff);\n const h = w;\n\n translate(random(sizeX), random(sizeY/2))\n fill(c);\n quad(0, h, w, 0, 0, -h, -w, 0);\n c.setAlpha(50);\n fill(c)\n quad(0, h*3*1.5, w*1.5, 0, 0, -h*3*1.5, -w*1.5, 0);\n rotate(PI/2)\n quad(0, h*2*1.5, w*1.5, 0, 0, -h*2*1.5, -w*1.5, 0);\n pop();\n }\n}\n\nfunction _drawSnow(sizeX, sizeY){\n const NUM_SNOW = 50;\n const MIN_SNOW_SWAYING_WIDTH = 5;\n const MAX_SNOW_SWAYING_WIDTH = 20;\n const SNOW_LOOP_SEC = 60*3;\n for (let i=0; i\u003cNUM_SNOW; i++){\n circle(random(sizeX)+sin((frameCount+random(60))/8)*random(MIN_SNOW_SWAYING_WIDTH,MAX_SNOW_SWAYING_WIDTH), _easeInQuad((frameCount+random(SNOW_LOOP_SEC))%(SNOW_LOOP_SEC)/(SNOW_LOOP_SEC))*sizeY, random(5,10));\n }\n}\n\nfunction _drawBranch(sizeX, sizeY, y, cnv) {\n const branchWidth = map(y, sizeY*0.1, sizeY*(1-0.1), sizeX*0.1, sizeX*0.4);\n push();\n translate(cnv(y), y);\n rotate(PI/16)\n line(0,0,branchWidth,0)\n _drawLeaf(0,0,branchWidth, 0)\n for (const _ of Array(3)){\n _drawOrnament(0,0,branchWidth,0)\n }\n pop();\n \n push();\n translate(cnv(y), y);\n rotate(-PI/16)\n line(0,0,-branchWidth,0)\n _drawLeaf(0,0,-branchWidth,0)\n for( const _ of Array(3)){\n _drawOrnament(0,0,-branchWidth,0)\n }\n pop();\n}\n\nfunction _drawLeaf(beginX, beginY, endX, endY) {\n const direction = beginX \u003c endX ? 0 : 1;\n const w = abs(endX - beginX)\n const leafNum = w / 10;\n const angle = PI/6 + PI*direction;\n const leafLength = 50;\n push();\n for(let i=0; i \u003c leafNum; i++){\n for(let j=0; j \u003c 2; j++){\n let coveredWithSnow = random() \u003e 0.7;\n push();\n translate(map(i, 0, leafNum-1, beginX, endX), 0);\n if(j===0){\n rotate(angle)\n }else{\n rotate(-angle)\n }\n if(coveredWithSnow){\n drawingContext.shadowBlur = 20;\n stroke(COLORS.center.snow);\n strokeWeight(random(1,4));\n } \n line(0,0,leafLength,0);\n pop();\n }\n }\n pop()\n}\n\nfunction _drawOrnament(beginX, beginY, endX, endY) {\n const c = random(COLORS.center.ornaments);\n positionX = random(beginX, endX);\n positionY = random(beginY, endY);\n noStroke();\n fill(c);\n drawingContext.shadowBlur = random(10,30);\n drawingContext.shadowColor = c;\n // todo: chang shape randomly\n circle(positionX, positionY+random(-25,25), random(10,40));\n drawingContext.shadowBlur = 0;\n}\n\nfunction _drawStar(x, y, radius1, radius2) {\n let angle = TWO_PI / 5;\n let halfAngle = angle / 2.0;\n beginShape();\n for (let a = -PI/2; a \u003c TWO_PI - PI/2; a += angle) {\n let sx = x + cos(a) * radius2;\n let sy = y + sin(a) * radius2;\n vertex(sx, sy);\n sx = x + cos(a + halfAngle) * radius1;\n sy = y + sin(a + halfAngle) * radius1;\n vertex(sx, sy);\n }\n endShape(CLOSE);\n}\n\nfunction drawRightComponent() {\n push();\n translate(AREA.right.begin_x, 0);\n\n const {sizeX, sizeY} = AREA.right;\n const CL = COLORS.right;\n\n for(const _ of Array(8)){\n const c = random(CL.xmas);\n const LOOP_SEC = random(60*6, 60*12);\n const LINE_WIDTH = random(50,100);\n const x = sizeX/2 + (cos(2*PI*((frameCount + random(LOOP_SEC)) % LOOP_SEC / LOOP_SEC))) * (sizeX/2);\n stroke(c);\n strokeWeight(LINE_WIDTH)\n line(x,0,x,sizeY);\n }\n pop();\n}\n\nfunction _easeInQuad(t){\n return t*t;\n}\n\nconst AREA = {\n left: {\n sizeX: 1000,\n sizeY: 970,\n begin_x: 0,\n end_x: 1000,\n },\n center: {\n sizeX: 550,\n sizeY: 970,\n begin_x: 1000,\n end_x: 1000+550,\n },\n right: {\n sizeX: 370,\n sizeY: 970,\n begin_x: 1000+550,\n end_x: 1000+550+370,\n }\n}\n\n\nconst COLORS = {\n bg: {\n left: '#ffffff', \n center: '#666666',\n right: '#ffffff',\n },\n left: {\n xmas: [\n // red\n \"#f23c3f\", \"#f90000\", \"#fd310d\",\n // green\n \"#257e4f\", \"#b3f1bf\" , \"#7dd366\",\n // white\n \"#dcebec\", \"#d8eee9\", \"#c7ddda\"\n ],\n red: \"#f23c3f\",\n green: \"#257e4f\",\n },\n center: {\n trunk: '#C2442B',\n leaf: '#29b927',\n sky: '#082040',\n pink: '#C22166',\n ground: '#dddddd',\n star: '#eee954',\n snow: '#ffffff',\n starlights: ['#fcefad', '#f0ec9f', '#dae7ed', '#e6d14a', '#d8eee9', '#dce5ef', '#eff5c4', '#f3f355', '#f6e7a8', '#ebdb9a', '#f6fa71', '#f3e0aa', '#ffffff'],\n ornaments: ['#02c712', '#f34c7e', '#e6d14a', '#ed2e15', '#f4c2f6', '#cde6ef', '#f6f216', '#b66ff8','#e9e10b','#e5647c']\n },\n right: {\n xmas: [\n // red\n \"#f23c3f\", \"#f90000\", \"#fd310d\",\n // green\n \"#257e4f\", \"#b3f1bf\" , \"#7dd366\",\n // white\n \"#dcebec\", \"#d8eee9\", \"#c7ddda\"\n ],\n red: \"#f23c3f\",\n green: \"#257e4f\",\n },\n}\n","artId":"clhh0a4n70rtc72b6h30","libraries":[]}],"like":0,"thumbFileName":"clhh0a4n70rtc72b6h30.png","selectedThumbFileName":"clhh0a4n70rtc72b6h30.png","thumbnailFileUrl":"","resourceFileName":"clhh0a4n70rtc72b6h30.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmNft54yeczDgafTeTEeD6rNphbKLboUAee1pYcXTqTVCw","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clkn6ncn70rtc72b70a0","title":"KurukuruChristMasThree","description":"クルクルクリスマスツリー","createdAt":1701409638,"updatedAt":1701409638,"user":{"id":"nsWiH7awloPo3THWjO0Pc6cdhND3","customId":"taito_otani","name":"Taito Otani ","biography":"Audio \u0026 Visuals","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/nsWiH7awloPo3THWjO0Pc6cdhND3.jpg","createdAt":1568337758000,"updatedAt":1713681611594},"codes":[{"id":"clkn6pkn70rtc72b70b0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"clkn6ncn70rtc72b70a0","libraries":[]},{"id":"clkn6pkn70rtc72b70bg","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"clkn6ncn70rtc72b70a0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clkn6pkn70rtc72b70c0","type":2,"text":"let palette = [\"#f5542e\", \"#f2c326\", \"#008b6f\", \"#05aede\", \"#0167ad\"]; // colours I chose\n\nlet x = 1;\nlet targetX = 0;\nlet x2 = 1;\nlet targetX2 = 0;\nlet easing = 0.05;\n\nfunction setup() {\n createCanvas(windowWidth, windowHeight, WEBGL);\n rectMode(CENTER);\n smooth();\n pixelDensity(1);\n}\n\nfunction draw() {\n push();\n if (frameCount % 1 == 0) {\n translate(0,0, -500);\n c1 = color(0, 10, 30+50*sin(frameCount*0.01));\n c2 = color(20*sin(frameCount*0.01), 30, 100+50*cos(frameCount*0.01));\n for (let y = -width / 1.5; y \u003c height ; y++) {\n n = map(y, 0, height, 0, 1);\n let newc = lerpColor(c1, c2, n);\n stroke(newc);\n line(-width, y, width, y);\n }\n }\n pop();\n\n push();\n if (frameCount % 300 == 0) {\n targetX = 1 * sin(frameCount * 0.01);\n }\n\n let dx = targetX - x;\n x += dx * easing;\n \n\n for (var i = -width / 2 / 20; i \u003c (width * 0.5) / 20; i++) {\n for (var j = -height / 2 / 20; j \u003c (height * 0.5) / 20; j++) {\n push();\n rotateY(x+j+i);\n translate(i * 20, j * 20);\n rotate(\n frameCount * 0.01 +\n 20 * cos((i * frameCount) / 1350) +\n 20 * sin((j * frameCount) / 1320)\n );\n fill(palette[0]);\n box(20, 5, 5);\n fill(palette[1]);\n box(5, 5, 20);\n fill(palette[2]);\n box(5, 20, 5);\n pop();\n }\n }\n pop();\n\n push();\n if (frameCount % 100 == 0) {\n targetX = 3 * sin(frameCount * 0.01);\n }\n}\n","artId":"clkn6ncn70rtc72b70a0","libraries":[]}],"like":0,"thumbFileName":"clkn6ncn70rtc72b70a0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"clkn6ncn70rtc72b70a0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXazhHwDdm5StYpoxjFh93V34Tx34FZWBar6PyMK7CMm3","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clktk3kn70rtc72b737g","title":"Something For Christmas","description":"","createdAt":1701435926,"updatedAt":1701435995,"user":{"id":"F1NwKvJ2e3RxREH5PvW0LJ6B3843","customId":"","name":"Yuta Aoki","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/F1NwKvJ2e3RxREH5PvW0LJ6B3843.jpg","createdAt":1699956749889,"updatedAt":1721466352152},"codes":[{"id":"clktk5cn70rtc72b738g","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"clktk3kn70rtc72b737g","libraries":[]},{"id":"clktk5cn70rtc72b7390","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"clktk3kn70rtc72b737g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clktk5cn70rtc72b739g","type":2,"text":"const w = 1920;\nconst h = 970;\nconst treeColors = [\"#c54c3d\", \"#eee0c7\", \"#005f5c\",\"#EEDB70\"];\nconst treeCount = 25;\nconst snowCount = 250;\nlet trees = [];\nlet snowflakes = [];\n\nfunction setup() {\n createCanvas(w, h);\n rectMode(CENTER);\n\tframeRate(30);\n initializeTrees();\n initializeSnowflakes();\n}\n\nfunction draw() {\n background(0);\n updateAndDisplayTrees();\n updateAndDisplaySnowflakes();\n}\n\nfunction initializeTrees() {\n for (let j = 0; j \u003c treeCount; j++) {\n trees.push(new Tree(random(12, 25), createVector(random(0, w), random(0, h))));\n }\n}\n\nfunction initializeSnowflakes() {\n for (let i = 0; i \u003c snowCount; i++) {\n snowflakes.push(new Snow(random(1.22, 5), createVector(random(0, w), random(0, h))));\n }\n}\n\nfunction updateAndDisplayTrees() {\n for (const tree of trees) {\n tree.move();\n tree.fall();\n tree.display();\n }\n}\n\nfunction updateAndDisplaySnowflakes() {\n for (const snowflake of snowflakes) {\n snowflake.move();\n snowflake.fall();\n snowflake.display();\n }\n}\n\nclass Tree {\n constructor(diameter, position) {\n this.diameter = diameter;\n this.position = position;\n this.velocity = createVector(random(-2, 2), random(-2, 2));\n this.rotationSpeed = random(0, 0.02);\n this.rotationOffset = random(-TWO_PI, TWO_PI);\n }\n\n move() {\n this.position.add(this.velocity);\n }\n\n fall() {\n if (this.position.x \u003c this.diameter / 2 || this.position.x \u003e w - this.diameter / 2) {\n this.velocity.x *= -1;\n }\n if (this.position.y \u003c this.diameter / 2 || this.position.y \u003e h - this.diameter / 2) {\n this.velocity.y *= -1;\n }\n }\n\n display() {\n push();\n translate(this.position.x, this.position.y);\n rotate(sin(frameCount * this.rotationSpeed + this.rotationOffset) * 5);\n translate(-this.position.x, -this.position.y);\n noFill();\n strokeWeight(this.diameter);\n for (let i = 0; i \u003c 12; i++) {\n let current = sin(frameCount * this.rotationSpeed) * this.diameter * i;\n let strokeColor = i % 2 !== 0 ? color(treeColors[2]) : color(treeColors[0]);\n stroke(strokeColor);\n circle(this.position.x, this.position.y + (i * sin(frameCount * this.rotationSpeed) * 12), current + (i * 12));\n }\n\t\tnoStroke();\n\t\tfill(treeColors[3]);\n\t\tcircle(this.position.x, this.position.y , this.diameter);\n\t\tpop();\n }\n}\n\nclass Snow {\n constructor(diameter, position) {\n this.diameter = diameter;\n this.position = position;\n this.velocity = createVector(random(-1.2, 1.2), random(-0.2, 1.2));\n this.rotationSpeed = random(0.12);\n this.rotationOffset = random(-PI, PI);\n }\n move() {\n this.position.add(this.velocity);\n }\n fall() {\n if (this.position.x \u003c -this.diameter || this.position.x \u003e w + this.diameter) {\n this.velocity.x *= -1;\n }\n if (this.position.y \u003c -this.diameter || this.position.y \u003e h + this.diameter) {\n this.velocity.y *= -1;\n }\n }\n display() {\n push();\n translate(this.position.x, this.position.y);\n rotate(sin(frameCount * this.rotationSpeed + this.rotationOffset));\n noFill();\n let strokeColor = color(treeColors[1]);\n let alphaValue = 25 + 125 * sin(frameCount * this.rotationSpeed);\n strokeColor.setAlpha(alphaValue);\n stroke(strokeColor);\n strokeWeight(2.5);\n let current = sin(frameCount * this.rotationSpeed) * (this.diameter / 12) + this.diameter;\n crystal(0, 0, current, this.diameter);\n pop();\n }\n}\n\nfunction crystal(x, y, radius, diameter) {\n const angle = TWO_PI / 12;\n for (let n = 0; n \u003c diameter/2; n++) {\n rectMode(CENTER);\n beginShape();\n for (let a = 0; a \u003c TWO_PI; a += angle) {\n let ax = x + cos(a) * (radius * n);\n let ay = y + sin(a) * (radius * n);\n vertex(ax, ay);\n }\n endShape(CLOSE);\n }\n push();\n rotate(PI/12);\n for (let i = 0; i \u003c 3; i++) {\n\t\trotate(PI/3);\n\t\ttranslate(0, 0);\n\t\tline(diameter * 2, diameter * 2, -diameter * 2, -diameter * 2);\n }\n pop();\n}\n","artId":"clktk3kn70rtc72b737g","libraries":[]}],"like":0,"thumbFileName":"clktk3kn70rtc72b737g.png","selectedThumbFileName":"clktk3kn70rtc72b737g.png","thumbnailFileUrl":"","resourceFileName":"clktk3kn70rtc72b737g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmSevbm2Dup2naJw3nBnksAsHcDWLmngx3fG6pLYdizvAm","resourceType":1,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clku8mcn70rtc72b73p0","title":":)","description":"","createdAt":1701438555,"updatedAt":1701438555,"user":{"id":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","customId":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","name":"Chayapon (Tae)","biography":"Twitter(X) : https://x.com/tayxt50","image":"","createdAt":1669660770663,"updatedAt":1733322529959},"codes":[{"id":"clku8msn70rtc72b73q0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"clku8mcn70rtc72b73p0","libraries":[]},{"id":"clku8msn70rtc72b73qg","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"clku8mcn70rtc72b73p0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clku8msn70rtc72b73r0","type":2,"text":"let palette = [\"#9D0E0C\", \"#E6B2B1\"]; \nconst num_tilesX = 38;\nconst num_tilesY = 16;\nconst margin = 20;\nconst gap = 2.5;\nlet seed = [0.75,0.9];\nlet r;\n\nlet t;\nconst fps = 60;\nconst display = 5;\nlet totalFrames = fps * display;\n\n\nfunction setup() {\n createCanvas(1920, 970);\n frameRate(fps);\n \n r = floor(random(seed.length));\n\n}\n\nfunction ease(x) {\n return 1 - pow(1 - x, 3);\n}\n\nfunction draw() {\n t = ((frameCount - 1) % totalFrames) / totalFrames;\n\n let myCanvas_w = width - 2 * margin - (num_tilesX - 1) * gap;\n let myCanvas_h = height - 2 * margin - (num_tilesY - 1) * gap;\n let scl_w = myCanvas_w / num_tilesX;\n let scl_h = myCanvas_h / num_tilesY;\n\n background(\"#000000\");\n noStroke();\n \n\n for (let j = -1; j \u003c= num_tilesY; j++) {\n for (let i = -1; i \u003c= num_tilesX; i++) {\n let x = margin + i * (scl_w + gap);\n let y = margin + j * (scl_h + gap);\n \n let fx = ease(cos((t + 0.5 * i +seed[r]*j*j) * TWO_PI)); \n let k = map(fx, -1, 1, 0, 1, true);\n let c = lerpColor(color(palette[0]), color(palette[1]), k);\n \n fill(c)\n shape(x, y, fx, scl_w, scl_h);\n }\n }\n}\n\nfunction shape(x, y, fx, scl_w, scl_h) {\n let vx1 = x;\n let vy1 = y + map(fx, -1, 1, 0, 0.5 * scl_h, true);\n\n let vx2 = x + scl_w;\n let vy2 = y + map(fx, -1, 1, 0.5 * scl_h, 0, true);\n\n let vx3 = x + scl_w;\n let vy3 = y + map(fx, -1, 1, scl_h, 0.5 * scl_h, true);\n\n let vx4 = x;\n let vy4 = y + map(fx, -1, 1, 0.5 * scl_h, scl_h, true);\n\n quad(vx1, vy1, vx2, vy2, vx3, vy3, vx4, vy4);\n}","artId":"clku8mcn70rtc72b73p0","libraries":[]}],"like":1,"thumbFileName":"clku8mcn70rtc72b73p0.png","selectedThumbFileName":"clku8mcn70rtc72b73p0.png","thumbnailFileUrl":"","resourceFileName":"clku8mcn70rtc72b73p0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmNgSWrTFcRieonpabWxcyMWALJeca1prJNUq7zLo3zpD9","resourceType":1,"metadataUrl":"","tags":[{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cll7uvkn70rtc72b7470","title":"LiveCoding@Inércia 2023","description":"1 hour Live Coding at the Shader Royale Jam at Inércia 2023\nhttps://2023.inercia.pt/index.php?page=Timetable\n\nTwitter(X): \nhttps://twitter.com/gam0022/status/1730739815518470243\n\nShadertoy: \nhttps://www.shadertoy.com/view/cttBzl","createdAt":1701478272,"updatedAt":1701694714,"user":{"id":"NVlqnemVzqUgPSBOOPTPkVUSXQZ2","customId":"","name":"がむ","biography":"","image":"https://pbs.twimg.com/profile_images/1024640222246535168/D0JhkuoJ_normal.jpg","createdAt":1550901834000,"updatedAt":1712851363371},"codes":[{"id":"cll7v04n70rtc72b7480","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"cll7uvkn70rtc72b7470","libraries":[]},{"id":"cll7v04n70rtc72b748g","type":4,"text":"// BEGIN: shadertoy porting template\n// https://gam0022.net/blog/2019/03/04/porting-from-shadertoy-to-glslsandbox/\nprecision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n#define iResolution resolution\n#define iTime time\n#define iMouse (vec4(mouse, 0.5, 0.5) * resolution.xyxy)\n#define iChannel0 backbuffer\n#define texture texture2D\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord);\n\nvoid main(void) {\n vec4 col;\n mainImage(col, gl_FragCoord.xy);\n gl_FragColor = col;\n}\n// END: shadertoy porting template\n\n// Original Bonzomatic Shader\n// https://gist.github.com/gam0022/f033c62069f2149b4560333778d056b8\n\n#define time iTime\n#define PI acos(-1.)\n#define TAU (2. * PI)\n#define VOL 0.\n#define SOL 1.\n#define saturate(x) clamp(x, 0., 1.)\n\nfloat beat, beatTau;\nvec3 pos;\nfloat scene;\n\nvec3 pal(float h) {\n vec3 col = vec3(0.5) + 0.5 * cos(TAU * (vec3(0, 0.33, 0.67) + h));\n return mix(col, vec3(1), 0.1 * floor(h));\n}\n\nfloat sdBox(vec3 p, vec3 b) {\n vec3 q = abs(p) - b;\n return length(max(q, 0.)) + min(0., max(q.x, max(q.y, q.z)));\n}\n\nvoid rot(inout vec2 p, float a) { p *= mat2(cos(a), sin(a), -sin(a), cos(a)); }\n\nvoid U(inout vec4 m, float d, float a, float b, float c) {\n if (d \u003c m.x) m = vec4(d, a, b, c);\n}\n\nvec4 map(vec3 p) {\n pos = p;\n\n float a = 16.;\n vec4 m = vec4(1);\n vec3 of1 = vec3(6.26, 2.7, 1.5);\n p = mod(p, a) - 0.5 * a;\n p -= of1;\n\n for (int i = 0; i \u003c 7; i++) {\n p = abs(p + of1) - of1;\n rot(p.xz, TAU * (0.05 + scene * 0.));\n rot(p.zy, TAU * 0.35);\n rot(p.xy, TAU * -0.05);\n \n\tif (float(i) \u003e 1. + scene) break;\n }\n\n vec3 p2 = p;\n p2.y = mod(p2.y, 0.4) - 0.5 * 0.4;\n\n vec3 p3 = p;\n p3.y = mod(p3.y, 4.) - 0.5 * 4.;\n U(m, sdBox(p2, vec3(1, 0.05, 1)), SOL, 0.1, 1.);\n U(m, sdBox(p, vec3(0.5, 20, 0.5)), VOL, saturate(cos(beatTau / 2. + p.y * TAU / 4.)),\n 2.8 + 0.1 * scene + ((scene == 3.) ? (fract(p.y * 2.3) - 2.) : 0.));\n U(m, sdBox(p3, vec3(1, 0.2, 1)), VOL, saturate(cos(beatTau / 2. + TAU / 32. * pos.z / 16.)),\n 2.4 + 0.1 * scene);\n\n return m;\n}\n\nvec3 render(vec3 ro, vec3 rd) {\n vec3 col = vec3(0);\n float t = 0.;\n for (int i = 0; i \u003c 100; i++) {\n vec3 p = ro + rd * t;\n vec4 m = map(p);\n float d = m.x;\n\n if (m.y == SOL) {\n t += d;\n if (d \u003c t * 0.001) {\n col += float(i) / 50. * pal(m.w) * m.z;\n t += d;\n break;\n }\n } else {\n t += 0.1;\n col += 0.2 * pal(m.w) * m.z * exp(-3.0 * d);\n }\n }\n col = mix(vec3(0), col, exp(-0.001 * t));\n return col;\n}\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord) {\n vec2 uv = vec2(fragCoord.x / iResolution.x, fragCoord.y / iResolution.y);\n uv -= 0.5;\n uv /= vec2(iResolution.y / iResolution.x, 1);\n\n beat = time * 120. / 60.;\n beatTau = beat * TAU;\n scene = floor(beat / 4.);\n scene += saturate(pow(fract(beat / 4.), 1.) - abs(uv.y));\n // vec2 up = vec2(0, 1);\n // rot(up, TAU * pow(fract(beat / 4), 3));\n // scene += dot(uv, up) \u003e 0 ? 1 : 0;\n scene = mod(floor(scene + 0.5), 6.);\n\n vec3 ro = vec3(0, 0, 4. * time);\n vec3 rd = vec3(uv, 1);\n rd = normalize(rd);\n vec3 col = render(ro, rd);\n\n fragColor = vec4(col, 1);\n}","artId":"cll7uvkn70rtc72b7470","libraries":[]}],"like":1,"thumbFileName":"cll7uvkn70rtc72b7470.png","selectedThumbFileName":"cll7uvkn70rtc72b7470.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmQesx2PrhP2dusa34xDQrxQDUctjdfJ9AktjnZaJQujuT","resourceFileName":"cll7uvkn70rtc72b7470.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXMzXiEtZtbDFQEZbJtG1aesHr9jdfXKAbeC4WRduHmaR","resourceType":3,"metadataUrl":"","tags":[{"id":"bmts4kk3p9f7m1g0329g","name":"IFS"},{"id":"bqvqqn43p9f48fkiu620","name":"Raymarching"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clllidkn70rl4nnirgs0","title":"Symphony of Snowflakes(雪の結晶の交響曲)","description":"コンセプト:\nSymphony of Snowflakes「雪の結晶の交響曲」というこの作品は、技術と芸術性の融合を通じて、雪の結晶の儚い美しさを捉えたデジタルアートです。それぞれの結晶は独特のジオメトリックな舞いを表現し、自然が冬の中で創り出す複雑な秩序を表現しています。この作品は、クリスマスの静寂と同義である雪の結晶の穏やかで複雑なパターンに対する賛歌です。見る人を、雪の結晶の中に存在するカオスと対称性の繊細なバランス、そして宇宙自体に思いを馳せる没入型の体験へと誘います。\n\nテクノロジー:\nTouchDesignerを使用して作成しました。この作品は、TOPオペレーターを活用しています。\n「Noise TOP」はランダム性の要素を導入し、雪の結晶の自然な形成を作り出します。「Composite TOP」によってこれらのパターンが重ね合わり、深みと複雑さを生み出します。「Feedback TOP」は、雲の中での雪の結晶の永遠の再生を連想させる進化の感覚を作り出すために使用しました。「Transform TOP」はパターンの動的なスケーリングと回転を可能にし、風が雪の結晶の旅に果たすことを象徴しています。最後に、「Bloom TOP」は光が氷の結晶と相互作用する方法をイメージし、夢のような光のある表現を加えて、「雪の結晶の交響曲」が完成します。","createdAt":1701534017,"updatedAt":1701534159,"user":{"id":"fCRFyWyBZBSk0VaIctaq9xKl4O63","customId":"fCRFyWyBZBSk0VaIctaq9xKl4O63","name":"RecoDing","biography":"","image":"","createdAt":1701531919798,"updatedAt":1702667991565},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"clllidkn70rl4nnirgs0.png","thumbnailFileUrl":"","resourceFileName":"clllidkn70rl4nnirgs0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPsxHNQY3H74mVNoXDnCeieijmUEVjwLaxEt7D9zTX4yR","resourceType":2,"metadataUrl":"","tags":[{"id":"bmj9a6k3p9fdr6916kp0","name":"TouchDesigner"},{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clluon4n70rl4nnirhl0","title":"Watercolor_Art","description":"p5.brush を初めて使ってみました!水彩画のようなきれいなアートができました!\nI used p5.brush in order to make a watercolor like art. It turned out to be very nice!!","createdAt":1701571681,"updatedAt":1701571681,"user":{"id":"hXNRBYcY7CMO9yDpsNHXlPXT7Dd2","customId":"hXNRBYcY7CMO9yDpsNHXlPXT7Dd2","name":"Lily","biography":"Website : https://tabicoding.com/\n\nX : https://twitter.com/li4li3li4li3","image":"","createdAt":1701568542347,"updatedAt":1701571786770},"codes":[],"like":1,"thumbFileName":"clluon4n70rl4nnirhl0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"clluon4n70rl4nnirhlg.png","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmaBYmYaKeT2RZh5hvz3V8dvgXUnczxigqgDVSXdregpso","resourceType":4,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"#000","layoutType":1,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm1uisn70rl4nniri7g","title":"NeonCity","description":"🎄クリスマスネオンが町中に輝いている様子がモチーフ🎄","createdAt":1701584723,"updatedAt":1701584955,"user":{"id":"kfIYAXYNGFP8IZM5AlL302SQBXo1","customId":"","name":"はぅ君","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kfIYAXYNGFP8IZM5AlL302SQBXo1.png","createdAt":1579099628000,"updatedAt":1735793667172},"codes":[{"id":"clm1uksn70rl4nniri8g","type":0,"text":"\u003cscript src=\"https://cdn.jsdelivr.net/npm/p5@1.9.0/lib/p5\r\n.min.js\"\u003e\u003c/script\u003e\r\n","artId":"clm1uisn70rl4nniri7g","libraries":[]},{"id":"clm1uksn70rl4nniri90","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clm1uisn70rl4nniri7g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clm1uksn70rl4nniri9g","type":2,"text":"//--------------------------------------------------\r\n//\r\n// NeonWall\r\n// Haukun\r\n// 2023/12/03\r\n//\r\n// CC BY-NC-SA 3.0 \r\n// https://creativecommons.org/licenses/by-nc-sa/3.0/\r\n//\r\n// p5.min_1.9.0.js\r\n// This work uses p5.js,\r\n// which is licensed under the MIT License\r\n//--------------------------------------------------\r\n\r\nvar t=0;\r\nvar W,H;\r\n\r\n//--------------------------------------------------\r\n// setup\r\n//--------------------------------------------------\r\nfunction setup(){\r\n createCanvas(W = 1920, H = 970);\r\n background(0);\r\n}\r\n\r\n//--------------------------------------------------\r\n// draw\r\n//--------------------------------------------------\r\nfunction draw(){\r\n t+=.01;\r\n \r\n noStroke();\r\n blendMode(BLEND);\r\n background(0,.03);\r\n colorMode(HSB);\r\n blendMode(ADD);\r\n\r\n filter(BLUR);\r\n \r\n //scale(0.45,0.45); // for debug\r\n \r\n for(let y = 0;y \u003c= H;y += 40){\r\n for(let x = -y / 40 % 2 * 20; x \u003c= W; x += 40){\r\n var T = tan(noise(x / 2000,\r\n y / 1000,\r\n t / 80) * 99 + t) / 2;\r\n fill(\r\n (noise(x / 1000, y / 1000, t / 100))* W % 360,\r\n noise(x / 100, y / 100, t) * 150,\r\n 100,\r\n T);\r\n circle(x,\r\n y + T ** 2 * 20, \r\n max(min(2000, 4.5 / T), 1));\r\n }\r\n }\r\n}","artId":"clm1uisn70rl4nniri7g","libraries":[]}],"like":0,"thumbFileName":"clm1uisn70rl4nniri7g.png","selectedThumbFileName":"clm1uisn70rl4nniri7g.png","thumbnailFileUrl":"","resourceFileName":"clm1uisn70rl4nniri7g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmSV29jfKRSkKhxH83yimfaL46mrKbJPrbVshDh278fsfB","resourceType":1,"metadataUrl":"","tags":[{"id":"clfipscn70rtc72b6ag0","name":"yohas_art "}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm2384n70rl4nnirim0","title":"RGB ChristmasTree","description":"\n","createdAt":1701585317,"updatedAt":1701587360,"user":{"id":"C5opx8lu6TNnC3DmG2YT2sNYWh42","customId":"C5opx8lu6TNnC3DmG2YT2sNYWh42","name":"Stash","biography":"X:\nhttps://x.com/Stash912\n\nInstagram:\nhttps://www.instagram.com/stash__404/\n","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/C5opx8lu6TNnC3DmG2YT2sNYWh42.jpg","createdAt":1688194687162,"updatedAt":1735549562312},"codes":[{"id":"clm239cn70rl4nnirin0","type":0,"text":"","artId":"clm2384n70rl4nnirim0","libraries":[]},{"id":"clm239cn70rl4nniring","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clm2384n70rl4nnirim0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clm239cn70rl4nnirio0","type":2,"text":"var xStep = 10;\nvar startY = 0; \nvar count = 1; \nvar length = 1000; \n\n//let colors = [\"#f2eb8a\", \"#fed000\", \"#fc8405\", \"#ed361a\", \"#e2f0f3\", \"#b3dce0\", \"#4464a1\", \"#203051\", \"#ffc5c7\", \"#f398c3\", \"#cf3895\", \"#6d358a\", \"#06b4b0\", \"#4b8a5f\"];\n//let colors = [\"red\", \"green\", \"blue\"]\nfunction generateColor() {\n var selector = int(random(1000)%3);\n switch(selector){\n case 0:\n return [0,random(0, 100),random(90, 100)];\n\n case 1:\n return [120,random(0,100),random(90, 100)];\n\n case 2:\n return [240,random(0, 100),random(90, 100)];\n }\n\treturn colors[floor(random(0, colors.length))];\n}\n\nfunction setup() {\n startX = windowWidth/2;\n createCanvas(1920, 970);\n background(0);\n colorMode(HSB);\n}\n\nfunction draw() {\n if(startY \u003c height){\n startX = width/2 - (count/2 * xStep);\n\n beginShape();\n stroke(0.5);\n for(var i=0; i\u003ccount; i+=1){\n fill(generateColor());\n for(var j=0; j\u003c3; j+=1){\n curveVertex(startX+random(20), startY+random(50), 50+random(10));\n }\n startX += xStep;\n }\n \n endShape(CLOSE);\n\n for(var k=0; k\u003c10; k+=1){\n noStroke();\n fill(255);\n circle(random(width), random(height), 3);\n }\n\n startY += random(10,20);\n count += 2;\n }\n}","artId":"clm2384n70rl4nnirim0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.min.js"]}],"like":0,"thumbFileName":"clm2384n70rl4nnirim0.png","selectedThumbFileName":"clm2384n70rl4nnirim0.png","thumbnailFileUrl":"","resourceFileName":"clm2384n70rl4nnirim0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmcbLKiKCxBj4X2UgEZQjY1PAr4i6uouV4rnMoDU9kdN1e","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm3ricn70rl4nniriu0","title":"Jingle, bells! Jingle, bells! Jingle all the way!","description":"小さい頃クリスマスが近づくと、プレゼントは何をお願いしようか、カタログやお店を見て回ってワクワクしていた気持ちをイメージしました。\n","createdAt":1701592532,"updatedAt":1701593277,"user":{"id":"KJjpBjdN4Zd4YVXnOddSy9biHIY2","customId":"_moeka_ck","name":"もえか(@_moeka_ck)","biography":"instagram : @_moeka_ck\nYouTube : @_moeka_ck","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/KJjpBjdN4Zd4YVXnOddSy9biHIY2.jpg","createdAt":1701491036619,"updatedAt":1701593585438},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"clm3ricn70rl4nniriu0.png","thumbnailFileUrl":"","resourceFileName":"clm3ricn70rl4nniriu0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmP916YqNpackH8L8dqcwLTEWwYNAreMJ31KbJ6TR7VJSm","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm3tlsn70rl4nnirj30","title":"christmas market","description":"いつか見たクリスマスマーケットの灯りに照らされたにぎやかな店先を思い出しながら作りました","createdAt":1701592797,"updatedAt":1701593197,"user":{"id":"JcGoFathqCb1cEY6XTn5ynl2R6A3","customId":"JcGoFathqCb1cEY6XTn5ynl2R6A3","name":"chobishiba","biography":"https://twitter.com/chobishiba\nhttps://ksbmyk.github.io/sketch/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/JcGoFathqCb1cEY6XTn5ynl2R6A3.jpeg","createdAt":1701434344066,"updatedAt":1734753808271},"codes":[{"id":"clm3tncn70rl4nnirj40","type":0,"text":"\u003cscript src=\"https://cdn.jsdelivr.net/npm/p5@1.9.0/lib/p5.js\"\u003e\u003c/script\u003e","artId":"clm3tlsn70rl4nnirj30","libraries":[]},{"id":"clm3tncn70rl4nnirj4g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clm3tlsn70rl4nnirj30","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clm3tncn70rl4nnirj50","type":2,"text":"let circles = [];\nlet numCircles = 700;\n// 白, 赤, 金、銀、緑, 金\nlet colorPalette = [\"#ffffff\", \"#CC0000\", \"#C99C33\", \"#A6AAAE\", \"#006622\", \"#C99C33\"];\nfunction setup() {\n createCanvas(1920, 970);\n\n for (let i = 0; i \u003c numCircles; i++) {\n let circle = {\n x: random(width),\n y: random(height),\n color: colorPalette[floor(random(colorPalette.length))],\n diameter: 30,\n alphaValue: 0,\n speed: random(0.01, 0.03)\n };\n circles.push(circle);\n }\n }\n \nfunction draw() {\n background(\"#000000\");\n\n for (let i = 0; i \u003c circles.length; i++) {\n let circle = circles[i];\n circle.alphaValue = 128 + 128 * sin(frameCount * circle.speed);\n noStroke();\n\n let c = color(circle.color);\n c.setAlpha(circle.alphaValue);\n fill(c);\n\n ellipse(circle.x, circle.y, circle.diameter);\n }\n}\n","artId":"clm3tlsn70rl4nnirj30","libraries":[]}],"like":0,"thumbFileName":"clm3tlsn70rl4nnirj30.png","selectedThumbFileName":"clm3tlsn70rl4nnirj30.png","thumbnailFileUrl":"","resourceFileName":"clm3tlsn70rl4nnirj30.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXhv3H3sdMmbVC8QMzbZnSd4e9txj2BoWRdRPE8tzC5NH","resourceType":1,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm581kn70rl4nnirjog","title":"A City Symphony in Color and Shape","description":"","createdAt":1701598227,"updatedAt":1701598227,"user":{"id":"c4K0URETkfWbKzELIJEmzd15bje2","customId":"","name":"seohyo","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/c4K0URETkfWbKzELIJEmzd15bje2.jpg","createdAt":1670159287212,"updatedAt":1715483521757},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"clm581kn70rl4nnirjog.png","thumbnailFileUrl":"","resourceFileName":"clm581kn70rl4nnirjog.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVPE2isA4YfqTXdWZHuiMFMpLG868wP63pjX6mGoQK5Dt","resourceType":2,"metadataUrl":"","tags":[{"id":"bmqr67s3p9f7m1g02kr0","name":"creativecoding"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"},{"id":"clcv3tkn70rtc72b5sh0","name":"nodebox"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm6k44n70rl4nnirk70","title":"雪の夜は白くて青い","description":"","createdAt":1701603861,"updatedAt":1701603942,"user":{"id":"NCTY4HppOFPE7S1YCS0xOQKuS533","customId":"","name":"小葱","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/NCTY4HppOFPE7S1YCS0xOQKuS533.jpg","createdAt":1701485888136,"updatedAt":1702562908153},"codes":[{"id":"clm6k5cn70rl4nnirk80","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.8.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"clm6k44n70rl4nnirk70","libraries":[]},{"id":"clm6k5cn70rl4nnirk8g","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"clm6k44n70rl4nnirk70","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clm6k5cn70rl4nnirk90","type":2,"text":"let pt = [];\nlet palette = [\"#1F49F3\", \"#BAEDF3\", \"#1C62C7\", \"#073D8A\", \"#C0D4F1\"];\n\nfunction setup() {\n createCanvas(1920,970);\n angleMode(DEGREES); \n}\n\nfunction draw() {\n background(\"#03001F\");\n noStroke();\n \n for (let i = 0; i \u003c random(10,50); i ++){\n pt.push(new Particle()); \n }\n \n for (let i = 0; i \u003c pt.length; i++){\n pt[i].show();\n pt[i].move();\n \n if (pt[i].y \u003c 0 || random(1000) \u003c 3) pt.splice(i, 1);\n } \n}\n\nclass Particle{\n constructor(){\n this.x = random(width);\n this.y = height;\n this.col = color(palette[round(random(4))]);\n this.spd = random(1, 2);\n this.r = random(1, 15)\n this.angle = random(60);\n }\n \n show(){\n noStroke();\n fill(this.col);\n ellipse(this.x + cos(this.angle) * 20, this.y, this.r, this.r);\n }\n \n move(){\n this.y -= this.spd;\n this.angle += 1;\n }\n}\n","artId":"clm6k44n70rl4nnirk70","libraries":[]}],"like":0,"thumbFileName":"clm6k44n70rl4nnirk70.png","selectedThumbFileName":"clm6k44n70rl4nnirk70.png","thumbnailFileUrl":"","resourceFileName":"clm6k44n70rl4nnirk70.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmaKnKJy64cRhX5K51ShkmvE7dMEaQL9AK9x6xG9NXdwXu","resourceType":1,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm8044n70rl4nnirm6g","title":"愛の結晶 ー 2023クリスマス編","description":"これは2つの言葉から雪の結晶のような模様を生成するデジタルアート作品です。\n\n万華鏡のように小さな図片を円形にコピーするという、デジタルアートとしては古典的な手法ですが、この作品ならではの特徴が2つあります。\n\n1つは、2023年12月に行われる 『NEORT』×『Pop Up! YohaS』 Digital Art Show のためにクリスマス向けの雰囲気を演出し、そこに生成される図形の要素としてクリスマスならではの対となるテキストを選んだことです。\n\n2つ目は、同イベントには一般の方が訪れることを予想し、本作品が生成される過程がわかりやすいようにアルゴリズムの工程を見せるようにしたことです。\n\nその他、工夫した点としましては、\n\n図形要素としてのテキストとして、当初は1000人ほど(千葉なので)の人名のランダムな組み合わせを考え、当日訪れた恋人たちの中で偶然名前が一致するペアがいて感激するという、クリスマスの奇跡を信じました。\n\nしかしながら、名前のペアはポジティブな関係とは限らないため、今回はクリスマスといえばだれもが連想するようなキーワードにしています。\n\nまた、雪の結晶は6角形ですが諸々の配慮の上、5角形にしています。\n\n\n最後に、個人的な思い入れです。\n\n私は学生時代にMax(Opcode社版)に触れ、アルゴリズム音楽とアートの融合を夢見て創作活動をしていましたが、その過程でリサジュー図形というものを知りました。\n\n周波数や振り幅の違いで様々な模様が生まれるそれは偶発的で生成的なアートに対する感動と興味を私に与えてくれました。\n\nその時感じた驚きと楽しさを、このイベントに訪れた人にも味わってもらえたら嬉しいと思いました。\n\n\nどうぞよろしくお願いいたします。\n\n\n令和5年12月3日\n\npianocurve","createdAt":1701609495,"updatedAt":1701610881,"user":{"id":"XnMjt9idbTb9qqrhcaNkqxOzQkd2","customId":"pianocurve","name":"pianocurve","biography":"https://pianocurve.com/\n学生時代、初期の頃のMaxに触れて生成音楽とビジュアル表現、そして情報科学の虜になりました。\nダグラス・ホフスタッターの「ゲーデル・エッシャー・バッハ」が私のバイブルです。\n現在はプログラマーとしてのお仕事のかたわら、作品作りに勤しんでいます。\n名前はペアノ曲線から。\n\n幾何の世界だけでなく音の世界も単なる空気の振動が、\n音になり、音色になり、音量になり、リズムになり、\n音楽になって、心を揺らす。\n\nそれがすごく神秘的で面白いなあと思って。\n\nどうぞよろしくお願いします。","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/XnMjt9idbTb9qqrhcaNkqxOzQkd2.png","createdAt":1645443317611,"updatedAt":1702699539780},"codes":[{"id":"clm805sn70rl4nnirm7g","type":0,"text":"","artId":"clm8044n70rl4nnirm6g","libraries":[]},{"id":"clm805sn70rl4nnirm80","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clm8044n70rl4nnirm6g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clm805sn70rl4nnirm8g","type":2,"text":"//愛の結晶\n//2023/12/3 pianocurve\n//1、名前と名前を表示 右から左へ流れる感じ\n//2、名前と名前を左に表示\n//3、名前が回転しながらだんだんくっついて6角形になり結晶を表示\n//5 小さく背景に\n//直接名前指定機能 URLの末尾に追加  #名前 + 全角空白 + 名前 \n\nconst W = 1920;\nconst H = 970;\nconst LW = 768;\nconst LH = 768;\n\nconst rW = 1000;\nconst bW = 550;\nconst gW = 370;\n\nconst PAIR = [\n [\"さんた\", \"となかい\"],\n [\"よぞら\", \"ほし\"],\n [\"まち\", \"いるみ\"],\n [\"きみ\", \"ぼく\"],\n [\"くりすます\", \"つりぃ\"],\n [\"こたつ\", \"みかん\"],\n [\"ゆき\", \"ゆきだるま\"],\n [\"わすれもの\", \"てぶくろ\"],\n\n]\n\nconst I$ = {\n \"CORNER_NUM\": 5,\n\n \"COLOR_LIST\": [[50, 0, 15], [14, 35, 50]], //[r,g,b],[r,g,b],... and more. \n \"P_COLOR_LIST\": [[255, 228, 120], [255, 255, 255]],//[r,g,b],[r,g,b],... and more. \n \"DELAY_TIME\": 12000, //ms\n \"DURATION_TIME\": 3000, //ms\n\n //中央の名前の位置\n \"NAME_SIZE\": 120,\n \"TOP_NAME_SP\": 100,\n \"LEFT_NAME_SP\": 50,\n \"RIGHT_NAME_SP\": 380,\n \"DOT_SIZE\": 5,\n\n //結晶のサイズ小\n \"MIN_SIZE\": 0.45,\n //アニメーションのタイミング\n \"LIFE_TIME\": [2500, 3500, 4000, 6000, 12000, 14000, 20000], // 秒 \n \"BLINK\": 6000,\n\n //背景の星の数と基準サイズ\n \"STAR_NUM\": 200,\n \"STAR_SIZE\": [3.5, 3.5, 3.5, 5.6, 5.6, 5.6, 8, 8, 11, 11, 16],\n}\n\n\n\nlet cm;\nlet cm_p;\nlet snowflakes = [];\n\nlet tmp_season = -1;\nlet countSeason = 0;\nlet readNameBase = 0;\n\nlet gNameTime;\nlet gNameA = \"\";\nlet gNameB = \"\";\n\nlet gradient;\n\nlet nameMatrix = [];\nlet backImageData = [];\n\nclass Snowflake {\n\n constructor(col, nameA, nameB) {\n\n this.t = millis();//時系列で動作させる\n this.col = col;\n this.nameA = nameA;\n this.nameB = nameB;\n\n //回転報告やおよびサイズ に利用 //最大の文字数で\n this.r = int(LH / (nameA.length \u003e nameB.length ? nameA.length : nameB.length) * 0.35);\n this.aX = random(LW / 16);\n this.aY = random(LH / 16);\n this.aR = random(10, 20); \n this.bX = LW / 16;\n this.bY = random(this.r, LH / 8);\n this.bR = random(-10, -20);\n\n this.age = random(0.75, 1);\n\n console.log(`aX:${int(this.aX)},aY:${int(this.aY)},aR:${int(this.aR)},\nbX:${int(this.bX)},bY:${int(this.bY)},bR:${int(this.bR)}`)\n\n\n this.x = rW / 2 - LW / 2\n this.y = H / 2 - LH / 2\n\n\n this.sizeScale = 1;\n\n //左右は少し サイズが大きいと早く\n this.xSpeed = random(-1, 1);\n this.ySpeed = this.r / 100;\n }\n\n createSnowflake(cv) {\n\n const age = millis() - this.t;\n const nAgle = frameCount * (Math.floor(this.xSpeed * 5) % 2 == 0 ? 1 : -1);\n\n if (age \u003c I$.LIFE_TIME[0]) {\n //STEP 0 待機\n\n //All シーズン\n drawName(layerM, age);\n\n return;\n }\n if (age \u003c I$.LIFE_TIME[1]) {\n //STEP 1 名前を寄せる\n layerM.clear();\n const lAge = age - I$.LIFE_TIME[0];\n drawSnow(layerP, this.nameA, this.nameB,\n this.r,\n this.col,\n 0,\n map(age, I$.LIFE_TIME[0], I$.LIFE_TIME[1], LW / 8 - this.r, this.aX),\n map(age, I$.LIFE_TIME[0], I$.LIFE_TIME[1], 0, this.aY),\n map(age, I$.LIFE_TIME[0], I$.LIFE_TIME[1], 0, this.aR),\n map(age, I$.LIFE_TIME[0], I$.LIFE_TIME[1], LW / 8 + (this.r), this.bX),\n map(age, I$.LIFE_TIME[0], I$.LIFE_TIME[1], 0, this.bY),\n map(age, I$.LIFE_TIME[0], I$.LIFE_TIME[1], 0, this.bR),\n 1, false, 1);\n\n } else if (age \u003c I$.LIFE_TIME[2]) {\n // STEP 2 反転コピーする\n\n drawSnow(layerP, this.nameA, this.nameB,\n this.r,\n this.col,\n 0,\n this.aX,\n this.aY,\n this.aR,\n this.bX,\n this.bY,\n this.bR,\n 1,\n true, 1);\n\n } else if (age \u003c I$.LIFE_TIME[3]) {\n // STEP 3 コピーをCORNER_NUM分作る\n drawSnow(layerP, this.nameA, this.nameB,\n this.r,\n this.col,\n 0,\n this.aX,\n this.aY,\n this.aR,\n this.bX,\n this.bY,\n this.bR,\n map(age, I$.LIFE_TIME[2], I$.LIFE_TIME[3], 0, I$.CORNER_NUM),\n true, 1);\n } else if (age \u003c I$.LIFE_TIME[4]) {//\n //STEP 4 その場で点滅する\n //this.age以上は回転させない\n const lAge = (age / I$.LIFE_TIME[4]) \u003e this.age ? this.age * I$.LIFE_TIME[4] : age;\n //アングルを変化\n const ang = cos(lAge / I$.BLINK * 720);//振動\n drawSnow(layerP, this.nameA, this.nameB,\n this.r,\n this.col,\n 0,\n ang * this.aX,\n ang * this.aY,\n ang * this.aR,\n ang * this.bX,\n ang * this.bY,\n ang * this.bR,\n I$.CORNER_NUM, true, 1\n );\n } else if (age \u003c I$.LIFE_TIME[5]) {//\n //STEP 4 回転して縮む\n const ang = cos(this.age * I$.LIFE_TIME[4] / I$.BLINK * 720);\n drawSnow(layerP, this.nameA, this.nameB,\n this.r,\n this.col,\n nAgle,\n ang * this.aX,\n ang * this.aY,\n ang * this.aR,\n ang * this.bX,\n ang * this.bY,\n ang * this.bR,\n I$.CORNER_NUM, true,\n map(age, I$.LIFE_TIME[4], I$.LIFE_TIME[5], 1, I$.MIN_SIZE, true)\n );\n } else {\n //だんだん消える 予定\n const ang = cos(this.age * I$.LIFE_TIME[4] / I$.BLINK * 720);\n drawSnow(layerP, this.nameA, this.nameB,\n this.r,\n this.col,\n nAgle,\n ang * this.aX,\n ang * this.aY,\n ang * this.aR,\n ang * this.bX,\n ang * this.bY,\n ang * this.bR,\n I$.CORNER_NUM, true,\n I$.MIN_SIZE)\n\n }\n cv.blendMode(OVERLAY);\n cv.image(layerP, this.x, this.y);\n\n }\n\n moveSnowflake() {\n\n const age = millis() - this.t;\n if (age \u003c I$.LIFE_TIME[4]) return;\n\n if (this.x \u003c 0 - LW / 2) {\n this.x = width + LW / 2;\n }\n if (this.x \u003e width + LW / 2) {\n this.x = 0 - LW / 2;\n }\n if (this.y \u003c 0 - LH / 2) {\n this.y = height + LH / 2;\n }\n\n if (this.y \u003e height) {\n this.y = - LH / 2;\n }\n\n this.x += this.xSpeed;\n this.y += this.ySpeed;\n }\n\n\n}\n\nclass ColorMorphing {\n constructor(colors, delay, duration) {\n this.startTime = millis();\n this.elapsed = 0;\n this.season = 0; \n this.nextSeason = 1;\n this.colors = colors.concat(); //Colors copy\n this.delay = delay;\n this.duration = duration;\n this.c = [0, 0, 0];//Default Color copy\n this.p = 0.0; //Progress\n }\n\n getColor() {\n\n const now = millis();\n\n this.c = this.colors[this.season].concat();\n\n this.elapsed = now - this.startTime;\n\n if (this.elapsed \u003e= this.delay) {\n\n // Season++ and Reset startTime / \n this.p = (this.elapsed - this.delay) / this.duration; //progress 0.0 - 1.0 \n if (this.p \u003e= 1) {\n\n this.season = this.nextSeason;\n this.nextSeason++;\n if (this.nextSeason == this.colors.length) {\n this.nextSeason = 0;\n }\n this.c = this.colors[this.season];\n this.startTime = millis();\n\n } else {\n this.c[0] = int(this.colors[this.nextSeason][0] * this.p + this.colors[this.season][0] * (1 - this.p));\n this.c[1] = int(this.colors[this.nextSeason][1] * this.p + this.colors[this.season][1] * (1 - this.p));\n this.c[2] = int(this.colors[this.nextSeason][2] * this.p + this.colors[this.season][2] * (1 - this.p));\n }\n }\n return this.c;\n }\n}\n\n\nfunction setup() {\n\n pixelDensity(1);\n\n FR = frameRate();\n\n myCanvas = createCanvas(W, H);\n\n //レイヤー\n layerB = createGraphics(W, H);\n layerM = createGraphics(W, H);\n layerF = createGraphics(W, H);\n\n //アイテム作成レイヤー\n layerP = createGraphics(LW, LH);\n layerT = createGraphics(bW, H);\n\n\n angleMode(DEGREES);\n layerF.angleMode(DEGREES);\n layerM.angleMode(DEGREES);\n layerB.angleMode(DEGREES);\n layerP.angleMode(DEGREES);\n layerT.angleMode(DEGREES);\n\n cm = new ColorMorphing(I$.COLOR_LIST, I$.DELAY_TIME, I$.DURATION_TIME);\n cm_p = new ColorMorphing(I$.P_COLOR_LIST, I$.DELAY_TIME, I$.DURATION_TIME);\n\n\n //URLパラメータに名前があればそちらを優先\n //getURLNames();\n\n //名前の読み込み位置をランダムにも\n readNameBase = 0; //int(random(PAIR.length));\n\n //グラーデーション作成\n gradient = drawingContext.createLinearGradient(0, 0, 0, H);\n // Add three color stops\n gradient.addColorStop(0, \"black\");\n gradient.addColorStop(0.66, \"gray\");\n gradient.addColorStop(1, \"white\");\n\n //背景データ作成\n for (let i = 0; i \u003c I$.STAR_NUM; i++) {\n backImageData.push([random(W), random(H), random(I$.STAR_SIZE)])\n }\n\n\n}\n\nfunction draw() {\n\n\n layerF.clear();\n\n c = cm.getColor();//Return array [r,g,b]\n c_p = cm_p.getColor();//Return array [r,g,b]\n\n //一定間隔で結晶を作成\n\n //シーズン切り替えのタイミングで\n if (tmp_season != cm.season) {\n\n if (snowflakes.length \u003e 20) {\n snowflakes.shift();\n }\n\n //最初に名前を取得\n //URLパラメータに名前があればそちらを優先\n\n if (gNameA != \"\" \u0026\u0026 gNameB != \"\") {\n nameA = gNameA\n nameB = gNameB\n } else {\n const pair = PAIR[(countSeason + readNameBase) % (PAIR.length)];\n nameA = pair[1]; //縦書きなので左優先\n nameB = pair[0];\n }\n\n\n\n console.log(`${nameA},${nameB}`)\n snowflakes.push(new Snowflake(I$.P_COLOR_LIST[0], nameA, nameB));\n setNameImage(layerT, nameA, nameB);\n\n tmp_season = cm.season;\n countSeason++;\n\n }\n\n\n\n\n //追加された雪の結晶の変化\n for (let i = 0; i \u003c snowflakes.length; i++) {\n snowflakes[i].col = c_p;\n snowflakes[i].createSnowflake(layerF);\n snowflakes[i].moveSnowflake();\n }\n\n //5、背景に重ねる。\n\n background(c);\n blendMode(OVERLAY);\n drawingContext.fillStyle = gradient;\n rect(0, 0, W, H);\n\n //雪の背景 ランダムきらきら\n drawStar(layerB);\n\n //ガイドON OFF\n //drawGuide(layerB);\n\n blendMode(BLEND);\n\n push();\n drawingContext.shadowColor = color(255, 255, 220);\n drawingContext.shadowBlur = 20;\n image(layerB, 0, 0);\n image(layerM, 0, 0);\n\n image(layerF, 0, 0);\n pop();\n\n\n}\n\nfunction drawStar(cv) {\n\n cv.clear();\n cv.noStroke();\n cv.fill(255, 255, 255, 150);\n //x,y で全体を少し揺らす 大きほど揺れる\n let sX = sin(frameCount * .5) * .5;\n let sY = cos(frameCount) * .5;\n\n\n for (let i = 0; i \u003c backImageData.length; i++) {\n let sS = random(-2, 2);\n cv.ellipse(\n backImageData[i][0] + sX * backImageData[i][2],\n backImageData[i][1] + sY * backImageData[i][2],\n backImageData[i][2] + sS);\n }\n\n\n\n}\n\nfunction drawGuide(cv, on = true) {\n if (!on) {\n return false;\n }\n cv.push();\n //noStroke();\n cv.noFill();\n // 赤枠\n\n //fill(200, 0, 0, 100);\n cv.stroke(200, 0, 0, 100)\n cv.rect(0, 0, rW, H);\n\n // 青枠\n // fill(0, 0, 200, 100);\n cv.stroke(0, 0, 200, 100)\n cv.rect(rW, 0, bW, H);\n\n // 緑枠\n // fill(0, 200, 0, 100);\n cv.stroke(0, 200, 0, 100);\n cv.rect(rW + bW, 0, gW, H);\n\n // 余白\n cv.stroke(60);\n cv.noFill();\n cv.rect(10, 10, W - 20, H - 20);\n cv.pop();\n}\nfunction drawAreaB(cv) {\n cv.push();\n cv.fill(0);//color(c_p)\n cv.noStroke();\n cv.rect(rW, 0, bW, H);\n cv.pop();\n}\n//中央の名前の配置を取得して配列に収める\nfunction setNameImage(cv, nameA, nameB) {\n\n //cv に名前を書き、その情報を toCvに任意の図形で書き出す\n const mW = cv.width / I$.DOT_SIZE;\n const mH = cv.height / I$.DOT_SIZE;\n\n //セットした時間を記録\n gNameTime = millis();\n\n\n cv.clear();\n cv.fill(255);//この値で判断\n\n cv.strokeWeight(4);\n cv.textSize(I$.NAME_SIZE);\n cv.textWrap(CHAR);\n\n cv.push();\n cv.text(nameA, I$.LEFT_NAME_SP, I$.TOP_NAME_SP, I$.NAME_SIZE)\n cv.pop();\n\n cv.push();\n cv.text(nameB, I$.RIGHT_NAME_SP, I$.TOP_NAME_SP, I$.NAME_SIZE)\n cv.pop();\n\n nameMatrix = Array.from(new Array(mW), () =\u003e new Array(mH))\n\n for (let x = 0; x \u003c mW; x++) {\n for (let y = 0; y \u003c mH; y++) {\n\n let tmpColor = cv.get(x * I$.DOT_SIZE, y * I$.DOT_SIZE);\n if (tmpColor[0] == 255) {\n nameMatrix[x][y] = true;\n }\n }\n }\n\n cv.clear();\n\n}\n\n//中央の名前を描く\nfunction drawName(cv, age) {\n\n const size = sin(age / I$.LIFE_TIME[0] * 180) * 10;\n\n const ySize = sin(age / I$.LIFE_TIME[0] * 380) * 10;\n const move = cos(age / I$.LIFE_TIME[0] * 180) * 10;\n\n cv.clear();\n cv.push();\n cv.ellipseMode(CENTER);\n cv.translate(rW, 0);\n cv.fill(c_p);\n cv.strokeWeight(0.5)\n\n\n\n for (let x = 0; x \u003c nameMatrix.length; x++) {\n for (let y = 0; y \u003c nameMatrix[x].length; y++) {\n\n if (nameMatrix[x][y]) {\n\n\n //かがやき\n cv.ellipse(x * I$.DOT_SIZE + move, y * I$.DOT_SIZE, size * random(1));\n // cv.ellipse(x * I$.DOT_SIZE + move, y * I$.DOT_SIZE, size);\n }\n }\n }\n cv.pop();\n\n\n}\n\nfunction drawSnow(cv, nameA, nameB, size, col, r, aX, aY, aR, bX, bY, bR, drawNum, dup, scale) {\n\n //1、 Layer Pの円弧にランダムな図形を描く\n cv.clear();\n cv.push();\n\n cv.noFill();\n cv.stroke(col);\n cv.textLeading(size + 10);\n\n //TEST\n // cv.background(60);\n const textRep = 2;\n\n const fontSize = size;//[16,32,60\n cv.textSize(fontSize);\n cv.textWrap(CHAR);\n cv.strokeWeight(2);\n\n cv.push();\n cv.rotate(aR);\n cv.text(nameA, aX, aY, fontSize);\n cv.pop();\n\n cv.push();\n cv.rotate(bR);\n cv.text(nameB, bX, bY, fontSize);\n cv.pop();\n\n cv.pop();\n\n //4、コピーして円形にする\n let gh = cv.get();\n cv.clear();\n cv.push();\n cv.translate(LW / 2, LH / 2);\n // TEST\n cv.rotate(r);\n\n for (let i = 0; i \u003c drawNum; i++) {//drawNum\n cv.push();\n cv.scale(scale);//サイズ\n cv.rotate(i * 360 / I$.CORNER_NUM);\n cv.image(gh, 0, 0);\n if (dup) {\n cv.scale(-1, 1);\n cv.image(gh, 0, 0);\n }\n\n cv.pop();\n }\n cv.pop();\n\n\n}\n","artId":"clm8044n70rl4nnirm6g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.min.js"]}],"like":0,"thumbFileName":"clm8044n70rl4nnirm6g.jpg","selectedThumbFileName":"clm8044n70rl4nnirm6g.jpg","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmTDip6bsfzftmiEPjv4WuKiTmgtN5oayYCySMFR1omn9Z","resourceFileName":"clm8044n70rl4nnirm6g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmNfQwsCvuPwuKAjpgggTPZMQy8ACJNh2YAXvdNKZnYUYU","resourceType":1,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmYDC7LfyqXmTu7XpVEFXir6W9HUoD3vbjZdZ6eFZVbBv9","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":1,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"clm88ikn70rl4nnirmf0","title":"The gift boxes","description":"クリスマス、朝起きてプレゼントの袋が枕元にあり、それを開けるとラッピングされた箱が出てくる。 \nサンタさんは色々なものをきっとプレゼントしているだろうけど、箱をプレゼントしているというのは言い過ぎか。 \nだけど、クリスマス特有のワクワクは、ラッピングがテクスチャとして貼られている箱に詰まっていたような気がする。","createdAt":1701610576,"updatedAt":1702778005,"user":{"id":"dU0UUrsxXqRhE5LFeziMJUMONl83","customId":"dU0UUrsxXqRhE5LFeziMJUMONl83","name":"uesən","biography":"https://twitter.com/testtesttestts5\nuesYn / 音とモーション。\nhttps://uesen.gif.jp/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/dU0UUrsxXqRhE5LFeziMJUMONl83.png","createdAt":1577451826000,"updatedAt":1727259355848},"codes":[{"id":"clm88k4n70rl4nnirmg0","type":0,"text":"\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"ja\"\u003e\r\n\u003chead\u003e\r\n \u003cmeta charset=\"utf-8\"\u003e\r\n \u003ctitle\u003eWaves\u003c/title\u003e\r\n \u003cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1.0,minimum-scale=1.0\"\u003e\r\n \u003cmeta name=\"keywords\" content=\"\"\u003e\r\n \u003cmeta name=\"description\" content=\"\"\u003e\r\n \u003cmeta http-equiv=\"content-language\" content=\"ja\" /\u003e\r\n \u003clink rel=\"stylesheet\" href=\"css/app.css?v=1.0\"\u003e\r\n \u003cscript src=\"js/processing.min.js\"\u003e\u003c/script\u003e\r\n \u003c!--[if lt IE 9]\u003e\r\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.js\"\u003e\u003c/script\u003e\r\n \u003c![endif]--\u003e\r\n\u003c/head\u003e\r\n\u003cbody\u003e\r\n \r\n \u003cscript type=\"application/processing\"\u003e\r\n \r\n\r\n\r\n \r\n \u003c/script\u003e\r\n \r\n \u003ccanvas id=\"app\"\u003e\u003c/canvas\u003e\r\n \r\n\u003c/body\u003e\r\n\u003c/html\u003e\r\n","artId":"clm88ikn70rl4nnirmf0","libraries":[]},{"id":"clm88k4n70rl4nnirmgg","type":1,"text":"html, body {\n overflow: hidden;\n margin: 0;\n padding: 0;\n background-color: rgba(48, 9, 9, 0.521); \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"clm88ikn70rl4nnirmf0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clm88k4n70rl4nnirmh0","type":2,"text":"var pg = [];\r\nvar canvSize = [];\r\nvar t = 0;\r\nvar t2 = 0;\r\nvar rectSizeTarget = 0;\r\nvar check = 0;\r\n\r\nfunction setup() {\r\n createCanvas(1920, 970,WEBGL);\r\n blendMode(ADD);\r\n background(0);\r\n pixelDensity(1);\r\n translate(-width/2,-height/2);\r\n for(var i=0 ;i\u003cwidth/10; i++){\r\n for(var j=0 ;j\u003cwidth/10; j++){\r\n noStroke();\r\n fill((i*j*255*100)/(1920*970));\r\n //rect(i*10,j*10,10,10);\r\n }\r\n }\r\n rectSizeTarget = random(height/2);\r\n\r\n canvSize[1] = [1000, 970,0];\r\n canvSize[2] = [550, 970,1000];\r\n canvSize[3] = [370, 970,1550];\r\n pg[1] = createGraphics(1000, 970, WEBGL);\r\n pg[2] = createGraphics(550, 970, WEBGL);\r\n pg[3] = createGraphics(370, 970, WEBGL);\r\n for(var i=1;i\u003c=3;i++){\r\n pg[i].blendMode(ADD);\r\n pg[i].background(0);\r\n }\r\n}\r\n\r\nfunction draw() {\r\n//background(0);\r\n noFill();\r\n stroke(200);\r\n strokeWeight(3);\r\n translate(-1000/2,0,-0);\r\n //box(1000,970,10);\r\n translate(1000/2,0);\r\n \r\n translate(-width/2,-height/2);\r\n \r\n loadPixels();\r\n if(t%200\u003c=200){\r\n for(var i=0;i\u003cheight; i++){\r\n for(var j=1550;j\u003cwidth; j++){\r\n var pixelNum = i*width+j;\r\n if(pixels[pixelNum*4+0] \u003e pixels[(pixelNum+1)*4+0])\r\n pixels[pixelNum*4+0] = pixels[(pixelNum+1)*4+0]/2;\r\n if(pixels[pixelNum*4+1] \u003e pixels[(pixelNum+2)*4+1])\r\n pixels[pixelNum*4+1] = pixels[(pixelNum+2)*4+1]/2;\r\n if(pixels[pixelNum*4+2] \u003e pixels[(pixelNum+0)*4+2])\r\n pixels[pixelNum*4+2] = pixels[(pixelNum+0)*4+2]/2;\r\n }\r\n }\r\n } else {\r\n for(var i=0;i\u003cheight; i++){\r\n for(var j=0;j\u003cwidth; j++){\r\n var pixelNum = i*width+j;\r\n if(pixels[pixelNum*4+0] \u003c pixels[(pixelNum+0)*4])\r\n pixels[pixelNum*4+0] = pixels[(pixelNum+0)*4]/5;\r\n if(pixels[pixelNum*4+1] \u003c pixels[(pixelNum+1)*4+1])\r\n pixels[pixelNum*4+1] = pixels[(pixelNum+1)*4+1]/5;\r\n if(pixels[pixelNum*4+2] \u003c pixels[(pixelNum+3)*4+2])\r\n pixels[pixelNum*4+2] = pixels[(pixelNum+3)*4+2]/5;\r\n }\r\n }\r\n \r\n }/*\r\n for(var i=0;i\u003cheight; i++){\r\n for(var j=0;j\u003cwidth; j++){\r\n var pixelNum = i*width+j;\r\n pixels[pixelNum*4+0] = pixels[(pixelNum+1)*4+0]/1.02;\r\n pixels[pixelNum*4+1] = pixels[(pixelNum+2)*4+1]/1.02;\r\n pixels[pixelNum*4+2] = pixels[(pixelNum+3)*4+2]/1.02;\r\n pixels[pixelNum*4+3] = pixels[(pixelNum+1)*4+3]/1.02;\r\n if(pixels[pixelNum*4]\u003c=100)pixels[pixelNum*4] = 0;\r\n if(pixels[pixelNum*4+1]\u003c=100)pixels[pixelNum*4+1] = 0;\r\n if(pixels[pixelNum*4+2]\u003c=100)pixels[pixelNum*4+2] = 0;\r\n }\r\n }*/\r\n \r\n updatePixels();\r\n \r\n for(var i=1;i\u003c=3;i++){\r\n //pg[i].background(0);\r\n if(i==1){\r\n pg[i].background(0);\r\n blendMode(ADD);\r\n pg[i].strokeWeight(1);\r\n pg[i].stroke(noise(t/100+i)*255/10,(1-noise(t/100+i))*255/10,100/10);\r\n }\r\n if(i==2){\r\n pg[i].background(0);\r\n blendMode(BLEND);\r\n pg[i].strokeWeight(10);\r\n pg[i].stroke(noise(t/100+i)*255,(1-noise(t/100+i))*255,100);\r\n }\r\n if(i==3){\r\n pg[i].background(0);\r\n blendMode(ADD);\r\n pg[i].blendMode(BLEND);\r\n pg[i].strokeWeight(1);\r\n pg[i].stroke(noise(t/100+i)*255/1,(1-noise(t/100+i))*255/1,100/1);\r\n }\r\n pg[i].noFill();\r\n //pg[i].stroke(noise(t+i)*255/10,(1-noise(t+i))*255/10,100/10);\r\n //pg[i].strokeWeight(1);\r\n for(var j=0;j\u003c=0;j++){\r\n pg[i].rotateX(t/100);\r\n pg[i].rotateY(t/100);\r\n pg[2].box(200+t2);\r\n pg[i].rotateZ(t/100);\r\n //pg[i].rotate(t/100000);\r\n pg[i].box(t);\r\n //pg[2].strokeWeight(0.5);\r\n pg[2].box(100);\r\n //pg[2].strokeWeight(2);\r\n pg[i].rotateZ(-t/100);\r\n pg[i].rotateY(-t/100);\r\n pg[i].rotateX(-t/100);\r\n }\r\n \r\n \r\n pg[i].rectMode(CENTER);\r\n t2 += (rectSizeTarget-t2)/100\r\n if(abs(rectSizeTarget-t2)\u003c2){\r\n rectSizeTarget = random(height/2);\r\n }\r\n // pg[2].loadPixels();\r\n if(i!=4){\r\n var rectSize = [canvSize[i][0]-(t2*2)*canvSize[i][0]/canvSize[i][1],\r\n canvSize[i][1]-(t2*2)];\r\n pg[i].rect(0,0,rectSize[0],rectSize[1]);\r\n pg[i].line(-canvSize[i][0]/2,-canvSize[i][1]/2,-rectSize[0]/2,-rectSize[1]/2);\r\n pg[i].line( canvSize[i][0]/2,-canvSize[i][1]/2, rectSize[0]/2,-rectSize[1]/2);\r\n pg[i].line(-canvSize[i][0]/2, canvSize[i][1]/2,-rectSize[0]/2, rectSize[1]/2);\r\n pg[i].line( canvSize[i][0]/2, canvSize[i][1]/2, rectSize[0]/2, rectSize[1]/2);\r\n }\r\n pg[2].loadPixels();\r\n\r\n pg[2].background(0);\r\n pg[2].noStroke();\r\n for(var y=0; y\u003ccanvSize[2][1]; y+=15){\r\n for(var x=0; x\u003ccanvSize[2][0]; x+=15){\r\n pg[2].fill(pg[2].pixels[int(y*canvSize[2][0]+x)*4]*2,\r\n pg[2].pixels[int(y*canvSize[2][0]+x)*4+1]*2,\r\n pg[2].pixels[int(y*canvSize[2][0]+x)*4+2]*2);\r\n pg[2].ellipse(x-canvSize[2][0]/2,y-canvSize[2][1]/2,15,15);\r\n \r\n }\r\n }\r\n //if(t\u003e200)rotate((t-200)/1400);\r\n image(pg[i], canvSize[i][2], 0, canvSize[i][0],canvSize[i][1]);\r\n //if(t\u003e200)rotate(-(t-200)/1400);\r\n}\r\n\r\n \r\n noFill();\r\n //stroke(255);\r\n strokeWeight(1);\r\n noStroke();\r\n \r\n var size = random(10);\r\n var pixelBashX = random(width);\r\n var pixelBashY = random(height);\r\n var pixelNumNum = pixelBashY*width+pixelBashX;\r\n stroke(pixels[int(pixelNumNum)*4],\r\n pixels[int(pixelNumNum)*4+1],\r\n pixels[int(pixelNumNum)*4+2]);\r\n rect(pixelBashX,pixelBashY,size,size);\r\n //rect(0,0,1000,970);\r\n //rect(1000,0,550,970);\r\n //rect(1550,0,370,970);\r\n t++;\r\n if(millis()\u003e=60000\u0026\u0026check == 0){\r\n console.log(\"done\");\r\n check = 1;\r\n }\r\n}\r\n\r\n","artId":"clm88ikn70rl4nnirmf0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.min.js"]}],"like":0,"thumbFileName":"clm88ikn70rl4nnirmf0.png","selectedThumbFileName":"clm88ikn70rl4nnirmf0.png","thumbnailFileUrl":"","resourceFileName":"clm88ikn70rl4nnirmf0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmc6hRAYoc1kUttnJqgU5P9yf3kibzAW4ba4YCPwYb1XAt","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clm989kn70rl4nnirmug","title":"Twinkle","description":"子供の頃雪が降ると嬉しかった気持ちを思い出して書きました。\n雪が輝く様子と、人の目が輝くという意味で\"Twinkle\"と名付けました。","createdAt":1701614636,"updatedAt":1701615010,"user":{"id":"F8CCwM2oRUYgwtOn3KQFaZpEgkf2","customId":"F8CCwM2oRUYgwtOn3KQFaZpEgkf2","name":"Yusuke","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/F8CCwM2oRUYgwtOn3KQFaZpEgkf2.png","createdAt":1643325217447,"updatedAt":1701837749483},"codes":[{"id":"clm98b4n70rl4nnirmvg","type":0,"text":"\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"en\"\u003e\r\n \u003chead\u003e\r\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.js\"\u003e\u003c/script\u003e\r\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\r\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\r\n \u003cmeta charset=\"utf-8\" /\u003e\r\n\r\n \u003c/head\u003e\r\n \u003cbody\u003e\r\n \u003cmain\u003e\r\n \u003c/main\u003e\r\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\r\n \u003c/body\u003e\r\n\u003c/html\u003e\r\n","artId":"clm989kn70rl4nnirmug","libraries":[]},{"id":"clm98b4n70rl4nnirn00","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}","artId":"clm989kn70rl4nnirmug","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clm98b4n70rl4nnirn0g","type":2,"text":"let num = 200;\r\nlet node = [];\r\nlet sv = [];\r\nlet c;\r\nlet c1 = 150;\r\nlet c2 = 180;\r\nlet cv1 = 0.3;\r\nlet cv2 = 0.3;\r\nlet r = [];\r\n\r\nfunction setup() {\r\n createCanvas(1920, 970);\r\n colorMode(HSB, 360, 100, 100, 100);\r\n for (let i = 0; i \u003c num; i++) {\r\n let x = random(width);\r\n let y = random(height);\r\n node.push(createVector(x, y));\r\n sv[i] = random(0.5, 3);\r\n r[i] = random(5, 10);\r\n }\r\n}\r\n\r\nfunction draw() {\r\n blendMode(BLEND);\r\n background(0, 0, 0, 4);\r\n blendMode(ADD);\r\n for (let i = 0; i \u003c num - 1; i++) {\r\n let n = node[i];\r\n for (let j = i + 1; j \u003c num; j++) {\r\n let m = node[j];\r\n if (dist(n.x, n.y, m.x, m.y) \u003c 100) {\r\n strokeWeight(1);\r\n stroke(c1, 80, 100, 100, 100);\r\n line(n.x, n.y, m.x, m.y);\r\n }\r\n }\r\n }\r\n for (let i = 0; i \u003c num; i++) {\r\n let p = node[i];\r\n noStroke();\r\n fill(c2, 60, 100, 100); \r\n circle(p.x, p.y, r[i]);\r\n }\r\n\r\n for (let i = 0; i \u003c num; i++) {\r\n node[i].y += sv[i];\r\n if (node[i].y \u003e height) {\r\n node[i].x = random(width);\r\n node[i].y = 0;\r\n }\r\n }\r\n c1 += cv1;\r\n c2 += cv2;\r\n if (c1 \u003e= 330 || c1 \u003c 150) cv1 *= -1;\r\n if (c2 \u003e= 330 || c2 \u003c 150) cv2 *= -1;\r\n}","artId":"clm989kn70rl4nnirmug","libraries":[]}],"like":0,"thumbFileName":"clm989kn70rl4nnirmug.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"clm989kn70rl4nnirmug.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmU9svhcRodc6hCABPspMXx21LASDXL5vtndfheETa65nX","resourceType":1,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmbev4n70rl4nnirnkg","title":"SnowAndLights","description":"雪と緑と赤をメインとした色とりどりの灯りを描いてクリスマスの景色の表現を試みた。","createdAt":1701623733,"updatedAt":1701623916,"user":{"id":"AxrhxjsMdchT3MgZyMsscrSyXGa2","customId":"AxrhxjsMdchT3MgZyMsscrSyXGa2","name":"独楽回しeddy","biography":"twitter : https://twitter.com/EKey2210\ntumblr : https://www.tumblr.com/blog/spinner22exhibition\nopenprocessing : https://openprocessing.org/user/58956?view=activity","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/AxrhxjsMdchT3MgZyMsscrSyXGa2.png","createdAt":1550901251000,"updatedAt":1734846488687},"codes":[{"id":"clmbfdcn70rl4nnirnmg","type":0,"text":"","artId":"clmbev4n70rl4nnirnkg","libraries":[]},{"id":"clmbfdcn70rl4nnirnn0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clmbev4n70rl4nnirnkg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clmbfdcn70rl4nnirnng","type":2,"text":"let blurVs = `\nprecision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uProjectionMatrix;\nuniform mat4 uModelViewMatrix;\n\nvarying vec2 vTexCoord;\n\nvoid main() { \n vec3 uPosition = aPosition;\n vec4 positionVec4 = vec4(uPosition, 1.0);\n\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;//positionVec4;\n vTexCoord = aTexCoord;\n}\n`;\n\nlet blurFs = `\n#ifdef GL_ES\nprecision mediump float;\n#endif\nvarying vec2 vTexCoord;\n\nuniform sampler2D baseGraphics;\nuniform float time;\nuniform vec2 resolution;\nuniform float gCoefficients[65];\nuniform bool isVertical;\n\n#define TABLE_SIZE 65\n\nvec3 color;\n\nvoid main() {\n // vec2 uv = vec2(vTexCoord.x, 1.0 - vTexCoord.y);\n\tvec2 uv = vTexCoord;\n\tvec4 returnColor = vec4(0.0);\n\tfor(int i = 0; i \u003c TABLE_SIZE; i++){\n\t\tvec2 offset = vec2(0.0);\n\t\tif(isVertical)\n\t\t{\n\t\t\toffset.x = 0.0;\n\t\t\toffset.y = float(i) - float(TABLE_SIZE - 1) / 2.0;\n\t\t}\n\t\telse\n\t\t{\n\t\t\toffset.x = float(i) - float(TABLE_SIZE - 1) / 2.0;\n\t\t\toffset.y = 0.0;\n\t\t}\n\t\tvec2 inverseResolution = 1.0 / resolution;\n\t\tvec4 texColor = texture2D(baseGraphics, uv + offset * inverseResolution);\n\t\treturnColor += texColor * gCoefficients[i];\n\t}\n\tgl_FragColor = returnColor;\n}\n`;\n\nlet bloomVs = `\nprecision mediump float;\n\nattribute vec3 aPosition;\nattribute vec2 aTexCoord;\nuniform mat4 uProjectionMatrix;\nuniform mat4 uModelViewMatrix;\n\nvarying vec2 vTexCoord;\n\nvoid main() { \n vec3 uPosition = aPosition;\n vec4 positionVec4 = vec4(uPosition, 1.0);\n\n gl_Position = uProjectionMatrix * uModelViewMatrix * positionVec4;//positionVec4;\n vTexCoord = aTexCoord;\n}\n`;\n\nlet bloomFs = `\n#ifdef GL_ES\nprecision mediump float;\n#endif\nvarying vec2 vTexCoord;\n\nuniform sampler2D baseTex;\nuniform sampler2D tex;\nuniform float time;\nuniform vec2 resolution;\nuniform float bloomStrength;\n\nvec3 color;\n\nvoid main() {\n // vec2 uv = vec2(vTexCoord.x, 1.0 - vTexCoord.y);\n\tvec2 uv = vTexCoord;\n\tvec4 texColor = texture2D(tex, uv);\n\tvec4 baseTexColor = texture2D(baseTex, uv);\n\t\n\tgl_FragColor = texColor * bloomStrength + baseTexColor;\n}\n`;\n\nlet baseGraphics;\nlet pass1, pass2, pass3;\nlet pass1Shader, pass2Shader, pass3Shader;\nlet gCoefficients = [];\n\nlet ps = [];\nlet noiseSeedX;\nlet noiseSeedY;\nlet incrementSeed;\n\nlet lights = [];\n\nfunction setup() {\n// \tcreateCanvas(windowWidth, windowHeight);\n\tcreateCanvas(1920, 970, WEBGL);\n\tbackground(0);\n\n\tgl = this._renderer.GL;\n\tgl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\tgl.disable(gl.DEPTH_TEST);\n\n\tbaseGraphics = createGraphics(width, height, WEBGL);\n\tpass1 = createGraphics(width, height, WEBGL);\n\tpass2 = createGraphics(width, height, WEBGL);\n\tpass3 = createGraphics(width, height, WEBGL);\n\n\tpass1Shader = pass1.createShader(blurVs, blurFs);\n\tpass2Shader = pass2.createShader(blurVs, blurFs);\n\tpass3Shader = pass3.createShader(bloomVs, bloomFs);\n\n\tpass1.noStroke();\n\tpass2.noStroke();\n\tpass3.noStroke();\n\n\tsetupGaussianCoefficients(10.0, 64.0);\n\n\tnoiseSeedX = createVector(random(10000), random(10000), random(10000));\n\tnoiseSeedY = createVector(random(10000), random(10000), random(10000));\n\tincrementSeed = createVector(0.001, 0.001, 0.001);\n\n\tlights.push(new light(random(-width, width), random(-height*0.5, height * 0.2)));\n\n\tground(baseGraphics);\n}\n\nfunction draw() {\n\tbackground(0);\n\n\tbaseGraphics.clear();\n\n\tfor(let i = 0; i \u003c 3; i++){\n\t\tps.push(new particle(random(-width * 2.0, width * 2.0), -height*random(0.8, 1.2)));\n\t}\n\n\tif(random(1) \u003e 0.6){\n\t\tlights.push(new light(random(-width, width), random(-height*0.5, height * 0.3)));\n\t}\n\n\tnoiseSeedX.add(incrementSeed);\n\tnoiseSeedY.add(incrementSeed);\n\n\tfor(let i = ps.length-1; i \u003e= 0; i--){\n\t\tps[i].applyForce(createVector(map(noise(noiseSeedX.x, noiseSeedX.y, noiseSeedX.z, frameCount*0.0001), 0, 1, -0.15, 0.15), map(noise(noiseSeedY.x, noiseSeedY.y, noiseSeedY.z, frameCount*0.005), 0, 1, -0.0, 0.1)));\n\t\tps[i].update();\n\t\tps[i].display(baseGraphics);\n\t\tif(ps[i].isVanished()){\n\t\t\tps.splice(i, 1);\n\t\t}\n\t}\n\n\tfor(let i = lights.length-1; i \u003e= 0; i--){\n\t\tlights[i].update();\n\t\tlights[i].display(baseGraphics);\n\t\tif(lights[i].isVanished()){\n\t\t\tlights.splice(i, 1);\n\t\t}\n\t}\n\n\tground(baseGraphics);\n\n\tpass1.clear();\n\tpass1.shader(pass1Shader);\n\tpass1Shader.setUniform('baseGraphics', baseGraphics);\n\tpass1Shader.setUniform(\"resolution\", [baseGraphics.width, baseGraphics.height]);\n\tpass1Shader.setUniform(\"time\", frameCount*0.04);\n\tpass1Shader.setUniform(\"gCoefficients\", gCoefficients);\n\tpass1Shader.setUniform(\"isVertical\", false);\n\tpass1.rectMode(CENTER);\n\tpass1.rect(0, 0, width, height);\n\n\tpass2.clear();\n\tpass2.shader(pass2Shader);\n\tpass2Shader.setUniform('baseGraphics', pass1);\n\tpass2Shader.setUniform(\"resolution\", [pass1.width, pass1.height]);\n\tpass2Shader.setUniform(\"time\", frameCount*0.04);\n\tpass2Shader.setUniform(\"gCoefficients\", gCoefficients);\n\tpass2Shader.setUniform(\"isVertical\", true);\n\tpass2.rectMode(CENTER);\n\tpass2.rect(0, 0, width, height);\n\n\tpass3.clear();\n\tpass3.shader(pass3Shader);\n\tpass3Shader.setUniform('tex', pass2);\n\tpass3Shader.setUniform('baseTex', baseGraphics);\n\tpass3Shader.setUniform(\"resolution\", [baseGraphics.width, baseGraphics.height]);\n\tpass3Shader.setUniform(\"time\", frameCount*0.04);\n\tpass3Shader.setUniform(\"bloomStrength\", 7.8);\n\tpass3.rectMode(CENTER);\n\tpass3.rect(0, 0, width, height);\n\n\timageMode(CENTER);\n\timage(pass3, 0, 0);\n}\n\nfunction ground(gr){\n\tgr.push();\n\tgr.fill(100);\n\tgr.strokeWeight(5);\n\tgr.stroke(255);\n\tgr.beginShape();\n\tgr.vertex(-width*0.5, height * 0.5);\n\tfor(let i = 0; i \u003c 50; i++){\n\t\tlet x = -width * 0.5 + (width / 49) * i;\n\t\tlet y = cos(x*0.005)*sin(x*0.01 + frameCount*0.01) * 50.0 + height * 0.3;\n\t\tgr.vertex(x, y);\n\t}\n\tgr.vertex(width*0.5, height * 0.5);\n\tgr.endShape(CLOSE);\n\tgr.pop();\n}\n\nfunction light(x, y){\n\tthis.pos = createVector(x, y);\n\t\n\tthis.rMax = random(10, 200);\n\tthis.randColor = color(random(255), random(255), random(255));\n\t\n\tthis.col = random(1) \u003e 0.2 ? random([\"#CC0000\", \"#006622\"]) : this.randColor;\n\tthis.r = 0;\n\tthis.index = random(10000);\n\tthis.rAngle = 0.0;\n\n\tthis.update = function(){\n\t\tthis.rAngle += 0.01;\n\t\tthis.r = this.rMax * sin(this.rAngle);\n\t\tthis.pos.x -= 1.0;\n\t}\n\n\tthis.display = function(gr){\n\t\tgr.push();\n\t\tlet col = color(this.col);\n\t\tcol.setAlpha(noise(this.index, this.rAngle*0.3)*40);\n\t\tgr.fill(col);\n\t\tgr.noStroke();\n\t\tgr.ellipse(this.pos.x, this.pos.y, this.r, this.r);\n\t\tgr.pop();\n\t}\n\n\tthis.isVanished = function(){\n\t\treturn this.rAngle \u003e PI;\n\t}\n\t\n}\n\nfunction particle(x, y){\n\tthis.pos = createVector(x, y);\n\tthis.vel = createVector(0, 0);\n\tthis.acc = createVector(0, 0);\n\n\tthis.r = random(2, 10);\n\n\tthis.update = function(){\n\t\tthis.vel.add(this.acc);\n\t\tthis.pos.add(this.vel);\n\n\t\tthis.acc.mult(0);\n\t}\n\n\tthis.display = function(gr){\n\t\tgr.push();\n\t\tgr.noFill();\n\t\tgr.fill(245);\n\t\tgr.translate(this.pos.x, this.pos.y);\n\t\tgr.ellipse(0, 0, this.r, this.r);\n\t\tgr.pop();\n\t}\n\n\tthis.applyForce = function(f){\n\t\tlet force = p5.Vector.div(f, this.r * 0.1);\n\t\tthis.acc.add(force);\n\t}\n\n\tthis.isVanished = function(){\n\t\treturn this.pos.y \u003e height * 0.6;\n\t}\n}\n\nfunction setupGaussianCoefficients(range, count){\n\tgCoefficients.splice(0, gCoefficients.length);\n\tlet totalRange = range * 2.0;\n\tlet startRange = -range;\n\tlet incrementValue = totalRange / count;\n\tlet totalValue = 0.0;\n\n\tfor(let i = startRange; i \u003c= range; i+=incrementValue){\n\t\tlet value = exp(-(i * i) / totalRange);\n\t\ttotalValue += value;\n\t\tgCoefficients.push(value);\n\t}\n\n\tfor(let i = 0; i \u003c gCoefficients.length; i++){\n\t\tgCoefficients[i] /= totalValue;\n\t}\n}","artId":"clmbev4n70rl4nnirnkg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.9.0/p5.min.js"]}],"like":0,"thumbFileName":"clmbev4n70rl4nnirnkg.png","selectedThumbFileName":"clmbev4n70rl4nnirnkg.png","thumbnailFileUrl":"","resourceFileName":"clmbev4n70rl4nnirnkg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmaAqbLWBkzrBJKjKNMrwL6Rk7cPjnzgLWFsYVzvZ66Q7g","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjbjcc3p9f7m1g018u0","name":"glsl"},{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmc0fsn70rl4nniroa0","title":"Present Box","description":"3D video art created using Blender","createdAt":1701625928,"updatedAt":1701625928,"user":{"id":"4O0jGmd2rbh41HeIYxpIHDsa0cY2","customId":"eri_harigai","name":"Eri Harigai","biography":"New Media/Digital artist based in Japan.\nhttps://twitter.com/eri_harigai\nhttps://www.instagram.com/eri_harigai/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/4O0jGmd2rbh41HeIYxpIHDsa0cY2.png","createdAt":1701361343946,"updatedAt":1702731465748},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"clmc0fsn70rl4nniroa0.jpg","thumbnailFileUrl":"","resourceFileName":"clmc0fsn70rl4nniroa0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmToApw9ogAoxbkbKFchuooC1A5npzWpZPzUPQHFiZL5Xu","resourceType":2,"metadataUrl":"","tags":[{"id":"bn0dlqs3p9f7m1g03f0g","name":"3D"},{"id":"bq6opa43p9f6qoqnlni0","name":"blender"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"},{"id":"clmc0i4n70rl4nnirob0","name":"projectionmapping"},{"id":"clmc0i4n70rl4nnirobg","name":"lightart"},{"id":"clmc0i4n70rl4nniroc0","name":"pop"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmiiccn70rl4nnirolg","title":"Post-Christmas","description":"In the Western realm, Buddha is often misinterpreted as a symbol of relaxation, mirroring a misconstrued acceptance. Similarly, the reception of Christmas in Asia may harbor inaccuracies. This conveys the clumsy-seeming in the misperception of both, highlighting the nuanced misalignments between cultural symbols and their entanglement of meanings.","createdAt":1701652791,"updatedAt":1701652791,"user":{"id":"QMGAE7lg6bajWe8Gy6ZyhQZBABW2","customId":"QMGAE7lg6bajWe8Gy6ZyhQZBABW2","name":"Maharu","biography":"Artist based in Berlin and Chiba","image":"","createdAt":1701650521324,"updatedAt":1701783122832},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"clmiiccn70rl4nnirolg.png","thumbnailFileUrl":"","resourceFileName":"clmiiccn70rl4nnirolg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVAvPKBMGriDeq2SUVsjyejSo8GQpRVxbRbN2xuvZv8dz","resourceType":2,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmj94cn70rl4nnirorg","title":"The Stars of Tashkent Winter Holiday","description":"This piece was developed especially for the Yohas Art Festival, using elements from three of my previous projects.\n\nThe background shows dancing fir trees in a winter night, one with a package, one with an ornament. A variety of paper snowflakes fall steadily.\n\nThe foreground animates the construction of an Islamic mosaic featuring unusual nine-point stars from 15th century Tashkent. Stars from the night sky fall into the pattern, are colored, and then form tiles to fill the central area. The mosaic fades, momentarily revealing a skeleton of the design before returning to a clean night sky.","createdAt":1701655704,"updatedAt":1701656083,"user":{"id":"tOro7liMnhTlhVtxaPZq1AcsP3r2","customId":"tOro7liMnhTlhVtxaPZq1AcsP3r2","name":"John Cartan","biography":"I'm a writer, designer and generative artist who specializes in short, seamless animations. Long career in tech, always coding for beauty.\n\nFull biography: http://www.cartania.com/design.html","image":"","createdAt":1670823558411,"updatedAt":1714107285334},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"clmj94cn70rl4nnirorg.png","thumbnailFileUrl":"","resourceFileName":"clmj94cn70rl4nnirorg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmfRBV1NWheLZjuKcJgSJm5PdQKAEAvpwJZMwaA2v8he3V","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"},{"id":"clcv3tkn70rtc72b5sh0","name":"nodebox"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clms50cn70rl4nnirrkg","title":"yes","description":"30分で書きました","createdAt":1701692653,"updatedAt":1701693032,"user":{"id":"EO2Z9ONBlZfCrODVwiFNVYPdlQz2","customId":"EO2Z9ONBlZfCrODVwiFNVYPdlQz2","name":"Renard","biography":"GLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSLGLSL","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/EO2Z9ONBlZfCrODVwiFNVYPdlQz2.png","createdAt":1701691257942,"updatedAt":1708531441592},"codes":[{"id":"clms50cn70rl4nnirrlg","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"clms50cn70rl4nnirrkg","libraries":[]},{"id":"clms50cn70rl4nnirrm0","type":4,"text":"// #version 300 es\nprecision highp float;\n// out vec4 outColor;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n#define iResolution resolution\n#define iTime time\n#define iChannel0 backbuffer\n\nconst float PI=acos(-1.);\nconst float TAU=2.*PI;\n\n#define rep(i,n) for(int i=0;i\u003cn;i++)\n#define sat(x) clamp(x,0.,1.)\n#define norm(x) normalize(x)\nfloat box(vec3 p, vec3 b)\n{\n vec3 q = abs(p) - b;return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0);\n}\nvec3 hash(vec3 x)\n{\n\tx = fract(x * vec3(.1031, .1030, .0973));x += dot(x, x.yxz+33.33);return fract((x.xxy + x.yxx)*x.zyx);\n}\nmat3 bnt(vec3 T)\n{\n T = norm(T);vec3 N = vec3(0, 1, 0);vec3 B = norm(cross(N, T));N = norm(cross(T, B));return mat3(B, N, T);\n}\nmat2 rot(float a)\n{\n float s=sin(a),c=cos(a);\n return mat2(c,s,-s,c);\n}\n\nfloat alt,lt;\nint bt;\nfloat tr;\n#define sc hash(vec3(bt))\nfloat sdf(vec3 p)\n{\n float d=1e9;\n \n float m=sat(dot(vec3(1),smoothstep(.05,.0,abs(fract(p*4.)-.5))))*.01;\n \n int b=int(mod(float(bt)+.5,4.));\n if(b==0){\n p.z=mod(p.z,4.)-2.;\n p.y=mod(p.y+2.5,5.)-2.5;\n p.x=abs(p.x);\n d=abs(box(p,vec3(2,2,10)))-.1;\n d=max(d,-box(p-vec3(2,0,0),vec3(1,1.5,1)));\n }else if(b==1){\n d=p.y+1.8;\n p.xz=mod(p.xz,6.)-3.;\n d=min(d,box(p,vec3(0,1e9,0))-1.);\n }else if(b==2){\n p.z=mod(p.z,4.)-2.;\n d=min(d,box(p,vec3(4,4,1)));\n d=max(d,-box(p,vec3(3,3,1.5)));\n }else if(b==3){\n p=mod(p,4.)-2.;\n vec3 s=vec3(.1,.1,1);\n d=min(d,box(p,s));\n d=min(d,box(p,s.yzx));\n d=min(d,box(p,s.zxy));\n }\n \n d+=m;\n\n return d*.5;\n}\n\nvec3 normal(vec3 p)\n{\n vec2 k=vec2(1,-1);\n float e=1e-3;\n return norm(k.xyy*sdf(p+e*k.xyy)+k.yxy*sdf(p+e*k.yxy)+k.yyx*sdf(p+e*k.yyx)+k.xxx*sdf(p+e*k.xxx));\n}\n\nvoid main(void)\n{\n vec3 col=vec3(0);\n\tvec2 fc = gl_FragCoord.xy,res=iResolution.xy,asp=res/min(res.x,res.y);\n vec2 uv=fc/res;\n float bpm=240./140.;\n alt=lt=iTime/bpm;\n tr=pow(fract(lt),.3);\n bt=int(lt);\n lt=(tr+float(bt))*bpm;\n vec2 suv=(uv*2.-1.)*asp;\n \n if(hash(sc).x\u003c.3)suv=abs(suv)*rot(tr*PI);\n else bt+=dot(suv,vec2(0,1)*rot(tr*TAU))\u003c.0?4:0;\n\n vec3 ro=vec3(0,0,lt*5.);\n vec3 dir=vec3(0,0,1);\n if(sc.x\u003c.5)\n {\n ro=vec3(10.*sin(lt),0,lt*5.);\n dir=vec3(-sin(lt),sin(lt)*.3+.3,1);\n }\n vec3 rd=norm(bnt(dir)*vec3(suv,mix(.3,3.,tr)));\n \n float l=0.,d;\n vec3 rp;\n rep(i,256)\n {\n rp=rd*l+ro;\n if(sc.z\u003c.5)\n {\n rp.xy*=rot(l*.05);\n }\n l+=d=sdf(rp);\n if(d\u003c1e-3||l\u003e1000.)break;\n }\n \n vec3 ld=norm(vec3(-1,1,1));\n vec3 n=normal(rp);\n vec3 sro=rp+n*.1;\n float sl=0.,vi=1.;\n rep(i,64)\n {\n vec3 srp=sro+ld*sl;\n sl+=d=sdf(srp);\n vi=min(vi,exp2(4.+4.*hash(srp).x)*d/sl);\n if(d\u003c1e-3){vi=0.;break;}\n }\n float ao=sqrt(sat(sdf(rp+n*.2)/.2));\n \n col=vec3(vi+ao);\n if(sc.y\u003c.5)\n {\n col*=hash(floor(rp*4.+.5)).x\u003c.1?vec3(1,.4,.1):vec3(1);\n }else{\n col*=hash(floor(rp*4.+.5)).x\u003c.1?vec3(.3,.3,.8):vec3(1);\n }\n \n col=sat(col);\n vec3 sk=vec3(.5,.6,.7)*pow(sat(rd.y+.9),2.);\n col=mix(sk,col,exp(-l*.04));\n \n uv=fc/res;\n suv=(uv*2.-1.)*asp;\n \n vec2 ruv=suv*8.;\n vec2 auv=abs(fract(ruv)-.5);\n col+=hash(ceil(vec3(ruv,alt*16.))).x\u003c.1?float(any(lessThan(auv,vec2(.02)))\u0026\u0026all(lessThan(auv,vec2(.3)))):.0;\n col+=step(abs(uv.y-.1),.03)*step(abs(uv.x-.5),.5*fract(alt))*step(fract(dot(vec2(1),suv)*20.+10.*alt),.5);\n \n col*=smoothstep(.8,.4,length(uv-.5));\n col+=hash(vec3(fc,alt))*.05;\n col.r=smoothstep(.0,1.,col.r);\n \n \n col=mix(col,texture2D(iChannel0,uv).rgb,.5);\n\n\tgl_FragColor = vec4(col,1);\n}","artId":"clms50cn70rl4nnirrkg","libraries":[]}],"like":3,"thumbFileName":"clms50cn70rl4nnirrkg.png","selectedThumbFileName":"clms50cn70rl4nnirrkg.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmVSJ5Rc47VH4NbD7faYt2QJE8pNnigz4pfn9tbAozuNhS","resourceFileName":"clms50cn70rl4nnirrkg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmeMnU2X1rdBPHynvNdWWjV3MZQ4syif4cB54Cq8uDE3b6","resourceType":3,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmsotkn70rgn7l2qkqg","title":"LiveCoding@AirPort AnimeFes 2023","description":"25分のライブコーディング\n\nhttps://gam0022.net/blog/2023/11/20/livecoding-airport-animefes2023/","createdAt":1701694582,"updatedAt":1702992753,"user":{"id":"NVlqnemVzqUgPSBOOPTPkVUSXQZ2","customId":"","name":"がむ","biography":"","image":"https://pbs.twimg.com/profile_images/1024640222246535168/D0JhkuoJ_normal.jpg","createdAt":1550901834000,"updatedAt":1712851363371},"codes":[{"id":"clmsotkn70rgn7l2qkrg","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"clmsotkn70rgn7l2qkqg","libraries":[]},{"id":"clmsotkn70rgn7l2qks0","type":4,"text":"// BEGIN: shadertoy porting template\n// https://gam0022.net/blog/2019/03/04/porting-from-shadertoy-to-glslsandbox/\nprecision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n#define iResolution resolution\n#define iTime time\n#define iMouse (vec4(mouse, 0.5, 0.5) * resolution.xyxy)\n#define iChannel0 backbuffer\n#define texture texture2D\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord);\n\nvoid main(void) {\n vec4 col;\n mainImage(col, gl_FragCoord.xy);\n gl_FragColor = col;\n}\n// END: shadertoy porting template\n\n// Original Bonzomatic Shader\n// https://gist.github.com/gam0022/362ed76ec245c2f418e8450b612dd7b0\n\n#define time iTime\n#define PI acos(-1.)\n#define TAU (2. * PI)\n#define saturate(x) clamp(x, 0., 1.)\n#define VOL 0.0\n#define SOL 1.0\n#define phase(x) (floor(x) + .5 + .5 * cos(TAU * .5 * exp(-5. * fract(x))))\n\nfloat beat, beatTau, beatPhase;\nvec3 pos, light;\n\nvec4 map(vec3 p);\n\nfloat sdBox(vec3 p, vec3 b) {\n vec3 q = abs(p) - b;\n return length(max(q, 0.)) + min(0., max(q.x, max(q.y, q.z)));\n}\n\nvoid U(inout vec4 m, float d, float a, float b, float c) {\n if (d \u003c m.x) m = vec4(d, a, b, c);\n}\n\nvoid rot(inout vec2 p, float a) { p *= mat2(cos(a), sin(a), -sin(a), cos(a)); }\n\nvoid pmod(inout vec2 p, float s) {\n float n = TAU / s;\n float a = PI / s - atan(p.x, p.y);\n a = floor(a / n) * n;\n rot(p, a);\n}\n\nfloat fft(float d) {\n // return texture(iChannel0, vec2(fract(d), 0)).r;\n return 0.4 * sin(beatTau / 8.);\n}\n\nfloat minRadius2 = 0.5;\nfloat fixedRadius2 = 1.0;\nfloat foldingLimit = 1.0;\n\nvoid sphereFold(inout vec3 z, inout float dz) {\n float r2 = dot(z, z);\n if (r2 \u003c minRadius2) {\n float temp = (fixedRadius2 / minRadius2);\n z *= temp;\n dz *= temp;\n } else if (r2 \u003c fixedRadius2) {\n float temp = fixedRadius2 / r2;\n z *= temp;\n dz *= temp;\n }\n}\n\nvoid boxFold(inout vec3 z, inout float dz) { z = clamp(z, -foldingLimit, foldingLimit) * 2.0 - z; }\n\nvec3 normal(vec3 p) {\n vec2 e = vec2(0, .0005);\n return normalize(map(p).x - vec3(map(p - e.yxx).x, map(p - e.xyx).x, map(p - e.xxy).x));\n}\n\n\nvec3 pal(float h) {\n vec3 col = vec3(0.5) + 0.5 * cos(TAU * (vec3(0.0, 0.33, 0.67) + h));\n return mix(col, vec3(1), 0.1 * floor(h));\n}\n\n#define FLT_EPS 5.960464478e-8\nfloat roughnessToExponent(float roughness) {\n return clamp(2.0 * (1.0 / (roughness * roughness)) - 2.0, FLT_EPS, 1.0 / FLT_EPS);\n}\n\nvec3 evalLight(vec3 p, vec3 normal, vec3 view, vec3 baseColor, float metallic, float roughness) {\n vec3 ref = mix(vec3(0.04), baseColor, metallic);\n vec3 h = normalize(light + view);\n vec3 diffuse = mix(1.0 - ref, vec3(0.0), metallic) * baseColor / PI;\n float m = roughnessToExponent(roughness);\n vec3 specular = ref * pow(max(0.0, dot(normal, h)), m) * (m + 2.0) / (8.0 * PI);\n return (diffuse + specular) * max(0.0, dot(light, normal));\n}\n\nvec4 dMenger(vec3 z0, vec3 offset, float scale, int iteration) {\n vec4 z = vec4(z0, 1.0);\n for (int n = 0; n \u003c 10; n++) {\n z = abs(z);\n\n if (z.x \u003c z.y) z.xy = z.yx;\n if (z.x \u003c z.z) z.xz = z.zx;\n if (z.y \u003c z.z) z.yz = z.zy;\n\n z *= scale;\n z.xyz -= offset * (scale - 1.0);\n\n if (z.z \u003c -0.5 * offset.z * (scale - 1.0)) {\n z.z += offset.z * (scale - 1.0);\n }\n if (n \u003e= iteration) break;\n }\n\n float d1 = sdBox(z.zxy, vec3(1)) / z.w;\n float d2 = sdBox(z.zxy, vec3(0.1, 1.2, 0.8)) / z.w;\n vec4 m = vec4(d1, SOL, 1, 10);\n float hue = 2. + fract(pos.z * 2. + length(pos.xy) * 0.2);\n U(m, d2, VOL, saturate(cos(pos.z / 4. * TAU + beatTau / 2.)), hue);\n return m;\n}\n\nfloat dMandel(vec3 z, float scale, int n) {\n vec3 offset = z;\n float dr = 1.0;\n for (int i = 0; i \u003c 10; i++) {\n boxFold(z, dr);\n sphereFold(z, dr);\n z = scale * z + offset;\n dr = dr * abs(scale) + 1.0;\n if (i \u003e= n) break;\n }\n float r = length(z);\n return r / abs(dr);\n}\n\nvec4 map(vec3 p) {\n pos = p;\n vec4 m = vec4(1, 1, 1, 1);\n float a = 3.3;\n\n if (beat \u003c 16.) {\n a = 10.;\n p = pos;\n rot(p.xz, beatTau / 32.);\n rot(p.xy, beatTau / 64.);\n p -= 0.5 * a;\n p = mod(p, a) - 0.5 * a;\n return vec4(dMandel(p, -3.3 + 1.5 * fft(0.2), 10), SOL, 8., 5. + fract(length(p)));\n } else if (beat \u003c 16. * 2.) {\n a = 20.;\n p = pos;\n rot(p.xz, beatTau / 32.);\n p -= 0.5 * a;\n p = mod(p, a) - 0.5 * a;\n return vec4(dMandel(p, 2.78 + 1.5 * fft(0.2), 10), SOL, 8., 4.7);\n } else if (beat \u003c 16. * 3.) {\n a = 4.;\n p = pos;\n p -= 0.5 * a;\n p = mod(p, a) - 0.5 * a;\n pmod(p.xy, 8.);\n return dMenger(p, vec3(1.5, 2.2, 0.7 + 2.5 * (0.5 + 0.5 * cos(beatTau / 16.))), 2.2, 4);\n }\n\n p = mod(pos, a) - 0.5 * a;\n float s = 1.;\n for (int i = 0; i \u003c 4; i++) {\n p = abs(p) - 0.5;\n rot(p.xy, -0.5);\n p = abs(p) - 0.4;\n rot(p.yz, -0.1);\n\n float b = 1.4;\n p *= b;\n s *= b;\n }\n\n U(m, sdBox(p, vec3(0.5, 0.05, 0.05)) / s, SOL, 1., 10.);\n U(m, sdBox(p, vec3(0.1 + 0.5 * cos(beatTau / 8.), 0.06, 0.05)) / s, VOL, 0.1, 1.9);\n U(m, sdBox(p, vec3(0.2, 0.1, 0.1)) / s, VOL, saturate(cos(beatTau / 2. + TAU * pos.z / 8.)), 5.5);\n\n return m;\n}\n\nvec3 render(vec3 ro, vec3 rd) {\n vec3 col = vec3(0);\n float t = 0.;\n for (int i = 0; i \u003c 100; i++) {\n vec3 p = ro + rd * t;\n vec4 m = map(p);\n float d = m.x;\n\n if (m.y == SOL) {\n t += d;\n if (d \u003c t * 0.001) {\n vec3 n = normal(p);\n float diffuse = saturate(dot(n, light));\n col += evalLight(p, n, -rd, vec3(1), 0.7, 0.5) * pal(m.w) * m.z;\n t += d;\n break;\n }\n } else {\n t += abs(d) * 0.5 + 0.01;\n col += saturate(0.001 * pal(m.w) * m.z / abs(d));\n }\n }\n col = mix(vec3(0), col, exp(-0.01 * t));\n return col;\n}\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord) {\n beat = time * 140. / 60.;\n beat = mod(beat, 16. * 4.);\n beatTau = beat * TAU;\n beatPhase = phase(beat / 2.);\n\n vec2 uv = fragCoord.xy / iResolution.xy;\n uv -= 0.5;\n uv /= vec2(iResolution.y / iResolution.x, 1);\n\n vec3 ro = vec3(0, 0, 0.5 * time);\n if (beat \u003c 16.)\n ro = vec3(0, 0, -8);\n else if (beat \u003c 16. * 2.)\n ro = vec3(0, 0, -15);\n\n vec3 rd = vec3(uv, 1.1);\n rd = normalize(rd);\n light = normalize(vec3(1, 1, -1));\n vec3 col = render(ro, rd);\n // col += texture(texSessions, saturate(vec2(0.5 + uv.x, 0.5 - uv.y * 2))).rgb * 100 * fft(0.2);\n fragColor = vec4(col, 1);\n}","artId":"clmsotkn70rgn7l2qkqg","libraries":[]}],"like":2,"thumbFileName":"clmsotkn70rgn7l2qkqg.png","selectedThumbFileName":"clmsotkn70rgn7l2qkqg.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/Qmbqy5JogGsXi5dgGDTRgzZYevsNHV27LvUBFLjf6xHnbb","resourceFileName":"clmsotkn70rgn7l2qkqg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmayFLqP3rjkyAUj2hrEkAC6LcCEKPbqhjTTctjb9dj4KF","resourceType":3,"metadataUrl":"","tags":[{"id":"bmts4kk3p9f7m1g0329g","name":"IFS"},{"id":"bqvqqn43p9f48fkiu620","name":"Raymarching"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmsru4n70rgn7l2qlpg","title":"Christmas present","description":"建物全体をギフトボックスに見立ててラッピングし、\n中から出てきたものは指輪・・・ !?\n\nみたいなイメージで制作しました。","createdAt":1701694971,"updatedAt":1701695015,"user":{"id":"ByoVqdIQWhTjy5FVb4HhVEwkngh2","customId":"ByoVqdIQWhTjy5FVb4HhVEwkngh2","name":"ml3","biography":"","image":"","createdAt":1683282593503,"updatedAt":1714648410272},"codes":[{"id":"clmsrusn70rgn7l2qlqg","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"clmsru4n70rgn7l2qlpg","libraries":[]},{"id":"clmsrusn70rgn7l2qlr0","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}","artId":"clmsru4n70rgn7l2qlpg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clmsrusn70rgn7l2qlrg","type":2,"text":"/*\n Christmas present\n mole^3\n*/\n\nlet om = 0.5;\nlet seed;\nlet drawStart = true;\n\nlet objs2 = [];\nlet objSz;\n\nlet gradVal = 0.75;\nlet colors1 = ['#6dda67', '#00b062', '#f21826', \"#f1f6f6\", \"#d7b779\", '#b5000f'];\nlet thinVal = 0.99;\n\n\nfunction setup() {\n createCanvas(1920, 970, WEBGL);\n background(0);\n ortho(-width*om, width*om, -height*om, height*om, -3000, 3000);\n seed = int(random(999999));\n randomSeed(seed);\n\n rotY = HALF_PI;\n\tobjSz = width * 1.2;\n\tdivideRect(-objSz/2, -objSz/2, objSz, objSz);\n\n}\n\n\nlet rotY;\nlet countAll = 0;\nlet changeCount = 0;\n\nfunction draw() {\n if(drawStart) {\n background(0);\n\n\tif(frameCount % 610 == 0) {\n\t\tcountAll = 0;\n\t\tobjs2 = [];\n\t\t// objs2.length = 0;\n\t\tdivideRect(-objSz/2, -objSz/2, objSz, objSz);\n\t\tchangeCount++;\n\t}\n\n\tif(changeCount % 2 == 0) {\n\t\trotateZ(QUARTER_PI);\n\t} \n\n for(let i = 0; i \u003c objs2.length; i++) {\n objs2[i].update();\n objs2[i].display();\n\n if(countAll \u003e 300) {\n objs2[i].move();\n }\n }\n\n\tcountAll++;\n // print(frameCount);\n \n\n} \n}\n\n\n\nfunction divideRect(x, y, w, h) {\n // if ((random(random(1.0))) \u003c ((w+h)/(width+height))) {\n\tif (random(1.0) \u003c ((w+h)/(width+height))) {\n if (w \u003e= h) {\n let rndw = random(0.7) * w;\n //float rndw = random(0.2, 1) * w;\n divideRect(x, y, rndw, h);\n divideRect(x + rndw, y, w - rndw, h);\n } else {\n let rndh = random(0.7) * h;\n //float rndh = random(0.2, 1) * h;\n divideRect(x, y, w, rndh);\n divideRect(x, y + rndh, w, h - rndh);\n }\n \n } else {\n // noFill();\n // stroke(0);\n // rect(x + w / 2, y + h / 2, w + 1, h + 1);\n\n\t\t// :::::::::::::: OBJ\n\t\tlet cp = createVector(x+w/2, y+h/2, 0);\n\n\t\tlet xx, yy, dd;\n\t\tif(random(1) \u003c 0.5) {\n\t\t\txx = w+1;\n\t\t\tyy = h+1;\n\t\t\tdd = true;\n\t\t} else {\n\t\t\txx = h+1;\n\t\t\tyy = w+1;\n\t\t\tdd = false;\n\t\t}\n\n\t\tlet myObj = new ObjAry(cp, xx, yy, colors1, dd);\n\t\tobjs2.push(myObj);\n\n }\n}\n\n\n\n// :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::\nclass ObjAry {\n\tconstructor(p, w, h, cols, d) {\n\t\tthis.p = p;\n\t\tthis.w = w;\n\t\tthis.h = h;\n\t\tthis.cols = cols;\n\t\tthis.r = this.h / 2.0 * 1.01;\n\t\tthis.n = 36;\n\t\tthis.wsz = [];\n\t\tthis.sumW = [];\n\t\tthis.objs = [];\n\n\t\tthis.ry = 0;\n\t\tthis.rySpd = random(0.001, 0.02);\n\t\tthis.rotDur = random(1) \u003c 0.5 ? true : false;\n\t\tthis.dir = d;\n\n\t\t// --------------- 横幅\n\t\tlet sum = 0;\n\t\twhile(sum \u003c this.w) {\n\t\t\tlet w = random(1) \u003c 0.8 ? int(random(4,30)) : int(random(60, 120));\n\t\t\tif(sum+w \u003e this.w) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tthis.wsz.push(w);\n\t\t\tsum += w;\n\t\t\tthis.sumW.push(sum);\n\t\t}\n\t\tif(this.w - sum \u003e 1) {\n\t\t\tthis.wsz.push(this.w - sum);\n\t\t\tthis.sumW.push(this.w);\n\t\t}\n\n\t\t// --------------- Obj\n\t\tfor(let i = 0; i \u003c this.wsz.length; i++) {\n\t\t\tlet p = [];\n\t\t\tlet p2 = [];\n\t\t\tlet c = [];\n\t\t\tlet col;\n\t\t\tlet colId = [];\n\t\t\tfor(let i = 0; i \u003c this.n; i++) {\n\t\t\t\tlet a = TAU / this.n * i - HALF_PI;\n\t\t\t\tlet x = cos(a) * this.r;\n\t\t\t\tlet y = sin(a) * this.r;\n\t\t\t\tp.push(createVector(x, y));\n\n\t\t\t\t// 内側\n\t\t\t\tlet x2 = cos(a) * this.r * thinVal;\n\t\t\t\tlet y2 = sin(a) * this.r * thinVal;\n\t\t\t\tp2.push(createVector(x2, y2));\n\n\t\t\t\tif(i % random([4,6,8,10]) == 0) {\n\t\t\t\t\tcol = random(this.cols);\n\t\t\t\t\tlet cid = {\n\t\t\t\t\t\tid: i,\n\t\t\t\t\t\tc: col,\n\t\t\t\t\t}\n\t\t\t\t\tcolId.push(cid);\n\t\t\t\t}\n\t\t\t\tc.push(col);\n\n\t\t\t}\n\n\t\t\tlet cp =createVector(0, 0, this.sumW[i] - this.wsz[i]/2.0 - this.w/2);\n\t\t\tlet o = new Obj(p, p2, this.wsz[i], c, cp, colId);\n\t\t\tthis.objs.push(o);\n\t\t}\n\t}\n\t\n\tdisplay() {\n\t\tpush();\n\t\ttranslate(this.p.x, this.p.y, this.p.z);\n\t\trotateY(rotY);\n\t\t\n\t\tif(this.dir == false) {\n\t\t\trotateX(HALF_PI);\n\t\t}\n\n\t\tif(this.rotDur) {\n\t\t\trotateX(PI);\n\t\t}\n\n\t\trotateY(this.ry);\n\t\t// rotateX(this.ry);\n\t\trotateZ(this.ry);\n\t\tfor(let i = 0; i \u003c this.objs.length; i++) {\n\t\t\tthis.objs[i].display();\n\t\t}\n\t\tpop();\n\t}\n\n update() {\n\t\tfor(let i = 0; i \u003c this.objs.length; i++) {\n\t\t\tthis.objs[i].update(); \n\t\t}\n }\n\n move() {\n\t\tfor(let i = 0; i \u003c this.objs.length; i++) {\n\t\t\tthis.objs[i].move();\n\t\t}\n\n\t\tfor(let i = this.objs.length-1; i \u003e= 0; i--) {\n\t\t\tif(this.objs[i].isDead) {\n\t\t\t\tthis.objs.splice(i, 1);\n\t\t\t\t// print(\"dead\")\n\t\t\t}\n\t\t}\n }\n\n}\n\n\n\n// ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 1ring\nclass Obj {\n\tconstructor(p, p2, w, c, cp, cid) {\n\t\tthis.p = p;\n\t\tthis.p2 = p2;\n\t\tthis.w = w;\n\t\tthis.cid = cid;\t// id+col\n\t\tthis.c = c;\n\t\tthis.cp = cp;\n\t\tthis.rot = 0;\n\t\t// this.rotSpd = random(-0.005,0.005);\n this.rotSpd = random(-0.01,0.01);\n\t\tlet n = 2;\n\t\tthis.v = createVector(random(-n,n), random(-n,n), random(-n,n));\n\t\tthis.count = 0;\n\t\tthis.rotZ = 0;\n\t\tthis.rotZspd = random(0.001, 0.01);\n\t\tthis.startId = int(this.p.length/2.0);\t// 半分\n\t\tthis.alphVal = 255;\n\t\tthis.alphSpd = random(0.5,2);\n\t\tthis.isDead = false;\n\t\tthis.rndVal = random(1);\n\t\tthis.scl = 1.0;\n\t}\n\t\n\n\tdisplay() {\n\t\tpush();\n\t\ttranslate(this.cp.x, this.cp.y, this.cp.z);\n\t\tscale(this.scl);\n\t\trotateZ(this.rotZ);\n\t\trotateX(this.rot);\n\t\trotateY(this.rot);\n\t\trotateZ(this.rot);\n\n\t\tnoStroke();\n beginShape(TRIANGLE_STRIP);\n\t\tif(this.rndVal \u003c gradVal) {\n\t\t\tlet cc = color(this.c[0]);\n\t\t\tcc.setAlpha(this.alphVal);\n\t\t\tfill(cc);\n\t\t}\n\t\tfor(let i = this.startId; i \u003c= this.count; i++) {\n\t\t\tif(this.rndVal \u003e= gradVal) {\n\t\t\t\tlet cc = color(this.c[i%this.p.length]);\n\t\t\t\tcc.setAlpha(this.alphVal);\n\t\t\t\tfill(cc);\n\t\t\t}\n\t\t\tvertex(this.p[i%this.p.length].x, this.p[i%this.p.length].y, -this.w/2.0);\n\t\t\tvertex(this.p[i%this.p.length].x, this.p[i%this.p.length].y, this.w/2.0);\n\t\t}\t\n\t\tendShape(CLOSE);\n\t\tpop();\n\t\t\n\t}\n\t\n\tupdate(){\n\t\tif(this.count \u003c this.p.length) {\n\t\t\tthis.count += 0.5;\n\t\t}\n\n\t\tif(this.count \u003e= this.p.length) {\n\t\t\tthis.rotZ += this.rotZspd;\n\t\t\tthis.startId = 0;\n\t\t}\t\n\t}\n\t\n\tmove(){\n\t\tthis.rot += this.rotSpd;\n\t\tthis.cp.add(this.v);\t\n\t\tif(this.alphVal \u003e 0) {\n\t\t\tthis.alphVal -= this.alphSpd;\n\t\t}\n\n\t\tif(this.alphVal \u003c= 0) {\n\t\t\tthis.isDead = true;\n\t\t}\n\n\t\tif(this.scl \u003e 0) {\n\t\t\tthis.scl -= 0.003;\n\t\t}\n\t}\n}\n\n\n\n// ---------- key\nfunction keyPressed() {\n // if (key == 's' || key == 'S') saveCanvas();\n if (key == 's' || key == 'S') saveCanvas(seed + \"\",'png');\n \n if (keyCode == ESCAPE) {\n drawStart = !drawStart;\n print(drawStart);\n }\n}\n\n","artId":"clmsru4n70rgn7l2qlpg","libraries":[]}],"like":0,"thumbFileName":"clmsru4n70rgn7l2qlpg.png","selectedThumbFileName":"clmsru4n70rgn7l2qlpg.png","thumbnailFileUrl":"","resourceFileName":"clmsru4n70rgn7l2qlpg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmSEHwDzfFJZMS8CM9YicCwGksmq3R5M2PaKRTPPLrjJeg","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmu1v4n70rgn7l2qme0","title":"Fir tree in the snow","description":"","createdAt":1701699836,"updatedAt":1701699836,"user":{"id":"S0P2iTeKM2fsL3GISqYCXVkOYQC3","customId":"","name":"Butadiene","biography":"twitter:@butadiene121","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/S0P2iTeKM2fsL3GISqYCXVkOYQC3.png","createdAt":1562252525000,"updatedAt":1701698571615},"codes":[{"id":"clmu1v4n70rgn7l2qmf0","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"clmu1v4n70rgn7l2qme0","libraries":[]},{"id":"clmu1v4n70rgn7l2qmfg","type":4,"text":"// BEGIN: shadertoy porting template\n// https://gam0022.net/blog/2019/03/04/porting-from-shadertoy-to-glslsandbox/\nprecision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n#define iResolution resolution\n#define iTime time\n#define iMouse (vec4(mouse, 0.5, 0.5) * resolution.xyxy)\n#define iChannel0 backbuffer\n#define texture texture2D\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord);\n\nvoid main(void) {\n vec4 col;\n mainImage(col, gl_FragCoord.xy);\n gl_FragColor = col;\n}\n// END: shadertoy porting template\n\n\nmat2 rot(float r){\n return mat2(cos(r),sin(r),-sin(r),cos(r));\n}\n\nfloat cube(vec3 p, vec3 s){\n vec3 q = abs(p);\n vec3 m = max(s-q,0.0);\n return length(max(q-s,0.0))-min(min(m.x,m.y),m.z);\n}\n\nvec2 pmod(vec2 p, float n){\n float np = 2.0*3.141592/n;\n float r = atan(p.x,p.y)-0.5*np;\n r = mod(r,np)-0.5*np;\n return length(p)*vec2(cos(r),sin(r));\n}\n\nvec4 dist(vec3 p){\n float szz = p.z*2.;\n float ksstz = iTime*1.2;\n float scale = 1.0;\n p.yz *= rot(p.x*0.9-0.2*iTime);\n \n p.yz = pmod(p.yz,5.0);\n p.x -= 0.4*iTime;\n float ks = 2.8;\n p = mod(p,ks)-0.5*ks;\n \n float d1 = cube(p, vec3(scale));\n float d = d1;\n vec3 col2 = vec3(0.);\n for(int i = 0;i\u003c5;i++){\n float d2 = cube(p,vec3(10.0*scale,scale/3.0,scale/3.0));\n float d3 = cube(p,vec3(scale/3.0,10.0*scale,scale/3.0));\n float d4 = cube(p,vec3(scale/3.0,scale/3.0,10.0*scale));\n float d234 = min(min(d2,d3),d4);\n float k = 1.5*scale/1.5; \n p = mod(p,k)-0.5*k;\n scale /= 2.8;\n d = max(d,-d234);\n if(d3\u003ed4){\n col2 += exp(-1.0*d)*vec3(0.08,0.02,0.06)*float(i);\n }else{\n col2 += exp(-1.0*d)*vec3(0.04+0.04*sin(ksstz+szz),0.08,0.08)*float(i);\n }\n \n }\n vec3 col = vec3(0.08,0.04,0.08)*exp(-0.1*d)*0.4*(cos(ksstz+szz)+0.1) + 0.06*col2;\n return vec4(col,d);\n}\n\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord ){\n vec2 r = iResolution.xy;\n vec2 p=(fragCoord.xy*2.-r)/min(r.x,r.y);\n\n vec3 tar = vec3(0.0,0.0,0.0);\n float radius = 0.1;\n float theta = iTime*0.;\n\n vec3 cpos = vec3(radius*cos(theta),0.0,radius*sin(theta));\n\n vec3 cdir = normalize(tar - cpos);\n vec3 side = cross(cdir,vec3(0,1,0));\n vec3 up = cross(side,cdir);\n float fov = 0.2;\n\n vec3 rd = normalize(p.x*side + p.y*up + fov * cdir);\n\n float d = 0.0;//distance\n float t = 0.0;//total distance\n vec3 pos = cpos;\n vec4 rsd = vec4(0.0);\n vec3 ac = vec3(0.0);\n\n for(int i = 0;i\u003c50;i++){\n rsd = dist(pos);\n d = rsd.w;\n t += d;\n pos = cpos + rd*t;\n ac += rsd.xyz;\n if(d\u003c0.000001)break;\n }\n\n vec3 col = ac*1.2*exp(-0.6*t);\n\n col = clamp(col,0.0,1.0);\n col = 1.0-col+vec3(0.1,0.05,0.1);\n col = pow(col,vec3(0.8));\n\n fragColor = vec4(col,1.0);\n}","artId":"clmu1v4n70rgn7l2qme0","libraries":[]}],"like":2,"thumbFileName":"clmu1v4n70rgn7l2qme0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"clmu1v4n70rgn7l2qme0.html","resourceFileUrl":"","resourceType":3,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmu3acn70rgn7l2qmv0","title":"Stardust Storm","description":"","createdAt":1701700011,"updatedAt":1701700440,"user":{"id":"X9oC9Zoah7MwobvFt5RNJ9ExlRg2","customId":"X9oC9Zoah7MwobvFt5RNJ9ExlRg2","name":"Atsushi Tanaka","biography":"Processing p5.js TouchDesiger Unity","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/X9oC9Zoah7MwobvFt5RNJ9ExlRg2.png","createdAt":1669109903757,"updatedAt":1727256248322},"codes":[{"id":"clmu3asn70rgn7l2qn00","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e","artId":"clmu3acn70rgn7l2qmv0","libraries":[]},{"id":"clmu3asn70rgn7l2qn0g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clmu3acn70rgn7l2qmv0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clmu3asn70rgn7l2qn10","type":2,"text":"var agents = [];\r\nvar agents_count = 2000;\r\nvar agents_mode = 1;\r\n\r\nvar noise_scale = 740;\r\nvar noise_strength = 20;\r\nvar noise_radius;\r\n\r\nvar noise_height = 200;\r\nvar now_height = 200;\r\nvar target_height =200;\r\n\r\nvar noise_step = 0.6;\r\nvar now_nstep = 0.6;\r\nvar target_nstep = 0.6;\r\n\r\nvar angle_step = 0.001;\r\n\r\nvar agent_alpha = 100;\r\nvar agent_radius;\r\n\r\nvar now_zoom = 440;\r\nvar space_w = 300;\r\nvar space_h = 300;\r\nvar space_d = 300;\r\n\r\nvar step01 = 0;\r\nvar step02 = 0;\r\n\r\nvar def_cr;\r\n\r\nvar scatter_flag = false;\r\nvar subside_flag = true;\r\nvar trig_count = 0;\r\n\r\nfunction setup () {\r\n\r\n\tcanvas = createCanvas (windowWidth, windowHeight, WEBGL);\r\n\r\n\tpixelDensity (displayDensity ());\r\n\tcolorMode (HSB, 360, 100, 100);\r\n\tbackground (0, 0, 0);\r\n\r\n\tagent_radius = (min (width, height) * 0.5) / 4;\r\n\tnoise_radius = 0;\r\n\r\n\tdef_cr = 5;\r\n\r\n\tfor (var i = 0; i \u003c agents_count; i++) {\r\n\t\tvar deg01 = random (0, TWO_PI);\r\n\t\tvar deg02 = random (0, TWO_PI);\r\n\t\tvar x = agent_radius * cos (deg01) * cos (deg02);\r\n\t\tvar y = agent_radius * sin (deg01);\r\n\t\tvar z = agent_radius * cos (deg01) * sin (deg02);\r\n\t\tvar c = color (random (360), 100, 100);\r\n\t\tagents.push (new Star (x, y, z, deg01, deg02, c));\r\n\t}\r\n\r\n}\r\n\r\nfunction draw () {\r\n\r\n\tbackground (0, 0, 0);\r\n\r\n\tpush ();\r\n\r\n\ttranslate (0, 0, now_zoom);\r\n\r\n\trotateX (-frameCount * 0.01);\r\n\trotateY (-frameCount * 0.01);\r\n\trotateZ (-frameCount * 0.01);\r\n\r\n\tstep01 = 0;\r\n\tfor (var i = 0; i \u003c agents.length; i++) {\r\n\t\tagents[i].tmp_rad = map (noise (i, step01 * 60, step02 * 60), 0, 1, 0, 5);\r\n\t\tagents[i].rnd_a01 = map (noise (i + 100000, step01 / 2, step02 / 2), 0, 1, 0, TWO_PI);\r\n\t\tagents[i].rnd_a01 = map (noise (i + 200000, step01 / 2, step02 / 2), 0, 1, 0, TWO_PI);\r\n\t\tstep01 += angle_step;\r\n\t\tagents[i].update ();\r\n\t\tagents[i].render ();\r\n\t}\r\n\tstep02 += angle_step;\r\n\r\n\tnow_height += (target_height - now_height) * 0.1;\r\n\tnoise_height = constrain (now_height, 200, 600);\r\n\r\n\tif (round (random (60)) == 0 \u0026\u0026 scatter_flag == false) {\r\n\t\tscatter_flag = true;\r\n\t\ttrig_count = 0;\r\n\t\tstar_scatter ();\r\n\t}\r\n\r\n\tif (scatter_flag == true) {\r\n\t\ttrig_count += 1;\r\n\t\tif (trig_count \u003e floor (random (10, 300))) {\r\n\t\t\tscatter_flag = false;\r\n\t\t\tstar_subside ();\r\n\t\t}\r\n\t}\r\n\r\n\tpop ();\r\n\r\n}\r\n\r\nfunction Star (x, y, z, d01, d02, c) {\r\n\r\n\tvar pos;\r\n\tvar offset;\r\n\tvar targetp;\r\n\tvar targetr;\r\n\tvar col;\r\n\tvar angley;\r\n\tvar anglez;\r\n\tvar ball_rad;\r\n\tvar noisez;\r\n\r\n\tpos = new p5.Vector (0, 0, 0);\r\n\tset_position ();\r\n\r\n\toffset = 10000;\r\n\r\n\ttargetp = new p5.Vector (x, y, z);\r\n\ttargetr = def_cr;\r\n\r\n\tthis.rnd_a01 = d01;\r\n\tthis.rnd_a02 = d02;\r\n\tthis.tmp_rad = def_cr;\r\n\r\n\tcol = c;\r\n\r\n\tball_rad = def_cr;\r\n\r\n\tnoisez = random (0.4);\r\n\t\r\n\tthis.update = function () {\r\n\r\n\t\tif (agents_mode == 1) {\r\n\r\n\t\t\tnow_nstep += (target_nstep - now_nstep) * 0.00002;\r\n\t\t\tnoise_step = constrain (now_nstep, 0.6, 10);\r\n\r\n\t\t\tangley = noise (pos.x / noise_scale, pos.y / noise_scale, pos.z / noise_scale) * noise_strength;\r\n\t\t\tanglez = noise (pos.x / noise_scale + offset, pos.y / noise_scale, pos.z / noise_scale) * noise_strength;\r\n\r\n\t\t\tpos.x += cos (anglez) * cos (angley) * noise_step;\r\n\t\t\tpos.y += sin (anglez) * noise_step;\r\n\t\t\tpos.z += cos (anglez) * sin (angley) * noise_step;\r\n\r\n\t\t\tif (pos.x \u003c -space_w || pos.x \u003e space_w || pos.y \u003c -space_h || pos.y \u003e space_h || pos.z \u003c -space_d || pos.z \u003e space_d) {\r\n\t\t\t\tset_position ();\r\n\t\t\t}\r\n\r\n\t\t\ttargetr = def_cr;\r\n\t\t\tball_rad += (targetr - ball_rad) * 0.02;\r\n\r\n\t\t} else {\r\n\r\n\t\t\tnoise_radius = noise (this.rnd_a01 / noise_scale, this.rnd_a02 / noise_scale, noisez) * noise_height;\r\n\r\n\t\t\ttargetp.x = (agent_radius + noise_radius) * cos (this.rnd_a01) * cos (this.rnd_a02);\r\n\t\t\ttargetp.y = (agent_radius + noise_radius) * sin (this.rnd_a01);\r\n\t\t\ttargetp.z = (agent_radius + noise_radius) * cos (this.rnd_a01) * sin (this.rnd_a02);\r\n\r\n\t\t\tpos.x += (targetp.x - pos.x) * 0.04;\r\n\t\t\tpos.y += (targetp.y - pos.y) * 0.04;\r\n\t\t\tpos.z += (targetp.z - pos.z) * 0.04;\r\n\r\n\t\t\ttargetr = this.tmp_rad;\r\n\t\t\tball_rad += (targetr - ball_rad) * 0.1;\r\n\r\n\t\t\tnoisez += 0.01;\r\n\r\n\t\t} \r\n\r\n\t}\r\n\r\n\tthis.render = function () {\r\n\r\n\t\tpush ();\r\n\r\n\t\ttranslate (pos.x, pos.y, pos.z);\r\n\t\trotateZ (frameCount * 0.01);\r\n\t\trotateY (frameCount * 0.01);\r\n\t\trotateX (frameCount * 0.01);\r\n\r\n\t\tfill (col);\r\n\t\tnoStroke ();\r\n\t\trectMode (CENTER);\r\n\t\trect (0, 0, ball_rad / 3, ball_rad);\r\n\t\trect (0, 0, ball_rad, ball_rad / 3);\r\n\r\n\t\tpop ();\r\n\r\n\t}\r\n\r\n\tthis.init = function () {\r\n\r\n\t\tset_position ();\r\n\r\n\t}\r\n\r\n\tfunction set_position () {\r\n\r\n\t\tpos.x = random (-space_w, space_w);\r\n\t\tpos.y = random (-space_h, space_h);\r\n\t\tpos.z = random (-space_d, space_d);\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction star_scatter () {\r\n\r\n\tnoiseSeed (int (random (100000)));\r\n\tagents_mode = 1;\r\n\ttarget_height = 2000;\r\n\ttarget_nstep = 60;\r\n\ttarget_astep = 0.01;\r\n\r\n}\r\n\r\nfunction star_subside () {\r\n\r\n\ttarget_height = 200;\r\n\ttarget_nstep = 0.6;\r\n\ttarget_astep = 0.001;\r\n\r\n}\r\n\r\nfunction windowResized () {\r\n\r\n\tcanvas = resizeCanvas (windowWidth, windowHeight);\r\n\r\n}","artId":"clmu3acn70rgn7l2qmv0","libraries":[]}],"like":0,"thumbFileName":"clmu3acn70rgn7l2qmv0.png","selectedThumbFileName":"clmu3acn70rgn7l2qmv0.png","thumbnailFileUrl":"","resourceFileName":"clmu3acn70rgn7l2qmv0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmW7rmuihs6pD81WopZ3PLn1nSQ4wsP4x7KrG437wTXx2s","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmu5csn70rgn7l2qn2g","title":"Star_Rect","description":"Starry squares.\nSometimes looks like a meteor shower.","createdAt":1701700278,"updatedAt":1701700278,"user":{"id":"FMJfS3uV9lawgAvtSdRS3bWZVYP2","customId":"kimura_koya","name":"kimura koya","biography":"creative coding / p5js / おもしろいものがすきです.\n\nhttps://twitter.com/kim___megane","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/FMJfS3uV9lawgAvtSdRS3bWZVYP2.jpg","createdAt":1628413651965,"updatedAt":1702555631710},"codes":[{"id":"clmu5dkn70rgn7l2qn3g","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e","artId":"clmu5csn70rgn7l2qn2g","libraries":[]},{"id":"clmu5dkn70rgn7l2qn40","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clmu5csn70rgn7l2qn2g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"clmu5dkn70rgn7l2qn4g","type":2,"text":"const n = 4000;\nlet particles = [];\n\nfunction setup() {\n createCanvas(windowWidth, windowHeight);\n\n colorMode(HSB, 1.0, 1.0, 1.0, 1.0);\n\n for(let i = 0; i \u003c n; i ++){\n particles.push(new Particle(i));\n }\n}\n\nfunction draw() {\n background(0, 0.05);\n\n blendMode(ADD);\n\n translate(width/2, height/2);\n rotate(frameCount/100);\n\n for(let i in particles){\n particles[i].move();\n particles[i].display();\n }\n\n blendMode(BLEND);\n}\n\nclass Particle{\n constructor(_i){\n this.p = createVector(random(-width/2, width/2), random(-height/2, height/2));\n this.r = random(min(width, height));\n this.s = min(width, height) * random(0.05, 0.08);\n this.c = color(0.45+floor(random()*10)/20, 1.0, 1.0, 0.3);\n this.index = _i;\n }\n\n move(){\n this.p.x += this.r * cos(frameCount/200 + this.index/500);\n }\n\n display(){\n fill(this.c);\n noStroke();\n let s = this.s - abs(cos(frameCount/200))*min(width, height)/10\n rect(this.p.x, this.p.y, s, s);\n }\n}","artId":"clmu5csn70rgn7l2qn2g","libraries":[]}],"like":0,"thumbFileName":"clmu5csn70rgn7l2qn2g.png","selectedThumbFileName":"clmu5csn70rgn7l2qn2g.png","thumbnailFileUrl":"","resourceFileName":"clmu5csn70rgn7l2qn2g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmcLMb3Vq1DpSpa6jS4YNjAPc4YbDybbJhCwAn2z6qokLd","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmu85sn70rgn7l2qn8g","title":"ㅤ ","description":"","createdAt":1701700640,"updatedAt":1701752447,"user":{"id":"2sH6nOq1FkR59KcJnvqhBjTu7yd2","customId":"jp","name":"tsei","biography":"I'm 23, tsei.jp 👀 PyTorch 🐍 \u0026 Nextjs ⚛️ Fall Stuck Engineer 🕳 _@tsei.jp 💌","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/2sH6nOq1FkR59KcJnvqhBjTu7yd2.jpg","createdAt":1688895355082,"updatedAt":1721005521774},"codes":[{"id":"clmu884n70rgn7l2qn9g","type":0,"text":"\u003ccanvas id=\"id\" style=\"top: 0; left: 0; position: fixed\" /\u003e\n\u003cscript type=\"module\"\u003e\n import self from 'https://cdn.skypack.dev/glre@0.15.0'\n const frag = /* ts */ `\nprecision highp float;\n\n/**\n * utils from lygia\n */\nvec3 mod289(const in vec3 x) { return x - floor(x * (1. / 289.)) * 289.; }\nvec4 mod289(const in vec4 x) { return x - floor(x * (1. / 289.)) * 289.; }\nvec4 permute(const in vec4 v) { return mod289(((v * 34.0) + 1.0) * v); }\nvec4 taylorInvSqrt(in vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }\nfloat snoise(in vec3 v) {\n const vec2 C = vec2(1.0/6.0, 1.0/3.0) ;\n const vec4 D = vec4(0.0, 0.5, 1.0, 2.0);\n vec3 i = floor(v + dot(v, C.yyy) );\n vec3 x0 = v - i + dot(i, C.xxx) ;\n vec3 g = step(x0.yzx, x0.xyz);\n vec3 l = 1.0 - g;\n vec3 i1 = min( g.xyz, l.zxy );\n vec3 i2 = max( g.xyz, l.zxy );\n vec3 x1 = x0 - i1 + C.xxx;\n vec3 x2 = x0 - i2 + C.yyy;\n vec3 x3 = x0 - D.yyy;\n i = mod289(i);\n vec4 p = permute( permute( permute(\n i.z + vec4(0.0, i1.z, i2.z, 1.0 ))\n + i.y + vec4(0.0, i1.y, i2.y, 1.0 ))\n + i.x + vec4(0.0, i1.x, i2.x, 1.0 ));\n float n_ = 0.142857142857; // 1.0/7.0\n vec3 ns = n_ * D.wyz - D.xzx;\n vec4 j = p - 49.0 * floor(p * ns.z * ns.z); // mod(p,7*7)\n vec4 x_ = floor(j * ns.z);\n vec4 y_ = floor(j - 7.0 * x_ ); // mod(j,N)\n vec4 x = x_ *ns.x + ns.yyyy;\n vec4 y = y_ *ns.x + ns.yyyy;\n vec4 h = 1.0 - abs(x) - abs(y);\n vec4 b0 = vec4( x.xy, y.xy );\n vec4 b1 = vec4( x.zw, y.zw );\n vec4 s0 = floor(b0)*2.0 + 1.0;\n vec4 s1 = floor(b1)*2.0 + 1.0;\n vec4 sh = -step(h, vec4(0.0));\n vec4 a0 = b0.xzyw + s0.xzyw*sh.xxyy ;\n vec4 a1 = b1.xzyw + s1.xzyw*sh.zzww ;\n vec3 p0 = vec3(a0.xy,h.x);\n vec3 p1 = vec3(a0.zw,h.y);\n vec3 p2 = vec3(a1.xy,h.z);\n vec3 p3 = vec3(a1.zw,h.w);\n vec4 norm = taylorInvSqrt(vec4(dot(p0,p0), dot(p1,p1), dot(p2, p2), dot(p3,p3)));\n p0 *= norm.x;\n p1 *= norm.y;\n p2 *= norm.z;\n p3 *= norm.w;\n vec4 m = max(0.6 - vec4(dot(x0,x0), dot(x1,x1), dot(x2,x2), dot(x3,x3)), 0.0);\n m = m * m;\n return 42.0 * dot( m*m, vec4( dot(p0,x0), dot(p1,x1),\n dot(p2,x2), dot(p3,x3) ) );\n}\n\nfloat fbm(in vec3 pos) {\n float value = 0.0;\n float amplitud = 0.5;\n for (int i = 0; i \u003c 3; i++) {\n value += amplitud * snoise(pos);\n pos *= 2.0;\n amplitud *= 0.5;\n }\n return value;\n}\n\nmat2 rot(float a) {\n float c = cos(a);\n float s = sin(a);\n mat2 m = mat2(c, -s, s, c);\n return m;\n}\n\n#define opTwist(SDF, pos, k) (SDF(vec3(rot(pos.y * exp(abs(k))) * pos.xz, pos.y)) )\n\nuniform vec2 iResolution;\nuniform float iTime;\n\nfloat U_sphere_impl(vec3 pos) {\n float k = 20.0;\n float t = sin(iTime / 10.0) * 10.0;\n float sphereSize = 1.;\n return length(pos)\n - sphereSize\n - fbm(pos * 5.0 + t * 1.2)\n * cos(pos.x * k)\n * sin(pos.y * k + t * 5.0)\n * cos(pos.x * k)\n * sin(pos.z * k)\n * mix(0.05, 0.17, pow(pos.y, 2.0));\n}\n\n\nfloat U_sphere(vec3 pos) {\n float r = length(pos) - 1.0;\n if (r \u003e 0.01) return r;\n return opTwist(U_sphere_impl, pos, pos.y);\n}\n\nuniform mat4 Matrix;\n\nfloat map(vec3 pos) {\n pos = (Matrix * vec4(pos, 1.0)).xyz;\n return U_sphere(pos);\n}\n\nvec3 normal(vec3 pos, float d) {\n vec3 e = vec3(0.00001, 0.0, 0.0);\n return normalize(vec3(\n map(pos + e.xyz) - d,\n map(pos + e.zxy) - d,\n map(pos + e.yzx) - d\n ));\n}\n\nvec3 star(vec3 p, vec3 n) {\n vec3 dir = normalize(vec3(p + n));\n vec3 v = vec3(0.0);\n for (int r = 0; r \u003c 10; r++) {\n p = vec3(1.0) + dir;\n float a = 0.0;\n for (int i = 0; i \u003c 13; i++) {\n p = abs(p) / dot(p, p) - 0.5;\n a += length(p);\n }\n v += a * a * a * a;\n }\n return v * 0.00000001;\n}\n\nvec3 material(vec3 pos, vec3 nor) {\n vec3 light = vec3(.5);\n vec3 col = star(pos, nor);\n col *= dot(nor, light) * 10.0;\n col *= exp(length(col) * 10.0);\n return col;\n}\n\nvoid main() {\n vec3 e = vec3(0.00001, 0.0, 0.0);\n float x = gl_FragCoord.x - 0.5 * iResolution.x;\n float y = gl_FragCoord.y - 0.5 * iResolution.y;\n float z = max(iResolution.x, iResolution.y);\n vec3 eye = vec3(0.0, 0.0, 2.0);\n vec3 dir = vec3(x, y, -z);\n dir = normalize(dir);\n vec3 p = eye + dir;\n float d = map(p);\n\n for (int i = 0; i \u003c 100; i++) {\n if (d \u003c e.x) {\n vec3 nor = normal(p, d);\n vec3 col = material(p, nor);\n gl_FragColor = vec4(col, 1.0);\n return;\n }\n p += dir * d;\n if (p.z \u003c 0.0) break;\n d = map(p);\n }\n gl_FragColor = vec4(vec3(0.05), 1.0);\n}\n `\n document.addEventListener('DOMContentLoaded', setup)\n\n const { cos, sin } = Math;\n\n export const mat4 = (\n position = [0, 0, 0],\n rotation = [0, 0, 0],\n scale = [1, 1, 1],\n ret = []\n ) =\u003e {\n const [px, py, pz] = position.map((p) =\u003e -p)\n const [ax, ay, az] = rotation.map(cos)\n const [bx, by, bz] = rotation.map(sin)\n const [sx, sy, sz] = scale.map((s) =\u003e 1 / s)\n ret[0] = sx * az * ay\n ret[1] = sx * (az * by * bx - bz * ax)\n ret[2] = sx * (az * by * ax + bz * bx)\n ret[3] = 0\n ret[4] = sy * bz * ay\n ret[5] = sy * (bz * by * bx + az * ax)\n ret[6] = sy * (bz * by * ax - az * bx)\n ret[7] = 0\n ret[8] = sz * -by\n ret[9] = sz * ay * bx\n ret[10] = sz * ay * ax\n ret[11] = 0\n ret[12] = px\n ret[13] = py\n ret[14] = pz\n ret[15] = 1\n return ret\n }\n const position = [0, 0, 0];\n const rotation = [0, 0, 0];\n const scale = [1.15 ,1.15, 1.15];\n\n function setup() {\n self.el = document.getElementById('id')\n self.gl = self.el.getContext('webgl2')\n self.frag = frag\n self.init()\n self.resize()\n self.uniform('Matrix', mat4(position, rotation, scale), true)\n window.addEventListener('resize', self.resize)\n draw()\n }\n\n function draw() {\n rotation[0] += 0.001;\n requestAnimationFrame(draw)\n const t = performance.now() / 1000\n const x = 200 * Math.cos(t)\n const z = 200 * Math.sin(t)\n self.uniform('Matrix', mat4(position, rotation, scale), true)\n self.uniform({ eye: [x, 0, z] })\n self.render()\n self.viewport()\n self.clear()\n self.drawArrays()\n }\n\u003c/script\u003e\n","artId":"clmu85sn70rgn7l2qn8g","libraries":[]},{"id":"clmu884n70rgn7l2qna0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"clmu85sn70rgn7l2qn8g","libraries":[]},{"id":"clmu884n70rgn7l2qnag","type":2,"text":"","artId":"clmu85sn70rgn7l2qn8g","libraries":[]}],"like":0,"thumbFileName":"clmu85sn70rgn7l2qn8g.png","selectedThumbFileName":"clmu85sn70rgn7l2qn8g.png","thumbnailFileUrl":"","resourceFileName":"clmu85sn70rgn7l2qn8g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmfGvQdgM76dnP7fzP5nSKyPyfcPk6i3v7rGNFH686FLgf","resourceType":1,"metadataUrl":"","tags":[{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"clmujckn70rgn7l2qng0","title":"Merry christmas","description":"Merry christmas","createdAt":1701702073,"updatedAt":1701702915,"user":{"id":"A7wJdjP0oTaXIju5r7fnzF2VSvs2","customId":"LaybrownArt","name":"Ladybrown","biography":"crypto collage artist based in Japan\nhttps://twitter.com/LadybrownArt","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/A7wJdjP0oTaXIju5r7fnzF2VSvs2.jpg","createdAt":1701702062967,"updatedAt":1702805746259},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"clmujckn70rgn7l2qng0.png","thumbnailFileUrl":"","resourceFileName":"clmujckn70rgn7l2qng0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmcv1LvuC8imR6FTxnob98S75kxhQAHKaAmQ7fgp7v4KVR","resourceType":2,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cl0tss4n70rtc72b48vg","name":"yohas_art"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"clugmkkn70rgn7l2rra0.jpg","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1702693715,"updatedAt":1702693715},{"id":"chb8vpcn70rqrj9bq8lg","title":" CURATION FREE #2 Day 2","description":"Artworks displayed at open exhibition \"CURATION FREE\" at NEORT++. Check the page below for the detail. https://neort.io/challenge/ch4hvjsn70rhlpf0n460","user":{"id":"9Bqy2IWae5gAXfMSM4cHStP2dxP2","customId":"r21nomi","name":"NIINOMI","biography":"Creative Coder.\nI mainly use GLSL, WebGL.\nRecently, TouchDesigner, Houdini and Unity.\n\nhttps://niinomi.art","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/9Bqy2IWae5gAXfMSM4cHStP2dxP2.jpg","createdAt":1548912457000,"updatedAt":1735357681608},"arts":[{"id":"ch68abkn70rhlpf0neeg","title":"SCRATCH","description":"\"SCRATCH\" \ncode by E.C.H (Eiichi Ishii)","createdAt":1682736437,"updatedAt":1682742469,"user":{"id":"jpe3kEu3j3R7kPPVLmQx5L1cLuD2","customId":"ech","name":"えいいち(E.C.H) ","biography":"たぶんアーティスト。美術と音楽と映画と、写真、お酒が好きです。作品制作してます。クリエイティブコーディング #CreativeCoding #Processing #p5js #openFrameworks #SonicPi #PureData #TouchDesigner","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/jpe3kEu3j3R7kPPVLmQx5L1cLuD2.png","createdAt":1573355006000,"updatedAt":1733824346259},"codes":[{"id":"ch68adcn70rhlpf0nefg","type":0,"text":"","artId":"ch68abkn70rhlpf0neeg","libraries":[]},{"id":"ch68adcn70rhlpf0neg0","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"ch68abkn70rhlpf0neeg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch68adcn70rhlpf0negg","type":2,"text":"/**********************************\r\n * NEORT-Work172\r\n * SCRATCH\r\n * for CURATION_FREE_2\r\n * by E.C.H (Eiichi Ishii)\r\n **********************************/\r\n\r\nlet WW = 11012;\r\nlet WH = 1080;\r\nlet num = 2000;\r\nlet cnum = 16;\r\n\r\nfunction setup() {\r\n createCanvas(WW, WH);\r\n background(0);\r\n angleMode(DEGREES);\r\n colorMode(HSB, 360, 100, 100, 100);\r\n drawWork();\r\n}\r\n\r\nfunction draw() {\r\n if(frameCount%30==0){\r\n background(0);\r\n drawWork();\r\n }\r\n}\r\n\r\nfunction drawWork(){\r\n blendMode(SCREEN);\r\n for (let i = 0; i \u003c num; i++) {\r\n push();\r\n translate(random(WW), random(WH));\r\n rotate(random([0, 90, -90, 180]));\r\n scale(random([-1, 1]));\r\n rotate(random([0, 45]));\r\n\r\n let r = random(WH / 10, WH / 4);\r\n let v = int(random(4, 30));\r\n let lg = r / v;\r\n let z = random(1, r);\r\n stroke((int(random(cnum)) * 360) / cnum, 100, 100);\r\n strokeWeight(random(1, z / 20));\r\n noFill();\r\n beginShape();\r\n for (let lx = -r / 2; lx \u003c= r / 2; lx += lg) {\r\n curveVertex(lx, random(-z, z));\r\n }\r\n endShape();\r\n pop();\r\n }\r\n\r\n blendMode(BLEND);\r\n\tlet rw = WH/20;\r\n rakkan(rw/2.5, WH-rw/1.25, rw);\r\n}\r\n\r\nfunction rakkan(posx, posy, r) {\r\n push();\r\n translate(posx, posy);\r\n let nr = r / 2.5;\r\n let lr = r / 20;\r\n\r\n fill(\"#e2041b\");\r\n noStroke();\r\n rectMode(CENTER);\r\n rect(0, 0, r / 1.4, r * 1.5, r / 5);\r\n\r\n stroke(255);\r\n strokeWeight(lr / 1.5);\r\n noFill();\r\n\r\n push();\r\n translate(0, -nr);\r\n beginShape();\r\n vertex(nr / 2, -nr / 2);\r\n vertex(0, -nr / 2);\r\n vertex(-nr / 2, 0);\r\n vertex(0, nr / 2);\r\n vertex(nr / 2, nr / 2);\r\n endShape();\r\n\r\n line(-nr / 2, 0, nr / 2, 0);\r\n pop();\r\n\r\n push();\r\n translate(0, 0);\r\n beginShape();\r\n vertex(nr / 2, -nr / 2);\r\n vertex(0, -nr / 2);\r\n vertex(-nr / 2, 0);\r\n vertex(0, nr / 2);\r\n vertex(nr / 2, nr / 2);\r\n endShape();\r\n\r\n strokeWeight(lr / 3);\r\n line(nr / 2, -nr / 2, -nr / 2, nr / 2);\r\n pop();\r\n\r\n push();\r\n translate(0, nr);\r\n line(-nr / 2, -nr / 2, -nr / 2, nr / 2);\r\n line(nr / 2, -nr / 2, nr / 2, nr / 2);\r\n line(-nr / 2, 0, nr / 2, 0);\r\n\r\n strokeWeight(lr / 3);\r\n line(nr / 2, -nr / 2, -nr / 2, nr / 2);\r\n pop();\r\n pop();\r\n}\r\n\r\nfunction windowResized(){\r\n resizeCanvas(WW, WH);\r\n background(0);\r\n drawWork();\r\n}","artId":"ch68abkn70rhlpf0neeg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"ch68abkn70rhlpf0neeg.png","selectedThumbFileName":"ch68abkn70rhlpf0neeg.png","thumbnailFileUrl":"","resourceFileName":"ch68abkn70rhlpf0neeg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmTyCXdyVr1cNqmVr2dxKCwuvm3WryDQCpjFtHth7y2MnF","resourceType":1,"metadataUrl":"","tags":[{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch7126cn70rkl4ca3umg","title":"1 minute","description":"Divide the screen into any number of parts and invert black and white (darkness and light) in one minute.\n\nOperation: Press \"p\" key to pause","createdAt":1682837790,"updatedAt":1691964622,"user":{"id":"Kiz7VIowEkUqUJNuzjLKUPpLxqs1","customId":"Kiz7VIowEkUqUJNuzjLKUPpLxqs1","name":"3","biography":"https://www.drawinghell.com\nAlias:neort.io/@Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/Kiz7VIowEkUqUJNuzjLKUPpLxqs1.png","createdAt":1668916528748,"updatedAt":1735597596405},"codes":[{"id":"ch7127kn70rkl4ca3ung","type":0,"text":"","artId":"ch7126cn70rkl4ca3umg","libraries":[]},{"id":"ch7127kn70rkl4ca3uo0","type":1,"text":"* {\n margin: 0px;\n padding: 0px;\n}\n\nhtml, body {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background-color: #aaaaaa;\n}\n\ncanvas {\n margin: 0px auto;\n}","artId":"ch7126cn70rkl4ca3umg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch7127kn70rkl4ca3uog","type":2,"text":"(()=\u003e{\"use strict\";var n=document.createElement(\"canvas\");document.body.prepend(n);var e=n.getContext(\"2d\",{alpha:!1}),t=Date.now(),o=t,a=0,r=320,i=240,h=1,s=1,l=1,c=1,d=1,f=[],u=[],g=Math.random()\u003c.5,v=0,x=0,p=!1,M=!1,m=function(n){return void 0===n\u0026\u0026(n=1),Math.ceil((8*Math.random()+16*Math.pow(Math.random(),2)+40*Math.pow(Math.random(),4))*n)};function w(){for(r=window.innerWidth,i=window.innerHeight,n.width=r,n.height=i,h=1,s=1,l=10+Math.floor(110*Math.random()+880*Math.pow(Math.random(),16));h*s\u003cl;)h=m(Math.pow(r/i,.5)),s=m(Math.pow(i/r,.5));c=r/h,d=i/s,console.log(h+\" x \"+s,\"| \"+l+\" divided\")}function y(){f=[],u=[];for(var n=0;n\u003cs;n++)for(var e=0;e\u003ch;e++){var t=n*h+e;f[t]={indexs:[t],xys:[[e,n]]}}}function b(){for(var n=0;f.length+u.length\u003el;)if(n++,f.length?(k(),M\u0026\u0026f.length\u0026\u0026(E(),M=!1)):D(),n\u003eMath.max(h*s,100)){console.log(\"over!!\",h*s,l,f.length,u.length),w(),y(),b();break}}function k(){var n=Math.floor(Math.random()*f.length),e=f[n],t=S(e.indexs[0]),o=L(f);o.splice(n,1);for(var a=H(o),r=0,i=a.length;r\u003ci;r++){var h=a[r];if(t.length\u0026\u0026h.indexs.includes(t[0])||t.length\u003e1\u0026\u0026h.indexs.includes(t[1])||t.length\u003e2\u0026\u0026h.indexs.includes(t[2])||t.length\u003e3\u0026\u0026h.indexs.includes(t[3])){e.indexs.push(h.indexs[0]),e.xys.push(h.xys[0]),u.push(e),(f=a).splice(r,1),M=!1;break}}M=!0}function D(){for(var n=Math.floor(Math.random()*u.length),e=u[n],t=L(e.indexs),o=[],a=0,r=t.length;a\u003cr;a++){var i=S(t[a]);i.length\u0026\u0026i.forEach((function(n){t.includes(n)||o.includes(n)||o.push(n)}))}if(o.length){o=H(o);var h=L(u);h.splice(n,1),h=H(h);var s=0;for(r=o.length;s\u003cr;s++)for(var l=o[s],c=0,d=h.length;c\u003cd;c++){var f=h[c];if(f.indexs.includes(l)){e.indexs=e.indexs.concat(f.indexs),e.xys=e.xys.concat(f.xys),h.splice(c,1),u=[e].concat(h);break}}}}function E(){for(var n=Math.floor(Math.random()*f.length),e=f[n],t=S(e.indexs[0]),o=H(u),a=0,r=o.length;a\u003cr;a++){var i=o[a];if(t.length\u0026\u0026i.indexs.includes(t[0])||t.length\u003e1\u0026\u0026i.indexs.includes(t[1])||t.length\u003e2\u0026\u0026i.indexs.includes(t[2])||t.length\u003e3\u0026\u0026i.indexs.includes(t[3])){u.push(e),f.splice(n,1);break}}}function S(n){var e=[];return n%h!=0\u0026\u0026e.push(n-1),n%h!=h-1\u0026\u0026e.push(n+1),n-h\u003e=0\u0026\u0026e.push(n-h),n+h\u003ch*s\u0026\u0026e.push(n+h),H(e)}w(),y(),b();var T=H(u.concat(f));C(e,0,0,r,i,g?\"#fff\":\"#000\");var J=Date.now(),N=(6e4-(a=J-o))/l-(J-o);function O(){var n=0,h=T[v],s=g?\"#000\":\"#fff\";if(h?h.xys.forEach((function(n){C(e,n[0]*c-1,n[1]*d-1,c+2,d+2,s)})):console.log(\"no cur!\",v),++v\u003e=T.length){v=0,x++,g=!g,w(),C(e,0,0,r,i,g?\"#fff\":\"#000\"),y(),b(),T=H(u.concat(f));var M=Date.now();n=Math.max(6e4*x-(M-t),0),(a=M-o)\u003e=6e4\u0026\u0026(t=M+n,x=0,a=0)}setTimeout((function(){return function(n){var e=Date.now();n||(o=e);var t=(6e4-a)/l-(e-o);o=e+t,p||setTimeout((function(){return O()}),t)}(v)}),n)}function C(n,e,t,o,a,r){n.save(),n.fillStyle=r,n.beginPath(),n.rect(e,t,o,a),n.fill(),n.restore()}function H(n){for(var e,t=L(n),o=t.length-1;o\u003e0;o--){var a=Math.floor(Math.random()*(o+1));e=[t[a],t[o]],t[o]=e[0],t[a]=e[1]}return t}function L(n){return JSON.parse(JSON.stringify(n))}o=J+N,setTimeout((function(){return O()}),N),window.addEventListener(\"keypress\",(function(n){\"p\"===n.key\u0026\u0026((p=!p)||(o=Date.now(),O()))}))})();","artId":"ch7126cn70rkl4ca3umg","libraries":[]}],"like":0,"thumbFileName":"ch7126cn70rkl4ca3umg.png","selectedThumbFileName":"ch7126cn70rkl4ca3umg.png","thumbnailFileUrl":"","resourceFileName":"ch7126cn70rkl4ca3umg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYMmQSJF1X778jEuYxbfccJfQHso9Zs4VGyRkbhdgViZ8","resourceType":1,"metadataUrl":"","tags":[{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch712tkn70rkl4ca3ur0","title":"Generative Dinosaur(pattern) 2","description":"Another pattern version of \"Generative Dinosaur\" for CURATION_FREE_2 exhibition.\n\nOperation: Click or Press \"p\" key to pause","createdAt":1682837882,"updatedAt":1682838405,"user":{"id":"Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2","customId":"Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2","name":"katoten","biography":"drawinghell.com/cartoontengoku\nAlias:neort.io/@Kiz7VIowEkUqUJNuzjLKUPpLxqs1","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2.jpg","createdAt":1668691428920,"updatedAt":1715773742788},"codes":[{"id":"ch712ukn70rkl4ca3us0","type":0,"text":"","artId":"ch712tkn70rkl4ca3ur0","libraries":[]},{"id":"ch712ukn70rkl4ca3usg","type":1,"text":"* {\n margin: 0px;\n padding: 0px;\n}\n\nhtml, body {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background-color: #000;\n}\n\ncanvas {\n margin: 0px auto;\n cursor: pointer;\n}","artId":"ch712tkn70rkl4ca3ur0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch712ukn70rkl4ca3ut0","type":2,"text":"(()=\u003e{\"use strict\";var a={936:(a,s)=\u003e{Object.defineProperty(s,\"__esModule\",{value:!0}),s.allColors=void 0,s.allColors=[{rgb:[238,234,231],hsv:[25.7,0,.9],sat:14,val:703},{rgb:[236,224,223],hsv:[4.6,.1,.9],sat:26,val:683},{rgb:[239,227,216],hsv:[28.7,.1,.9],sat:46,val:682},{rgb:[240,222,219],hsv:[8.6,.1,.9],sat:42,val:681},{rgb:[243,221,215],hsv:[12.9,.1,1],sat:56,val:679},{rgb:[242,220,214],hsv:[12.9,.1,.9],sat:56,val:676},{rgb:[238,233,204],hsv:[51.2,.1,.9],sat:68,val:675},{rgb:[233,231,211],hsv:[54.5,.1,.9],sat:44,val:675},{rgb:[243,222,209],hsv:[22.9,.1,1],sat:68,val:674},{rgb:[233,231,209],hsv:[55,.1,.9],sat:48,val:673},{rgb:[221,228,224],hsv:[145.7,0,.9],sat:14,val:673},{rgb:[239,231,203],hsv:[46.7,.2,.9],sat:72,val:673},{rgb:[236,215,221],hsv:[342.9,.1,.9],sat:42,val:672},{rgb:[229,234,208],hsv:[71.5,.1,.9],sat:52,val:671},{rgb:[241,224,206],hsv:[30.9,.1,.9],sat:70,val:671},{rgb:[247,234,186],hsv:[47.2,.2,1],sat:122,val:667},{rgb:[241,225,200],hsv:[36.6,.2,.9],sat:82,val:666},{rgb:[213,230,222],hsv:[151.8,.1,.9],sat:34,val:665},{rgb:[216,226,223],hsv:[162,0,.9],sat:20,val:665},{rgb:[232,230,202],hsv:[56,.1,.9],sat:60,val:664},{rgb:[238,231,194],hsv:[50.5,.2,.9],sat:88,val:663},{rgb:[217,231,215],hsv:[112.5,.1,.9],sat:32,val:663},{rgb:[213,223,227],hsv:[197.1,.1,.9],sat:28,val:663},{rgb:[242,219,201],hsv:[26.3,.2,.9],sat:82,val:662},{rgb:[242,211,209],hsv:[3.6,.1,.9],sat:66,val:662},{rgb:[224,217,221],hsv:[325.7,0,.9],sat:14,val:662},{rgb:[237,236,189],hsv:[58.8,.2,.9],sat:96,val:662},{rgb:[252,234,173],hsv:[46.3,.3,1],sat:158,val:659},{rgb:[245,207,207],hsv:[0,.2,1],sat:76,val:659},{rgb:[244,216,199],hsv:[22.7,.2,1],sat:90,val:659},{rgb:[243,214,202],hsv:[17.6,.2,1],sat:82,val:659},{rgb:[242,225,191],hsv:[40,.2,.9],sat:102,val:658},{rgb:[213,219,226],hsv:[212.3,.1,.9],sat:26,val:658},{rgb:[239,232,187],hsv:[51.9,.2,.9],sat:104,val:658},{rgb:[242,220,195],hsv:[31.9,.2,.9],sat:94,val:657},{rgb:[219,213,224],hsv:[272.7,0,.9],sat:22,val:656},{rgb:[215,216,225],hsv:[234,0,.9],sat:20,val:656},{rgb:[244,214,198],hsv:[20.9,.2,1],sat:92,val:656},{rgb:[244,212,199],hsv:[17.3,.2,1],sat:90,val:655},{rgb:[239,214,199],hsv:[22.5,.2,.9],sat:80,val:652},{rgb:[248,206,198],hsv:[9.6,.2,1],sat:100,val:652},{rgb:[203,228,220],hsv:[160.8,.1,.9],sat:50,val:651},{rgb:[239,204,208],hsv:[353.1,.1,.9],sat:70,val:651},{rgb:[204,225,220],hsv:[165.7,.1,.9],sat:42,val:649},{rgb:[223,209,217],hsv:[325.7,.1,.9],sat:28,val:649},{rgb:[239,195,214],hsv:[334.1,.2,.9],sat:88,val:648},{rgb:[216,231,201],hsv:[90,.1,.9],sat:60,val:648},{rgb:[241,228,178],hsv:[47.6,.3,.9],sat:126,val:647},{rgb:[199,225,223],hsv:[175.4,.1,.9],sat:52,val:647},{rgb:[234,216,197],hsv:[30.8,.2,.9],sat:74,val:647},{rgb:[240,234,172],hsv:[54.7,.3,.9],sat:136,val:646},{rgb:[211,230,205],hsv:[105.6,.1,.9],sat:50,val:646},{rgb:[219,202,224],hsv:[286.4,.1,.9],sat:44,val:645},{rgb:[249,198,198],hsv:[0,.2,1],sat:102,val:645},{rgb:[204,213,227],hsv:[216.5,.1,.9],sat:46,val:644},{rgb:[203,213,228],hsv:[216,.1,.9],sat:50,val:644},{rgb:[254,225,164],hsv:[40.7,.4,1],sat:180,val:643},{rgb:[249,209,185],hsv:[22.5,.3,1],sat:128,val:643},{rgb:[224,226,193],hsv:[63.6,.1,.9],sat:66,val:643},{rgb:[202,218,222],hsv:[192,.1,.9],sat:40,val:642},{rgb:[245,212,184],hsv:[27.5,.2,1],sat:122,val:641},{rgb:[196,227,218],hsv:[162.6,.1,.9],sat:62,val:641},{rgb:[245,203,193],hsv:[11.5,.2,1],sat:104,val:641},{rgb:[234,215,190],hsv:[34.1,.2,.9],sat:88,val:639},{rgb:[244,235,159],hsv:[53.6,.3,1],sat:170,val:638},{rgb:[199,227,210],hsv:[143.6,.1,.9],sat:56,val:636},{rgb:[204,206,226],hsv:[234.5,.1,.9],sat:44,val:636},{rgb:[197,212,226],hsv:[209,.1,.9],sat:58,val:635},{rgb:[191,227,217],hsv:[163.3,.2,.9],sat:72,val:635},{rgb:[234,233,168],hsv:[59.1,.3,.9],sat:132,val:635},{rgb:[211,200,223],hsv:[268.7,.1,.9],sat:46,val:634},{rgb:[250,189,195],hsv:[354.1,.2,1],sat:122,val:634},{rgb:[240,184,210],hsv:[332.1,.2,.9],sat:112,val:634},{rgb:[255,226,153],hsv:[42.9,.4,1],sat:204,val:634},{rgb:[241,187,205],hsv:[340,.2,.9],sat:108,val:633},{rgb:[210,224,198],hsv:[92.3,.1,.9],sat:52,val:632},{rgb:[217,214,199],hsv:[50,.1,.9],sat:36,val:630},{rgb:[247,176,207],hsv:[333.8,.3,1],sat:142,val:630},{rgb:[230,203,197],hsv:[10.9,.1,.9],sat:66,val:630},{rgb:[197,206,226],hsv:[221.4,.1,.9],sat:58,val:629},{rgb:[203,230,195],hsv:[106.3,.2,.9],sat:70,val:628},{rgb:[255,221,152],hsv:[40.2,.4,1],sat:206,val:628},{rgb:[216,218,193],hsv:[64.8,.1,.9],sat:50,val:627},{rgb:[184,222,221],hsv:[178.4,.2,.9],sat:76,val:627},{rgb:[249,194,182],hsv:[10.7,.3,1],sat:134,val:625},{rgb:[206,195,224],hsv:[262.8,.1,.9],sat:58,val:625},{rgb:[208,197,218],hsv:[271.4,.1,.9],sat:42,val:623},{rgb:[224,188,210],hsv:[323.3,.2,.9],sat:72,val:622},{rgb:[253,227,140],hsv:[46.2,.4,1],sat:226,val:620},{rgb:[255,216,149],hsv:[37.9,.4,1],sat:212,val:620},{rgb:[246,165,208],hsv:[328.1,.3,1],sat:162,val:619},{rgb:[254,192,173],hsv:[14.1,.3,1],sat:162,val:619},{rgb:[248,184,187],hsv:[357.2,.3,1],sat:128,val:619},{rgb:[186,225,206],hsv:[150.8,.2,.9],sat:78,val:617},{rgb:[252,188,177],hsv:[8.8,.3,1],sat:150,val:617},{rgb:[243,233,141],hsv:[54.1,.4,1],sat:204,val:617},{rgb:[234,238,144],hsv:[62.6,.4,.9],sat:188,val:616},{rgb:[222,219,175],hsv:[56.2,.2,.9],sat:94,val:616},{rgb:[244,225,146],hsv:[48.4,.4,1],sat:196,val:615},{rgb:[181,207,227],hsv:[206.1,.2,.9],sat:92,val:615},{rgb:[203,189,222],hsv:[265.5,.1,.9],sat:66,val:614},{rgb:[244,175,194],hsv:[343.5,.3,1],sat:138,val:613},{rgb:[248,211,153],hsv:[36.6,.4,1],sat:190,val:612},{rgb:[173,225,213],hsv:[166.2,.2,.9],sat:104,val:611},{rgb:[212,185,214],hsv:[295.9,.1,.8],sat:58,val:611},{rgb:[255,200,156],hsv:[26.7,.4,1],sat:198,val:611},{rgb:[253,180,177],hsv:[2.4,.3,1],sat:152,val:610},{rgb:[200,204,205],hsv:[192,0,.8],sat:10,val:609},{rgb:[189,211,208],hsv:[171.8,.1,.8],sat:44,val:608},{rgb:[240,182,186],hsv:[355.9,.2,.9],sat:116,val:608},{rgb:[255,182,169],hsv:[9.1,.3,1],sat:172,val:606},{rgb:[179,210,215],hsv:[188.3,.2,.8],sat:72,val:604},{rgb:[241,235,128],hsv:[56.8,.5,.9],sat:226,val:604},{rgb:[255,173,175],hsv:[358.5,.3,1],sat:164,val:603},{rgb:[237,188,176],hsv:[11.8,.3,.9],sat:122,val:601},{rgb:[252,163,185],hsv:[345.2,.4,1],sat:178,val:600},{rgb:[224,229,146],hsv:[63.6,.4,.9],sat:166,val:599},{rgb:[255,175,168],hsv:[4.8,.3,1],sat:174,val:598},{rgb:[245,164,188],hsv:[342.2,.3,1],sat:162,val:597},{rgb:[241,163,193],hsv:[336.9,.3,.9],sat:156,val:597},{rgb:[197,180,220],hsv:[265.5,.2,.9],sat:80,val:597},{rgb:[252,207,137],hsv:[36.5,.5,1],sat:230,val:596},{rgb:[215,233,148],hsv:[72.7,.4,.9],sat:170,val:596},{rgb:[252,197,147],hsv:[28.6,.4,1],sat:210,val:596},{rgb:[217,231,147],hsv:[70,.4,.9],sat:168,val:595},{rgb:[210,182,202],hsv:[317.1,.1,.8],sat:56,val:594},{rgb:[250,213,130],hsv:[41.5,.5,1],sat:240,val:593},{rgb:[244,231,118],hsv:[53.8,.5,1],sat:252,val:593},{rgb:[254,182,156],hsv:[15.9,.4,1],sat:196,val:592},{rgb:[207,188,197],hsv:[331.6,.1,.8],sat:38,val:592},{rgb:[190,184,218],hsv:[250.6,.2,.9],sat:68,val:592},{rgb:[248,156,185],hsv:[341.1,.4,1],sat:184,val:589},{rgb:[164,212,213],hsv:[181.2,.2,.8],sat:98,val:589},{rgb:[197,176,215],hsv:[272.3,.2,.8],sat:78,val:588},{rgb:[247,219,122],hsv:[46.6,.5,1],sat:250,val:588},{rgb:[247,221,119],hsv:[47.8,.5,1],sat:256,val:587},{rgb:[219,234,133],hsv:[68.9,.4,.9],sat:202,val:586},{rgb:[217,173,196],hsv:[328.6,.2,.9],sat:88,val:586},{rgb:[243,247,95],hsv:[61.6,.6,1],sat:304,val:585},{rgb:[197,173,215],hsv:[274.3,.2,.8],sat:84,val:585},{rgb:[255,188,141],hsv:[24.7,.4,1],sat:228,val:584},{rgb:[255,181,147],hsv:[18.9,.4,1],sat:216,val:583},{rgb:[195,164,224],hsv:[271,.3,.9],sat:120,val:583},{rgb:[232,184,166],hsv:[16.4,.3,.9],sat:132,val:582},{rgb:[201,196,183],hsv:[43.3,.1,.8],sat:36,val:580},{rgb:[255,210,114],hsv:[40.9,.6,1],sat:282,val:579},{rgb:[169,206,204],hsv:[176.8,.2,.8],sat:74,val:579},{rgb:[232,169,178],hsv:[351.4,.3,.9],sat:126,val:579},{rgb:[183,227,168],hsv:[104.7,.3,.9],sat:118,val:578},{rgb:[247,152,179],hsv:[342.9,.4,1],sat:190,val:578},{rgb:[149,208,221],hsv:[190.8,.3,.9],sat:144,val:578},{rgb:[253,172,152],hsv:[11.9,.4,1],sat:202,val:577},{rgb:[255,166,156],hsv:[6.1,.4,1],sat:198,val:577},{rgb:[248,142,187],hsv:[334.5,.4,1],sat:212,val:577},{rgb:[224,228,124],hsv:[62.3,.5,.9],sat:208,val:576},{rgb:[252,154,170],hsv:[350.2,.4,1],sat:196,val:576},{rgb:[252,191,133],hsv:[29.2,.5,1],sat:238,val:576},{rgb:[255,185,135],hsv:[25,.5,1],sat:240,val:575},{rgb:[202,228,144],hsv:[78.6,.4,.9],sat:168,val:574},{rgb:[180,225,168],hsv:[107.4,.3,.9],sat:114,val:573},{rgb:[138,218,216],hsv:[178.5,.4,.9],sat:160,val:572},{rgb:[148,212,212],hsv:[180,.3,.8],sat:128,val:572},{rgb:[147,207,218],hsv:[189.3,.3,.9],sat:142,val:572},{rgb:[248,224,100],hsv:[50.3,.6,1],sat:296,val:572},{rgb:[243,170,155],hsv:[10.2,.4,1],sat:176,val:568},{rgb:[255,159,154],hsv:[3,.4,1],sat:202,val:568},{rgb:[141,210,217],hsv:[185.5,.4,.9],sat:152,val:568},{rgb:[177,219,171],hsv:[112.5,.2,.9],sat:96,val:567},{rgb:[255,184,128],hsv:[26.5,.5,1],sat:254,val:567},{rgb:[214,191,162],hsv:[33.5,.2,.8],sat:104,val:567},{rgb:[159,187,220],hsv:[212.5,.3,.9],sat:122,val:566},{rgb:[171,215,180],hsv:[132.3,.2,.8],sat:88,val:566},{rgb:[255,179,130],hsv:[23.5,.5,1],sat:250,val:564},{rgb:[188,196,180],hsv:[90,.1,.8],sat:32,val:564},{rgb:[255,111,197],hsv:[324.2,.6,1],sat:288,val:563},{rgb:[180,164,219],hsv:[257.5,.3,.9],sat:110,val:563},{rgb:[246,146,171],hsv:[345,.4,1],sat:200,val:563},{rgb:[197,166,200],hsv:[294.7,.2,.8],sat:68,val:563},{rgb:[228,210,124],hsv:[49.6,.5,.9],sat:208,val:562},{rgb:[153,193,216],hsv:[201.9,.3,.8],sat:126,val:562},{rgb:[255,145,162],hsv:[350.7,.4,1],sat:220,val:562},{rgb:[255,167,140],hsv:[14.1,.5,1],sat:230,val:562},{rgb:[203,165,193],hsv:[315.8,.2,.8],sat:76,val:561},{rgb:[212,176,172],hsv:[6,.2,.8],sat:80,val:560},{rgb:[197,160,203],hsv:[291.6,.2,.8],sat:86,val:560},{rgb:[253,203,103],hsv:[40,.6,1],sat:300,val:559},{rgb:[210,206,143],hsv:[56.4,.3,.8],sat:134,val:559},{rgb:[225,160,172],hsv:[348.9,.3,.9],sat:130,val:557},{rgb:[201,229,127],hsv:[76.5,.4,.9],sat:204,val:557},{rgb:[139,194,224],hsv:[201.2,.4,.9],sat:170,val:557},{rgb:[133,216,207],hsv:[173.5,.4,.8],sat:166,val:556},{rgb:[243,237,76],hsv:[57.8,.7,1],sat:334,val:556},{rgb:[255,99,201],hsv:[320.8,.6,1],sat:312,val:555},{rgb:[192,166,196],hsv:[292,.2,.8],sat:60,val:554},{rgb:[193,222,139],hsv:[81,.4,.9],sat:166,val:554},{rgb:[255,138,161],hsv:[348.2,.5,1],sat:234,val:554},{rgb:[244,143,167],hsv:[345.7,.4,1],sat:202,val:554},{rgb:[165,215,174],hsv:[130.8,.2,.8],sat:100,val:554},{rgb:[158,203,192],hsv:[165.3,.2,.8],sat:90,val:553},{rgb:[250,216,86],hsv:[47.6,.7,1],sat:328,val:552},{rgb:[241,150,160],hsv:[353.4,.4,.9],sat:182,val:551},{rgb:[245,131,174],hsv:[337.4,.5,1],sat:228,val:550},{rgb:[255,193,102],hsv:[35.7,.6,1],sat:306,val:550},{rgb:[189,185,176],hsv:[41.5,.1,.7],sat:26,val:550},{rgb:[145,183,222],hsv:[210.4,.3,.9],sat:154,val:550},{rgb:[255,184,111],hsv:[30.4,.6,1],sat:288,val:550},{rgb:[189,214,145],hsv:[81.7,.3,.8],sat:138,val:548},{rgb:[193,157,198],hsv:[292.7,.2,.8],sat:82,val:548},{rgb:[209,153,185],hsv:[325.7,.3,.8],sat:112,val:547},{rgb:[163,222,162],hsv:[119,.3,.9],sat:120,val:547},{rgb:[207,145,194],hsv:[312.6,.3,.8],sat:124,val:546},{rgb:[123,206,217],hsv:[187,.4,.9],sat:188,val:546},{rgb:[193,139,213],hsv:[283.8,.3,.8],sat:148,val:545},{rgb:[181,183,181],hsv:[120,0,.7],sat:4,val:545},{rgb:[255,106,184],hsv:[328.6,.6,1],sat:298,val:545},{rgb:[255,154,135],hsv:[9.5,.5,1],sat:240,val:544},{rgb:[255,157,132],hsv:[12.2,.5,1],sat:246,val:544},{rgb:[184,186,173],hsv:[69.2,.1,.7],sat:26,val:543},{rgb:[125,216,202],hsv:[170.8,.4,.8],sat:182,val:543},{rgb:[255,172,116],hsv:[24.2,.5,1],sat:278,val:543},{rgb:[164,173,206],hsv:[227.1,.2,.8],sat:84,val:543},{rgb:[255,150,138],hsv:[6.2,.5,1],sat:234,val:543},{rgb:[172,219,152],hsv:[102.1,.3,.9],sat:134,val:543},{rgb:[255,116,171],hsv:[336.3,.5,1],sat:278,val:542},{rgb:[132,186,223],hsv:[204.4,.4,.9],sat:182,val:541},{rgb:[209,212,120],hsv:[62,.4,.8],sat:184,val:541},{rgb:[126,197,218],hsv:[193.7,.4,.9],sat:184,val:541},{rgb:[249,228,63],hsv:[53.2,.7,1],sat:372,val:540},{rgb:[246,230,63],hsv:[54.8,.7,1],sat:366,val:539},{rgb:[131,197,211],hsv:[190.5,.4,.8],sat:160,val:539},{rgb:[216,155,168],hsv:[347.2,.3,.8],sat:122,val:539},{rgb:[180,213,145],hsv:[89.1,.3,.8],sat:136,val:538},{rgb:[113,212,213],hsv:[180.6,.5,.8],sat:200,val:538},{rgb:[232,200,106],hsv:[44.8,.5,.9],sat:252,val:538},{rgb:[162,185,191],hsv:[192.4,.2,.7],sat:58,val:538},{rgb:[175,151,212],hsv:[263.6,.3,.8],sat:122,val:538},{rgb:[244,231,63],hsv:[55.7,.7,1],sat:362,val:538},{rgb:[168,164,206],hsv:[245.7,.2,.8],sat:84,val:538},{rgb:[240,112,185],hsv:[325.8,.5,.9],sat:256,val:537},{rgb:[220,224,93],hsv:[61.8,.6,.9],sat:262,val:537},{rgb:[148,196,193],hsv:[176.3,.2,.8],sat:96,val:537},{rgb:[163,167,207],hsv:[234.5,.2,.8],sat:88,val:537},{rgb:[126,187,223],hsv:[202.3,.4,.9],sat:194,val:536},{rgb:[187,168,181],hsv:[318.9,.1,.7],sat:38,val:536},{rgb:[115,216,205],hsv:[173.5,.5,.8],sat:202,val:536},{rgb:[136,179,221],hsv:[209.6,.4,.9],sat:170,val:536},{rgb:[147,210,178],hsv:[149.5,.3,.8],sat:126,val:535},{rgb:[193,221,120],hsv:[76.6,.5,.9],sat:202,val:534},{rgb:[145,187,201],hsv:[195,.3,.8],sat:112,val:533},{rgb:[226,209,98],hsv:[52,.6,.9],sat:256,val:533},{rgb:[174,178,181],hsv:[205.7,0,.7],sat:14,val:533},{rgb:[222,123,186],hsv:[321.8,.4,.9],sat:198,val:531},{rgb:[122,203,206],hsv:[182.1,.4,.8],sat:168,val:531},{rgb:[201,210,119],hsv:[65.9,.4,.8],sat:182,val:530},{rgb:[214,149,167],hsv:[343.4,.3,.8],sat:130,val:530},{rgb:[173,185,172],hsv:[115.4,.1,.7],sat:26,val:530},{rgb:[206,133,191],hsv:[312.3,.4,.8],sat:146,val:530},{rgb:[203,186,141],hsv:[43.5,.3,.8],sat:124,val:530},{rgb:[249,130,151],hsv:[349.4,.5,1],sat:238,val:530},{rgb:[207,167,155],hsv:[13.8,.3,.8],sat:104,val:529},{rgb:[207,167,155],hsv:[13.8,.3,.8],sat:104,val:529},{rgb:[226,136,167],hsv:[339.3,.4,.9],sat:180,val:529},{rgb:[134,190,205],hsv:[192.7,.3,.8],sat:142,val:529},{rgb:[238,133,157],hsv:[346.3,.4,.9],sat:210,val:528},{rgb:[193,167,168],hsv:[357.7,.1,.8],sat:52,val:528},{rgb:[182,183,163],hsv:[63,.1,.7],sat:40,val:528},{rgb:[255,120,153],hsv:[345.3,.5,1],sat:270,val:528},{rgb:[200,179,148],hsv:[35.8,.3,.8],sat:104,val:527},{rgb:[111,213,203],hsv:[174.1,.5,.8],sat:204,val:527},{rgb:[177,132,217],hsv:[271.8,.4,.9],sat:170,val:526},{rgb:[241,146,139],hsv:[4.1,.4,.9],sat:204,val:526},{rgb:[211,204,111],hsv:[55.8,.5,.8],sat:200,val:526},{rgb:[248,119,158],hsv:[341.9,.5,1],sat:258,val:525},{rgb:[158,179,188],hsv:[198,.2,.7],sat:60,val:525},{rgb:[169,146,209],hsv:[261.9,.3,.8],sat:126,val:524},{rgb:[204,150,170],hsv:[337.8,.3,.8],sat:108,val:524},{rgb:[158,182,184],hsv:[184.6,.1,.7],sat:52,val:524},{rgb:[171,170,182],hsv:[245,.1,.7],sat:24,val:523},{rgb:[157,184,181],hsv:[173.3,.1,.7],sat:54,val:522},{rgb:[195,170,157],hsv:[20.5,.2,.8],sat:76,val:522},{rgb:[181,161,180],hsv:[303,.1,.7],sat:40,val:522},{rgb:[185,161,175],hsv:[325,.1,.7],sat:48,val:521},{rgb:[218,115,188],hsv:[317.5,.5,.9],sat:206,val:521},{rgb:[154,214,153],hsv:[119,.3,.8],sat:122,val:521},{rgb:[112,187,221],hsv:[198.7,.5,.9],sat:218,val:520},{rgb:[241,111,168],hsv:[333.7,.5,.9],sat:260,val:520},{rgb:[195,220,104],hsv:[72.9,.5,.9],sat:232,val:519},{rgb:[185,166,168],hsv:[353.7,.1,.7],sat:38,val:519},{rgb:[198,187,133],hsv:[49.8,.3,.8],sat:130,val:518},{rgb:[116,179,223],hsv:[204.7,.5,.9],sat:214,val:518},{rgb:[254,207,57],hsv:[45.7,.8,1],sat:394,val:518},{rgb:[118,194,206],hsv:[188.2,.4,.8],sat:176,val:518},{rgb:[255,149,114],hsv:[14.9,.6,1],sat:282,val:518},{rgb:[249,115,153],hsv:[343,.5,1],sat:268,val:517},{rgb:[154,185,178],hsv:[166.5,.2,.7],sat:62,val:517},{rgb:[220,223,74],hsv:[61.2,.7,.9],sat:298,val:517},{rgb:[163,169,185],hsv:[223.6,.1,.7],sat:44,val:517},{rgb:[236,105,176],hsv:[327.5,.6,.9],sat:262,val:517},{rgb:[213,150,154],hsv:[356.2,.3,.8],sat:126,val:517},{rgb:[231,200,85],hsv:[47.3,.6,.9],sat:292,val:516},{rgb:[224,128,164],hsv:[337.5,.4,.9],sat:192,val:516},{rgb:[172,159,185],hsv:[270,.1,.7],sat:52,val:516},{rgb:[255,143,118],hsv:[10.9,.5,1],sat:274,val:516},{rgb:[255,154,106],hsv:[19.3,.6,1],sat:298,val:515},{rgb:[236,183,96],hsv:[37.3,.6,.9],sat:280,val:515},{rgb:[185,139,191],hsv:[293.1,.3,.7],sat:104,val:515},{rgb:[182,182,151],hsv:[60,.2,.7],sat:62,val:515},{rgb:[101,212,201],hsv:[174.1,.5,.8],sat:222,val:514},{rgb:[156,182,176],hsv:[166.2,.1,.7],sat:52,val:514},{rgb:[138,209,166],hsv:[143.7,.3,.8],sat:142,val:513},{rgb:[143,219,151],hsv:[126.3,.3,.9],sat:152,val:513},{rgb:[103,213,197],hsv:[171.3,.5,.8],sat:220,val:513},{rgb:[162,174,177],hsv:[192,.1,.7],sat:30,val:513},{rgb:[186,175,151],hsv:[41.1,.2,.7],sat:70,val:512},{rgb:[103,187,222],hsv:[197.6,.5,.9],sat:238,val:512},{rgb:[128,203,181],hsv:[162.4,.4,.8],sat:150,val:512},{rgb:[130,192,190],hsv:[178.1,.3,.8],sat:124,val:512},{rgb:[255,190,67],hsv:[39.3,.7,1],sat:376,val:512},{rgb:[210,146,156],hsv:[350.6,.3,.8],sat:128,val:512},{rgb:[225,107,179],hsv:[323.4,.5,.9],sat:236,val:511},{rgb:[181,167,163],hsv:[13.3,.1,.7],sat:36,val:511},{rgb:[194,150,167],hsv:[336.8,.2,.8],sat:88,val:511},{rgb:[131,193,186],hsv:[173.2,.3,.8],sat:124,val:510},{rgb:[167,178,164],hsv:[107.1,.1,.7],sat:28,val:509},{rgb:[107,217,185],hsv:[162.5,.5,.9],sat:220,val:509},{rgb:[176,155,178],hsv:[294.8,.1,.7],sat:46,val:509},{rgb:[195,145,169],hsv:[331.2,.3,.8],sat:100,val:509},{rgb:[233,109,167],hsv:[331.9,.5,.9],sat:248,val:509},{rgb:[248,187,73],hsv:[39.1,.7,1],sat:350,val:508},{rgb:[229,126,153],hsv:[344.3,.4,.9],sat:206,val:508},{rgb:[229,144,135],hsv:[5.7,.4,.9],sat:188,val:508},{rgb:[147,207,154],hsv:[127,.3,.8],sat:120,val:508},{rgb:[130,183,195],hsv:[191.1,.3,.8],sat:130,val:508},{rgb:[236,122,150],hsv:[345.3,.5,.9],sat:228,val:508},{rgb:[131,155,221],hsv:[224,.4,.9],sat:180,val:507},{rgb:[182,203,121],hsv:[75.4,.4,.8],sat:164,val:506},{rgb:[238,120,147],hsv:[346.3,.5,.9],sat:236,val:505},{rgb:[103,196,206],hsv:[185.8,.5,.8],sat:206,val:505},{rgb:[255,183,66],hsv:[37.1,.7,1],sat:378,val:504},{rgb:[255,194,55],hsv:[41.7,.8,1],sat:400,val:504},{rgb:[147,161,196],hsv:[222.9,.3,.8],sat:98,val:504},{rgb:[255,189,59],hsv:[39.8,.8,1],sat:392,val:503},{rgb:[163,146,194],hsv:[261.3,.2,.8],sat:96,val:503},{rgb:[255,175,73],hsv:[33.6,.7,1],sat:364,val:503},{rgb:[166,136,200],hsv:[268.1,.3,.8],sat:128,val:502},{rgb:[255,198,49],hsv:[43.4,.8,1],sat:412,val:502},{rgb:[255,114,132],hsv:[352.3,.6,1],sat:282,val:501},{rgb:[212,95,194],hsv:[309.2,.6,.8],sat:234,val:501},{rgb:[200,135,166],hsv:[331.4,.3,.8],sat:130,val:501},{rgb:[190,223,88],hsv:[74.7,.6,.9],sat:270,val:501},{rgb:[194,108,199],hsv:[296.7,.5,.8],sat:182,val:501},{rgb:[186,144,171],hsv:[321.4,.2,.7],sat:84,val:501},{rgb:[255,195,50],hsv:[42.4,.8,1],sat:410,val:500},{rgb:[255,132,112],hsv:[8.4,.6,1],sat:286,val:499},{rgb:[90,194,215],hsv:[190.1,.6,.8],sat:250,val:499},{rgb:[150,134,215],hsv:[251.9,.4,.8],sat:162,val:499},{rgb:[255,189,55],hsv:[40.2,.8,1],sat:400,val:499},{rgb:[170,139,190],hsv:[276.5,.3,.7],sat:102,val:499},{rgb:[125,195,178],hsv:[165.4,.4,.8],sat:140,val:498},{rgb:[255,179,64],hsv:[36.1,.7,1],sat:382,val:498},{rgb:[156,183,159],hsv:[126.7,.1,.7],sat:54,val:498},{rgb:[214,103,180],hsv:[318.4,.5,.8],sat:222,val:497},{rgb:[215,224,57],hsv:[63.2,.7,.9],sat:334,val:496},{rgb:[161,151,184],hsv:[258.2,.2,.7],sat:66,val:496},{rgb:[239,125,131],hsv:[356.8,.5,.9],sat:228,val:495},{rgb:[204,165,126],hsv:[30,.4,.8],sat:156,val:495},{rgb:[189,125,181],hsv:[307.5,.3,.7],sat:128,val:495},{rgb:[134,143,218],hsv:[233.6,.4,.9],sat:168,val:495},{rgb:[139,174,182],hsv:[191.2,.2,.7],sat:86,val:495},{rgb:[216,116,163],hsv:[331.8,.5,.8],sat:200,val:495},{rgb:[211,192,92],hsv:[50.4,.6,.8],sat:238,val:495},{rgb:[189,161,144],hsv:[22.7,.2,.7],sat:90,val:494},{rgb:[151,209,134],hsv:[106.4,.4,.8],sat:150,val:494},{rgb:[211,130,152],hsv:[343.7,.4,.8],sat:162,val:493},{rgb:[249,225,18],hsv:[53.8,.9,1],sat:462,val:492},{rgb:[255,174,63],hsv:[34.7,.8,1],sat:384,val:492},{rgb:[192,144,156],hsv:[345,.3,.8],sat:96,val:492},{rgb:[105,168,219],hsv:[206.8,.5,.9],sat:228,val:492},{rgb:[198,171,122],hsv:[38.7,.4,.8],sat:152,val:491},{rgb:[107,165,219],hsv:[208.9,.5,.9],sat:224,val:491},{rgb:[255,210,26],hsv:[48.2,.9,1],sat:458,val:491},{rgb:[214,195,81],hsv:[51.4,.6,.8],sat:266,val:490},{rgb:[110,159,221],hsv:[213.5,.5,.9],sat:222,val:490},{rgb:[245,182,63],hsv:[39.2,.7,1],sat:364,val:490},{rgb:[255,188,46],hsv:[40.8,.8,1],sat:418,val:489},{rgb:[173,214,102],hsv:[82,.5,.8],sat:224,val:489},{rgb:[209,172,108],hsv:[38,.5,.8],sat:202,val:489},{rgb:[255,176,58],hsv:[35.9,.8,1],sat:394,val:489},{rgb:[254,204,31],hsv:[46.5,.9,1],sat:446,val:489},{rgb:[115,156,217],hsv:[215.9,.5,.9],sat:204,val:488},{rgb:[148,218,122],hsv:[103.7,.4,.9],sat:192,val:488},{rgb:[96,172,220],hsv:[203.2,.6,.9],sat:248,val:488},{rgb:[201,181,106],hsv:[47.4,.5,.8],sat:190,val:488},{rgb:[141,167,180],hsv:[200,.2,.7],sat:78,val:488},{rgb:[115,195,177],hsv:[166.5,.4,.8],sat:160,val:487},{rgb:[73,202,212],hsv:[184.3,.7,.8],sat:278,val:487},{rgb:[154,181,151],hsv:[114,.2,.7],sat:60,val:486},{rgb:[229,120,137],hsv:[350.6,.5,.9],sat:218,val:486},{rgb:[220,182,84],hsv:[43.2,.6,.9],sat:272,val:486},{rgb:[182,162,141],hsv:[30.7,.2,.7],sat:82,val:485},{rgb:[174,195,116],hsv:[75.9,.4,.8],sat:158,val:485},{rgb:[98,193,194],hsv:[180.6,.5,.8],sat:192,val:485},{rgb:[100,172,212],hsv:[201.4,.5,.8],sat:224,val:484},{rgb:[255,176,53],hsv:[36.5,.8,1],sat:404,val:484},{rgb:[167,148,169],hsv:[294.3,.1,.7],sat:42,val:484},{rgb:[255,167,62],hsv:[32.6,.8,1],sat:386,val:484},{rgb:[181,152,151],hsv:[2,.2,.7],sat:60,val:484},{rgb:[227,101,156],hsv:[333.8,.6,.9],sat:252,val:484},{rgb:[253,125,105],hsv:[8.1,.6,1],sat:296,val:483},{rgb:[123,201,159],hsv:[147.7,.4,.8],sat:156,val:483},{rgb:[255,177,51],hsv:[37.1,.8,1],sat:408,val:483},{rgb:[230,187,66],hsv:[44.3,.7,.9],sat:328,val:483},{rgb:[176,187,119],hsv:[69.7,.4,.7],sat:136,val:482},{rgb:[174,160,148],hsv:[27.7,.1,.7],sat:52,val:482},{rgb:[190,154,138],hsv:[18.5,.3,.7],sat:104,val:482},{rgb:[180,145,157],hsv:[339.4,.2,.7],sat:70,val:482},{rgb:[204,151,127],hsv:[18.7,.4,.8],sat:154,val:482},{rgb:[187,199,95],hsv:[66.9,.5,.8],sat:208,val:481},{rgb:[81,177,223],hsv:[199.4,.6,.9],sat:284,val:481},{rgb:[149,163,169],hsv:[198,.1,.7],sat:40,val:481},{rgb:[101,159,221],hsv:[211,.5,.9],sat:240,val:481},{rgb:[159,161,160],hsv:[150,0,.6],sat:4,val:480},{rgb:[255,145,80],hsv:[22.3,.7,1],sat:350,val:480},{rgb:[255,199,26],hsv:[45.3,.9,1],sat:458,val:480},{rgb:[89,203,187],hsv:[171.6,.6,.8],sat:228,val:479},{rgb:[255,155,69],hsv:[27.7,.7,1],sat:372,val:479},{rgb:[69,186,224],hsv:[194.7,.7,.9],sat:310,val:479},{rgb:[207,141,131],hsv:[7.9,.4,.8],sat:152,val:479},{rgb:[255,135,89],hsv:[16.6,.7,1],sat:332,val:479},{rgb:[198,141,138],hsv:[3,.3,.8],sat:120,val:477},{rgb:[250,227,0],hsv:[54.5,1,1],sat:500,val:477},{rgb:[217,127,132],hsv:[356.7,.4,.9],sat:180,val:476},{rgb:[225,101,150],hsv:[336.3,.6,.9],sat:248,val:476},{rgb:[252,224,0],hsv:[53.3,1,1],sat:504,val:476},{rgb:[252,224,0],hsv:[53.3,1,1],sat:504,val:476},{rgb:[209,135,132],hsv:[2.3,.4,.8],sat:154,val:476},{rgb:[255,152,69],hsv:[26.8,.7,1],sat:372,val:476},{rgb:[175,159,142],hsv:[30.9,.2,.7],sat:66,val:476},{rgb:[207,154,114],hsv:[25.8,.4,.8],sat:186,val:475},{rgb:[109,151,215],hsv:[216.2,.5,.8],sat:212,val:475},{rgb:[227,85,162],hsv:[327.5,.6,.9],sat:284,val:474},{rgb:[255,137,82],hsv:[19.1,.7,1],sat:346,val:474},{rgb:[250,223,0],hsv:[53.5,1,1],sat:500,val:473},{rgb:[162,159,152],hsv:[42,.1,.6],sat:20,val:473},{rgb:[164,169,139],hsv:[70,.2,.7],sat:60,val:472},{rgb:[171,129,172],hsv:[298.6,.3,.7],sat:86,val:472},{rgb:[206,146,120],hsv:[18.1,.4,.8],sat:172,val:472},{rgb:[221,102,149],hsv:[336.3,.5,.9],sat:238,val:472},{rgb:[211,150,111],hsv:[23.4,.5,.8],sat:200,val:472},{rgb:[249,94,129],hsv:[346.5,.6,1],sat:310,val:472},{rgb:[173,151,148],hsv:[7.2,.1,.7],sat:50,val:472},{rgb:[115,214,142],hsv:[136.4,.5,.8],sat:198,val:471},{rgb:[182,163,126],hsv:[39.6,.3,.7],sat:112,val:471},{rgb:[224,220,27],hsv:[58.8,.9,.9],sat:394,val:471},{rgb:[255,168,48],hsv:[34.8,.8,1],sat:414,val:471},{rgb:[215,106,150],hsv:[335.8,.5,.8],sat:218,val:471},{rgb:[174,217,80],hsv:[78.8,.6,.9],sat:274,val:471},{rgb:[255,100,116],hsv:[353.8,.6,1],sat:310,val:471},{rgb:[255,159,56],hsv:[31.1,.8,1],sat:398,val:470},{rgb:[127,166,177],hsv:[193.2,.3,.7],sat:100,val:470},{rgb:[63,205,202],hsv:[178.7,.7,.8],sat:284,val:470},{rgb:[188,164,117],hsv:[39.7,.4,.7],sat:142,val:469},{rgb:[252,120,97],hsv:[8.9,.6,1],sat:310,val:469},{rgb:[246,222,0],hsv:[54.1,1,1],sat:492,val:468},{rgb:[255,144,69],hsv:[24.2,.7,1],sat:372,val:468},{rgb:[255,213,0],hsv:[50.1,1,1],sat:510,val:468},{rgb:[255,150,63],hsv:[27.2,.8,1],sat:384,val:468},{rgb:[134,145,187],hsv:[227.5,.3,.7],sat:106,val:466},{rgb:[244,166,56],hsv:[35.1,.8,1],sat:376,val:466},{rgb:[255,161,50],hsv:[32.5,.8,1],sat:410,val:466},{rgb:[107,141,217],hsv:[221.5,.5,.9],sat:220,val:465},{rgb:[119,172,174],hsv:[182.2,.3,.7],sat:110,val:465},{rgb:[255,140,69],hsv:[22.9,.7,1],sat:372,val:464},{rgb:[105,182,177],hsv:[176.1,.4,.7],sat:154,val:464},{rgb:[174,158,132],hsv:[37.1,.2,.7],sat:84,val:464},{rgb:[170,162,132],hsv:[47.4,.2,.7],sat:76,val:464},{rgb:[183,143,138],hsv:[6.7,.2,.7],sat:90,val:464},{rgb:[129,162,172],hsv:[194,.3,.7],sat:86,val:463},{rgb:[131,178,154],hsv:[149.4,.3,.7],sat:94,val:463},{rgb:[255,124,84],hsv:[14,.7,1],sat:342,val:463},{rgb:[231,76,155],hsv:[329.4,.7,.9],sat:310,val:462},{rgb:[84,211,165],hsv:[158.3,.6,.8],sat:254,val:460},{rgb:[136,144,180],hsv:[229.1,.2,.7],sat:88,val:460},{rgb:[108,150,202],hsv:[213.2,.5,.8],sat:188,val:460},{rgb:[116,186,158],hsv:[156,.4,.7],sat:140,val:460},{rgb:[151,154,155],hsv:[195,0,.6],sat:8,val:460},{rgb:[255,144,61],hsv:[25.7,.8,1],sat:388,val:460},{rgb:[169,210,81],hsv:[79.1,.6,.8],sat:258,val:460},{rgb:[194,125,141],hsv:[346.1,.4,.8],sat:138,val:460},{rgb:[180,217,63],hsv:[74.4,.7,.9],sat:308,val:460},{rgb:[51,190,219],hsv:[190.4,.8,.9],sat:336,val:460},{rgb:[230,207,23],hsv:[53.3,.9,.9],sat:414,val:460},{rgb:[255,131,73],hsv:[19.1,.7,1],sat:364,val:459},{rgb:[47,190,221],hsv:[190.7,.8,.9],sat:348,val:458},{rgb:[254,112,92],hsv:[7.4,.6,1],sat:324,val:458},{rgb:[105,173,180],hsv:[185.6,.4,.7],sat:150,val:458},{rgb:[177,197,83],hsv:[70.5,.6,.8],sat:228,val:457},{rgb:[231,73,153],hsv:[329.6,.7,.9],sat:316,val:457},{rgb:[238,82,137],hsv:[338.8,.7,.9],sat:312,val:457},{rgb:[255,125,77],hsv:[16.2,.7,1],sat:356,val:457},{rgb:[255,99,102],hsv:[358.8,.6,1],sat:312,val:456},{rgb:[255,201,0],hsv:[47.3,1,1],sat:510,val:456},{rgb:[212,80,164],hsv:[321.8,.6,.8],sat:264,val:456},{rgb:[230,111,115],hsv:[358,.5,.9],sat:238,val:456},{rgb:[169,86,201],hsv:[283.3,.6,.8],sat:230,val:456},{rgb:[141,207,108],hsv:[100,.5,.8],sat:198,val:456},{rgb:[196,89,170],hsv:[314.6,.5,.8],sat:214,val:455},{rgb:[167,156,132],hsv:[41.1,.2,.7],sat:70,val:455},{rgb:[108,214,133],hsv:[134.2,.5,.8],sat:212,val:455},{rgb:[181,120,154],hsv:[326.6,.3,.7],sat:122,val:455},{rgb:[251,128,76],hsv:[17.8,.7,1],sat:350,val:455},{rgb:[63,172,220],hsv:[198.3,.7,.9],sat:314,val:455},{rgb:[66,211,178],hsv:[166.3,.7,.8],sat:290,val:455},{rgb:[218,105,130],hsv:[346.7,.5,.9],sat:226,val:453},{rgb:[167,159,127],hsv:[48,.2,.7],sat:80,val:453},{rgb:[170,171,112],hsv:[61,.3,.7],sat:118,val:453},{rgb:[184,176,93],hsv:[54.7,.5,.7],sat:182,val:453},{rgb:[183,136,133],hsv:[3.6,.3,.7],sat:100,val:452},{rgb:[182,131,139],hsv:[350.6,.3,.7],sat:102,val:452},{rgb:[135,168,149],hsv:[145.5,.2,.7],sat:66,val:452},{rgb:[247,118,86],hsv:[11.9,.7,1],sat:322,val:451},{rgb:[255,151,45],hsv:[30.3,.8,1],sat:420,val:451},{rgb:[178,153,120],hsv:[34.1,.3,.7],sat:116,val:451},{rgb:[115,175,161],hsv:[166,.3,.7],sat:120,val:451},{rgb:[255,112,84],hsv:[9.8,.7,1],sat:342,val:451},{rgb:[104,175,172],hsv:[177.5,.4,.7],sat:142,val:451},{rgb:[241,141,69],hsv:[25.1,.7,.9],sat:344,val:451},{rgb:[163,168,119],hsv:[66.1,.3,.7],sat:98,val:450},{rgb:[223,115,112],hsv:[1.6,.5,.9],sat:222,val:450},{rgb:[156,137,157],hsv:[297,.1,.6],sat:40,val:450},{rgb:[213,95,142],hsv:[336.1,.6,.8],sat:236,val:450},{rgb:[145,134,171],hsv:[257.8,.2,.7],sat:74,val:450},{rgb:[143,184,122],hsv:[99.7,.3,.7],sat:124,val:449},{rgb:[191,133,125],hsv:[7.3,.3,.7],sat:132,val:449},{rgb:[208,108,133],hsv:[345,.5,.8],sat:200,val:449},{rgb:[123,153,172],hsv:[203.3,.3,.7],sat:98,val:448},{rgb:[205,205,37],hsv:[60,.8,.8],sat:336,val:447},{rgb:[255,129,63],hsv:[20.6,.8,1],sat:384,val:447},{rgb:[254,92,100],hsv:[357,.6,1],sat:324,val:446},{rgb:[126,161,159],hsv:[176.6,.2,.6],sat:70,val:446},{rgb:[200,109,136],hsv:[342.2,.5,.8],sat:182,val:445},{rgb:[209,183,53],hsv:[50,.7,.8],sat:312,val:445},{rgb:[113,173,159],hsv:[166,.3,.7],sat:120,val:445},{rgb:[175,135,135],hsv:[0,.2,.7],sat:80,val:445},{rgb:[251,87,107],hsv:[352.7,.7,1],sat:328,val:445},{rgb:[255,116,73],hsv:[14.2,.7,1],sat:364,val:444},{rgb:[41,196,207],hsv:[184,.8,.8],sat:332,val:444},{rgb:[154,138,152],hsv:[307.5,.1,.6],sat:32,val:444},{rgb:[203,212,28],hsv:[62.9,.9,.8],sat:368,val:443},{rgb:[103,186,154],hsv:[156.9,.4,.7],sat:166,val:443},{rgb:[255,99,89],hsv:[3.6,.7,1],sat:332,val:443},{rgb:[134,134,175],hsv:[240,.2,.7],sat:82,val:443},{rgb:[63,180,200],hsv:[188.8,.7,.8],sat:274,val:443},{rgb:[199,155,89],hsv:[36,.6,.8],sat:220,val:443},{rgb:[173,142,127],hsv:[19.6,.3,.7],sat:92,val:442},{rgb:[185,110,147],hsv:[330.4,.4,.7],sat:150,val:442},{rgb:[204,102,136],hsv:[340,.5,.8],sat:204,val:442},{rgb:[52,174,215],hsv:[195.1,.8,.8],sat:326,val:441},{rgb:[194,109,138],hsv:[339.5,.4,.8],sat:170,val:441},{rgb:[133,147,161],hsv:[210,.2,.6],sat:56,val:441},{rgb:[49,205,187],hsv:[173.1,.8,.8],sat:312,val:441},{rgb:[145,155,141],hsv:[102.9,.1,.6],sat:28,val:441},{rgb:[247,105,88],hsv:[6.4,.6,1],sat:318,val:440},{rgb:[169,145,126],hsv:[26.5,.3,.7],sat:86,val:440},{rgb:[199,152,89],hsv:[34.4,.6,.8],sat:220,val:440},{rgb:[176,209,55],hsv:[72.9,.7,.8],sat:308,val:440},{rgb:[158,110,172],hsv:[286.5,.4,.7],sat:124,val:440},{rgb:[167,149,124],hsv:[34.9,.3,.7],sat:86,val:440},{rgb:[255,106,79],hsv:[9.2,.7,1],sat:352,val:440},{rgb:[255,99,86],hsv:[4.6,.7,1],sat:338,val:440},{rgb:[71,199,169],hsv:[165.9,.6,.8],sat:256,val:439},{rgb:[139,121,179],hsv:[258.6,.3,.7],sat:116,val:439},{rgb:[254,91,94],hsv:[358.9,.6,1],sat:326,val:439},{rgb:[168,123,147],hsv:[328,.3,.7],sat:90,val:438},{rgb:[255,136,47],hsv:[25.7,.8,1],sat:416,val:438},{rgb:[152,154,131],hsv:[65.2,.1,.6],sat:46,val:437},{rgb:[188,133,116],hsv:[14.2,.4,.7],sat:144,val:437},{rgb:[255,104,78],hsv:[8.8,.7,1],sat:354,val:437},{rgb:[222,65,150],hsv:[327.5,.7,.9],sat:314,val:437},{rgb:[147,147,142],hsv:[60,0,.6],sat:10,val:436},{rgb:[184,84,168],hsv:[309.6,.5,.7],sat:200,val:436},{rgb:[151,180,105],hsv:[83.2,.4,.7],sat:150,val:436},{rgb:[213,92,130],hsv:[341.2,.6,.8],sat:242,val:435},{rgb:[195,185,55],hsv:[55.7,.7,.8],sat:280,val:435},{rgb:[62,185,188],hsv:[181.4,.7,.7],sat:252,val:435},{rgb:[238,118,78],hsv:[15,.7,.9],sat:320,val:434},{rgb:[192,133,109],hsv:[17.3,.4,.8],sat:166,val:434},{rgb:[89,135,209],hsv:[217,.6,.8],sat:240,val:433},{rgb:[145,119,169],hsv:[271.2,.3,.7],sat:100,val:433},{rgb:[147,207,79],hsv:[88.1,.6,.8],sat:256,val:433},{rgb:[228,70,135],hsv:[335.3,.7,.9],sat:316,val:433},{rgb:[170,126,137],hsv:[345,.3,.7],sat:88,val:433},{rgb:[255,108,69],hsv:[12.6,.7,1],sat:372,val:432},{rgb:[79,188,165],hsv:[167.3,.6,.7],sat:218,val:432},{rgb:[229,84,119],hsv:[345.5,.6,.9],sat:290,val:432},{rgb:[207,98,126],hsv:[344.6,.5,.8],sat:218,val:431},{rgb:[115,110,206],hsv:[243.1,.5,.8],sat:192,val:431},{rgb:[206,88,136],hsv:[335.6,.6,.8],sat:236,val:430},{rgb:[145,156,129],hsv:[84.4,.2,.6],sat:54,val:430},{rgb:[254,90,85],hsv:[1.8,.7,1],sat:338,val:429},{rgb:[192,101,136],hsv:[336.9,.5,.8],sat:182,val:429},{rgb:[71,142,215],hsv:[210.4,.7,.8],sat:288,val:428},{rgb:[205,118,105],hsv:[7.8,.5,.8],sat:200,val:428},{rgb:[165,157,106],hsv:[51.9,.4,.6],sat:118,val:428},{rgb:[153,124,151],hsv:[304.1,.2,.6],sat:58,val:428},{rgb:[93,158,176],hsv:[193,.5,.7],sat:166,val:427},{rgb:[190,123,114],hsv:[7.1,.4,.7],sat:152,val:427},{rgb:[123,125,179],hsv:[237.9,.3,.7],sat:112,val:427},{rgb:[117,105,205],hsv:[247.2,.5,.8],sat:200,val:427},{rgb:[197,74,156],hsv:[320,.6,.8],sat:246,val:427},{rgb:[50,175,201],hsv:[190.3,.8,.8],sat:302,val:426},{rgb:[199,131,96],hsv:[20.4,.5,.8],sat:206,val:426},{rgb:[227,137,62],hsv:[27.3,.7,.9],sat:330,val:426},{rgb:[124,125,177],hsv:[238.9,.3,.7],sat:106,val:426},{rgb:[255,127,44],hsv:[23.6,.8,1],sat:422,val:426},{rgb:[255,88,83],hsv:[1.7,.7,1],sat:344,val:426},{rgb:[113,162,151],hsv:[166.5,.3,.6],sat:98,val:426},{rgb:[131,114,180],hsv:[255.5,.4,.7],sat:132,val:425},{rgb:[145,149,131],hsv:[73.3,.1,.6],sat:36,val:425},{rgb:[89,163,173],hsv:[187.1,.5,.7],sat:168,val:425},{rgb:[240,71,113],hsv:[345.1,.7,.9],sat:338,val:424},{rgb:[145,144,135],hsv:[54,.1,.6],sat:20,val:424},{rgb:[255,99,70],hsv:[9.4,.7,1],sat:370,val:424},{rgb:[255,107,62],hsv:[14,.8,1],sat:386,val:424},{rgb:[188,129,105],hsv:[17.3,.4,.7],sat:166,val:422},{rgb:[102,149,171],hsv:[199.1,.4,.7],sat:138,val:422},{rgb:[146,150,125],hsv:[69.6,.2,.6],sat:50,val:421},{rgb:[224,63,134],hsv:[333.5,.7,.9],sat:322,val:421},{rgb:[206,57,158],hsv:[319.3,.7,.8],sat:298,val:421},{rgb:[195,64,162],hsv:[315.1,.7,.8],sat:262,val:421},{rgb:[176,185,60],hsv:[64.3,.7,.7],sat:250,val:421},{rgb:[96,162,162],hsv:[180,.4,.6],sat:132,val:420},{rgb:[105,150,165],hsv:[195,.4,.6],sat:120,val:420},{rgb:[119,129,171],hsv:[228.5,.3,.7],sat:104,val:419},{rgb:[156,132,131],hsv:[2.4,.2,.6],sat:50,val:419},{rgb:[252,88,78],hsv:[3.4,.7,1],sat:348,val:418},{rgb:[120,172,126],hsv:[126.9,.3,.7],sat:104,val:418},{rgb:[201,157,60],hsv:[41.3,.7,.8],sat:282,val:418},{rgb:[131,199,87],hsv:[96.4,.6,.8],sat:224,val:417},{rgb:[199,94,124],hsv:[342.9,.5,.8],sat:210,val:417},{rgb:[134,114,169],hsv:[261.8,.3,.7],sat:110,val:417},{rgb:[187,100,130],hsv:[339.3,.5,.7],sat:174,val:417},{rgb:[233,130,54],hsv:[25.5,.8,.9],sat:358,val:417},{rgb:[255,93,69],hsv:[7.7,.7,1],sat:372,val:417},{rgb:[179,108,130],hsv:[341.4,.4,.7],sat:142,val:417},{rgb:[255,87,74],hsv:[4.3,.7,1],sat:362,val:416},{rgb:[201,125,90],hsv:[18.9,.6,.8],sat:222,val:416},{rgb:[111,144,161],hsv:[200.4,.3,.6],sat:100,val:416},{rgb:[41,162,213],hsv:[197.8,.8,.8],sat:344,val:416},{rgb:[133,109,173],hsv:[262.5,.4,.7],sat:128,val:415},{rgb:[168,94,153],hsv:[312.2,.4,.7],sat:148,val:415},{rgb:[47,176,192],hsv:[186.6,.8,.8],sat:290,val:415},{rgb:[216,133,66],hsv:[26.8,.7,.8],sat:300,val:415},{rgb:[217,53,144],hsv:[326.7,.8,.9],sat:328,val:414},{rgb:[112,140,162],hsv:[206.4,.3,.6],sat:100,val:414},{rgb:[52,187,175],hsv:[174.7,.7,.7],sat:270,val:414},{rgb:[124,130,160],hsv:[230,.2,.6],sat:72,val:414},{rgb:[124,135,155],hsv:[218.7,.2,.6],sat:62,val:414},{rgb:[92,160,161],hsv:[180.9,.4,.6],sat:138,val:413},{rgb:[168,183,62],hsv:[67.4,.7,.7],sat:242,val:413},{rgb:[141,139,132],hsv:[46.7,.1,.6],sat:18,val:412},{rgb:[180,143,88],hsv:[35.9,.5,.7],sat:184,val:411},{rgb:[80,124,207],hsv:[219.2,.6,.8],sat:254,val:411},{rgb:[252,92,67],hsv:[8.1,.7,1],sat:370,val:411},{rgb:[143,116,151],hsv:[286.3,.2,.6],sat:70,val:410},{rgb:[149,134,127],hsv:[19.1,.1,.6],sat:44,val:410},{rgb:[153,132,125],hsv:[15,.2,.6],sat:56,val:410},{rgb:[119,168,123],hsv:[124.9,.3,.7],sat:98,val:410},{rgb:[197,86,127],hsv:[337.8,.6,.8],sat:222,val:410},{rgb:[175,79,155],hsv:[312.5,.5,.7],sat:192,val:409},{rgb:[223,58,128],hsv:[334.5,.7,.9],sat:330,val:409},{rgb:[62,147,200],hsv:[203,.7,.8],sat:276,val:409},{rgb:[184,142,82],hsv:[35.3,.6,.7],sat:204,val:408},{rgb:[167,119,122],hsv:[356.3,.3,.7],sat:96,val:408},{rgb:[193,138,77],hsv:[31.6,.6,.8],sat:232,val:408},{rgb:[221,48,138],hsv:[328.8,.8,.9],sat:346,val:407},{rgb:[161,179,67],hsv:[69.6,.6,.7],sat:224,val:407},{rgb:[131,143,133],hsv:[130,.1,.6],sat:24,val:407},{rgb:[52,151,204],hsv:[200.9,.7,.8],sat:304,val:407},{rgb:[218,67,122],hsv:[338.1,.7,.9],sat:302,val:407},{rgb:[160,104,142],hsv:[319.3,.4,.6],sat:112,val:406},{rgb:[99,114,193],hsv:[230.4,.5,.8],sat:188,val:406},{rgb:[173,55,178],hsv:[297.6,.7,.7],sat:246,val:406},{rgb:[216,63,127],hsv:[334.9,.7,.8],sat:306,val:406},{rgb:[99,206,101],hsv:[121.1,.5,.8],sat:214,val:406},{rgb:[133,157,115],hsv:[94.3,.3,.6],sat:84,val:405},{rgb:[247,81,77],hsv:[1.4,.7,1],sat:340,val:405},{rgb:[160,130,115],hsv:[20,.3,.6],sat:90,val:405},{rgb:[152,127,126],hsv:[2.3,.2,.6],sat:52,val:405},{rgb:[148,137,120],hsv:[36.4,.2,.6],sat:56,val:405},{rgb:[52,187,165],hsv:[170.2,.7,.7],sat:270,val:404},{rgb:[166,136,102],hsv:[31.9,.4,.7],sat:128,val:404},{rgb:[115,119,170],hsv:[235.6,.3,.7],sat:110,val:404},{rgb:[116,197,90],hsv:[105.4,.5,.8],sat:214,val:403},{rgb:[77,120,206],hsv:[220,.6,.8],sat:258,val:403},{rgb:[157,139,107],hsv:[38.4,.3,.6],sat:100,val:403},{rgb:[217,94,91],hsv:[1.4,.6,.9],sat:252,val:402},{rgb:[252,89,61],hsv:[8.8,.8,1],sat:382,val:402},{rgb:[166,92,144],hsv:[317.8,.4,.7],sat:148,val:402},{rgb:[132,183,86],hsv:[91.5,.5,.7],sat:194,val:401},{rgb:[143,101,157],hsv:[285,.4,.6],sat:112,val:401},{rgb:[175,105,120],hsv:[347.1,.4,.7],sat:140,val:400},{rgb:[185,66,149],hsv:[318.2,.6,.7],sat:238,val:400},{rgb:[94,212,94],hsv:[120,.6,.8],sat:236,val:400},{rgb:[212,112,76],hsv:[15.9,.6,.8],sat:272,val:400},{rgb:[160,57,183],hsv:[289,.7,.7],sat:252,val:400},{rgb:[144,120,136],hsv:[320,.2,.6],sat:48,val:400},{rgb:[229,93,78],hsv:[6,.7,.9],sat:302,val:400},{rgb:[131,173,96],hsv:[92.7,.4,.7],sat:154,val:400},{rgb:[210,84,105],hsv:[350,.6,.8],sat:252,val:399},{rgb:[212,119,68],hsv:[21.3,.7,.8],sat:288,val:399},{rgb:[98,125,175],hsv:[219,.4,.7],sat:154,val:398},{rgb:[210,43,145],hsv:[323.4,.8,.8],sat:334,val:398},{rgb:[88,142,168],hsv:[199.5,.5,.7],sat:160,val:398},{rgb:[107,120,170],hsv:[227.6,.4,.7],sat:126,val:397},{rgb:[162,112,123],hsv:[346.8,.3,.6],sat:100,val:397},{rgb:[194,115,88],hsv:[15.3,.5,.8],sat:212,val:397},{rgb:[176,110,111],hsv:[359.1,.4,.7],sat:132,val:397},{rgb:[223,87,87],hsv:[0,.6,.9],sat:272,val:397},{rgb:[0,178,219],hsv:[191.2,1,.9],sat:438,val:397},{rgb:[183,149,65],hsv:[42.7,.6,.7],sat:236,val:397},{rgb:[174,129,94],hsv:[26.3,.5,.7],sat:160,val:397},{rgb:[107,117,172],hsv:[230.8,.4,.7],sat:130,val:396},{rgb:[86,163,146],hsv:[166.8,.5,.6],sat:154,val:395},{rgb:[95,159,141],hsv:[163.1,.4,.6],sat:128,val:395},{rgb:[0,186,209],hsv:[186.6,1,.8],sat:418,val:395},{rgb:[196,52,147],hsv:[320.4,.7,.8],sat:288,val:395},{rgb:[159,79,157],hsv:[301.5,.5,.6],sat:160,val:395},{rgb:[35,158,201],hsv:[195.5,.8,.8],sat:332,val:394},{rgb:[150,128,116],hsv:[21.2,.2,.6],sat:68,val:394},{rgb:[146,63,185],hsv:[280.8,.7,.7],sat:244,val:394},{rgb:[121,162,111],hsv:[108.2,.3,.6],sat:102,val:394},{rgb:[150,115,129],hsv:[336,.2,.6],sat:70,val:394},{rgb:[109,116,168],hsv:[232.9,.4,.7],sat:118,val:393},{rgb:[90,139,164],hsv:[200.3,.5,.6],sat:148,val:393},{rgb:[147,118,128],hsv:[339.3,.2,.6],sat:58,val:393},{rgb:[203,59,131],hsv:[330,.7,.8],sat:288,val:393},{rgb:[212,74,106],hsv:[346.1,.7,.8],sat:276,val:392},{rgb:[0,190,202],hsv:[183.6,1,.8],sat:404,val:392},{rgb:[148,100,144],hsv:[305,.3,.6],sat:96,val:392},{rgb:[195,127,70],hsv:[27.4,.6,.8],sat:250,val:392},{rgb:[98,159,135],hsv:[156.4,.4,.6],sat:122,val:392},{rgb:[168,98,126],hsv:[336,.4,.7],sat:140,val:392},{rgb:[0,206,186],hsv:[174.2,1,.8],sat:412,val:392},{rgb:[119,146,127],hsv:[137.8,.2,.6],sat:54,val:392},{rgb:[186,139,66],hsv:[36.5,.6,.7],sat:240,val:391},{rgb:[134,132,125],hsv:[46.7,.1,.5],sat:18,val:391},{rgb:[220,91,80],hsv:[4.7,.6,.9],sat:280,val:391},{rgb:[0,203,187],hsv:[175.3,1,.8],sat:406,val:390},{rgb:[66,128,196],hsv:[211.4,.7,.8],sat:260,val:390},{rgb:[221,89,80],hsv:[3.8,.6,.9],sat:282,val:390},{rgb:[165,47,178],hsv:[294,.7,.7],sat:262,val:390},{rgb:[0,191,199],hsv:[182.4,1,.8],sat:398,val:390},{rgb:[132,178,80],hsv:[88.2,.6,.7],sat:196,val:390},{rgb:[144,116,129],hsv:[332.1,.2,.6],sat:56,val:389},{rgb:[126,109,154],hsv:[262.7,.3,.6],sat:90,val:389},{rgb:[169,96,124],hsv:[337,.4,.7],sat:146,val:389},{rgb:[183,84,122],hsv:[337,.5,.7],sat:198,val:389},{rgb:[222,86,80],hsv:[2.5,.6,.9],sat:284,val:388},{rgb:[192,111,85],hsv:[14.6,.6,.8],sat:214,val:388},{rgb:[0,200,188],hsv:[176.4,1,.8],sat:400,val:388},{rgb:[138,113,137],hsv:[302.4,.2,.5],sat:50,val:388},{rgb:[222,47,119],hsv:[335.3,.8,.9],sat:350,val:388},{rgb:[173,107,108],hsv:[359.1,.4,.7],sat:132,val:388},{rgb:[186,53,148],hsv:[317.1,.7,.7],sat:266,val:387},{rgb:[214,101,72],hsv:[12.3,.7,.8],sat:284,val:387},{rgb:[209,81,97],hsv:[352.5,.6,.8],sat:256,val:387},{rgb:[163,109,115],hsv:[353.3,.3,.6],sat:108,val:387},{rgb:[56,125,206],hsv:[212.4,.7,.8],sat:300,val:387},{rgb:[240,69,78],hsv:[356.8,.7,.9],sat:342,val:387},{rgb:[0,206,181],hsv:[172.7,1,.8],sat:412,val:387},{rgb:[226,53,107],hsv:[341.3,.8,.9],sat:346,val:386},{rgb:[207,119,60],hsv:[24.1,.7,.8],sat:294,val:386},{rgb:[134,140,112],hsv:[72.9,.2,.5],sat:56,val:386},{rgb:[89,137,160],hsv:[199.4,.4,.6],sat:142,val:386},{rgb:[185,115,85],hsv:[18,.5,.7],sat:200,val:385},{rgb:[85,146,154],hsv:[187,.4,.6],sat:138,val:385},{rgb:[122,142,121],hsv:[117.1,.1,.6],sat:42,val:385},{rgb:[114,123,148],hsv:[224.1,.2,.6],sat:68,val:385},{rgb:[148,172,65],hsv:[73.5,.6,.7],sat:214,val:385},{rgb:[102,130,153],hsv:[207.1,.3,.6],sat:102,val:385},{rgb:[117,119,148],hsv:[236.1,.2,.6],sat:62,val:384},{rgb:[203,123,58],hsv:[26.9,.7,.8],sat:290,val:384},{rgb:[224,89,71],hsv:[7.1,.7,.9],sat:306,val:384},{rgb:[13,155,216],hsv:[198,.9,.8],sat:406,val:384},{rgb:[194,92,97],hsv:[357.1,.5,.8],sat:204,val:383},{rgb:[111,193,79],hsv:[103.2,.6,.8],sat:228,val:383},{rgb:[139,132,112],hsv:[44.4,.2,.5],sat:54,val:383},{rgb:[209,47,126],hsv:[330.7,.8,.8],sat:324,val:382},{rgb:[169,103,110],hsv:[353.6,.4,.7],sat:132,val:382},{rgb:[185,103,94],hsv:[5.9,.5,.7],sat:182,val:382},{rgb:[30,191,160],hsv:[168.4,.8,.7],sat:322,val:381},{rgb:[140,128,113],hsv:[33.3,.2,.5],sat:54,val:381},{rgb:[103,161,117],hsv:[134.5,.4,.6],sat:116,val:381},{rgb:[160,92,129],hsv:[327.4,.4,.6],sat:136,val:381},{rgb:[57,179,145],hsv:[163.3,.7,.7],sat:244,val:381},{rgb:[154,110,116],hsv:[351.8,.3,.6],sat:88,val:380},{rgb:[203,77,100],hsv:[349,.6,.8],sat:252,val:380},{rgb:[158,108,113],hsv:[354,.3,.6],sat:100,val:379},{rgb:[177,132,70],hsv:[34.8,.6,.7],sat:214,val:379},{rgb:[0,173,206],hsv:[189.6,1,.8],sat:412,val:379},{rgb:[142,74,162],hsv:[286.4,.5,.6],sat:176,val:378},{rgb:[151,108,119],hsv:[344.7,.3,.6],sat:86,val:378},{rgb:[225,44,109],hsv:[338.5,.8,.9],sat:362,val:378},{rgb:[84,130,163],hsv:[205.1,.5,.6],sat:158,val:377},{rgb:[124,125,128],hsv:[225,0,.5],sat:8,val:377},{rgb:[49,148,180],hsv:[194.7,.7,.7],sat:262,val:377},{rgb:[159,58,160],hsv:[299.4,.6,.6],sat:204,val:377},{rgb:[0,163,214],hsv:[194.3,1,.8],sat:428,val:377},{rgb:[84,148,145],hsv:[177.2,.4,.6],sat:128,val:377},{rgb:[103,176,97],hsv:[115.4,.4,.7],sat:158,val:376},{rgb:[141,120,115],hsv:[11.5,.2,.6],sat:52,val:376},{rgb:[0,177,199],hsv:[186.6,1,.8],sat:398,val:376},{rgb:[132,131,112],hsv:[57,.2,.5],sat:40,val:375},{rgb:[225,44,106],hsv:[339.4,.8,.9],sat:362,val:375},{rgb:[129,133,113],hsv:[72,.2,.5],sat:40,val:375},{rgb:[219,85,71],hsv:[5.7,.7,.9],sat:296,val:375},{rgb:[171,126,78],hsv:[31,.5,.7],sat:186,val:375},{rgb:[80,129,165],hsv:[205.4,.5,.6],sat:170,val:374},{rgb:[0,157,217],hsv:[196.6,1,.9],sat:434,val:374},{rgb:[203,97,74],hsv:[10.7,.6,.8],sat:258,val:374},{rgb:[0,206,168],hsv:[168.9,1,.8],sat:412,val:374},{rgb:[226,54,93],hsv:[346.4,.8,.9],sat:344,val:373},{rgb:[207,44,122],hsv:[331.3,.8,.8],sat:326,val:373},{rgb:[126,105,142],hsv:[274.1,.3,.6],sat:74,val:373},{rgb:[54,171,148],hsv:[168.2,.7,.7],sat:234,val:373},{rgb:[89,87,196],hsv:[241.1,.6,.8],sat:218,val:372},{rgb:[0,200,172],hsv:[171.6,1,.8],sat:400,val:372},{rgb:[166,72,134],hsv:[320.4,.6,.7],sat:188,val:372},{rgb:[111,160,100],hsv:[109,.4,.6],sat:120,val:371},{rgb:[194,105,72],hsv:[16.2,.6,.8],sat:244,val:371},{rgb:[125,173,73],hsv:[88.8,.6,.7],sat:200,val:371},{rgb:[127,115,129],hsv:[291.4,.1,.5],sat:28,val:371},{rgb:[132,104,135],hsv:[294.2,.2,.5],sat:62,val:371},{rgb:[173,55,142],hsv:[315.8,.7,.7],sat:236,val:370},{rgb:[141,160,69],hsv:[72.5,.6,.6],sat:182,val:370},{rgb:[179,100,91],hsv:[6.1,.5,.7],sat:176,val:370},{rgb:[138,123,109],hsv:[29,.2,.5],sat:58,val:370},{rgb:[206,90,74],hsv:[7.3,.6,.8],sat:264,val:370},{rgb:[146,104,120],hsv:[337.1,.3,.6],sat:84,val:370},{rgb:[97,109,163],hsv:[229.1,.4,.6],sat:132,val:369},{rgb:[115,68,186],hsv:[263.9,.6,.7],sat:236,val:369},{rgb:[163,151,55],hsv:[53.3,.7,.6],sat:216,val:369},{rgb:[125,134,110],hsv:[82.5,.2,.5],sat:48,val:369},{rgb:[0,156,213],hsv:[196.1,1,.8],sat:426,val:369},{rgb:[0,151,217],hsv:[198.2,1,.9],sat:434,val:368},{rgb:[83,131,154],hsv:[199.4,.5,.6],sat:142,val:368},{rgb:[192,72,104],hsv:[344,.6,.8],sat:240,val:368},{rgb:[154,106,108],hsv:[357.5,.3,.6],sat:96,val:368},{rgb:[169,116,83],hsv:[23,.5,.7],sat:172,val:368},{rgb:[0,153,214],hsv:[197.1,1,.8],sat:428,val:367},{rgb:[170,116,81],hsv:[23.6,.5,.7],sat:178,val:367},{rgb:[0,178,189],hsv:[183.5,1,.7],sat:378,val:367},{rgb:[185,100,82],hsv:[10.5,.6,.7],sat:206,val:367},{rgb:[167,121,79],hsv:[28.6,.5,.7],sat:176,val:367},{rgb:[157,148,61],hsv:[54.4,.6,.6],sat:192,val:366},{rgb:[207,74,85],hsv:[355,.6,.8],sat:266,val:366},{rgb:[92,127,147],hsv:[201.8,.4,.6],sat:110,val:366},{rgb:[153,90,123],hsv:[328.6,.4,.6],sat:126,val:366},{rgb:[0,195,170],hsv:[172.3,1,.8],sat:390,val:365},{rgb:[0,152,213],hsv:[197.2,1,.8],sat:426,val:365},{rgb:[0,155,210],hsv:[195.7,1,.8],sat:420,val:365},{rgb:[140,107,118],hsv:[340,.2,.5],sat:66,val:365},{rgb:[141,133,91],hsv:[50.4,.4,.6],sat:100,val:365},{rgb:[29,187,149],hsv:[165.6,.8,.7],sat:316,val:365},{rgb:[162,111,91],hsv:[16.9,.4,.6],sat:142,val:364},{rgb:[180,65,119],hsv:[331.8,.6,.7],sat:230,val:364},{rgb:[108,116,140],hsv:[225,.2,.5],sat:64,val:364},{rgb:[216,46,102],hsv:[340.2,.8,.8],sat:340,val:364},{rgb:[0,193,170],hsv:[172.8,1,.8],sat:386,val:363},{rgb:[20,157,186],hsv:[190.5,.9,.7],sat:332,val:363},{rgb:[23,176,164],hsv:[175.3,.9,.7],sat:306,val:363},{rgb:[119,92,152],hsv:[267,.4,.6],sat:120,val:363},{rgb:[185,90,88],hsv:[1.2,.5,.7],sat:194,val:363},{rgb:[130,124,108],hsv:[43.6,.2,.5],sat:44,val:362},{rgb:[0,165,196],hsv:[189.5,1,.8],sat:392,val:361},{rgb:[179,116,66],hsv:[26.5,.6,.7],sat:226,val:361},{rgb:[0,183,178],hsv:[178.4,1,.7],sat:366,val:361},{rgb:[210,75,76],hsv:[359.6,.6,.8],sat:270,val:361},{rgb:[86,88,186],hsv:[238.8,.5,.7],sat:200,val:360},{rgb:[53,193,114],hsv:[146.1,.7,.8],sat:280,val:360},{rgb:[158,141,61],hsv:[49.5,.6,.6],sat:194,val:360},{rgb:[147,131,82],hsv:[45.2,.4,.6],sat:130,val:360},{rgb:[94,89,177],hsv:[243.4,.5,.7],sat:176,val:360},{rgb:[149,102,109],hsv:[351.1,.3,.6],sat:94,val:360},{rgb:[217,78,65],hsv:[5.1,.7,.9],sat:304,val:360},{rgb:[184,107,69],hsv:[19.8,.6,.7],sat:230,val:360},{rgb:[204,73,83],hsv:[355.4,.6,.8],sat:262,val:360},{rgb:[134,142,84],hsv:[68.3,.4,.6],sat:116,val:360},{rgb:[101,178,81],hsv:[107.6,.5,.7],sat:194,val:360},{rgb:[184,101,75],hsv:[14.3,.6,.7],sat:218,val:360},{rgb:[123,121,116],hsv:[42.9,.1,.5],sat:14,val:360},{rgb:[81,119,159],hsv:[210.8,.5,.6],sat:156,val:359},{rgb:[185,82,92],hsv:[354.2,.6,.7],sat:206,val:359},{rgb:[160,60,139],hsv:[312.6,.6,.6],sat:200,val:359},{rgb:[0,152,207],hsv:[195.9,1,.8],sat:414,val:359},{rgb:[127,124,108],hsv:[50.5,.1,.5],sat:38,val:359},{rgb:[172,81,106],hsv:[343.5,.5,.7],sat:182,val:359},{rgb:[177,106,75],hsv:[18.2,.6,.7],sat:204,val:358},{rgb:[192,54,112],hsv:[334.8,.7,.8],sat:276,val:358},{rgb:[84,138,136],hsv:[177.8,.4,.5],sat:108,val:358},{rgb:[213,74,70],hsv:[1.7,.7,.8],sat:286,val:357},{rgb:[208,78,70],hsv:[3.5,.7,.8],sat:276,val:356},{rgb:[88,121,147],hsv:[206.4,.4,.6],sat:118,val:356},{rgb:[169,99,88],hsv:[8.1,.5,.7],sat:162,val:356},{rgb:[0,153,203],hsv:[194.8,1,.8],sat:406,val:356},{rgb:[133,97,126],hsv:[311.7,.3,.5],sat:72,val:356},{rgb:[97,88,171],hsv:[246.5,.5,.7],sat:166,val:356},{rgb:[128,124,103],hsv:[50.4,.2,.5],sat:50,val:355},{rgb:[196,72,87],hsv:[352.7,.6,.8],sat:248,val:355},{rgb:[42,158,155],hsv:[178.4,.7,.6],sat:232,val:355},{rgb:[104,67,183],hsv:[259.1,.6,.7],sat:232,val:354},{rgb:[129,116,109],hsv:[21,.2,.5],sat:40,val:354},{rgb:[146,54,153],hsv:[295.8,.6,.6],sat:198,val:353},{rgb:[0,168,184],hsv:[185.2,1,.7],sat:368,val:352},{rgb:[118,125,109],hsv:[86.3,.1,.5],sat:32,val:352},{rgb:[121,119,112],hsv:[46.7,.1,.5],sat:18,val:352},{rgb:[0,186,166],hsv:[173.5,1,.7],sat:372,val:352},{rgb:[127,87,138],hsv:[287.1,.4,.5],sat:102,val:352},{rgb:[87,175,90],hsv:[122,.5,.7],sat:176,val:352},{rgb:[117,123,111],hsv:[90,.1,.5],sat:24,val:351},{rgb:[69,143,139],hsv:[176.8,.5,.6],sat:148,val:351},{rgb:[80,149,122],hsv:[156.5,.5,.6],sat:138,val:351},{rgb:[0,143,208],hsv:[198.8,1,.8],sat:416,val:351},{rgb:[203,78,70],hsv:[3.6,.7,.8],sat:266,val:351},{rgb:[139,125,87],hsv:[43.8,.4,.5],sat:104,val:351},{rgb:[161,111,79],hsv:[23.4,.5,.6],sat:164,val:351},{rgb:[111,74,165],hsv:[264.4,.6,.6],sat:182,val:350},{rgb:[137,60,153],hsv:[289.7,.6,.6],sat:186,val:350},{rgb:[128,121,101],hsv:[44.4,.2,.5],sat:54,val:350},{rgb:[53,114,183],hsv:[211.8,.7,.7],sat:260,val:350},{rgb:[115,116,119],hsv:[225,0,.5],sat:8,val:350},{rgb:[88,188,74],hsv:[112.6,.6,.7],sat:228,val:350},{rgb:[62,198,89],hsv:[131.9,.7,.8],sat:272,val:349},{rgb:[0,197,152],hsv:[166.3,1,.8],sat:394,val:349},{rgb:[121,107,121],hsv:[300,.1,.5],sat:28,val:349},{rgb:[78,118,152],hsv:[207.6,.5,.6],sat:148,val:348},{rgb:[139,142,67],hsv:[62.4,.5,.6],sat:150,val:348},{rgb:[100,142,105],hsv:[127.1,.3,.6],sat:84,val:347},{rgb:[89,88,170],hsv:[240.7,.5,.7],sat:164,val:347},{rgb:[109,83,155],hsv:[261.7,.5,.6],sat:144,val:347},{rgb:[112,81,153],hsv:[265.8,.5,.6],sat:144,val:346},{rgb:[106,162,78],hsv:[100,.5,.6],sat:168,val:346},{rgb:[115,127,104],hsv:[91.3,.2,.5],sat:46,val:346},{rgb:[196,73,77],hsv:[358,.6,.8],sat:246,val:346},{rgb:[137,117,92],hsv:[33.3,.3,.5],sat:90,val:346},{rgb:[120,103,122],hsv:[293.7,.2,.5],sat:38,val:345},{rgb:[32,180,133],hsv:[160.9,.8,.7],sat:296,val:345},{rgb:[166,86,93],hsv:[354.8,.5,.7],sat:160,val:345},{rgb:[175,57,113],hsv:[331.5,.7,.7],sat:236,val:345},{rgb:[116,124,104],hsv:[84,.2,.5],sat:40,val:344},{rgb:[103,133,108],hsv:[130,.2,.5],sat:60,val:344},{rgb:[41,150,153],hsv:[181.6,.7,.6],sat:224,val:344},{rgb:[148,130,66],hsv:[46.8,.6,.6],sat:164,val:344},{rgb:[11,136,197],hsv:[199.7,.9,.8],sat:372,val:344},{rgb:[115,141,88],hsv:[89.4,.4,.6],sat:106,val:344},{rgb:[98,163,82],hsv:[108.1,.5,.6],sat:162,val:343},{rgb:[100,75,168],hsv:[256.1,.6,.7],sat:186,val:343},{rgb:[199,75,69],hsv:[2.8,.7,.8],sat:260,val:343},{rgb:[0,152,191],hsv:[192.3,1,.7],sat:382,val:343},{rgb:[125,98,120],hsv:[311.1,.2,.5],sat:54,val:343},{rgb:[114,129,99],hsv:[90,.2,.5],sat:60,val:342},{rgb:[72,91,179],hsv:[229.3,.6,.7],sat:214,val:342},{rgb:[182,75,85],hsv:[354.4,.6,.7],sat:214,val:342},{rgb:[170,86,86],hsv:[0,.5,.7],sat:168,val:342},{rgb:[94,137,111],hsv:[143.7,.3,.5],sat:86,val:342},{rgb:[166,81,94],hsv:[350.8,.5,.7],sat:170,val:341},{rgb:[74,132,135],hsv:[183,.5,.5],sat:122,val:341},{rgb:[110,124,106],hsv:[106.7,.1,.5],sat:36,val:340},{rgb:[119,136,85],hsv:[80,.4,.5],sat:102,val:340},{rgb:[190,77,73],hsv:[2.1,.6,.7],sat:234,val:340},{rgb:[0,147,192],hsv:[194.1,1,.8],sat:384,val:339},{rgb:[66,114,159],hsv:[209,.6,.6],sat:186,val:339},{rgb:[186,73,80],hsv:[356.3,.6,.7],sat:226,val:339},{rgb:[183,85,71],hsv:[7.5,.6,.7],sat:224,val:339},{rgb:[0,173,166],hsv:[177.6,1,.7],sat:346,val:339},{rgb:[181,74,84],hsv:[354.4,.6,.7],sat:214,val:339},{rgb:[193,71,75],hsv:[358,.6,.8],sat:244,val:339},{rgb:[0,138,200],hsv:[198.6,1,.8],sat:400,val:338},{rgb:[186,76,76],hsv:[0,.6,.7],sat:220,val:338},{rgb:[132,67,139],hsv:[294.2,.5,.5],sat:144,val:338},{rgb:[117,101,120],hsv:[290.5,.2,.5],sat:38,val:338},{rgb:[171,90,77],hsv:[8.3,.5,.7],sat:188,val:338},{rgb:[143,69,126],hsv:[313.8,.5,.6],sat:148,val:338},{rgb:[157,117,64],hsv:[34.2,.6,.6],sat:186,val:338},{rgb:[93,97,147],hsv:[235.6,.4,.6],sat:108,val:337},{rgb:[118,66,152],hsv:[276.3,.6,.6],sat:172,val:336},{rgb:[122,142,71],hsv:[76.9,.5,.6],sat:142,val:335},{rgb:[152,105,78],hsv:[21.9,.5,.6],sat:148,val:335},{rgb:[126,77,132],hsv:[293.5,.4,.5],sat:110,val:335},{rgb:[117,117,101],hsv:[60,.1,.5],sat:32,val:335},{rgb:[161,85,88],hsv:[357.6,.5,.6],sat:152,val:334},{rgb:[45,167,121],hsv:[157.4,.7,.7],sat:244,val:333},{rgb:[189,76,67],hsv:[4.4,.6,.7],sat:244,val:332},{rgb:[0,176,156],hsv:[173.2,1,.7],sat:352,val:332},{rgb:[88,118,126],hsv:[192.6,.3,.5],sat:76,val:332},{rgb:[160,66,106],hsv:[334.5,.6,.6],sat:188,val:332},{rgb:[145,112,75],hsv:[31.7,.5,.6],sat:140,val:332},{rgb:[91,81,159],hsv:[247.7,.5,.6],sat:156,val:331},{rgb:[0,193,138],hsv:[162.9,1,.8],sat:386,val:331},{rgb:[0,123,208],hsv:[204.5,1,.8],sat:416,val:331},{rgb:[164,81,86],hsv:[356.4,.5,.6],sat:166,val:331},{rgb:[165,72,94],hsv:[345.8,.6,.6],sat:186,val:331},{rgb:[147,113,70],hsv:[33.5,.5,.6],sat:154,val:330},{rgb:[119,76,135],hsv:[283.7,.4,.5],sat:118,val:330},{rgb:[173,85,72],hsv:[7.7,.6,.7],sat:202,val:330},{rgb:[98,105,127],hsv:[225.5,.2,.5],sat:58,val:330},{rgb:[137,104,89],hsv:[18.8,.4,.5],sat:96,val:330},{rgb:[74,124,132],hsv:[188.3,.4,.5],sat:116,val:330},{rgb:[111,142,77],hsv:[88.6,.5,.6],sat:130,val:330},{rgb:[172,88,70],hsv:[10.6,.6,.7],sat:204,val:330},{rgb:[82,122,125],hsv:[184.2,.3,.5],sat:86,val:329},{rgb:[116,98,115],hsv:[303.3,.2,.5],sat:36,val:329},{rgb:[111,109,109],hsv:[0,0,.4],sat:4,val:329},{rgb:[116,113,100],hsv:[48.8,.1,.5],sat:32,val:329},{rgb:[106,134,89],hsv:[97.3,.3,.5],sat:90,val:329},{rgb:[87,112,130],hsv:[205.1,.3,.5],sat:86,val:329},{rgb:[109,109,111],hsv:[240,0,.4],sat:4,val:329},{rgb:[112,62,155],hsv:[272.3,.6,.6],sat:186,val:329},{rgb:[157,97,74],hsv:[16.6,.5,.6],sat:166,val:328},{rgb:[142,83,103],hsv:[339.7,.4,.6],sat:118,val:328},{rgb:[147,87,94],hsv:[353,.4,.6],sat:120,val:328},{rgb:[86,106,136],hsv:[216,.4,.5],sat:100,val:328},{rgb:[85,105,138],hsv:[217.4,.4,.5],sat:106,val:328},{rgb:[108,94,126],hsv:[266.3,.3,.5],sat:64,val:328},{rgb:[117,98,112],hsv:[315.8,.2,.5],sat:38,val:327},{rgb:[146,107,74],hsv:[27.5,.5,.6],sat:144,val:327},{rgb:[160,72,94],hsv:[345,.6,.6],sat:176,val:326},{rgb:[92,76,158],hsv:[251.7,.5,.6],sat:164,val:326},{rgb:[101,129,95],hsv:[109.4,.3,.5],sat:68,val:325},{rgb:[176,90,59],hsv:[15.9,.7,.7],sat:234,val:325},{rgb:[178,68,79],hsv:[354,.6,.7],sat:220,val:325},{rgb:[128,73,124],hsv:[304.4,.4,.5],sat:110,val:325},{rgb:[36,162,127],hsv:[163.3,.8,.6],sat:252,val:325},{rgb:[119,113,93],hsv:[46.2,.2,.5],sat:52,val:325},{rgb:[139,89,96],hsv:[351.6,.4,.5],sat:100,val:324},{rgb:[164,72,88],hsv:[349.6,.6,.6],sat:184,val:324},{rgb:[76,146,102],hsv:[142.3,.5,.6],sat:140,val:324},{rgb:[84,121,119],hsv:[176.8,.3,.5],sat:74,val:324},{rgb:[181,76,67],hsv:[4.7,.6,.7],sat:228,val:324},{rgb:[130,95,98],hsv:[354.9,.3,.5],sat:70,val:323},{rgb:[137,100,86],hsv:[16.5,.4,.5],sat:102,val:323},{rgb:[109,114,100],hsv:[81.4,.1,.4],sat:28,val:323},{rgb:[105,123,95],hsv:[98.6,.2,.5],sat:56,val:323},{rgb:[57,109,157],hsv:[208.8,.6,.6],sat:200,val:323},{rgb:[106,109,108],hsv:[160,0,.4],sat:6,val:323},{rgb:[0,168,155],hsv:[175.4,1,.7],sat:336,val:323},{rgb:[146,86,91],hsv:[355,.4,.6],sat:120,val:323},{rgb:[0,178,144],hsv:[168.5,1,.7],sat:356,val:322},{rgb:[131,114,77],hsv:[41.1,.4,.5],sat:108,val:322},{rgb:[162,95,65],hsv:[18.6,.6,.6],sat:194,val:322},{rgb:[116,112,94],hsv:[49.1,.2,.5],sat:44,val:322},{rgb:[51,178,93],hsv:[139.8,.7,.7],sat:254,val:322},{rgb:[118,107,96],hsv:[30,.2,.5],sat:44,val:321},{rgb:[130,103,88],hsv:[21.4,.3,.5],sat:84,val:321},{rgb:[49,110,161],hsv:[207.3,.7,.6],sat:224,val:320},{rgb:[122,94,104],hsv:[338.6,.2,.5],sat:56,val:320},{rgb:[138,83,99],hsv:[342.5,.4,.5],sat:110,val:320},{rgb:[110,117,92],hsv:[76.8,.2,.5],sat:50,val:319},{rgb:[14,119,186],hsv:[203.4,.9,.7],sat:344,val:319},{rgb:[101,98,120],hsv:[248.2,.2,.5],sat:44,val:319},{rgb:[67,88,163],hsv:[226.9,.6,.6],sat:192,val:318},{rgb:[135,83,100],hsv:[340.4,.4,.5],sat:104,val:318},{rgb:[179,74,65],hsv:[4.7,.6,.7],sat:228,val:318},{rgb:[49,177,92],hsv:[140.2,.7,.7],sat:256,val:318},{rgb:[110,137,71],hsv:[84.5,.5,.5],sat:132,val:318},{rgb:[78,156,84],hsv:[124.6,.5,.6],sat:156,val:318},{rgb:[68,144,106],hsv:[150,.5,.6],sat:152,val:318},{rgb:[131,87,99],hsv:[343.6,.3,.5],sat:88,val:317},{rgb:[160,79,78],hsv:[.7,.5,.6],sat:164,val:317},{rgb:[79,101,137],hsv:[217.2,.4,.5],sat:116,val:317},{rgb:[88,131,98],hsv:[134,.3,.5],sat:86,val:317},{rgb:[116,113,87],hsv:[53.8,.3,.5],sat:58,val:316},{rgb:[97,120,98],hsv:[122.6,.2,.5],sat:46,val:315},{rgb:[139,83,93],hsv:[349.3,.4,.5],sat:112,val:315},{rgb:[108,106,101],hsv:[42.9,.1,.4],sat:14,val:315},{rgb:[144,79,92],hsv:[348,.5,.6],sat:130,val:315},{rgb:[105,115,95],hsv:[90,.2,.5],sat:40,val:315},{rgb:[31,152,132],hsv:[170.1,.8,.6],sat:242,val:315},{rgb:[92,130,92],hsv:[120,.3,.5],sat:76,val:314},{rgb:[175,74,65],hsv:[4.9,.6,.7],sat:220,val:314},{rgb:[128,106,80],hsv:[32.5,.4,.5],sat:96,val:314},{rgb:[106,94,113],hsv:[277.9,.2,.4],sat:38,val:313},{rgb:[104,97,111],hsv:[270,.1,.4],sat:28,val:312},{rgb:[129,69,114],hsv:[315,.5,.5],sat:120,val:312},{rgb:[99,117,96],hsv:[111.4,.2,.5],sat:42,val:312},{rgb:[6,197,109],hsv:[152.4,1,.8],sat:382,val:312},{rgb:[127,83,101],hsv:[335.5,.3,.5],sat:88,val:311},{rgb:[26,189,96],hsv:[145.8,.9,.7],sat:326,val:311},{rgb:[140,103,68],hsv:[29.2,.5,.5],sat:144,val:311},{rgb:[90,124,97],hsv:[132.4,.3,.5],sat:68,val:311},{rgb:[103,103,105],hsv:[240,0,.4],sat:4,val:311},{rgb:[159,75,77],hsv:[358.6,.5,.6],sat:168,val:311},{rgb:[101,105,104],hsv:[165,0,.4],sat:8,val:310},{rgb:[85,100,125],hsv:[217.5,.3,.5],sat:80,val:310},{rgb:[78,145,87],hsv:[128.1,.5,.6],sat:134,val:310},{rgb:[97,135,78],hsv:[100,.4,.5],sat:114,val:310},{rgb:[47,101,162],hsv:[211.8,.7,.6],sat:230,val:310},{rgb:[104,69,136],hsv:[271.3,.5,.5],sat:134,val:309},{rgb:[118,99,92],hsv:[16.2,.2,.5],sat:52,val:309},{rgb:[101,90,118],hsv:[263.6,.2,.5],sat:56,val:309},{rgb:[0,181,128],hsv:[162.4,1,.7],sat:362,val:309},{rgb:[90,106,113],hsv:[198.3,.2,.4],sat:46,val:309},{rgb:[148,63,98],hsv:[335.3,.6,.6],sat:170,val:309},{rgb:[154,82,72],hsv:[7.3,.5,.6],sat:164,val:308},{rgb:[115,115,77],hsv:[60,.3,.5],sat:76,val:307},{rgb:[119,122,66],hsv:[63.2,.5,.5],sat:112,val:307},{rgb:[94,98,115],hsv:[228.6,.2,.5],sat:42,val:307},{rgb:[139,93,74],hsv:[17.5,.5,.5],sat:130,val:306},{rgb:[142,93,71],hsv:[18.6,.5,.6],sat:142,val:306},{rgb:[103,90,113],hsv:[273.9,.2,.4],sat:46,val:306},{rgb:[142,94,69],hsv:[20.5,.5,.6],sat:146,val:305},{rgb:[122,85,98],hsv:[338.9,.3,.5],sat:74,val:305},{rgb:[96,79,130],hsv:[260,.4,.5],sat:102,val:305},{rgb:[0,148,157],hsv:[183.4,1,.6],sat:314,val:305},{rgb:[2,139,163],hsv:[188.9,1,.6],sat:322,val:304},{rgb:[144,85,75],hsv:[8.7,.5,.6],sat:138,val:304},{rgb:[67,152,85],hsv:[132.7,.6,.6],sat:170,val:304},{rgb:[99,103,102],hsv:[165,0,.4],sat:8,val:304},{rgb:[50,102,152],hsv:[209.4,.7,.6],sat:204,val:304},{rgb:[107,105,91],hsv:[52.5,.1,.4],sat:32,val:303},{rgb:[93,72,138],hsv:[259.1,.5,.5],sat:132,val:303},{rgb:[98,126,79],hsv:[95.7,.4,.5],sat:94,val:303},{rgb:[88,73,141],hsv:[253.2,.5,.6],sat:136,val:302},{rgb:[145,66,91],hsv:[341,.5,.6],sat:158,val:302},{rgb:[84,136,81],hsv:[116.7,.4,.5],sat:110,val:301},{rgb:[0,133,168],hsv:[192.5,1,.7],sat:336,val:301},{rgb:[83,98,120],hsv:[215.7,.3,.5],sat:74,val:301},{rgb:[121,77,103],hsv:[324.5,.4,.5],sat:88,val:301},{rgb:[107,113,81],hsv:[71.3,.3,.4],sat:64,val:301},{rgb:[151,81,68],hsv:[9.4,.5,.6],sat:166,val:300},{rgb:[100,100,100],hsv:[0,0,.4],sat:0,val:300},{rgb:[138,85,76],hsv:[8.7,.4,.5],sat:124,val:299},{rgb:[0,192,107],hsv:[153.4,1,.8],sat:384,val:299},{rgb:[59,94,146],hsv:[215.9,.6,.6],sat:174,val:299},{rgb:[106,102,91],hsv:[44,.1,.4],sat:30,val:299},{rgb:[92,89,118],hsv:[246.2,.2,.5],sat:58,val:299},{rgb:[109,118,71],hsv:[71.5,.4,.5],sat:94,val:298},{rgb:[133,91,74],hsv:[17.3,.4,.5],sat:118,val:298},{rgb:[61,115,122],hsv:[186.9,.5,.5],sat:122,val:298},{rgb:[95,77,126],hsv:[262,.4,.5],sat:98,val:298},{rgb:[119,87,91],hsv:[352.5,.3,.5],sat:64,val:297},{rgb:[114,110,73],hsv:[54.1,.4,.4],sat:82,val:297},{rgb:[142,85,70],hsv:[12.5,.5,.6],sat:144,val:297},{rgb:[122,100,75],hsv:[31.9,.4,.5],sat:94,val:297},{rgb:[127,94,76],hsv:[21.2,.4,.5],sat:102,val:297},{rgb:[88,111,97],hsv:[143.5,.2,.4],sat:46,val:296},{rgb:[131,90,75],hsv:[16.1,.4,.5],sat:112,val:296},{rgb:[98,104,94],hsv:[96,.1,.4],sat:20,val:296},{rgb:[160,70,66],hsv:[2.6,.6,.6],sat:188,val:296},{rgb:[120,102,74],hsv:[36.5,.4,.5],sat:92,val:296},{rgb:[126,83,86],hsv:[355.8,.3,.5],sat:86,val:295},{rgb:[75,110,110],hsv:[180,.3,.4],sat:70,val:295},{rgb:[0,155,140],hsv:[174.2,1,.6],sat:310,val:295},{rgb:[100,103,91],hsv:[75,.1,.4],sat:24,val:294},{rgb:[0,159,135],hsv:[170.9,1,.6],sat:318,val:294},{rgb:[0,174,119],hsv:[161,1,.7],sat:348,val:293},{rgb:[45,102,146],hsv:[206.1,.7,.6],sat:202,val:293},{rgb:[93,95,105],hsv:[230,.1,.4],sat:24,val:293},{rgb:[117,70,105],hsv:[315.3,.4,.5],sat:94,val:292},{rgb:[80,115,97],hsv:[149.1,.3,.5],sat:70,val:292},{rgb:[100,98,94],hsv:[40,.1,.4],sat:12,val:292},{rgb:[0,159,133],hsv:[170.2,1,.6],sat:318,val:292},{rgb:[91,80,121],hsv:[256.1,.3,.5],sat:82,val:292},{rgb:[121,96,75],hsv:[27.4,.4,.5],sat:92,val:292},{rgb:[63,113,115],hsv:[182.3,.5,.5],sat:104,val:291},{rgb:[155,73,63],hsv:[6.5,.6,.6],sat:184,val:291},{rgb:[82,115,93],hsv:[140,.3,.5],sat:66,val:290},{rgb:[124,87,79],hsv:[10.7,.4,.5],sat:90,val:290},{rgb:[80,111,99],hsv:[156.8,.3,.4],sat:62,val:290},{rgb:[111,88,91],hsv:[352.2,.2,.4],sat:46,val:290},{rgb:[86,91,112],hsv:[228.5,.2,.4],sat:52,val:289},{rgb:[128,87,74],hsv:[14.4,.4,.5],sat:108,val:289},{rgb:[114,72,102],hsv:[317.1,.4,.4],sat:84,val:288},{rgb:[104,93,91],hsv:[9.2,.1,.4],sat:26,val:288},{rgb:[104,93,91],hsv:[9.2,.1,.4],sat:26,val:288},{rgb:[138,80,70],hsv:[8.8,.5,.5],sat:136,val:288},{rgb:[86,109,90],hsv:[130.4,.2,.4],sat:46,val:285},{rgb:[0,160,125],hsv:[166.9,1,.6],sat:320,val:285},{rgb:[96,90,99],hsv:[280,.1,.4],sat:18,val:285},{rgb:[108,100,76],hsv:[45,.3,.4],sat:64,val:284},{rgb:[67,94,123],hsv:[211.1,.5,.5],sat:112,val:284},{rgb:[98,73,113],hsv:[277.5,.4,.4],sat:80,val:284},{rgb:[58,123,102],hsv:[160.6,.5,.5],sat:130,val:283},{rgb:[91,96,96],hsv:[180,.1,.4],sat:10,val:283},{rgb:[85,84,114],hsv:[242,.3,.4],sat:60,val:283},{rgb:[76,122,84],hsv:[130.4,.4,.5],sat:92,val:282},{rgb:[62,86,134],hsv:[220,.5,.5],sat:144,val:282},{rgb:[119,70,93],hsv:[331.8,.4,.5],sat:98,val:282},{rgb:[99,93,89],hsv:[24,.1,.4],sat:20,val:281},{rgb:[0,103,178],hsv:[205.3,1,.7],sat:356,val:281},{rgb:[97,54,130],hsv:[273.9,.6,.5],sat:152,val:281},{rgb:[68,112,101],hsv:[165,.4,.4],sat:88,val:281},{rgb:[96,95,90],hsv:[50,.1,.4],sat:12,val:281},{rgb:[69,118,94],hsv:[150.6,.4,.5],sat:98,val:281},{rgb:[0,117,163],hsv:[196.9,1,.6],sat:326,val:280},{rgb:[115,86,79],hsv:[11.7,.3,.5],sat:72,val:280},{rgb:[24,90,165],hsv:[211.9,.9,.6],sat:282,val:279},{rgb:[0,156,123],hsv:[167.3,1,.6],sat:312,val:279},{rgb:[109,80,90],hsv:[339.3,.3,.4],sat:58,val:279},{rgb:[0,179,100],hsv:[153.5,1,.7],sat:358,val:279},{rgb:[129,77,72],hsv:[5.3,.4,.5],sat:114,val:278},{rgb:[124,88,66],hsv:[22.8,.5,.5],sat:116,val:278},{rgb:[97,50,130],hsv:[275.3,.6,.5],sat:160,val:277},{rgb:[90,93,94],hsv:[195,0,.4],sat:8,val:277},{rgb:[106,95,74],hsv:[39.4,.3,.4],sat:64,val:275},{rgb:[69,88,118],hsv:[216.7,.4,.5],sat:98,val:275},{rgb:[56,124,95],hsv:[154.4,.5,.5],sat:136,val:275},{rgb:[78,104,93],hsv:[154.6,.3,.4],sat:52,val:275},{rgb:[75,115,85],hsv:[135,.3,.5],sat:80,val:275},{rgb:[90,95,89],hsv:[110,.1,.4],sat:12,val:274},{rgb:[78,78,118],hsv:[240,.3,.5],sat:80,val:274},{rgb:[0,157,115],hsv:[163.9,1,.6],sat:314,val:272},{rgb:[94,89,89],hsv:[0,.1,.4],sat:10,val:272},{rgb:[109,89,74],hsv:[25.7,.3,.4],sat:70,val:272},{rgb:[90,90,92],hsv:[240,0,.4],sat:4,val:272},{rgb:[0,157,115],hsv:[163.9,1,.6],sat:314,val:272},{rgb:[76,94,101],hsv:[196.8,.2,.4],sat:50,val:271},{rgb:[0,126,145],hsv:[187.9,1,.6],sat:290,val:271},{rgb:[89,83,98],hsv:[264,.2,.4],sat:30,val:270},{rgb:[76,80,114],hsv:[233.7,.3,.4],sat:76,val:270},{rgb:[93,91,86],hsv:[42.9,.1,.4],sat:14,val:270},{rgb:[73,99,98],hsv:[177.7,.3,.4],sat:52,val:270},{rgb:[113,77,79],hsv:[356.7,.3,.4],sat:72,val:269},{rgb:[106,69,93],hsv:[321.1,.3,.4],sat:74,val:268},{rgb:[92,82,94],hsv:[290,.1,.4],sat:24,val:268},{rgb:[66,83,119],hsv:[220.8,.4,.5],sat:106,val:268},{rgb:[109,85,73],hsv:[20,.3,.4],sat:72,val:267},{rgb:[0,121,145],hsv:[189.9,1,.6],sat:290,val:266},{rgb:[111,82,72],hsv:[15.4,.4,.4],sat:78,val:265},{rgb:[93,87,85],hsv:[15,.1,.4],sat:16,val:265},{rgb:[113,75,77],hsv:[356.8,.3,.4],sat:76,val:265},{rgb:[77,93,95],hsv:[186.7,.2,.4],sat:36,val:265},{rgb:[0,119,145],hsv:[190.8,1,.6],sat:290,val:264},{rgb:[84,95,85],hsv:[125.5,.1,.4],sat:22,val:264},{rgb:[93,87,83],hsv:[24,.1,.4],sat:20,val:263},{rgb:[0,172,90],hsv:[151.4,1,.7],sat:344,val:262},{rgb:[69,107,85],hsv:[145.3,.4,.4],sat:76,val:261},{rgb:[0,120,140],hsv:[188.6,1,.5],sat:280,val:260},{rgb:[53,90,117],hsv:[205.3,.5,.5],sat:128,val:260},{rgb:[106,82,70],hsv:[20,.3,.4],sat:72,val:258},{rgb:[74,79,105],hsv:[230.3,.3,.4],sat:62,val:258},{rgb:[75,94,87],hsv:[157.9,.2,.4],sat:38,val:256},{rgb:[0,164,92],hsv:[153.7,1,.6],sat:328,val:256},{rgb:[71,100,85],hsv:[149,.3,.4],sat:58,val:256},{rgb:[89,68,99],hsv:[280.6,.3,.4],sat:62,val:256},{rgb:[74,87,94],hsv:[201,.2,.4],sat:40,val:255},{rgb:[79,82,93],hsv:[227.1,.2,.4],sat:28,val:254},{rgb:[82,86,85],hsv:[165,0,.3],sat:8,val:253},{rgb:[0,146,107],hsv:[164,1,.6],sat:292,val:253},{rgb:[102,81,70],hsv:[20.6,.3,.4],sat:64,val:253},{rgb:[106,76,70],hsv:[10,.3,.4],sat:72,val:252},{rgb:[0,167,85],hsv:[150.5,1,.7],sat:334,val:252},{rgb:[93,76,83],hsv:[335.3,.2,.4],sat:34,val:252},{rgb:[72,79,100],hsv:[225,.3,.4],sat:56,val:251},{rgb:[25,108,118],hsv:[186.5,.8,.5],sat:186,val:251},{rgb:[53,88,110],hsv:[203.2,.5,.4],sat:114,val:251},{rgb:[101,80,69],hsv:[20.6,.3,.4],sat:64,val:250},{rgb:[99,80,70],hsv:[20.7,.3,.4],sat:58,val:249},{rgb:[12,124,112],hsv:[173.6,.9,.5],sat:224,val:248},{rgb:[15,155,77],hsv:[146.6,.9,.6],sat:280,val:247},{rgb:[47,90,110],hsv:[199,.6,.4],sat:126,val:247},{rgb:[0,113,131],hsv:[188.2,1,.5],sat:262,val:244},{rgb:[78,83,83],hsv:[180,.1,.3],sat:10,val:244},{rgb:[99,72,72],hsv:[0,.3,.4],sat:54,val:243},{rgb:[72,78,92],hsv:[222,.2,.4],sat:40,val:242},{rgb:[75,77,87],hsv:[230,.1,.3],sat:24,val:239},{rgb:[90,68,80],hsv:[327.3,.2,.4],sat:44,val:238},{rgb:[63,92,83],hsv:[161.4,.3,.4],sat:58,val:238},{rgb:[51,101,86],hsv:[162,.5,.4],sat:100,val:238},{rgb:[43,99,96],hsv:[176.8,.6,.4],sat:112,val:238},{rgb:[72,82,83],hsv:[185.5,.1,.3],sat:22,val:237},{rgb:[0,146,89],hsv:[156.6,1,.6],sat:292,val:235},{rgb:[0,150,83],hsv:[153.2,1,.6],sat:300,val:233},{rgb:[66,82,85],hsv:[189.5,.2,.3],sat:38,val:233},{rgb:[72,78,82],hsv:[204,.1,.3],sat:20,val:232},{rgb:[64,89,78],hsv:[153.6,.3,.3],sat:50,val:231},{rgb:[92,72,67],hsv:[12,.3,.4],sat:50,val:231},{rgb:[79,73,70],hsv:[20,.1,.3],sat:18,val:222}]},774:(a,s)=\u003e{Object.defineProperty(s,\"__esModule\",{value:!0}),s.legsArr=s.tailArr=s.backArr=s.neckArr=s.headArr=s.faceArr=void 0,s.faceArr=[[[[0,0,0,0,0,0],[-126,0,-126,0,-126,0],[-126,-11,-126,-11,-126,-11],[-48,-11,-48,-11,-48,-11],[-48,-22,-48,-22,-48,-22],[-137,-22,-137,-22,-137,-22],[-137,-66,-137,-66,-137,-66],[-126,-66,-126,-66,-126,-66],[-126,-77,-126,-77,-126,-77],[-48,-77,-48,-77,-48,-77]]],[[[0,0,-14,-2,0,0],[-51,2,-89,24,-30,-10],[-106,5,-110,-7,-103,13],[-92,-21,-93,-22,-92,-20],[-123,-23,-132,-43,-117,-10],[-83,-66,-65,-66,-103,-65],[-48,-78,-48,-78,-48,-78]]],[[[0,0,-16,-4,0,0],[-58,3,-81,18,-36,-10],[-127,0,-140,-26,-114,27],[-83,-61,-53,-60,-116,-61],[-48,-82,-48,-82,-48,-82]]],[[[0,0,-11,0,0,0],[-41,10,-56,10,-24,9],[-88,19,-110,21,-73,18],[-130,18,-140,2,-123,30],[-126,1,-126,1,-126,1],[-124,-9,-124,-9,-124,-9],[-119,0,-119,0,-119,0],[-109,-1,-109,-1,-109,-1],[-107,-10,-107,-10,-107,-10],[-103,-3,-103,-3,-103,-3],[-90,-5,-90,-5,-90,-5],[-88,-13,-88,-13,-88,-13],[-84,-6,-84,-6,-84,-6],[-72,-9,-72,-9,-72,-9],[-70,-16,-70,-16,-70,-16],[-65,-11,-65,-11,-65,-11],[-54,-14,-54,-14,-59,-11],[-52,-22,-52,-22,-52,-22],[-48,-17,-48,-17,-48,-17],[-30,-33,-40,-41,-35,-23],[-51,-43,-51,-43,-51,-43],[-54,-35,-54,-35,-54,-35],[-58,-42,-58,-42,-58,-42],[-68,-41,-68,-41,-68,-41],[-71,-33,-71,-33,-71,-33],[-77,-40,-77,-40,-77,-40],[-87,-38,-87,-38,-87,-38],[-90,-30,-90,-30,-90,-30],[-94,-37,-94,-37,-94,-37],[-107,-36,-107,-36,-107,-36],[-109,-27,-109,-27,-109,-27],[-113,-35,-113,-35,-113,-35],[-124,-35,-124,-35,-124,-35],[-125,-25,-125,-25,-125,-25],[-131,-34,-131,-34,-131,-34],[-152,-39,-158,-54,-147,-25],[-130,-85,-112,-91,-153,-78],[-86,-80,-80,-83,-93,-76],[-65,-84,-59,-89,-70,-79],[-49,-89,-49,-89,-49,-89]]],[[[0,0,0,0,0,0],[0,0,-12,10,0,0],[-48,16,-69,16,-29,16],[-99,-3,-96,-3,-87,9],[-91,-3,-55,-3,-94,-3],[-27,-16,-27,-16,-27,-16],[-91,-30,-98,-30,-55,-30],[-112,-28,-112,-30,-105,-29],[-112,-32,-112,-59,-112,-31],[-48,-80,-48,-80,-83,-80],[-48,-80,-48,-80,-48,-80]]],[[[0,0,-7,1,0,0],[-22,16,-36,26,-13,10],[-60,41,-81,55,-43,31],[-102,47,-106,34,-98,59],[-29,-18,-31,-46,-28,10],[-143,-50,-157,-69,-131,-35],[-112,-89,-90,-95,-132,-83],[-49,-89,-49,-89,-49,-89]]],[[[0,0,0,0,0,0],[-80,0,-80,0,-80,0],[-96,16,-96,16,-96,16],[-112,0,-112,0,-112,0],[-128,16,-128,16,-128,16],[-144,0,-144,0,-144,0],[-160,16,-160,16,-160,16],[-176,16,-176,16,-176,16],[-176,-80,-176,-80,-176,-80],[-160,-80,-160,-80,-160,-80],[-144,-64,-144,-64,-144,-64],[-128,-80,-128,-80,-128,-80],[-112,-64,-112,-64,-112,-64],[-96,-80,-96,-80,-96,-80],[-80,-64,-80,-64,-80,-64],[-48,-64,-48,-64,-48,-64]]],[[[0,0,-15,-3,0,0],[-62,6,-79,9,-37,1],[-143,1,-144,-4,-141,19],[-56,-24,-56,-24,-56,-24],[-152,-31,-152,-45,-151,-24],[-115,-57,-100,-61,-125,-55],[-67,-60,-61,-60,-84,-58],[-57,-73,-53,-79,-60,-68],[-48,-83,-48,-83,-48,-83]]],[[[0,0,-24,0,0,0],[-97,32,-145,32,-48,32],[-176,-16,-176,-30,-176,14],[-158,-50,-161,-68,-169,-42],[-144,-88,-133,-90,-155,-85],[-115,-64,-109,-64,-121,-80],[-97,-65,-48,-65,-103,-65],[-48,-89,-48,-88,-48,-89],[-48,-89,-48,-89,-48,-89]]],[[[0,0,-12,0,0,0],[-62,1,-73,3,-28,-6],[-114,1,-123,-1,-99,4],[-133,-6,-135,-9,-130,-1],[-135,-14,-135,-14,-129,-12],[-148,-25,-150,-29,-145,-14],[-154,-50,-152,-62,-156,-42],[-150,-76,-144,-78,-153,-75],[-144,-86,-131,-127,-144,-86],[-106,-138,-102,-134,-111,-141],[-103,-91,-90,-94,-114,-101],[-49,-95,-49,-95,-49,-95]]],[[[0,0,0,0,0,0],[-48,0,-48,0,-48,0],[-129,-48,-129,-94,-129,-2],[-48,-96,-48,-96,-48,-96]]],[[[0,0,-18,-1,0,0],[-75,20,-88,26,-61,14],[-112,19,-114,16,-108,29],[-104,6,-124,8,-113,10],[-151,-6,-162,-16,-140,6],[-143,-55,-122,-69,-161,-42],[-72,-67,-54,-64,-87,-70],[-49,-63,-49,-63,-49,-63]]],[[[0,0,-13,-9,0,0],[-93,1,-137,1,-65,1],[-182,-1,-182,-32,-182,30],[-86,-63,-59,-66,-121,-58],[-48,-81,-48,-81,-48,-81]]],[[[0,0,-6,-3,0,0],[-25,2,-37,8,-15,-3],[-71,15,-105,23,-57,11],[-158,30,-160,24,-148,70],[-149,24,-149,24,-149,24],[-149,1,-145,9,-155,15],[-137,19,-137,19,-143,16],[-124,11,-124,11,-124,11],[-123,-7,-120,0,-128,4],[-111,6,-111,6,-115,4],[-96,0,-96,0,-96,0],[-95,-16,-92,-11,-99,-5],[-87,-4,-87,-4,-90,-7],[-69,-9,-69,-9,-69,-9],[-68,-22,-65,-18,-71,-15],[-58,-13,-58,-13,-62,-15],[-31,-32,-31,-32,-40,-17],[-61,-55,-63,-55,-51,-47],[-66,-44,-69,-44,-65,-50],[-73,-58,-73,-58,-73,-58],[-91,-62,-94,-56,-91,-62],[-95,-46,-95,-46,-96,-51],[-104,-63,-104,-63,-104,-49],[-121,-65,-125,-56,-115,-65],[-126,-45,-126,-45,-127,-53],[-136,-66,-136,-66,-135,-52],[-155,-65,-155,-65,-155,-65],[-157,-43,-157,-43,-162,-57],[-172,-64,-172,-64,-172,-51],[-186,-65,-191,-79,-185,-61],[-183,-99,-182,-107,-184,-86],[-169,-114,-159,-113,-176,-114],[-117,-122,-97,-115,-136,-128],[-78,-116,-66,-113,-94,-119],[-49,-105,-49,-105,-49,-105]]],[[[0,0,-16,0,0,0],[-40,11,-56,15,-16,6],[-96,16,-144,16,-75,16],[-191,-7,-177,-7,-184,6],[-144,-7,-91,-7,-161,-7],[-48,-11,-48,-14,-48,-9],[-144,-16,-161,-16,-91,-16],[-191,-15,-191,-76,-177,-16],[-96,-120,-74,-120,-152,-120],[-48,-120,-48,-120,-48,-120]]],[[[0,0,-13,-1,0,0],[-80,12,-91,12,-26,12],[-122,17,-134,16,-113,17],[-136,6,-137,0,-136,11],[-122,-1,-122,-1,-131,0],[-120,-5,-119,-5,-121,-5],[-118,-2,-112,-2,-118,-2],[-101,-3,-101,-3,-106,-3],[-100,-7,-99,-7,-100,-6],[-97,-4,-93,-4,-97,-4],[-77,-5,-77,-5,-86,-4],[-75,-8,-75,-8,-76,-8],[-73,-5,-66,-6,-73,-5],[-51,-7,-51,-7,-57,-7],[-49,-11,-49,-11,-50,-11],[-48,-8,-35,-10,-49,-9],[-25,-16,-26,-21,-25,-12],[-49,-22,-49,-22,-36,-22],[-50,-19,-50,-18,-49,-19],[-52,-21,-60,-21,-52,-21],[-76,-20,-76,-20,-69,-21],[-77,-16,-78,-16,-77,-16],[-79,-19,-83,-19,-79,-19],[-98,-18,-98,-18,-94,-19],[-100,-14,-100,-14,-99,-14],[-102,-18,-109,-17,-102,-18],[-121,-15,-121,-15,-115,-16],[-122,-11,-123,-11,-122,-11],[-125,-14,-135,-13,-125,-14],[-148,-20,-157,-33,-144,-13],[-147,-107,-80,-112,-170,-106],[-49,-109,-49,-109,-49,-109]]],[[[0,0,-18,-3,0,0],[-81,5,-112,12,-53,-1],[-196,-3,-198,-17,-194,15],[-186,-19,-186,-19,-186,-19],[-197,-41,-195,-54,-198,-25],[-158,-69,-131,-64,-185,-73],[-89,-73,-65,-69,-113,-78],[-49,-101,-49,-101,-49,-101]]],[[[0,0,0,0,0,0],[-48,0,-48,0,-48,0],[-48,32,-48,32,-48,32],[-176,32,-176,32,-176,32],[-176,0,-176,0,-176,0],[-144,0,-144,0,-144,0],[-144,-32,-144,-32,-144,-32],[-112,-32,-112,-32,-112,-32],[-112,-64,-112,-64,-112,-64],[-80,-64,-80,-64,-80,-64],[-80,-96,-80,-96,-80,-96],[-48,-96,-48,-96,-48,-96]]],[[[0,0,-19,0,0,0],[-80,19,-102,17,-49,23],[-127,25,-142,29,-111,21],[-153,6,-132,12,-153,6],[-109,-1,-119,-4,-128,-1],[-163,11,-163,11,-149,-12],[-166,-36,-197,-51,-187,-11],[-206,-106,-202,-113,-210,-71],[-175,-76,-160,-66,-199,-92],[-129,-76,-120,-83,-141,-68],[-91,-95,-60,-96,-105,-94],[-48,-106,-48,-106,-48,-106]]],[[[0,0,0,0,0,0],[-128,0,-128,0,-128,0],[-160,-32,-160,-64,-160,0],[-128,-64,-128,-64,-128,-64],[-48,-64,-48,-64,-48,-64],[-48,-96,-48,-96,-48,-96],[-128,-96,-128,-96,-128,-96],[-160,-128,-160,-160,-160,-96],[-128,-160,-128,-160,-128,-160],[-48,-160,-48,-160,-48,-160]]],[[[0,0,0,0,0,0],[-128,0,-128,0,-128,0],[-128,-20,-143,-20,-128,-20],[-156,-48,-156,-63,-156,-33],[-128,-76,-128,-76,-143,-76],[-128,-96,-128,-96,-128,-96],[-48,-96,-48,-96,-48,-96]]],[[[0,0,-10,-3,0,0],[-23,2,-31,10,-18,-5],[-54,17,-76,27,-39,11],[-82,34,-93,27,-76,38],[-65,11,-59,8,-75,15],[-45,-2,-34,-7,-52,1],[-36,-21,-41,-28,-32,-14],[-64,-26,-75,-27,-50,-25],[-97,-16,-110,-11,-85,-21],[-137,-6,-151,3,-125,-13],[-163,-8,-171,-10,-157,-6],[-169,-34,-163,-49,-174,-22],[-169,-66,-167,-73,-172,-59],[-151,-81,-133,-78,-161,-83],[-76,-91,-58,-87,-121,-101],[-49,-91,-49,-91,-49,-91]]],[[[0,0,-14,-3,0,0],[-39,-11,-61,-9,-22,-13],[-100,4,-144,2,-76,5],[-191,-64,-186,-101,-195,-33],[-84,-39,-56,-46,-124,-28],[-48,-69,-48,-69,-48,-69]]],[[[0,0,-8,0,0,0],[-20,-8,-32,-8,-8,-8],[-48,0,-64,0,-32,0],[-120,0,-120,0,-120,0],[-138,-6,-138,-12,-138,0],[-132,-12,-132,-12,-132,-12],[-126,-18,-126,-18,-126,-18],[-120,-12,-120,-12,-120,-12],[-114,-18,-114,-18,-114,-18],[-108,-12,-108,-12,-108,-12],[-102,-18,-102,-18,-102,-18],[-96,-12,-96,-12,-96,-12],[-90,-18,-90,-18,-90,-18],[-84,-12,-84,-12,-84,-12],[-78,-18,-78,-18,-78,-18],[-72,-12,-72,-12,-72,-12],[-66,-18,-66,-18,-66,-18],[-60,-12,-60,-12,-60,-12],[-54,-18,-54,-18,-54,-18],[-48,-12,-48,-12,-48,-12],[-36,-24,-36,-24,-36,-24],[-48,-36,-48,-36,-48,-36],[-54,-30,-54,-30,-54,-30],[-60,-36,-60,-36,-60,-36],[-66,-30,-66,-30,-66,-30],[-72,-36,-72,-36,-72,-36],[-78,-30,-78,-30,-78,-30],[-84,-36,-84,-36,-84,-36],[-90,-30,-90,-30,-90,-30],[-96,-36,-96,-36,-96,-36],[-102,-30,-102,-30,-102,-30],[-108,-36,-108,-36,-108,-36],[-114,-30,-114,-30,-114,-30],[-120,-36,-120,-36,-120,-36],[-126,-30,-126,-30,-126,-30],[-132,-36,-132,-36,-132,-36],[-138,-42,-138,-66,-138,-36],[-108,-66,-108,-66,-108,-66],[-72,-66,-60,-66,-72,-66],[-48,-76,-48,-76,-48,-76]]],[[[0,0,-12,0,0,0],[-132,0,-152,0,-132,0],[-160,-16,-160,-24,-160,-8],[-132,-32,-132,-32,-152,-32],[-96,-32,-61,-32,-96,-32],[-48,-64,-48,-64,-48,-64]]],[[[0,0,0,0,0,0],[-96,0,-96,0,-96,0],[-96,-16,-96,-16,-96,-16],[-88,-20,-88,-20,-88,-20],[-96,-24,-96,-24,-96,-24],[-96,-64,-96,-64,-96,-64],[-56,-64,-56,-64,-56,-64],[-48,-68,-48,-68,-48,-68]]],[[[0,0,-8,0,0,0],[-32,0,-48,0,-16,0],[-83,9,-101,12,-83,9],[-118,-1,-119,-10,-116,8],[-89,-22,-89,-22,-106,-19],[-105,-20,-131,-15,-105,-20],[-156,-35,-158,-48,-154,-22],[-113,-67,-85,-72,-139,-62],[-52,-84,-52,-84,-52,-84]]],[[[0,0,-11,-2,0,0],[-38,2,-50,6,-23,-2],[-72,18,-98,46,-58,4],[-124,30,-113,28,-119,40],[-84,5,-76,-12,-96,30],[-42,-28,-64,-39,-56,-25],[-96,-39,-115,-59,-86,-29],[-153,-42,-152,-55,-129,-38],[-111,-75,-84,-60,-128,-85],[-61,-82,-51,-81,-77,-84],[-49,-84,-49,-84,-49,-84]]],[[[0,0,-14,0,0,0],[-39,1,-45,4,-27,-3],[-68,13,-88,17,-59,11],[-103,-5,-101,-7,-103,-5],[-70,-16,-56,-37,-79,-2],[-35,-26,-36,-28,-35,-26],[-59,-33,-76,-31,-44,-35],[-93,-15,-115,-16,-68,-14],[-113,-5,-113,-5,-113,-5],[-140,-63,-140,-63,-153,-33],[-151,-78,-144,-82,-146,-67],[-132,-83,-124,-90,-134,-83],[-104,-120,-78,-131,-118,-114],[-49,-123,-49,-123,-49,-123]]],[[[0,0,-11,-4,0,0],[-21,-3,-53,6,-16,-5],[-123,1,-140,4,-86,-5],[-157,-22,-146,-15,-155,-6],[-130,-19,-117,-16,-138,-21],[-88,-26,-100,-34,-107,-29],[-113,-55,-128,-69,-101,-45],[-140,-101,-154,-112,-123,-88],[-156,-124,-154,-129,-167,-88],[-141,-142,-137,-152,-145,-134],[-122,-155,-116,-154,-125,-156],[-112,-158,-107,-168,-112,-158],[-85,-175,-84,-157,-96,-172],[-79,-150,-73,-147,-79,-150],[-62,-133,-58,-123,-66,-140],[-48,-120,-48,-120,-48,-120]]],[[[0,0,-17,0,0,0],[-180,0,-180,0,-180,0],[-180,-52,-180,-52,-180,-52],[-167,-52,-167,-52,-167,-52],[-164,-56,-164,-56,-164,-56],[-161,-52,-161,-52,-161,-52],[-107,-52,-107,-52,-107,-52],[-104,-56,-104,-56,-104,-56],[-100,-52,-100,-52,-100,-52],[-69,-52,-69,-52,-69,-52],[-90,-55,-90,-55,-90,-55],[-94,-52,-94,-52,-94,-52],[-97,-57,-97,-57,-97,-57],[-145,-65,-145,-65,-145,-65],[-149,-61,-149,-61,-149,-61],[-152,-66,-152,-66,-152,-66],[-160,-68,-160,-68,-160,-68],[-160,-117,-160,-117,-160,-117],[-68,-117,-68,-117,-68,-117],[-48,-143,-48,-143,-48,-143]]],[[[0,0,-15,-5,0,0],[-50,-1,-64,2,-33,-5],[-116,7,-116,7,-77,7],[-200,-15,-200,-36,-200,7],[-115,-42,-115,-42,-115,-42],[-108,-47,-108,-53,-108,-42],[-115,-53,-115,-53,-115,-53],[-200,-79,-200,-101,-200,-58],[-115,-101,-65,-101,-115,-101],[-48,-139,-48,-139,-48,-139]]],[[[0,0,-17,0,0,0],[-40,-21,-49,-9,-31,-9],[-80,0,-97,0,-63,0],[-120,-21,-129,-9,-111,-9],[-160,0,-177,0,-143,0],[-200,-21,-209,-9,-191,-9],[-240,0,-267,0,-223,0],[-288,-48,-288,-75,-288,-21],[-240,-96,-223,-96,-267,-96],[-200,-75,-191,-87,-209,-87],[-160,-96,-143,-96,-177,-96],[-120,-75,-111,-87,-129,-87],[-80,-96,-63,-96,-97,-96],[-48,-112,-48,-112,-48,-112]]],[[[0,0,-14,-3,0,0],[-42,-2,-53,-1,-18,-5],[-141,-5,-157,-5,-124,-4],[-169,-17,-168,-25,-170,-5],[-159,-21,-159,-22,-161,-22],[-154,-26,-154,-26,-154,-26],[-153,-21,-153,-21,-153,-21],[-139,-21,-139,-21,-139,-21],[-135,-26,-135,-26,-135,-26],[-134,-22,-134,-22,-134,-22],[-118,-21,-118,-21,-118,-21],[-114,-26,-114,-26,-114,-26],[-112,-21,-112,-21,-112,-21],[-96,-20,-96,-20,-96,-20],[-91,-25,-91,-25,-91,-25],[-90,-20,-90,-20,-90,-20],[-71,-20,-71,-20,-71,-20],[-68,-25,-68,-25,-68,-25],[-66,-20,-66,-20,-66,-20],[-38,-44,-37,-68,-38,-20],[-68,-71,-68,-71,-63,-71],[-71,-66,-71,-66,-71,-66],[-75,-72,-75,-72,-75,-72],[-90,-72,-90,-72,-90,-72],[-93,-67,-93,-67,-93,-67],[-96,-73,-96,-73,-96,-73],[-111,-73,-111,-73,-111,-73],[-114,-68,-114,-68,-114,-68],[-117,-74,-117,-74,-117,-74],[-133,-74,-133,-74,-133,-74],[-134,-68,-134,-68,-134,-68],[-138,-74,-138,-74,-138,-74],[-152,-74,-152,-74,-152,-74],[-154,-69,-154,-69,-154,-69],[-159,-75,-159,-75,-159,-75],[-168,-76,-171,-81,-165,-70],[-160,-104,-144,-120,-176,-88],[-95,-105,-82,-100,-106,-111],[-49,-99,-49,-99,-49,-99]]],[[[0,0,-8,0,0,0],[-48,-8,-72,-8,-24,-8],[-72,-20,-88,-32,-72,-20],[-120,-8,-123,-9,-117,-7],[-72,-56,-72,-80,-120,-56],[-48,-80,-48,-80,-48,-80]]],[[[0,0,-13,1,0,0],[-42,-9,-55,-9,-30,-9],[-70,-16,-76,-20,-64,-11],[-62,-23,-59,-23,-66,-23],[-27,-24,-22,-24,-28,-24],[-27,-30,-33,-30,-21,-29],[-70,-31,-96,-31,-58,-32],[-105,-43,-113,-47,-91,-35],[-67,-68,-54,-79,-84,-54],[-48,-99,-48,-99,-48,-99]]],[[[0,0,-8,-4,0,0],[-38,1,-61,8,-23,-5],[-85,26,-100,23,-62,31],[-74,-16,-89,-11,-107,-3],[-114,-33,-111,-53,-115,-17],[-71,-46,-92,-53,-92,-49],[-99,-88,-93,-96,-110,-74],[-68,-83,-58,-67,-78,-99],[-48,-72,-48,-72,-48,-72]]],[[[0,0,0,0,0,0],[-128,0,-128,0,-128,0],[-128,-16,-128,-16,-128,-16],[-160,-16,-160,-16,-160,-16],[-160,-48,-160,-48,-160,-48],[-96,-48,-96,-48,-96,-48],[-96,-64,-96,-64,-96,-64],[-80,-64,-80,-64,-80,-64],[-80,-80,-80,-80,-80,-80],[-64,-80,-64,-80,-64,-80],[-64,-96,-64,-96,-64,-96],[-48,-96,-48,-96,-48,-96]]],[[[0,0,-12,0,0,0],[-32,12,-32,12,-16,12],[-96,12,-96,12,-96,12],[-104,0,-104,0,-104,0],[-52,0,-52,0,-52,0],[-44,-4,-44,-4,-44,-4],[-52,-12,-52,-12,-52,-12],[-104,-12,-104,-12,-104,-12],[-104,-72,-104,-72,-115,-60],[-112,-84,-103,-86,-103,-75],[-96,-84,-84,-100,-100,-86],[-48,-100,-48,-100,-48,-100]]],[[[0,0,-10,-3,0,0],[-22,-3,-33,-3,-15,-3],[-65,-2,-75,-3,-45,-1],[-91,-11,-91,-11,-90,-3],[-59,-11,-59,-11,-59,-11],[-59,-18,-59,-18,-59,-18],[-108,-18,-112,-26,-108,-18],[-106,-46,-120,-65,-109,-44],[-79,-143,-98,-110,-125,-125],[-77,-69,-69,-75,-77,-69],[-49,-82,-49,-82,-49,-82]]],[[[0,0,-10,0,0,0],[-26,-1,-40,17,-20,-9],[-98,21,-98,21,-78,22],[-104,11,-104,11,-104,11],[-98,7,-98,7,-98,7],[-99,1,-99,1,-99,1],[-94,4,-94,4,-94,4],[-84,-3,-84,-3,-84,-3],[-84,-8,-84,-8,-84,-8],[-80,-6,-80,-6,-80,-6],[-69,-13,-69,-13,-69,-13],[-70,-18,-70,-18,-70,-18],[-66,-16,-66,-16,-66,-16],[-55,-23,-55,-23,-55,-23],[-56,-28,-56,-28,-56,-28],[-52,-26,-52,-26,-52,-26],[-34,-38,-34,-38,-34,-38],[-54,-37,-54,-37,-54,-37],[-56,-33,-56,-33,-56,-33],[-59,-37,-59,-37,-59,-37],[-73,-36,-73,-36,-73,-36],[-75,-32,-75,-32,-75,-32],[-78,-36,-78,-36,-78,-36],[-92,-35,-92,-35,-92,-35],[-94,-31,-94,-31,-94,-31],[-97,-35,-97,-35,-97,-35],[-110,-34,-110,-34,-110,-34],[-112,-30,-112,-30,-112,-30],[-115,-34,-115,-34,-115,-34],[-122,-33,-122,-33,-122,-33],[-130,-49,-130,-49,-130,-49],[-90,-82,-71,-79,-106,-84],[-48,-86,-48,-86,-48,-86]]],[[[0,0,-5,-3,0,0],[-18,-2,-20,0,-15,-6],[-33,3,-35,6,-30,-1],[-55,8,-57,12,-52,2],[-79,7,-82,10,-75,4],[-106,4,-110,6,-100,1],[-121,-7,-122,-10,-121,3],[-113,-16,-109,-15,-120,-18],[-101,-17,-101,-13,-102,-20],[-87,-15,-87,-13,-87,-17],[-72,-17,-72,-23,-72,-15],[-86,-21,-87,-25,-86,-18],[-102,-25,-105,-29,-100,-21],[-124,-27,-126,-34,-123,-24],[-130,-35,-128,-38,-132,-29],[-132,-49,-127,-53,-136,-46],[-123,-61,-111,-60,-128,-61],[-97,-64,-91,-61,-110,-70],[-79,-69,-70,-64,-88,-74],[-62,-70,-60,-67,-64,-72],[-49,-74,-49,-74,-49,-74]]],[[[0,0,0,0,0,0],[-112,0,-112,0,-112,0],[-128,-16,-128,-32,-128,0],[-112,-32,-112,-32,-112,-32],[-128,-48,-128,-64,-128,-32],[-112,-64,-112,-64,-112,-64],[-48,-64,-48,-64,-48,-64]]],[[[0,0,-8,-2,0,0],[-17,-6,-32,-8,-12,-6],[-59,10,-72,19,-45,1],[-110,57,-119,52,-99,63],[-110,47,-110,47,-112,49],[-112,34,-112,34,-112,34],[-105,43,-105,43,-105,43],[-96,33,-96,33,-96,33],[-97,22,-97,22,-97,22],[-92,27,-92,27,-92,27],[-81,17,-81,17,-81,17],[-83,8,-83,8,-83,8],[-77,14,-77,14,-77,14],[-64,4,-64,4,-64,4],[-65,-5,-65,-5,-65,-5],[-59,1,-59,1,-59,1],[-45,-9,-45,-9,-45,-9],[-43,-15,-43,-15,-43,-15],[-39,-11,-39,-11,-39,-11],[-11,-24,-16,-33,-20,-13],[-46,-38,-46,-38,-41,-36],[-47,-30,-47,-30,-47,-30],[-52,-40,-52,-40,-52,-40],[-70,-49,-70,-49,-70,-49],[-73,-40,-73,-40,-73,-40],[-75,-52,-75,-52,-75,-52],[-95,-63,-95,-63,-95,-63],[-99,-53,-99,-53,-99,-53],[-101,-67,-101,-67,-101,-67],[-119,-81,-119,-81,-119,-81],[-124,-68,-124,-68,-124,-68],[-124,-85,-124,-85,-124,-85],[-138,-98,-138,-98,-138,-98],[-146,-82,-146,-82,-146,-82],[-144,-104,-148,-103,-144,-103],[-130,-122,-107,-124,-152,-121],[-87,-71,-69,-54,-121,-103],[-48,-55,-48,-55,-48,-55]]],[[[0,0,-20,3,0,0],[-79,-2,-102,6,-28,-18],[-131,3,-131,3,-123,10],[-150,21,-154,22,-146,5],[-160,-1,-161,-11,-160,11],[-146,-27,-121,-36,-157,-23],[-81,-59,-54,-66,-112,-51],[-48,-81,-48,-81,-48,-81]]],[[[0,0,-15,0,0,0],[-38,-6,-65,-6,-26,-6],[-79,3,-85,-4,-71,10],[-62,-14,-49,-19,-72,-11],[-37,-21,-37,-21,-37,-21],[-70,-23,-96,-22,-55,-23],[-191,-31,-185,-44,-177,-23],[-77,-63,-69,-84,-87,-39],[-49,-93,-49,-93,-49,-93]]],[[[0,0,0,0,0,0],[-64,4,-96,4,-36,4],[-129,-4,-137,-4,-125,-4],[-143,-18,-143,-22,-143,-10],[-139,-28,-141,-30,-141,-25],[-143,-38,-143,-45,-143,-34],[-129,-51,-129,-51,-137,-51],[-129,-51,-131,-54,-129,-51],[-132,-60,-132,-69,-132,-57],[-116,-76,-107,-76,-125,-76],[-100,-60,-100,-60,-100,-69],[-64,-84,-56,-87,-76,-80],[-48,-88,-48,-88,-48,-88]]],[[[0,0,0,0,0,0],[0,0,-12,13,0,0],[-48,22,-75,22,-29,22],[-107,-18,-107,-18,-98,6],[-130,-42,-130,-64,-130,-19],[-107,-66,-98,-89,-107,-66],[-48,-105,-48,-105,-75,-105],[-48,-105,-48,-105,-48,-105]]],[[[0,0,-14,0,0,0],[-30,13,-36,16,-25,11],[-52,25,-58,28,-42,19],[-68,22,-69,20,-68,25],[-39,2,-41,-1,-38,3],[-72,15,-79,20,-58,5],[-90,15,-107,4,-87,17],[-116,-33,-116,-33,-129,-21],[-116,-44,-116,-44,-116,-44],[-104,-44,-104,-44,-104,-44],[-104,-54,-104,-54,-104,-54],[-92,-53,-92,-53,-92,-53],[-91,-64,-91,-64,-91,-64],[-79,-62,-79,-62,-79,-62],[-78,-73,-78,-73,-78,-73],[-67,-71,-67,-71,-67,-71],[-49,-78,-49,-78,-49,-78]]],[[[0,0,-11,-1,0,0],[-27,2,-45,10,-17,-3],[-82,14,-92,13,-58,15],[-102,7,-102,-1,-101,15],[-84,-1,-95,-2,-90,3],[-118,-8,-120,-13,-116,-2],[-113,-26,-107,-34,-116,-25],[-105,-66,-98,-73,-113,-59],[-55,-73,-50,-77,-65,-67],[-49,-78,-49,-78,-49,-78]]],[[[0,0,0,0,0,0],[-32,16,-32,16,-32,16],[-120,16,-120,16,-120,16],[-120,0,-120,0,-120,0],[-68,0,-68,0,-68,0],[-56,-12,-56,-12,-56,-12],[-68,-24,-68,-24,-68,-24],[-120,-24,-120,-24,-120,-24],[-120,-40,-120,-40,-120,-40],[-68,-40,-58,-40,-68,-40],[-48,-56,-48,-56,-48,-56]]],[[[0,0,-15,-6,0,0],[-35,-2,-48,2,-27,-6],[-77,12,-91,12,-58,12],[-119,2,-119,-3,-120,12],[-111,-5,-102,-5,-116,-6],[-99,-6,-99,-8,-99,-5],[-113,-10,-121,-11,-105,-9],[-118,-29,-112,-39,-123,-21],[-68,-30,-46,-22,-98,-39],[-51,-67,-52,-78,-50,-48],[-48,-86,-48,-86,-48,-86]]],[[[0,0,-10,-2,0,0],[-27,5,-42,12,-18,0],[-73,-2,-89,-15,-61,7],[-154,14,-159,20,-142,-1],[-171,31,-178,32,-163,30],[-178,15,-190,14,-185,25],[-184,-1,-177,-6,-191,5],[-161,-1,-146,2,-169,-3],[-90,-39,-74,-66,-100,-20],[-49,-66,-49,-66,-49,-66]]],[[[0,0,-16,-4,0,0],[-108,-3,-131,-3,-84,-3],[-214,-7,-215,-15,-212,3],[-209,-15,-209,-16,-209,-15],[-205,-21,-205,-21,-205,-21],[-203,-15,-203,-15,-203,-15],[-191,-15,-191,-15,-191,-15],[-188,-21,-188,-21,-188,-21],[-186,-15,-186,-15,-186,-15],[-170,-15,-170,-15,-170,-15],[-167,-21,-167,-21,-167,-21],[-165,-15,-165,-15,-165,-15],[-148,-15,-148,-15,-148,-15],[-147,-21,-147,-21,-147,-21],[-143,-15,-143,-15,-143,-15],[-130,-15,-130,-15,-130,-15],[-127,-21,-127,-21,-127,-21],[-124,-15,-124,-15,-124,-15],[-110,-15,-110,-15,-110,-15],[-107,-21,-107,-21,-107,-21],[-105,-15,-105,-15,-105,-15],[-90,-15,-90,-15,-90,-15],[-87,-21,-87,-21,-87,-21],[-85,-15,-85,-15,-85,-15],[-68,-15,-68,-15,-68,-15],[-66,-21,-66,-21,-66,-21],[-63,-15,-63,-15,-63,-15],[-48,-15,-48,-15,-48,-15],[-45,-21,-45,-21,-45,-21],[-42,-15,-42,-15,-42,-15],[-18,-23,-29,-26,-18,-23],[-44,-34,-44,-34,-41,-33],[-47,-29,-47,-29,-47,-29],[-51,-34,-51,-34,-51,-34],[-66,-34,-66,-34,-66,-34],[-68,-29,-68,-29,-68,-29],[-72,-34,-72,-34,-72,-34],[-87,-34,-87,-34,-87,-34],[-89,-29,-89,-29,-89,-29],[-93,-34,-93,-34,-93,-34],[-106,-34,-106,-34,-106,-34],[-109,-28,-109,-28,-109,-28],[-112,-34,-112,-34,-112,-34],[-125,-34,-125,-34,-125,-34],[-128,-29,-128,-29,-128,-29],[-131,-34,-131,-34,-131,-34],[-144,-34,-144,-34,-144,-34],[-147,-29,-147,-29,-147,-29],[-150,-34,-150,-34,-150,-34],[-166,-34,-166,-34,-166,-34],[-168,-29,-168,-29,-168,-29],[-172,-34,-172,-34,-172,-34],[-190,-34,-190,-34,-190,-34],[-193,-29,-193,-29,-193,-29],[-196,-34,-196,-34,-196,-34],[-210,-34,-210,-34,-210,-34],[-212,-29,-212,-29,-212,-29],[-216,-34,-219,-33,-216,-34],[-218,-46,-211,-53,-224,-39],[-115,-51,-95,-51,-136,-50],[-81,-79,-69,-94,-97,-60],[-49,-110,-49,-110,-49,-110]]],[[[0,0,0,0,0,0],[-12,16,-17,16,-3,17],[-18,8,-18,8,-18,8],[-25,15,-29,14,-21,15],[-29,7,-29,7,-29,7],[-38,13,-41,12,-33,15],[-40,6,-40,6,-40,6],[-47,10,-51,13,-42,6],[-69,6,-69,6,-62,22],[-53,-10,-67,-10,-55,4],[-72,4,-72,4,-72,4],[-93,-5,-98,-14,-88,5],[-77,-36,-65,-41,-97,-28],[-48,-69,-48,-69,-48,-69]]],[[[0,0,-14,1,0,0],[-45,-4,-78,-13,-30,0],[-166,0,-169,-5,-149,26],[-180,1,-184,2,-175,0],[-191,-4,-192,-9,-189,2],[-184,-13,-179,-13,-188,-12],[-169,-18,-163,-42,-170,-10],[-85,-47,-76,-61,-100,-27],[-48,-64,-48,-64,-48,-64]]],[[[0,0,-12,-2,0,0],[-33,5,-45,7,-16,3],[-94,6,-115,6,-70,6],[-138,-9,-139,-17,-136,10],[-133,-25,-133,-25,-138,-22],[-127,-27,-127,-27,-127,-27],[-118,-19,-118,-19,-118,-19],[-108,-27,-108,-27,-108,-27],[-98,-19,-98,-19,-98,-19],[-88,-28,-88,-28,-88,-28],[-78,-18,-78,-18,-78,-18],[-69,-26,-69,-26,-69,-26],[-59,-23,-59,-23,-59,-23],[-69,-32,-69,-32,-69,-32],[-78,-24,-78,-24,-78,-24],[-89,-33,-89,-33,-89,-33],[-98,-25,-98,-25,-98,-25],[-108,-33,-108,-33,-108,-33],[-118,-25,-118,-25,-118,-25],[-126,-33,-126,-33,-126,-33],[-133,-31,-139,-28,-133,-31],[-144,-55,-145,-71,-144,-43],[-89,-93,-76,-107,-103,-77],[-49,-109,-49,-109,-49,-109]]],[[[0,0,-16,-5,0,0],[-54,2,-68,6,-30,-4],[-226,23,-224,23,-225,47],[-220,22,-220,22,-222,23],[-218,17,-218,17,-218,17],[-214,21,-209,20,-214,21],[-196,18,-196,18,-203,19],[-195,13,-195,13,-195,13],[-191,17,-185,16,-191,17],[-172,13,-172,13,-178,15],[-170,9,-170,9,-170,9],[-167,12,-161,11,-167,12],[-149,9,-149,9,-155,10],[-147,3,-147,3,-147,3],[-143,7,-138,6,-143,7],[-127,4,-127,4,-132,5],[-125,-1,-125,-1,-125,-1],[-122,3,-116,1,-122,3],[-104,-1,-104,-1,-110,0],[-102,-7,-102,-7,-102,-7],[-98,-3,-91,-4,-98,-3],[-78,-8,-78,-8,-84,-6],[-76,-13,-76,-13,-76,-13],[-72,-9,-57,-13,-72,-9],[-33,-20,-40,-22,-43,-17],[-75,-19,-75,-19,-55,-21],[-76,-16,-76,-16,-76,-16],[-78,-19,-85,-18,-78,-19],[-100,-16,-100,-16,-92,-17],[-102,-12,-102,-12,-102,-12],[-105,-16,-111,-15,-105,-16],[-124,-14,-124,-14,-118,-14],[-127,-9,-127,-9,-127,-9],[-129,-13,-135,-12,-129,-13],[-146,-11,-146,-11,-140,-12],[-148,-6,-148,-6,-148,-6],[-151,-10,-157,-10,-151,-10],[-169,-8,-169,-8,-163,-9],[-172,-3,-172,-3,-172,-3],[-175,-8,-181,-7,-175,-8],[-193,-5,-193,-5,-187,-6],[-195,0,-195,0,-195,0],[-198,-5,-205,-4,-198,-5],[-216,-3,-216,-3,-211,-3],[-218,2,-218,2,-218,2],[-221,-2,-228,-2,-221,-2],[-232,-3,-233,-20,-232,-2],[-93,-91,-84,-92,-116,-89],[-70,-110,-59,-117,-80,-103],[-48,-120,-48,-120,-48,-120]]],[[[0,0,-11,-3,0,0],[-71,-15,-74,1,-36,-15],[-92,-11,-97,-4,-82,2],[-105,-3,-108,-4,-102,-1],[-112,-15,-125,-6,-111,-8],[-129,-26,-144,-23,-132,-11],[-140,-43,-148,-44,-149,-30],[-153,-51,-154,-54,-152,-47],[-144,-64,-158,-73,-151,-59],[-140,-84,-149,-97,-156,-81],[-129,-101,-130,-108,-144,-104],[-127,-115,-124,-118,-130,-113],[-112,-112,-109,-128,-119,-117],[-92,-116,-82,-129,-101,-129],[-71,-112,-54,-112,-74,-128],[-48,-128,-48,-128,-48,-128]]],[[[0,0,-8,-3,0,0],[-48,12,-54,-12,-42,-12],[-80,8,-72,-16,-60,-13],[-106,-4,-85,-24,-76,-19],[-124,-22,-93,-35,-88,-28],[-130,-44,-94,-48,-94,-39],[-124,-66,-88,-60,-93,-52],[-106,-84,-76,-69,-85,-63],[-80,-96,-60,-75,-72,-71],[-48,-100,-48,-100,-54,-75],[-48,-100,-48,-100,-48,-100]]],[[[0,0,-8,0,0,0],[-38,4,-42,14,-34,-6],[-58,22,-75,21,-48,23],[-125,20,-129,19,-110,26],[-129,11,-129,10,-130,15],[-122,10,-123,7,-127,10],[-121,0,-121,0,-122,3],[-116,10,-106,11,-119,6],[-79,11,-79,9,-91,11],[-77,1,-77,1,-79,6],[-73,11,-70,11,-76,7],[-65,10,-46,6,-67,11],[-52,-83,-53,-87,-44,-69],[-68,-90,-71,-85,-59,-89],[-73,-78,-76,-82,-73,-78],[-77,-90,-90,-92,-77,-86],[-115,-94,-117,-90,-104,-93],[-119,-82,-121,-85,-119,-82],[-123,-94,-125,-94,-122,-91],[-128,-95,-137,-98,-127,-95],[-121,-110,-98,-103,-134,-114],[-56,-105,-50,-109,-61,-101],[-48,-115,-48,-115,-48,-115]]],[[[0,0,0,0,0,0],[-88,0,-100,0,-88,0],[-112,-20,-112,-20,-110,-9],[-185,-20,-187,-18,-185,-20],[-192,-16,-196,-16,-189,-16],[-200,-24,-200,-28,-200,-20],[-192,-32,-189,-32,-196,-32],[-185,-28,-185,-28,-187,-30],[-112,-28,-110,-39,-112,-28],[-88,-48,-88,-48,-100,-48],[-64,-48,-64,-64,-64,-48],[-48,-64,-48,-64,-48,-64]]],[[[0,0,-8,-4,0,0],[-48,0,-72,0,-24,0],[-108,-24,-131,-24,-85,-24],[-160,0,-180,0,-140,0],[-200,-40,-200,-62,-200,-18],[-160,-80,-140,-80,-180,-80],[-108,-56,-85,-55,-129,-57],[-48,-80,-48,-80,-68,-80],[-48,-80,-48,-80,-48,-80]]],[[[0,0,-9,0,0,0],[-64,-18,-106,-18,-31,-18],[-131,38,-133,43,-131,37],[-144,46,-154,46,-139,46],[-157,26,-156,24,-161,35],[-109,-32,-140,-52,-140,-12],[-157,-90,-160,-97,-156,-88],[-150,-109,-143,-112,-157,-106],[-131,-102,-131,-101,-134,-109],[-64,-46,-48,-46,-106,-46],[-48,-102,-48,-102,-48,-102]]],[[[0,0,0,0,0,0],[-48,0,-48,0,-48,0],[-117,0,-117,0,-117,0],[-117,-18,-112,-13,-117,-18],[-97,-9,-83,-9,-105,-9],[-72,-34,-72,-47,-72,-20],[-97,-58,-105,-58,-83,-58],[-117,-49,-117,-49,-112,-54],[-117,-70,-117,-70,-117,-70],[-69,-70,-69,-70,-69,-70],[-48,-88,-48,-88,-48,-88]]],[[[0,0,-24,-2,0,0],[-82,6,-140,7,-60,5],[-297,13,-298,12,-283,23],[-282,11,-282,11,-292,12],[-280,7,-280,7,-280,7],[-278,10,-273,10,-278,10],[-262,9,-262,9,-268,10],[-260,4,-260,4,-260,4],[-257,9,-251,9,-257,9],[-239,8,-239,8,-245,8],[-237,2,-237,2,-237,2],[-233,8,-228,7,-233,8],[-217,6,-217,6,-222,7],[-215,0,-215,0,-215,0],[-210,6,-203,6,-210,6],[-190,5,-190,5,-196,5],[-188,-2,-188,-2,-188,-2],[-183,4,-176,3,-183,4],[-162,2,-162,2,-169,3],[-163,2,-163,2,-163,2],[-160,-4,-160,-4,-160,-4],[-156,2,-148,1,-156,2],[-133,-1,-133,-1,-140,0],[-131,-7,-131,-7,-131,-7],[-127,-2,-111,-5,-127,-2],[-102,-12,-102,-16,-101,-8],[-129,-17,-129,-17,-113,-17],[-131,-11,-131,-11,-131,-11],[-134,-16,-141,-16,-133,-15],[-157,-15,-157,-15,-149,-16],[-160,-10,-160,-10,-160,-10],[-163,-15,-170,-14,-163,-15],[-185,-13,-185,-13,-177,-13],[-188,-7,-188,-7,-188,-7],[-191,-12,-198,-11,-191,-12],[-212,-10,-212,-10,-205,-11],[-214,-5,-214,-5,-214,-5],[-216,-9,-222,-9,-216,-9],[-234,-8,-234,-8,-228,-8],[-236,-3,-236,-3,-236,-3],[-239,-7,-245,-6,-239,-7],[-258,-5,-258,-5,-252,-6],[-260,0,-260,0,-260,0],[-262,-4,-268,-4,-262,-4],[-277,-3,-277,-3,-273,-3],[-280,2,-280,2,-280,2],[-283,-3,-294,-2,-283,-3],[-299,-4,-289,-17,-300,-2],[-90,-40,-83,-54,-102,-18],[-48,-83,-48,-83,-48,-83]]],[[[0,0,-7,9,0,0],[-19,22,-28,28,-12,16],[-45,32,-54,32,-34,32],[-69,26,-76,30,-62,30],[-93,32,-102,32,-85,32],[-117,26,-124,30,-110,30],[-141,32,-150,32,-133,32],[-165,26,-172,30,-158,30],[-189,32,-216,32,-181,32],[-237,-16,-237,-16,-237,11],[-24,-24,-24,-24,-24,-24],[-237,-32,-237,-59,-237,-32],[-189,-80,-181,-80,-216,-80],[-165,-74,-158,-78,-172,-78],[-141,-80,-133,-80,-150,-80],[-117,-74,-110,-78,-124,-78],[-93,-80,-85,-80,-102,-80],[-69,-74,-58,-74,-76,-78],[-49,-83,-49,-83,-49,-83]]],[[[0,0,-9,-3,0,0],[-58,51,-74,67,-31,29],[-127,80,-160,84,-100,77],[-207,57,-203,59,-193,76],[-194,61,-194,61,-199,60],[-192,55,-192,55,-192,55],[-188,63,-181,65,-188,63],[-166,68,-166,68,-173,67],[-163,61,-163,61,-163,61],[-159,69,-150,69,-159,69],[-133,68,-133,68,-142,69],[-133,62,-133,62,-133,62],[-127,67,-118,66,-127,67],[-102,59,-102,59,-110,63],[-102,53,-102,53,-102,53],[-96,56,-74,45,-96,56],[-35,-5,-40,-26,-53,25],[-82,-65,-82,-65,-58,-47],[-88,-64,-88,-64,-88,-64],[-87,-69,-97,-76,-87,-69],[-117,-89,-117,-89,-107,-83],[-125,-86,-125,-86,-125,-86],[-123,-92,-134,-98,-123,-92],[-155,-108,-155,-108,-145,-103],[-162,-104,-162,-104,-162,-104],[-162,-110,-174,-115,-162,-110],[-195,-120,-195,-120,-185,-118],[-202,-114,-202,-114,-202,-114],[-203,-122,-209,-123,-203,-122],[-220,-122,-199,-136,-215,-123],[-160,-129,-110,-112,-179,-136],[-48,-90,-48,-90,-67,-54]]],[[[0,0,-10,-2,0,0],[-49,9,-64,8,-40,9],[-116,6,-124,-11,-113,14],[-112,-19,-100,-12,-112,0],[-98,-29,-85,-24,-98,-23],[-84,-40,-70,-34,-83,-33],[-66,-49,-58,-45,-67,-40],[-48,-53,-48,-53,-54,-42]]],[[[0,0,-9,-4,0,0],[-23,0,-50,7,-13,-2],[-111,19,-120,16,-88,27],[-137,3,-134,0,-141,8],[-121,1,-117,1,-125,2],[-110,-11,-104,-11,-117,-10],[-99,-8,-96,-10,-102,-6],[-90,-20,-83,-23,-96,-17],[-78,-17,-74,-19,-82,-16],[-71,-29,-64,-33,-75,-27],[-55,-27,-51,-30,-59,-25],[-48,-33,-48,-33,-48,-33]]],[[[0,0,-15,0,0,0],[-81,19,-112,19,-48,18],[-144,-16,-144,-42,-144,9],[-82,-50,-55,-50,-97,-51],[-48,-48,-48,-48,-48,-48]]],[[[0,0,-23,0,0,0],[-54,-10,-72,-10,-40,-10],[-108,17,-126,17,-90,17],[-141,-16,-141,-27,-141,2],[-126,-43,-135,-49,-135,-38],[-141,-71,-141,-89,-141,-60],[-108,-104,-90,-104,-126,-104],[-69,-80,-52,-80,-88,-80],[-49,-93,-49,-93,-49,-93]]],[[[0,0,0,0,0,0],[-48,0,-48,0,-48,0],[-111,-38,-111,-38,-103,0],[-158,-38,-158,-38,-158,-38],[-158,-58,-158,-58,-158,-58],[-111,-58,-103,-96,-111,-58],[-48,-96,-48,-96,-48,-96]]],[[[0,0,-16,-6,0,0],[-88,-9,-118,19,-75,-20],[-158,36,-158,36,-147,40],[-151,30,-151,30,-151,30],[-152,26,-152,26,-152,26],[-148,27,-148,27,-148,27],[-135,15,-135,15,-135,15],[-135,12,-135,12,-135,12],[-132,12,-132,12,-132,12],[-117,0,-117,0,-117,0],[-117,-3,-117,-3,-117,-3],[-115,-3,-115,-3,-115,-3],[-104,-14,-104,-14,-104,-14],[-104,-18,-104,-18,-104,-18],[-101,-18,-101,-18,-101,-18],[-87,-36,-87,-41,-87,-31],[-101,-55,-101,-55,-101,-55],[-104,-55,-104,-55,-104,-55],[-105,-58,-105,-58,-105,-58],[-116,-69,-116,-69,-116,-69],[-119,-69,-119,-69,-119,-69],[-120,-72,-120,-72,-120,-72],[-133,-84,-133,-84,-133,-84],[-136,-84,-136,-84,-136,-84],[-136,-87,-136,-87,-136,-87],[-150,-98,-150,-98,-150,-98],[-152,-98,-152,-98,-152,-98],[-152,-101,-152,-101,-152,-101],[-161,-107,-161,-107,-161,-107],[-140,-104,-128,-98,-158,-113],[-85,-61,-80,-55,-101,-77],[-49,-85,-49,-85,-49,-85]]],[[[0,0,-15,-2,0,0],[-82,29,-125,34,-31,22],[-181,-14,-142,23,-176,22],[-44,-30,-44,-81,-44,22],[-181,-42,-180,-70,-156,-82],[-150,-93,-132,-100,-168,-85],[-85,-100,-62,-99,-109,-101],[-48,-122,-48,-122,-48,-122]]],[[[0,0,-6,0,0,0],[-39,19,-48,18,-10,21],[-72,25,-85,37,-58,13],[-137,51,-150,51,-124,51],[-173,34,-173,32,-173,42],[-162,30,-162,26,-168,32],[-157,10,-157,10,-161,14],[-150,27,-137,25,-153,22],[-128,21,-130,16,-135,23],[-126,2,-126,2,-129,8],[-118,17,-109,14,-121,12],[-106,9,-97,-7,-109,14],[-81,-28,-63,-30,-99,-26],[-36,-46,-28,-66,-43,-26],[-15,-92,-15,-92,-21,-90],[-51,-82,-64,-73,-35,-94],[-90,-100,-95,-102,-73,-94],[-116,-102,-115,-96,-103,-103],[-112,-86,-117,-88,-112,-86],[-129,-100,-139,-98,-126,-95],[-153,-96,-152,-90,-142,-98],[-149,-78,-155,-81,-149,-78],[-164,-94,-173,-92,-163,-88],[-187,-89,-187,-82,-180,-91],[-184,-69,-190,-72,-184,-69],[-199,-85,-204,-84,-197,-82],[-210,-82,-210,-82,-208,-83],[-215,-117,-201,-143,-224,-97],[-92,-159,-66,-166,-124,-151],[-48,-173,-48,-173,-48,-173]]],[[[0,0,-15,-3,0,0],[-49,23,-62,32,-34,12],[-119,37,-140,32,-97,43],[-124,7,-124,5,-121,32],[-106,-2,-106,-4,-106,0],[-125,-10,-127,-22,-125,-8],[-128,-42,-129,-52,-128,-34],[-185,-51,-186,-59,-185,-35],[-147,-110,-147,-138,-148,-80],[-101,-150,-80,-151,-121,-148],[-48,-162,-48,-162,-48,-162]]],[[[0,0,-13,-5,0,0],[-45,-18,-76,-10,-25,-23],[-109,41,-113,62,-101,-3],[-137,66,-150,63,-126,69],[-145,24,-119,-20,-159,48],[-76,-38,-76,-38,-76,-38],[-179,-141,-177,-156,-188,-64],[-152,-162,-141,-161,-164,-163],[-132,-136,-136,-69,-131,-153],[-64,-67,-51,-76,-77,-58],[-47,-89,-47,-89,-47,-89]]],[[[0,0,0,0,0,0],[-128,0,-128,0,-128,0],[-128,32,-128,32,-128,32],[-240,-32,-240,-32,-240,-32],[-128,-96,-128,-96,-128,-96],[-128,-64,-128,-64,-128,-64],[-48,-64,-48,-64,-48,-64]]],[[[0,0,-17,2,0,0],[-50,1,-75,-1,-27,3],[-105,7,-129,15,-88,1],[-139,26,-152,29,-131,25],[-131,5,-137,5,-150,12],[-150,3,-176,-2,-144,5],[-200,-29,-195,-35,-208,-20],[-178,-25,-171,-22,-189,-30],[-167,-29,-167,-29,-167,-29],[-160,-18,-156,-17,-168,-21],[-148,-16,-140,-15,-152,-16],[-138,-21,-138,-21,-138,-21],[-129,-14,-125,-14,-136,-15],[-117,-15,-109,-15,-121,-15],[-108,-23,-108,-23,-108,-23],[-98,-18,-94,-18,-104,-17],[-87,-21,-80,-24,-91,-20],[-81,-32,-81,-32,-81,-32],[-70,-30,-53,-41,-77,-26],[-48,-54,-48,-54,-48,-54]]],[[[0,0,0,0,0,0],[-48,28,-48,28,-48,28],[-128,28,-128,28,-128,28],[-176,0,-176,0,-176,0],[-176,-40,-176,-40,-176,-40],[-128,-68,-128,-68,-128,-68],[-64,-68,-64,-68,-64,-68],[-48,-84,-48,-84,-48,-84]]],[[[0,0,-16,-3,0,0],[-55,-12,-59,-19,-41,11],[-78,-14,-88,-5,-67,-23],[-118,4,-127,4,-103,5],[-143,-11,-165,-46,-136,0],[-264,-47,-263,-62,-263,-33],[-143,-83,-137,-94,-165,-49],[-120,-99,-105,-100,-128,-98],[-78,-81,-53,-61,-89,-90],[-48,-103,-48,-103,-48,-103]]],[[[0,0,-12,-1,0,0],[-25,5,-35,9,-14,2],[-62,2,-76,-2,-49,7],[-94,0,-102,11,-87,-12],[-92,41,-76,56,-104,30],[-76,92,-85,112,-67,73],[-125,97,-126,92,-122,115],[-123,85,-122,83,-124,88],[-119,84,-116,81,-120,80],[-116,87,-117,91,-115,84],[-112,99,-107,102,-118,97],[-87,83,-88,64,-85,100],[-134,18,-140,-18,-129,53],[-88,-69,-49,-70,-124,-67],[-48,-85,-48,-85,-48,-85]]],[[[0,0,-9,-4,0,0],[-24,-4,-57,-4,-14,-4],[-133,6,-171,8,-97,5],[-185,-2,-187,-12,-183,9],[-172,-9,-172,-9,-172,-9],[-158,-58,-158,-58,-158,-58],[-146,-8,-146,-8,-146,-8],[-134,-9,-134,-9,-134,-9],[-124,-57,-124,-57,-124,-57],[-109,-10,-109,-10,-109,-10],[-97,-12,-97,-12,-97,-12],[-89,-57,-89,-57,-89,-57],[-76,-13,-76,-13,-76,-13],[-65,-13,-65,-13,-65,-13],[-54,-55,-54,-55,-54,-55],[-42,-16,-42,-16,-42,-16],[-31,-34,-32,-59,-31,-19],[-60,-64,-60,-64,-60,-64],[-71,-19,-71,-19,-71,-19],[-84,-64,-84,-64,-84,-64],[-94,-64,-94,-64,-94,-64],[-103,-17,-103,-17,-103,-17],[-119,-64,-119,-64,-119,-64],[-129,-64,-129,-64,-129,-64],[-140,-15,-140,-15,-140,-15],[-153,-64,-153,-64,-153,-64],[-165,-64,-165,-64,-165,-64],[-176,-13,-176,-13,-176,-13],[-192,-64,-192,-64,-192,-64],[-203,-67,-207,-75,-199,-58],[-158,-88,-141,-84,-194,-97],[-78,-82,-57,-78,-103,-87],[-49,-93,-49,-93,-49,-93]]],[[[0,0,-15,0,0,0],[-48,-5,-56,1,-38,-13],[-77,5,-99,5,-66,5],[-120,-32,-120,-32,-117,-11],[-81,-32,-81,-32,-81,-32],[-81,-45,-81,-45,-81,-45],[-120,-45,-117,-66,-120,-45],[-77,-83,-66,-83,-99,-83],[-48,-72,-48,-72,-56,-79],[-48,-72,-48,-72,-48,-72]]],[[[0,0,-7,1,0,0],[-46,-8,-55,-3,-32,-16],[-75,-10,-84,-21,-67,1],[-110,-28,-123,-27,-89,-30],[-146,-7,-163,0,-127,-15],[-189,-21,-204,-29,-173,-13],[-232,-9,-242,1,-219,-20],[-257,4,-269,2,-246,6],[-257,-6,-249,-2,-264,-9],[-236,-14,-222,-27,-244,-6],[-187,-28,-169,-21,-204,-36],[-147,-17,-130,-27,-163,-8],[-110,-39,-89,-38,-124,-39],[-77,-54,-65,-71,-83,-47],[-48,-60,-48,-60,-48,-60]]],[[[0,0,-15,-2,0,0],[-59,-4,-74,-9,-33,4],[-83,25,-90,39,-77,10],[-103,26,-93,-13,-106,38],[-126,12,-133,7,-116,19],[-121,-13,-124,-25,-119,-2],[-132,-36,-111,-55,-158,-13],[-160,-63,-153,-74,-171,-43],[-130,-82,-119,-83,-142,-81],[-100,-72,-89,-60,-107,-80],[-71,-51,-64,-54,-85,-45],[-57,-68,-53,-73,-63,-61],[-48,-74,-48,-74,-48,-74]]],[[[0,0,0,0,0,0],[-95,0,-103,0,-86,0],[-103,-8,-103,-8,-103,-8],[-95,-17,-86,-17,-103,-17],[-86,-17,-86,-17,-86,-17],[-78,-25,-78,-33,-78,-17],[-86,-33,-86,-33,-86,-33],[-95,-33,-95,-33,-95,-33],[-103,-42,-103,-50,-103,-33],[-95,-50,-95,-50,-95,-50],[-86,-50,-86,-50,-86,-50],[-78,-58,-78,-67,-78,-50],[-86,-67,-86,-67,-86,-67],[-95,-67,-95,-67,-95,-67],[-103,-75,-103,-83,-103,-67],[-95,-83,-95,-83,-95,-83],[-48,-83,-48,-83,-48,-83]]],[[[0,0,0,0,0,0],[-79,0,-79,0,-79,0],[-100,21,-100,21,-100,21],[-121,0,-121,0,-121,0],[-100,-20,-100,-20,-100,-20],[-121,-41,-121,-41,-121,-41],[-100,-62,-100,-62,-100,-62],[-79,-41,-79,-41,-79,-41],[-49,-41,-49,-41,-49,-41],[-49,-72,-49,-72,-49,-72]]],[[[0,0,-16,-3,0,0],[-51,-4,-94,3,-27,-8],[-186,14,-207,15,-151,12],[-230,-24,-231,-34,-227,-3],[-221,-54,-221,-54,-229,-44],[-201,-39,-201,-39,-201,-39],[-186,-59,-186,-59,-186,-59],[-167,-41,-167,-41,-167,-41],[-152,-62,-152,-62,-152,-62],[-132,-45,-132,-45,-132,-45],[-117,-64,-117,-64,-117,-64],[-95,-50,-95,-50,-95,-50],[-83,-71,-83,-71,-83,-71],[-60,-60,-60,-60,-60,-60],[-48,-83,-48,-83,-48,-83]]],[[[0,0,0,0,0,0],[-47,0,-47,0,-47,0],[-90,27,-90,27,-90,27],[-204,1,-204,1,-204,1],[-201,-10,-201,-10,-201,-10],[-196,-8,-196,-8,-196,-8],[-193,-11,-193,-11,-193,-11],[-191,-7,-191,-7,-191,-7],[-186,-6,-186,-6,-186,-6],[-183,-9,-183,-9,-183,-9],[-181,-5,-181,-5,-181,-5],[-176,-3,-176,-3,-176,-3],[-173,-6,-173,-6,-173,-6],[-171,-2,-171,-2,-171,-2],[-166,-1,-166,-1,-166,-1],[-163,-4,-163,-4,-163,-4],[-162,0,-162,0,-162,0],[-157,1,-157,1,-157,1],[-154,-1,-154,-1,-154,-1],[-153,2,-153,2,-153,2],[-147,4,-147,4,-147,4],[-145,2,-145,2,-145,2],[-143,5,-143,5,-143,5],[-137,6,-137,6,-137,6],[-136,5,-136,5,-136,5],[-135,7,-135,7,-135,7],[-95,17,-95,17,-95,17],[-134,3,-134,3,-134,3],[-136,4,-136,4,-136,4],[-136,2,-136,2,-136,2],[-142,0,-142,0,-142,0],[-144,2,-144,2,-144,2],[-145,-1,-145,-1,-145,-1],[-151,-3,-151,-3,-151,-3],[-154,-1,-154,-1,-154,-1],[-154,-4,-154,-4,-154,-4],[-161,-7,-161,-7,-161,-7],[-163,-5,-163,-5,-163,-5],[-164,-7,-164,-7,-164,-7],[-170,-10,-170,-10,-170,-10],[-173,-8,-173,-8,-173,-8],[-173,-11,-173,-11,-173,-11],[-179,-13,-179,-13,-179,-13],[-182,-11,-182,-11,-182,-11],[-182,-14,-182,-14,-182,-14],[-189,-16,-189,-16,-189,-16],[-192,-14,-192,-14,-192,-14],[-193,-18,-193,-18,-193,-18],[-198,-20,-198,-20,-198,-20],[-194,-32,-194,-32,-194,-32],[-90,8,-90,8,-90,8],[-63,-20,-63,-20,-63,-20],[-48,-49,-48,-49,-48,-49]]],[[[0,0,-16,-4,0,0],[-25,9,-28,16,-21,1],[-43,23,-60,23,-32,24],[-71,8,-81,9,-62,8],[-100,23,-114,23,-85,23],[-136,10,-148,13,-125,8],[-167,21,-179,19,-154,22],[-193,9,-207,10,-178,8],[-226,22,-240,18,-212,25],[-251,8,-257,8,-237,8],[-265,-6,-265,-6,-263,2],[-257,-6,-257,-6,-262,-6],[-255,-11,-255,-11,-255,-11],[-252,-6,-250,-6,-252,-6],[-244,-6,-244,-6,-247,-6],[-242,-10,-242,-10,-242,-10],[-239,-5,-237,-5,-239,-5],[-231,-5,-231,-5,-234,-5],[-229,-10,-229,-10,-229,-10],[-226,-5,-224,-5,-226,-5],[-218,-5,-218,-5,-221,-5],[-216,-10,-216,-10,-216,-10],[-213,-4,-211,-4,-213,-4],[-205,-4,-205,-4,-208,-4],[-203,-9,-203,-9,-203,-9],[-201,-4,-198,-4,-201,-4],[-193,-4,-193,-4,-195,-4],[-190,-9,-190,-9,-190,-9],[-188,-4,-185,-4,-188,-4],[-180,-3,-180,-3,-183,-4],[-177,-8,-177,-8,-177,-8],[-175,-3,-172,-3,-175,-3],[-167,-3,-167,-3,-170,-3],[-164,-8,-164,-8,-164,-8],[-162,-3,-159,-3,-162,-3],[-154,-3,-154,-3,-157,-3],[-151,-7,-151,-7,-151,-7],[-149,-3,-146,-3,-149,-3],[-141,-2,-141,-2,-144,-2],[-139,-7,-139,-7,-139,-7],[-136,-2,-134,-2,-136,-2],[-128,-2,-128,-2,-131,-2],[-126,-7,-126,-7,-126,-7],[-123,-2,-121,-2,-123,-2],[-115,-2,-115,-2,-118,-2],[-113,-7,-113,-7,-113,-7],[-110,-2,-107,-2,-110,-2],[-102,-2,-102,-2,-105,-2],[-100,-7,-100,-7,-100,-7],[-97,-2,-95,-2,-97,-2],[-89,-2,-89,-2,-92,-2],[-87,-7,-87,-7,-87,-7],[-85,-2,-82,-2,-85,-2],[-76,-2,-76,-2,-79,-2],[-74,-7,-74,-7,-74,-7],[-71,-2,-67,-2,-71,-2],[-65,-3,-65,-4,-65,-3],[-75,-3,-75,-3,-69,-2],[-78,2,-78,2,-78,2],[-80,-4,-82,-4,-80,-4],[-88,-5,-88,-5,-85,-4],[-91,0,-91,0,-91,0],[-93,-5,-96,-6,-93,-5],[-101,-6,-101,-6,-98,-6],[-104,-1,-104,-1,-104,-1],[-106,-7,-108,-7,-106,-7],[-113,-8,-113,-8,-111,-7],[-116,-3,-116,-3,-116,-3],[-119,-8,-121,-8,-119,-8],[-126,-9,-126,-9,-123,-9],[-129,-4,-129,-4,-129,-4],[-131,-9,-134,-10,-131,-9],[-139,-10,-139,-10,-136,-10],[-142,-5,-142,-5,-142,-5],[-144,-11,-147,-11,-144,-11],[-152,-11,-152,-11,-149,-11],[-155,-6,-155,-6,-155,-6],[-157,-12,-160,-12,-157,-12],[-165,-13,-165,-13,-162,-12],[-168,-8,-168,-8,-168,-8],[-170,-13,-173,-13,-170,-13],[-178,-14,-178,-14,-175,-14],[-181,-9,-181,-9,-181,-9],[-183,-14,-185,-14,-183,-14],[-190,-15,-190,-15,-188,-15],[-193,-10,-193,-10,-193,-10],[-195,-15,-198,-16,-195,-15],[-203,-16,-203,-16,-201,-16],[-206,-11,-206,-11,-206,-11],[-208,-16,-211,-17,-208,-16],[-216,-17,-216,-17,-214,-17],[-219,-12,-219,-12,-219,-12],[-221,-17,-224,-18,-221,-17],[-229,-18,-229,-18,-226,-18],[-232,-13,-232,-13,-232,-13],[-234,-19,-237,-19,-234,-19],[-242,-19,-242,-19,-239,-19],[-245,-14,-245,-14,-245,-14],[-247,-20,-250,-20,-247,-20],[-254,-20,-254,-20,-252,-20],[-258,-15,-258,-15,-258,-15],[-260,-21,-265,-21,-260,-21],[-268,-21,-266,-28,-268,-21],[-251,-36,-241,-37,-261,-34],[-224,-48,-207,-46,-238,-49],[-194,-28,-183,-30,-205,-27],[-165,-41,-146,-42,-184,-41],[-134,-25,-118,-25,-150,-25],[-103,-40,-87,-41,-119,-40],[-73,-17,-56,-19,-87,-16],[-49,-37,-49,-37,-49,-37]]],[[[0,0,-7,-4,0,0],[-17,0,-23,4,-12,-2],[-44,1,-59,-6,-30,8],[-96,17,-112,35,-81,-2],[-119,102,-139,127,-105,82],[-204,117,-211,113,-175,133],[-228,101,-242,96,-221,104],[-227,80,-226,80,-235,79],[-224,82,-224,82,-225,81],[-222,81,-222,81,-222,81],[-221,85,-219,88,-221,83],[-215,94,-215,94,-217,91],[-212,92,-212,92,-212,92],[-212,97,-210,100,-212,97],[-204,106,-203,105,-205,106],[-202,104,-202,104,-202,104],[-201,108,-198,110,-201,108],[-190,113,-190,113,-194,112],[-187,110,-187,110,-187,110],[-187,114,-182,115,-187,114],[-173,116,-172,115,-178,116],[-171,113,-171,113,-171,113],[-170,116,-168,116,-170,116],[-154,113,-152,113,-157,114],[-153,110,-153,110,-153,110],[-150,112,-145,110,-150,112],[-136,103,-136,101,-140,107],[-136,99,-136,99,-136,99],[-133,100,-131,99,-133,100],[-125,88,-125,86,-126,91],[-127,84,-127,84,-127,84],[-124,84,-121,78,-124,84],[-120,67,-121,66,-120,73],[-122,65,-122,65,-122,65],[-119,64,-119,61,-119,64],[-118,50,-120,49,-118,52],[-122,48,-122,48,-122,48],[-118,46,-118,43,-118,46],[-116,35,-117,34,-117,39],[-119,32,-119,32,-119,32],[-115,31,-115,30,-115,31],[-112,23,-113,22,-112,24],[-114,19,-114,19,-114,19],[-110,19,-108,16,-110,19],[-105,12,-105,11,-105,12],[-107,7,-107,7,-107,7],[-102,8,-99,5,-102,8],[-94,-1,-94,-1,-96,2],[-94,-1,-94,-1,-94,-1],[-95,-6,-95,-6,-95,-6],[-90,-5,-85,-9,-90,-5],[-81,-11,-78,-13,-81,-11],[-80,-19,-81,-21,-78,-16],[-87,-20,-88,-20,-85,-22],[-96,-13,-96,-11,-91,-18],[-96,-8,-96,-8,-96,-8],[-101,-9,-104,-6,-101,-9],[-111,1,-110,3,-107,-3],[-110,5,-110,5,-110,5],[-113,4,-116,7,-113,4],[-120,15,-119,16,-118,11],[-118,18,-118,18,-118,18],[-122,18,-123,20,-122,18],[-124,22,-125,25,-123,21],[-126,29,-125,30,-125,27],[-124,32,-124,32,-124,32],[-127,32,-128,37,-127,32],[-129,45,-128,46,-129,41],[-126,47,-126,47,-126,47],[-129,49,-129,50,-129,49],[-130,63,-129,64,-130,60],[-128,65,-128,65,-128,65],[-130,66,-131,70,-130,66],[-134,80,-133,81,-132,75],[-132,83,-132,83,-132,83],[-135,83,-136,85,-135,83],[-142,93,-142,94,-140,92],[-141,96,-141,96,-141,96],[-144,95,-147,98,-144,95],[-153,101,-154,103,-150,100],[-154,105,-154,105,-154,105],[-157,103,-159,104,-157,103],[-169,105,-171,105,-167,105],[-171,108,-171,108,-171,108],[-173,105,-176,105,-173,105],[-182,104,-182,104,-179,105],[-186,107,-186,107,-186,107],[-186,103,-190,102,-186,103],[-196,99,-197,100,-193,100],[-199,100,-199,100,-199,100],[-198,97,-201,95,-199,99],[-206,89,-206,89,-203,92],[-210,90,-210,90,-210,90],[-209,86,-212,83,-209,86],[-216,78,-216,78,-214,81],[-220,78,-220,78,-220,78],[-218,75,-221,71,-219,76],[-222,66,-223,57,-222,68],[-208,55,-200,60,-212,53],[-199,85,-194,92,-210,71],[-164,95,-140,89,-178,99],[-139,46,-139,20,-140,72],[-118,-10,-104,-28,-136,14],[-68,-40,-53,-36,-87,-45],[-49,-62,-49,-62,-49,-62]]],[[[0,0,-14,-4,0,0],[-49,-9,-71,-10,-29,-8],[-120,-9,-120,-9,-96,-9],[-211,-9,-291,-9,-211,-9],[-314,-38,-314,-38,-314,-38],[-298,-38,-298,-38,-298,-38],[-297,-42,-297,-42,-297,-42],[-295,-38,-295,-38,-295,-38],[-289,-38,-289,-38,-289,-38],[-288,-42,-288,-42,-288,-42],[-286,-38,-286,-38,-286,-38],[-280,-38,-280,-38,-280,-38],[-279,-42,-279,-42,-279,-42],[-277,-38,-277,-38,-277,-38],[-271,-38,-271,-38,-271,-38],[-270,-42,-270,-42,-270,-42],[-268,-38,-268,-38,-268,-38],[-262,-38,-262,-38,-262,-38],[-261,-42,-261,-42,-261,-42],[-259,-38,-259,-38,-259,-38],[-253,-38,-253,-38,-253,-38],[-252,-42,-252,-42,-252,-42],[-250,-38,-250,-38,-250,-38],[-244,-38,-244,-38,-244,-38],[-243,-42,-243,-42,-243,-42],[-241,-38,-241,-38,-241,-38],[-235,-38,-235,-38,-235,-38],[-234,-42,-234,-42,-234,-42],[-232,-38,-232,-38,-232,-38],[-226,-38,-226,-38,-226,-38],[-225,-42,-225,-42,-225,-42],[-223,-38,-223,-38,-223,-38],[-217,-38,-217,-38,-217,-38],[-216,-42,-216,-42,-216,-42],[-214,-38,-214,-38,-214,-38],[-208,-38,-208,-38,-208,-38],[-207,-42,-207,-42,-207,-42],[-205,-38,-205,-38,-205,-38],[-199,-38,-199,-38,-199,-38],[-198,-42,-198,-42,-198,-42],[-196,-38,-196,-38,-196,-38],[-190,-38,-190,-38,-190,-38],[-188,-42,-188,-42,-188,-42],[-187,-38,-187,-38,-187,-38],[-181,-38,-181,-38,-181,-38],[-179,-42,-179,-42,-179,-42],[-178,-38,-178,-38,-178,-38],[-172,-38,-172,-38,-172,-38],[-170,-42,-170,-42,-170,-42],[-168,-38,-168,-38,-168,-38],[-163,-38,-163,-38,-163,-38],[-161,-42,-161,-42,-161,-42],[-159,-38,-159,-38,-159,-38],[-154,-38,-154,-38,-154,-38],[-152,-42,-152,-42,-152,-42],[-150,-38,-150,-38,-150,-38],[-145,-38,-145,-38,-145,-38],[-143,-42,-143,-42,-143,-42],[-141,-38,-141,-38,-141,-38],[-135,-38,-135,-38,-135,-38],[-134,-42,-134,-42,-134,-42],[-132,-38,-132,-38,-132,-38],[-126,-38,-126,-38,-126,-38],[-125,-42,-125,-42,-125,-42],[-123,-38,-123,-38,-123,-38],[-117,-38,-117,-38,-117,-38],[-116,-42,-116,-42,-116,-42],[-114,-38,-114,-38,-114,-38],[-108,-38,-108,-38,-108,-38],[-107,-42,-107,-42,-107,-42],[-105,-38,-105,-38,-105,-38],[-99,-38,-99,-38,-99,-38],[-98,-42,-98,-42,-98,-42],[-96,-38,-96,-38,-96,-38],[-90,-38,-90,-38,-90,-38],[-89,-42,-89,-42,-89,-42],[-87,-38,-87,-38,-87,-38],[-81,-38,-81,-38,-81,-38],[-80,-42,-80,-42,-80,-42],[-78,-38,-78,-38,-78,-38],[-72,-38,-72,-38,-72,-38],[-71,-42,-71,-42,-71,-42],[-69,-38,-69,-38,-69,-38],[-63,-38,-63,-38,-63,-38],[-63,-91,-63,-91,-63,-91],[-69,-91,-69,-91,-69,-91],[-71,-86,-71,-86,-71,-86],[-73,-91,-73,-91,-73,-91],[-78,-91,-78,-91,-78,-91],[-80,-86,-80,-86,-80,-86],[-82,-91,-82,-91,-82,-91],[-87,-91,-87,-91,-87,-91],[-89,-86,-89,-86,-89,-86],[-91,-91,-91,-91,-91,-91],[-96,-91,-96,-91,-96,-91],[-98,-86,-98,-86,-98,-86],[-100,-91,-100,-91,-100,-91],[-105,-91,-105,-91,-105,-91],[-107,-86,-107,-86,-107,-86],[-109,-91,-109,-91,-109,-91],[-114,-91,-114,-91,-114,-91],[-116,-86,-116,-86,-116,-86],[-118,-91,-118,-91,-118,-91],[-123,-91,-123,-91,-123,-91],[-125,-86,-125,-86,-125,-86],[-127,-91,-127,-91,-127,-91],[-132,-91,-132,-91,-132,-91],[-134,-86,-134,-86,-134,-86],[-136,-91,-136,-91,-136,-91],[-141,-91,-141,-91,-141,-91],[-143,-86,-143,-86,-143,-86],[-145,-91,-145,-91,-145,-91],[-150,-91,-150,-91,-150,-91],[-152,-86,-152,-86,-152,-86],[-154,-91,-154,-91,-154,-91],[-159,-91,-159,-91,-159,-91],[-161,-86,-161,-86,-161,-86],[-163,-91,-163,-91,-163,-91],[-168,-91,-168,-91,-168,-91],[-170,-86,-170,-86,-170,-86],[-172,-91,-172,-91,-172,-91],[-177,-91,-177,-91,-177,-91],[-180,-86,-180,-86,-180,-86],[-182,-91,-182,-91,-182,-91],[-186,-91,-186,-91,-186,-91],[-189,-86,-189,-86,-189,-86],[-191,-91,-191,-91,-191,-91],[-195,-91,-195,-91,-195,-91],[-198,-86,-198,-86,-198,-86],[-200,-91,-200,-91,-200,-91],[-204,-91,-204,-91,-204,-91],[-207,-86,-207,-86,-207,-86],[-209,-91,-209,-91,-209,-91],[-213,-91,-213,-91,-213,-91],[-216,-86,-216,-86,-216,-86],[-218,-91,-218,-91,-218,-91],[-223,-91,-223,-91,-223,-91],[-225,-86,-225,-86,-225,-86],[-227,-91,-227,-91,-227,-91],[-232,-91,-232,-91,-232,-91],[-234,-86,-234,-86,-234,-86],[-236,-91,-236,-91,-236,-91],[-241,-91,-241,-91,-241,-91],[-243,-86,-243,-86,-243,-86],[-245,-91,-245,-91,-245,-91],[-250,-91,-250,-91,-250,-91],[-252,-86,-252,-86,-252,-86],[-254,-91,-254,-91,-254,-91],[-259,-91,-259,-91,-259,-91],[-261,-86,-261,-86,-261,-86],[-263,-91,-263,-91,-263,-91],[-268,-91,-268,-91,-268,-91],[-270,-86,-270,-86,-270,-86],[-272,-91,-272,-91,-272,-91],[-277,-91,-277,-91,-277,-91],[-279,-86,-279,-86,-279,-86],[-281,-91,-281,-91,-281,-91],[-286,-91,-286,-91,-286,-91],[-288,-86,-288,-86,-288,-86],[-290,-91,-290,-91,-290,-91],[-295,-91,-295,-91,-295,-91],[-297,-86,-297,-86,-297,-86],[-299,-91,-299,-91,-299,-91],[-315,-91,-315,-91,-315,-91],[-216,-126,-216,-126,-286,-126],[-126,-126,-56,-125,-126,-126],[-48,-133,-48,-133,-48,-133]]],[[[0,0,-7,-5,0,0],[-58,7,-71,28,-49,-6],[-137,37,-165,28,-109,46],[-175,1,-175,1,-175,1],[-169,1,-169,-2,-173,1],[-167,-7,-166,-5,-167,-7],[-163,1,-161,1,-165,-2],[-155,1,-155,-1,-158,1],[-152,-6,-152,-6,-154,-3],[-148,1,-145,1,-151,-3],[-137,1,-137,-1,-141,1],[-135,-6,-135,-6,-137,-4],[-131,1,-127,1,-134,-3],[-120,0,-120,-2,-124,0],[-119,-6,-119,-6,-120,-4],[-114,-1,-110,-1,-117,-3],[-103,-2,-103,-4,-107,-1],[-102,-7,-102,-7,-103,-5],[-99,-3,-84,-5,-101,-5],[-66,-15,-75,-13,-72,-9],[-100,-13,-101,-10,-87,-13],[-102,-8,-103,-10,-102,-8],[-104,-13,-108,-13,-104,-12],[-116,-14,-118,-11,-112,-14],[-119,-8,-120,-10,-119,-8],[-121,-14,-124,-15,-121,-12],[-130,-15,-134,-12,-127,-15],[-135,-9,-137,-11,-135,-9],[-137,-16,-140,-16,-137,-14],[-146,-17,-150,-14,-143,-17],[-152,-10,-153,-13,-152,-10],[-153,-18,-155,-18,-153,-15],[-160,-19,-165,-16,-158,-18],[-167,-12,-168,-15,-167,-12],[-167,-20,-173,-21,-168,-18],[-176,-21,-176,-21,-176,-21],[-143,-49,-131,-53,-165,-42],[-99,-43,-94,-45,-116,-52],[-58,-88,-52,-88,-75,-88],[-49,-84,-49,-84,-49,-84]]],[[[0,0,-7,0,0,0],[-48,-64,-48,-64,0,-64],[-135,24,-135,24,-135,24],[-167,24,-183,8,-151,40],[-167,-8,-167,-8,-167,-8],[-48,-128,-48,-128,-48,-128]]],[[[0,0,-13,-3,0,0],[-31,3,-44,19,-24,-5],[-76,27,-112,11,-51,38],[-127,82,-141,83,-98,80],[-155,49,-156,45,-150,71],[-153,39,-153,39,-155,42],[-155,34,-155,34,-155,34],[-150,35,-148,34,-150,35],[-145,31,-145,31,-147,33],[-146,25,-146,25,-146,25],[-140,28,-138,28,-140,28],[-135,26,-135,26,-137,27],[-134,20,-134,20,-134,20],[-130,22,-126,19,-130,22],[-125,9,-139,-7,-121,14],[-138,-33,-136,-44,-142,-17],[-144,-55,-144,-55,-138,-51],[-148,-53,-148,-53,-148,-53],[-147,-57,-150,-59,-147,-57],[-155,-60,-155,-60,-152,-59],[-159,-56,-159,-56,-159,-56],[-160,-61,-162,-62,-160,-61],[-168,-63,-168,-63,-165,-63],[-172,-59,-172,-59,-172,-59],[-174,-64,-184,-66,-174,-64],[-188,-86,-188,-103,-188,-76],[-162,-129,-134,-138,-177,-125],[-116,-86,-120,-72,-108,-112],[-85,-65,-70,-75,-100,-55],[-48,-64,-48,-64,-48,-64]]],[[[0,0,-16,-2,0,0],[-60,27,-85,27,-35,26],[-140,4,-173,5,-108,3],[-267,26,-272,24,-209,46],[-281,21,-281,21,-277,23],[-291,29,-291,29,-291,29],[-292,17,-300,14,-291,22],[-313,7,-313,7,-307,10],[-323,11,-323,11,-323,11],[-321,1,-327,-5,-321,5],[-331,-17,-335,-43,-330,-10],[-288,-77,-259,-81,-318,-72],[-207,-15,-184,-21,-230,-8],[-165,-75,-128,-79,-202,-70],[-85,-16,-66,-18,-103,-13],[-49,-34,-49,-34,-49,-34]]],[[[0,0,0,0,0,0],[-128,0,-128,0,-128,0],[-128,-80,-128,-80,-128,-80],[-48,-80,-48,-80,-48,-80]]],[[[0,0,-13,-2,0,0],[-35,-2,-78,-3,-25,-2],[-144,18,-155,16,-113,22],[-176,-2,-182,-9,-166,10],[-220,-32,-251,-50,-206,-23],[-220,-63,-220,-63,-220,-63],[-217,-61,-217,-61,-219,-63],[-212,-62,-212,-62,-212,-62],[-213,-58,-211,-55,-213,-58],[-203,-48,-203,-48,-207,-52],[-199,-50,-199,-50,-199,-50],[-200,-46,-197,-43,-200,-46],[-189,-36,-189,-36,-193,-39],[-184,-38,-184,-38,-184,-38],[-185,-33,-182,-30,-185,-33],[-176,-25,-176,-25,-179,-28],[-171,-27,-171,-27,-171,-27],[-173,-22,-162,-14,-173,-22],[-152,-10,-150,-11,-154,-8],[-162,-31,-162,-31,-155,-20],[-166,-30,-166,-30,-166,-30],[-164,-35,-166,-38,-164,-35],[-171,-44,-171,-44,-169,-41],[-176,-44,-176,-44,-176,-44],[-174,-48,-176,-52,-174,-48],[-182,-59,-182,-59,-179,-56],[-187,-58,-187,-58,-187,-58],[-185,-63,-188,-67,-185,-63],[-193,-74,-193,-74,-191,-71],[-197,-74,-197,-74,-197,-74],[-195,-78,-198,-81,-195,-78],[-199,-83,-199,-83,-199,-83],[-183,-96,-171,-98,-191,-94],[-153,-68,-151,-56,-156,-88],[-140,-29,-129,-15,-147,-37],[-101,-32,-87,-56,-118,-2],[-70,-74,-57,-83,-82,-66],[-48,-83,-48,-83,-48,-83]]]],s.headArr=[[[[0,0,0,-35,0,0],[65,-64,101,-64,29,-64],[130,0,130,10,130,-35],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[27,-17,46,-21,9,-14],[77,-27,88,-34,44,-6],[111,-27,119,-22,101,-32],[128,-7,130,4,126,-14],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[0,-35,0,-48,0,-35],[13,-48,13,-48,13,-48],[26,-35,26,-22,26,-48],[39,-22,51,-22,39,-22],[52,-35,52,-35,52,-35],[65,-48,65,-48,52,-48],[78,-35,78,-22,78,-48],[91,-22,103,-22,91,-22],[103,-35,103,-35,103,-35],[116,-48,129,-48,103,-48],[129,-35,129,-35,129,-35],[129,0,129,0,129,0]]],[[[0,0,0,0,0,0],[27,-26,48,-37,12,-18],[64,4,88,10,45,-1],[107,-7,121,-6,92,-8],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[41,-32,76,-35,10,-31],[124,-65,141,-76,92,-46],[175,-79,188,-79,161,-80],[196,-70,196,-58,196,-76],[168,-53,168,-53,168,-53],[183,-36,173,-24,191,-47],[151,-29,151,-28,150,-29],[159,-14,150,-4,167,-23],[134,-7,134,-7,134,-7],[139,6,137,13,142,-1],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[48,-84,72,-103,10,-52],[156,-103,187,-95,106,-115],[220,-57,230,-42,209,-75],[225,-25,214,-18,232,-28],[169,-61,137,-81,202,-40],[69,-36,69,-36,87,-74],[106,-20,122,-7,90,-35],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[53,-82,81,-98,8,-56],[174,-97,159,-92,125,-116],[133,-80,133,-80,144,-92],[180,-62,168,-64,163,-88],[139,-55,139,-55,150,-59],[179,-21,168,-26,173,-50],[141,-29,141,-29,154,-27],[172,11,159,1,170,-16],[137,-5,137,-5,149,-4],[153,23,137,10,155,10],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[26,-36,26,-36,-10,-31],[64,-104,124,-104,4,-104],[102,-36,138,-31,102,-36],[128,0,128,0,128,0]]],[[[0,0,0,0,0,0],[22,-34,43,-44,-1,-22],[27,-73,9,-88,52,-53],[-24,-133,-10,-149,-42,-112],[90,-46,113,-39,60,-55],[141,-54,149,-47,129,-63],[122,-25,116,-18,129,-35],[131,3,131,12,129,-10],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[-13,-26,-10,-39,-14,-17],[1,-47,4,-61,-3,-33],[-9,-75,-4,-89,-13,-60],[12,-90,19,-100,6,-80],[13,-122,22,-133,4,-111],[37,-133,43,-140,30,-126],[55,-158,67,-159,45,-157],[80,-142,89,-142,70,-141],[108,-153,117,-149,97,-158],[118,-125,124,-114,112,-135],[143,-108,148,-91,139,-125],[131,-78,131,-65,130,-91],[150,-54,150,-40,151,-69],[131,-31,131,-26,130,-40],[144,-9,143,3,145,-21],[123,16,123,16,123,16]]],[[[0,0,73,-13,0,0],[61,-60,122,-51,10,-67],[128,16,128,16,128,16]]],[[[0,0,22,-29,0,0],[83,-40,112,-45,51,-35],[167,-63,189,-50,150,-73],[166,-8,153,8,181,-27],[128,16,128,16,128,16]]],[[[0,0,11,-17,0,0],[34,-18,80,-26,27,-16],[59,-84,89,-93,29,-75],[94,-21,92,-11,97,-42],[120,0,133,9,112,-5],[127,24,127,24,127,24]]],[[[0,0,15,-4,0,0],[44,-35,55,-46,31,-23],[99,-67,143,-67,65,-67],[156,-22,143,-17,167,-27],[101,-48,77,-45,128,-51],[69,-21,67,-12,71,-26],[88,1,98,1,71,1],[112,-19,112,-28,112,-4],[97,-19,97,-10,97,-28],[85,-11,80,-14,90,-9],[87,-31,95,-40,79,-22],[123,-29,138,-10,113,-42],[128,16,128,16,128,16]]],[[[0,0,-12,-41,0,0],[46,-34,74,-18,7,-57],[108,-126,130,-149,81,-100],[197,-158,221,-158,168,-158],[241,-143,246,-104,240,-152],[134,-111,160,-112,175,-144],[219,-83,210,-62,228,-105],[123,-76,148,-78,145,-100],[181,-37,151,-24,209,-49],[91,-16,90,-10,114,-86],[122,10,127,24,117,-4],[114,29,114,29,114,29]]],[[[0,0,41,-37,0,0],[58,-109,70,-125,30,-70],[127,-142,141,-142,97,-142],[169,-129,207,-104,155,-138],[225,-33,225,-15,224,-63],[209,4,195,10,220,-1],[195,-19,212,-30,175,-6],[192,-76,162,-123,206,-53],[103,-18,108,-7,64,-123],[128,16,128,16,128,16]]],[[[0,0,51,-28,0,0],[29,-85,29,-85,-22,-43],[39,-58,39,-58,23,-59],[71,-89,71,-89,47,-89],[71,-56,71,-56,53,-65],[116,-78,116,-78,91,-79],[102,-44,102,-44,97,-60],[158,-44,158,-44,125,-61],[127,-24,127,-24,126,-38],[163,-1,163,-1,151,-26],[128,6,124,17,133,-10],[130,29,130,29,130,29]]],[[[0,0,0,0,0,0],[8,-42,8,-42,-23,-25],[36,-88,36,-88,-3,-75],[67,-130,110,-130,28,-129],[98,-86,98,-86,98,-86],[122,-39,155,-15,137,-70],[128,12,128,12,128,12]]],[[[0,0,7,-6,0,0],[16,-22,-17,-20,13,-12],[-24,-111,-23,-114,-47,-82],[-20,-111,-21,-80,-20,-113],[28,-63,50,-60,4,-67],[67,-69,81,-77,56,-63],[94,-105,111,-106,86,-84],[122,-81,132,-81,127,-92],[138,-56,149,-56,143,-68],[147,-27,155,-21,155,-35],[139,-3,143,11,149,-2],[128,16,128,16,128,16]]],[[[0,0,-14,-2,0,0],[-11,-30,-21,-32,-33,-18],[-28,-48,-27,-53,-28,-40],[-15,-62,-28,-75,-23,-58],[2,-93,1,-102,-20,-95],[12,-116,18,-120,4,-112],[39,-112,40,-125,28,-120],[56,-135,65,-136,47,-133],[82,-119,100,-142,75,-131],[123,-103,132,-107,129,-127],[146,-100,151,-95,141,-106],[147,-73,170,-72,152,-86],[155,-37,162,-32,175,-49],[164,-20,162,-15,165,-26],[146,-9,160,14,157,-10],[128,16,128,16,133,20]]],[[[0,0,0,-29,0,0],[54,-43,73,-77,45,-26],[128,-96,141,-96,102,-95],[163,-84,178,-71,153,-92],[184,-46,184,-34,184,-58],[169,-12,153,7,177,-22],[128,16,128,16,128,16]]],[[[0,0,18,-39,0,0],[74,-11,85,-21,67,-5],[62,-86,72,-102,30,-38],[113,-111,146,-112,92,-110],[192,-52,197,-27,184,-93],[180,-3,169,7,191,-12],[136,6,128,4,152,9],[128,16,128,16,128,16]]],[[[0,0,10,-26,0,0],[76,-33,116,-53,65,-28],[166,-60,187,-59,146,-60],[193,-44,190,-36,196,-52],[145,-28,69,-30,174,-28],[113,7,123,15,105,0],[125,23,125,23,125,23]]],[[[0,0,14,-4,0,0],[39,-20,62,-15,8,-26],[64,-49,78,-50,49,-48],[91,-20,119,-25,66,-15],[128,16,128,16,128,16]]],[[[0,0,5,-9,0,0],[-9,-33,-2,-47,-15,-20],[19,-37,36,-56,12,-29],[-17,-134,7,-159,-50,-101],[48,-65,61,-70,35,-61],[70,-175,105,-172,36,-177],[90,-65,106,-65,74,-66],[162,-134,189,-95,140,-167],[113,-38,120,-24,103,-57],[144,-28,147,-18,139,-47],[129,-4,124,0,135,-8],[128,10,128,10,128,10]]],[[[0,0,0,0,0,0],[8,-24,8,-24,-3,-7],[-38,-35,-39,-39,-31,-18],[11,-48,11,-74,-5,-43],[46,-93,71,-99,27,-88],[116,-73,125,-61,101,-91],[120,-25,129,-6,129,-45],[128,15,128,15,128,15]],[[0,0,0,0,0,0],[11,-31,11,-31,0,-14],[-33,-31,-33,-31,-33,-31],[-38,-35,-38,-39,-38,-31],[-33,-40,-33,-40,-33,-40],[11,-40,11,-71,11,-40],[68,-97,99,-97,36,-97],[125,-40,125,-31,125,-71],[120,-25,129,-6,120,-25],[128,15,128,15,128,15]],[[86,-93,85,-91,87,-94],[82,-92,81,-92,84,-91],[81,-95,82,-96,81,-94],[85,-96,86,-96,84,-97]]],[[[0,0,77,-15,0,0],[133,-94,131,-102,144,-43],[144,-93,148,-88,138,-100],[165,-58,167,-48,162,-74],[148,-27,111,-4,164,-36],[128,16,128,16,128,16]]],[[[0,0,-5,-8,0,0],[0,-24,5,-33,-4,-17],[31,-37,4,-47,17,-39],[41,-82,28,-83,14,-86],[20,-108,21,-116,19,-96],[35,-128,22,-133,26,-123],[40,-174,54,-182,14,-159],[78,-174,89,-168,69,-181],[89,-141,105,-143,94,-154],[124,-127,131,-116,118,-137],[118,-89,135,-87,130,-101],[147,-60,148,-48,145,-74],[129,-30,162,-2,143,-36],[128,16,128,16,128,16]]],[[[0,0,7,-21,0,0],[83,-35,110,-53,61,-20],[138,-93,161,-112,114,-73],[195,-111,217,-94,184,-120],[187,-53,167,-37,197,-61],[156,-2,146,13,166,-18],[128,16,128,16,128,16]]],[[[0,0,1,-10,0,0],[18,-25,22,-38,5,-16],[-42,-85,-46,-85,-10,-83],[-43,-92,14,-106,-48,-91],[75,-51,86,-48,64,-54],[125,-54,181,-78,111,-49],[194,-150,192,-140,171,-144],[205,-131,199,-123,195,-134],[209,-111,202,-106,203,-114],[202,-91,193,-91,195,-99],[199,-73,190,-73,192,-80],[190,-53,179,-54,184,-63],[179,-36,168,-39,174,-43],[168,-20,158,-22,162,-30],[156,-5,143,-8,152,-16],[138,11,124,5,135,-1],[117,14,117,14,117,14]]],[[[0,0,0,0,0,0],[0,-32,0,-32,0,-32],[32,-32,32,-32,32,-32],[32,-48,32,-48,32,-48],[0,-48,0,-48,0,-48],[0,-80,0,-80,0,-80],[32,-80,32,-80,32,-80],[32,-96,32,-96,32,-96],[0,-96,0,-96,0,-96],[0,-128,0,-128,0,-128],[32,-128,32,-146,32,-128],[64,-160,82,-160,46,-160],[96,-128,96,-128,96,-146],[128,-128,128,-128,128,-128],[128,-96,128,-96,128,-96],[96,-96,96,-96,96,-96],[96,-80,96,-80,96,-80],[128,-80,128,-80,128,-80],[128,-48,128,-48,128,-48],[96,-48,96,-48,96,-48],[96,-32,96,-32,96,-32],[128,-32,128,-32,128,-32],[128,0,128,0,128,0]]],[[[0,0,-7,-10,0,0],[-13,-38,-14,-56,-12,-24],[6,-81,31,-94,-8,-73],[124,-81,139,-72,108,-90],[143,-34,142,-19,145,-53],[128,5,124,9,137,-4],[128,17,128,17,128,17]]],[[[0,0,0,0,0,0],[32,-32,32,-32,32,-32],[32,-128,32,-128,32,-128],[80,-128,80,-128,80,-128],[80,-48,80,-48,80,-48],[160,-48,160,-48,160,-48],[160,0,160,0,160,0],[128,0,128,0,128,0],[128,16,128,16,128,16]]],[[[0,0,28,-19,0,0],[1,-50,32,-46,-12,-51],[45,-23,59,-23,30,-22],[39,-70,36,-75,45,-59],[72,-53,80,-39,60,-73],[94,-35,110,-46,86,-30],[101,-69,122,-63,93,-72],[130,-24,132,-7,127,-44],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[14,-20,5,-33,4,-13],[16,-51,24,-58,8,-45],[47,-47,73,-60,37,-58],[110,-53,133,-45,92,-61],[141,-12,142,5,141,-27],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[16,-20,32,-20,0,-20],[32,-36,32,-36,32,-36],[48,-56,64,-56,32,-56],[64,-36,64,-36,64,-36],[80,-56,96,-56,64,-56],[95,-36,95,-36,95,-36],[112,-20,128,-20,96,-20],[128,0,128,0,128,0]]],[[[0,0,36,-16,0,0],[107,-41,137,-68,81,-18],[122,-102,151,-87,119,-67],[143,-36,173,-38,161,-66],[201,-92,186,-43,159,-82],[179,-13,162,2,209,-40],[128,16,128,16,128,16]]],[[[0,0,8,-19,0,0],[42,-30,25,-52,29,-32],[80,-71,74,-87,47,-88],[88,-104,97,-109,79,-99],[123,-92,112,-117,111,-106],[164,-111,161,-126,138,-145],[184,-145,194,-148,170,-141],[217,-131,217,-150,206,-145],[246,-160,259,-159,232,-160],[276,-132,283,-102,273,-151],[228,-111,231,-91,241,-92],[214,-74,204,-69,224,-79],[179,-85,189,-49,190,-73],[145,-63,156,-43,160,-46],[122,-40,135,-30,142,-23],[113,-5,137,12,132,-2],[128,33,128,33,128,33]]],[[[0,0,7,-20,0,0],[21,-36,39,-51,14,-30],[59,-34,67,-55,57,-28],[88,-65,115,-71,77,-63],[155,-67,163,-93,146,-38],[215,-102,219,-112,194,-47],[224,-81,219,-64,230,-102],[164,-26,111,-6,201,-41],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[0,-12,0,-12,0,-12],[12,-12,12,-12,12,-12],[12,-24,12,-24,12,-24],[24,-24,24,-24,24,-24],[24,-36,24,-36,24,-36],[36,-36,36,-36,36,-36],[36,-48,36,-48,36,-48],[48,-48,48,-48,48,-48],[48,-60,48,-60,48,-60],[60,-60,60,-60,60,-60],[60,-72,60,-72,60,-72],[72,-72,72,-72,72,-72],[72,-84,72,-84,72,-84],[84,-84,84,-84,84,-84],[84,-96,84,-96,84,-96],[96,-96,96,-96,96,-96],[96,-108,96,-108,96,-108],[108,-108,108,-108,108,-108],[108,-120,108,-120,108,-120],[120,-120,120,-120,120,-120],[120,-132,120,-132,120,-132],[132,-132,132,-132,132,-132],[132,0,132,0,132,0]]],[[[0,0,0,0,0,0],[24,-32,24,-32,24,-32],[-8,-64,-8,-64,-8,-64],[24,-96,24,-96,24,-96],[-8,-128,-8,-128,-8,-128],[24,-160,24,-160,24,-160],[40,-144,40,-144,40,-144],[24,-128,24,-128,24,-128],[56,-96,56,-96,56,-96],[24,-64,24,-64,24,-64],[56,-32,56,-32,56,-32],[72,-24,72,-24,72,-24],[88,-32,88,-32,88,-32],[56,-64,56,-64,56,-64],[88,-96,88,-96,88,-96],[56,-128,56,-128,56,-128],[88,-160,88,-160,88,-160],[104,-144,104,-144,104,-144],[88,-128,88,-128,88,-128],[120,-96,120,-96,120,-96],[88,-64,88,-64,88,-64],[120,-32,120,-32,120,-32],[128,0,128,0,128,0]]],[[[0,0,0,0,0,0],[0,-14,0,-14,0,-14],[14,-14,14,-14,14,-14],[14,-28,14,-28,14,-28],[28,-28,28,-28,28,-28],[28,-43,28,-43,28,-43],[43,-43,43,-43,43,-43],[43,-57,43,-57,43,-57],[57,-57,57,-57,57,-57],[57,-71,57,-71,57,-71],[71,-71,71,-71,71,-71],[71,-57,71,-57,71,-57],[85,-57,85,-57,85,-57],[85,-43,85,-43,85,-43],[100,-43,100,-43,100,-43],[100,-28,100,-28,100,-28],[114,-28,114,-28,114,-28],[114,-14,114,-14,114,-14],[128,-14,128,-14,128,-14],[128,0,128,0,128,0]]],[[[0,0,6,-12,0,0],[21,0,27,-11,17,-8],[42,0,46,-5,37,-10],[53,-8,58,-8,50,-7],[64,0,70,-7,62,-3],[86,0,92,-9,77,-11],[106,0,124,-15,101,-9],[128,16,128,16,128,16]]],[[[0,0,14,-4,0,0],[37,-20,29,-37,40,-12],[40,-52,47,-42,33,-62],[56,-42,66,-46,52,-41],[72,-66,81,-66,66,-66],[91,-49,108,-49,77,-49],[120,-61,127,-58,115,-63],[122,-34,134,-24,113,-42],[152,-32,157,-23,149,-38],[141,-4,148,6,132,-16],[159,7,157,12,161,1],[138,14,127,15,148,13],[128,19,128,19,128,19]]],[[[0,0,0,0,0,0],[16,-16,16,-16,16,-16],[0,-32,0,-32,0,-32],[16,-48,16,-48,16,-48],[32,-32,32,-32,32,-32],[48,-48,48,-48,48,-48],[16,-80,16,-80,16,-80],[32,-96,32,-96,32,-96],[64,-64,64,-64,64,-64],[80,-80,80,-80,80,-80],[128,-80,128,-80,128,-80],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[-3,-33,2,-62,-7,-8],[35,-90,35,-90,35,-90],[46,-45,46,-45,46,-45],[78,-84,78,-84,78,-84],[89,-38,89,-38,89,-38],[120,-79,120,-79,120,-79],[138,-10,134,14,141,-38],[127,16,127,16,127,16]]],[[[0,0,32,-26,0,0],[69,-39,60,-64,77,-19],[72,-98,119,-107,87,-68],[110,-66,130,-63,98,-68],[132,-109,144,-115,143,-95],[168,-89,171,-80,164,-107],[164,-54,161,-49,172,-67],[191,-55,195,-58,177,-44],[198,-75,218,-77,200,-63],[205,-26,194,-14,223,-45],[159,-13,138,-15,180,-11],[125,-6,120,3,129,-11],[128,16,128,16,128,16]]],[[[0,0,0,-14,0,0],[27,-28,47,-18,9,-37],[45,-46,64,-43,21,-50],[36,-79,84,-56,9,-93],[56,-108,81,-86,43,-120],[84,-115,81,-125,93,-86],[112,-119,114,-129,105,-90],[118,-134,122,-136,116,-134],[126,-120,132,-95,125,-127],[164,-128,169,-131,154,-121],[168,-119,158,-83,171,-130],[195,-96,200,-96,186,-95],[187,-78,165,-55,200,-93],[205,-57,207,-55,200,-61],[183,-40,158,-27,203,-50],[200,-17,213,-8,189,-25],[154,4,168,21,134,-20],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[0,-12,0,-12,0,-12],[8,-12,8,-12,8,-12],[8,-68,8,-68,8,-68],[0,-68,0,-68,0,-68],[0,-84,0,-84,0,-84],[108,-84,108,-84,108,-84],[108,-68,108,-68,108,-68],[100,-68,100,-68,100,-68],[100,-12,100,-12,100,-12],[88,-12,88,-12,88,-12],[88,-68,88,-68,88,-68],[80,-68,80,-68,80,-68],[80,-12,80,-12,80,-12],[68,-12,68,-12,68,-12],[68,-68,68,-68,68,-68],[60,-68,60,-68,60,-68],[60,-12,60,-12,60,-12],[48,-12,48,-12,48,-12],[48,-68,48,-68,48,-68],[40,-68,40,-68,40,-68],[40,-12,40,-12,40,-12],[28,-12,28,-12,28,-12],[28,-68,28,-68,28,-68],[20,-68,20,-68,20,-68],[20,-12,20,-12,20,-12],[108,-12,108,-12,108,-12],[108,0,108,0,108,0]]],[[[0,0,-17,5,0,0],[-47,-36,-55,-58,-38,-12],[-46,-85,-40,-97,-53,-74],[-16,-104,-26,-136,-27,-104],[-1,-179,17,-195,-20,-162],[83,-201,124,-199,45,-203],[167,-162,186,-136,152,-182],[172,-84,182,-79,187,-105],[194,-59,198,-47,190,-70],[186,-18,156,26,196,-33],[128,16,128,16,128,16]]],[[[0,0,15,-10,0,0],[-6,-30,5,-38,-17,-21],[21,-18,35,-22,3,-12],[26,-51,41,-56,10,-47],[52,-28,67,-30,37,-26],[73,-59,90,-57,56,-61],[84,-24,98,-18,70,-30],[116,-39,129,-30,102,-47],[111,-5,127,5,98,-14],[140,-9,147,-1,132,-21],[125,9,122,13,130,2],[127,18,127,18,127,18]]],[[[0,0,0,-5,0,0],[10,-29,9,-48,-1,-15],[29,-65,42,-69,18,-60],[65,-50,69,-50,57,-65],[79,-49,93,-66,75,-50],[123,-56,135,-48,111,-65],[131,-20,139,-1,141,-33],[129,10,129,10,129,10]]],[[[0,0,9,-7,0,0],[3,-15,10,-20,-4,-10],[11,-27,19,-27,2,-27],[22,-37,27,-32,17,-42],[38,-44,42,-39,34,-49],[55,-50,62,-45,48,-55],[74,-53,77,-47,71,-58],[92,-49,94,-40,89,-59],[108,-44,110,-38,105,-51],[119,-34,117,-27,120,-42],[125,-17,119,-10,132,-24],[125,-1,121,4,129,-7],[128,16,128,16,128,16]]],[[[0,0,0,-24,0,0],[40,-46,42,-50,15,-39],[41,-65,29,-88,42,-56],[41,-102,49,-104,33,-101],[55,-68,58,-60,60,-92],[62,-53,66,-57,60,-55],[72,-69,70,-95,69,-61],[85,-105,93,-104,78,-105],[85,-67,85,-59,100,-88],[86,-50,91,-51,84,-53],[101,-61,111,-86,95,-54],[130,-86,136,-81,125,-91],[113,-53,109,-45,133,-66],[106,-35,140,-10,106,-39],[125,17,125,17,125,17]]],[[[0,0,22,-2,0,0],[53,-24,60,-51,48,-1],[52,-56,62,-69,44,-45],[10,-85,18,-91,-6,-75],[61,-73,82,-73,41,-73],[113,-85,129,-75,105,-91],[71,-56,79,-45,61,-69],[70,-24,72,-15,63,-51],[85,-6,98,0,78,-9],[123,0,123,0,123,0]]],[[[0,0,0,0,0,0],[16,-16,16,-16,0,-16],[32,-39,32,-39,16,-39],[52,-39,52,-39,52,-39],[64,-81,70,-81,59,-81],[77,-39,77,-39,77,-39],[98,-39,114,-39,98,-39],[114,-16,130,-16,114,-16],[130,0,130,0,130,0]]],[[[0,0,31,-37,0,0],[-15,-31,-32,-40,6,-19],[-32,-84,-28,-76,-38,-59],[0,-56,-15,-69,-17,-51],[-14,-132,-16,-106,-36,-99],[12,-85,0,-102,-6,-86],[15,-166,11,-150,-12,-133],[30,-114,25,-134,16,-124],[58,-181,47,-167,22,-170],[51,-128,52,-153,42,-145],[99,-176,81,-167,66,-175],[72,-127,81,-146,68,-144],[122,-157,104,-151,97,-165],[89,-120,102,-132,90,-135],[140,-132,118,-130,117,-142],[102,-107,113,-113,109,-120],[148,-106,128,-112,133,-122],[109,-91,118,-93,115,-98],[152,-73,129,-86,141,-101],[109,-69,125,-72,119,-79],[140,-47,126,-67,138,-71],[97,-39,88,8,102,-56],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[-32,-20,-32,-20,-32,-20],[-3,-41,-3,-41,-3,-41],[-11,-73,-11,-73,-11,-73],[20,-78,20,-78,20,-78],[29,-105,29,-105,29,-105],[63,-88,63,-88,63,-88],[94,-107,94,-107,94,-107],[109,-76,109,-76,109,-76],[146,-72,146,-72,146,-72],[132,-35,132,-35,132,-35],[159,-15,159,-15,159,-15],[129,8,129,8,129,8]]],[[[0,0,0,0,0,0],[0,-16,0,-16,0,-16],[128,-16,128,-16,128,-16],[128,16,128,16,128,16]]],[[[0,0,11,-3,0,0],[25,-15,1,-34,29,-11],[26,-75,23,-66,13,-74],[64,-27,108,-27,19,-28],[110,-75,119,-68,110,-57],[120,-37,118,-29,125,-53],[102,-14,94,-9,112,-21],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[7,-9,7,-9,7,-9],[21,-6,21,-6,21,-6],[32,-17,32,-17,32,-17],[51,-13,51,-13,51,-13],[68,-20,68,-20,68,-20],[82,-10,82,-10,82,-10],[101,-12,101,-12,101,-12],[110,1,110,1,110,1],[124,2,124,2,124,2],[128,16,128,16,128,16]]],[[[0,0,12,-3,0,0],[25,-17,27,-24,22,-8],[-8,-43,-17,-52,5,-27],[-18,-66,-14,-57,-21,-63],[11,-51,-5,-58,11,-51],[-7,-77,-4,-72,-9,-75],[30,-58,42,-54,17,-62],[55,-43,97,-65,55,-43],[121,-70,124,-82,111,-31],[151,-33,156,5,149,-53],[128,16,128,16,129,16]]],[[[0,0,6,-46,0,0],[32,-64,43,-64,19,-63],[59,-30,63,-50,54,-50],[88,-64,103,-64,76,-64],[124,0,124,0,118,-46],[125,14,125,14,125,14]]],[[[0,0,8,-12,0,0],[6,-31,13,-42,-3,-18],[23,-34,30,-40,16,-28],[43,-32,51,-39,36,-26],[63,-30,69,-37,56,-24],[81,-29,88,-35,74,-23],[101,-27,109,-34,94,-21],[121,-25,129,-29,112,-21],[134,-2,132,9,137,-14],[128,16,128,16,128,16]]],[[[0,0,16,-2,0,0],[49,-32,55,-60,44,-11],[46,-84,53,-92,32,-70],[62,-96,67,-96,58,-96],[78,-84,93,-70,71,-92],[76,-32,81,-11,69,-60],[124,0,124,0,108,-2]]],[[[0,0,0,0,0,0],[49,-54,49,-54,35,-15],[79,-54,92,-16,79,-54],[127,0,127,0,127,0]]],[[[0,0,0,0,0,0],[31,-26,34,-27,27,-8],[8,-49,8,-49,8,-49],[43,-47,43,-47,43,-47],[42,-80,42,-80,42,-80],[68,-58,68,-58,68,-58],[89,-90,89,-90,89,-90],[96,-53,96,-53,96,-53],[128,-70,128,-70,128,-70],[119,-39,119,-39,119,-39],[153,-37,153,-37,153,-37],[120,-14,120,-14,120,-14],[126,16,126,16,126,16]]],[[[0,0,10,-17,0,0],[-25,-37,-20,-47,-30,-28],[11,-29,15,-33,6,-25],[-4,-74,5,-83,-13,-66],[30,-40,36,-42,23,-39],[29,-95,40,-98,18,-91],[54,-45,59,-44,48,-45],[69,-102,81,-102,57,-102],[77,-42,83,-41,70,-44],[106,-89,115,-86,97,-92],[99,-34,104,-32,95,-36],[139,-64,147,-57,130,-72],[115,-19,120,-15,110,-24],[156,-28,161,-20,151,-36],[126,-2,118,4,144,-16],[128,16,128,16,128,16]]],[[[0,0,-1,-36,0,0],[52,-19,53,-26,52,-6],[44,-46,20,-63,53,-40],[-20,-72,-3,-82,26,-88],[52,-63,50,-85,16,-102],[2,-115,25,-113,42,-107],[67,-75,69,-110,56,-123],[61,-146,76,-129,89,-103],[83,-73,95,-90,101,-120],[118,-124,129,-82,120,-86],[91,-59,121,-67,118,-82],[162,-52,129,-75,134,-81],[96,-40,84,-37,122,-47],[80,-16,80,-6,80,-25],[118,-4,129,1,105,-9],[128,16,128,16,128,16]]],[[[0,0,41,-14,0,0],[45,-38,45,-38,31,-32],[124,-38,124,-38,124,-38],[146,-134,172,-117,146,-134],[172,-76,168,-61,178,-96],[139,-35,124,-24,156,-46],[141,-9,134,2,150,-23],[144,16,144,16,144,16]]],[[[0,0,22,-4,0,0],[38,-12,49,-20,28,-4],[62,-13,76,-13,50,-13],[87,-9,101,5,76,-20],[126,8,126,8,126,8]]],[[[0,0,9,-12,0,0],[48,-18,48,-18,26,-18],[60,-47,70,-47,47,-47],[69,-18,69,-18,70,-26],[82,-18,82,-18,82,-18],[94,-47,107,-47,82,-47],[103,-15,132,-14,103,-15],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[57,-44,44,-52,19,-33],[35,-83,35,-109,35,-66],[81,-129,81,-129,56,-129],[81,-112,65,-112,81,-112],[52,-83,52,-67,52,-99],[81,-55,97,-55,65,-55],[109,-83,109,-99,109,-67],[81,-112,81,-112,97,-112],[81,-129,106,-129,81,-129],[127,-83,127,-63,127,-109],[97,-40,124,-21,114,-47],[128,16,128,16,128,16]]],[[[0,0,40,-20,0,0],[60,-40,78,-39,42,-41],[92,-24,113,-22,72,-25],[142,-52,149,-53,134,-51],[146,-39,146,-39,149,-45],[148,-25,151,-20,154,-34],[143,-11,146,-5,149,-12],[136,1,126,7,142,0],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[0,-64,0,-64,0,-64],[-32,-64,-32,-64,-32,-64],[64,-128,64,-128,64,-128],[158,-63,158,-63,158,-63],[128,-62,128,-62,128,-62],[128,0,128,0,128,0]]],[[[0,0,18,-20,0,0],[20,-47,35,-49,4,-45],[34,-67,42,-73,25,-62],[43,-91,56,-102,35,-85],[53,-111,55,-114,47,-105],[64,-116,70,-116,58,-116],[75,-111,81,-105,73,-114],[85,-91,93,-85,72,-102],[94,-67,103,-62,86,-73],[108,-47,120,-45,93,-49],[119,-14,122,-5,115,-30],[128,0,128,0,128,0]]],[[[0,0,27,-27,0,0],[-5,-63,7,-84,-14,-47],[26,-61,26,-61,26,-61],[32,-98,51,-103,14,-93],[58,-78,58,-78,58,-78],[82,-108,104,-106,61,-110],[97,-72,97,-72,97,-72],[140,-94,159,-81,116,-110],[129,-48,129,-48,129,-48],[174,-48,187,-21,163,-71],[141,-15,170,-6,141,-15],[153,21,144,25,168,14],[127,17,127,17,127,17]]],[[[0,-1,13,-16,0,-1],[25,-73,25,-73,29,-71],[1,-84,28,-88,7,-75],[13,-121,31,-112,27,-103],[48,-136,56,-116,47,-111],[82,-138,86,-112,77,-117],[118,-126,107,-106,102,-115],[134,-91,130,-81,108,-92],[111,-77,130,-47,111,-77],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[0,-16,0,-16,0,-16],[36,-16,36,-16,36,-16],[36,-56,36,-56,36,-56],[16,-56,16,-56,16,-56],[16,-68,16,-68,16,-68],[48,-68,48,-68,48,-68],[48,-16,48,-16,48,-16],[84,-16,84,-16,84,-16],[84,-56,84,-56,84,-56],[64,-56,64,-56,64,-56],[64,-68,64,-68,64,-68],[96,-68,96,-68,96,-68],[96,-16,96,-16,96,-16],[128,-16,128,-16,128,-16],[128,16,128,16,128,16]]],[[[0,0,31,-12,0,0],[85,-67,93,-84,65,-31],[116,-104,125,-110,105,-97],[142,-106,145,-102,134,-111],[134,-81,134,-81,151,-85],[156,-78,160,-74,145,-88],[145,-59,145,-59,160,-58],[161,-51,164,-45,155,-64],[142,-36,142,-36,162,-33],[162,-28,163,-20,159,-40],[142,-15,142,-15,160,-12],[157,-6,157,2,156,-17],[141,6,133,5,147,6],[128,16,128,16,128,16]]],[[[0,0,0,-16,0,0],[14,-26,22,-23,7,-29],[36,-18,36,-18,29,-21],[41,-44,31,-47,41,-44],[48,-58,60,-55,35,-61],[47,-43,47,-43,56,-42],[43,-17,60,-12,43,-17],[87,-9,87,-9,75,-10],[91,-38,81,-41,91,-38],[95,-53,107,-52,83,-54],[97,-38,97,-38,106,-38],[94,-9,111,-9,94,-9],[122,-11,133,-4,120,-12],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[3,-18,-9,-17,-3,-8],[-80,-102,-80,-113,-84,-21],[-66,-106,-42,-67,-71,-114],[21,-86,26,-88,-3,-75],[31,-93,81,-92,23,-93],[96,-27,123,-27,74,-27],[126,16,126,16,126,16]]],[[[0,0,0,-29,0,0],[36,-62,26,-67,13,-52],[16,-89,14,-110,18,-77],[48,-133,70,-136,27,-130],[92,-102,94,-89,89,-123],[78,-67,94,-65,88,-75],[118,-52,116,-66,107,-60],[133,-89,149,-102,121,-80],[185,-80,198,-63,172,-97],[177,-27,166,-19,193,-39],[141,-23,151,-4,152,-18],[143,16,143,16,143,16]]],[[[0,0,1,-7,0,0],[37,-52,37,-52,12,-39],[46,-53,46,-53,41,-52],[47,-43,47,-43,47,-43],[60,-45,60,-45,60,-45],[59,-54,63,-54,59,-54],[74,-55,74,-55,68,-55],[75,-46,75,-46,75,-46],[87,-48,87,-48,87,-48],[86,-57,91,-57,86,-57],[101,-58,101,-58,96,-58],[102,-49,102,-49,102,-49],[114,-50,114,-50,114,-50],[113,-59,118,-60,113,-59],[128,-61,128,-61,123,-60],[129,-52,129,-52,129,-52],[141,-53,141,-53,141,-53],[140,-62,145,-63,140,-62],[155,-64,155,-64,150,-63],[156,-55,156,-55,156,-55],[169,-56,169,-56,169,-56],[168,-65,173,-66,168,-65],[182,-66,182,-66,178,-66],[183,-58,183,-58,183,-58],[196,-59,196,-59,196,-59],[195,-68,204,-69,195,-68],[209,-69,214,1,209,-69],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[13,-41,13,-41,13,-41],[28,-41,28,-41,28,-41],[28,-59,28,-59,28,-59],[33,-66,38,-66,28,-66],[38,-59,38,-59,38,-59],[38,-41,38,-41,38,-41],[59,-41,59,-41,59,-41],[59,-48,59,-48,59,-48],[65,-54,69,-54,60,-54],[70,-48,70,-48,70,-48],[70,-41,70,-41,70,-41],[91,-41,91,-41,91,-41],[91,-59,91,-59,91,-59],[96,-66,101,-66,91,-66],[101,-59,101,-59,101,-59],[101,-41,101,-41,101,-41],[116,-41,116,-41,116,-41],[130,0,130,0,130,0]]],[[[0,0,0,-18,0,0],[32,-32,40,-32,14,-32],[52,-35,52,-52,52,-30],[84,-66,98,-66,66,-66],[114,-43,130,-41,111,-56],[143,-11,143,9,143,-27],[128,15,128,15,128,15]],[[0,0,8,-5,0,0],[35,-28,66,-26,9,-30],[85,-55,110,-55,62,-56],[116,-38,130,-35,103,-41],[138,-12,140,8,137,-23],[128,16,128,16,128,16]]],[[[0,0,-2,0,0,0],[-17,-11,-9,-33,-24,-7],[-23,-35,-17,-43,-44,-22],[-30,-62,-8,-60,-32,-45],[-14,-85,-11,-78,-28,-93],[3,-107,24,-99,0,-112],[23,-123,49,-118,24,-120],[54,-127,63,-118,48,-138],[80,-127,86,-116,62,-143],[111,-123,106,-111,98,-125],[130,-106,142,-95,137,-109],[147,-87,134,-78,154,-105],[153,-71,161,-54,156,-81],[158,-47,155,-39,179,-58],[162,-24,150,-19,159,-26],[151,0,126,-5,154,-8],[136,12,128,8,146,8],[126,17,126,17,126,17]]],[[[0,0,0,0,0,0],[58,-58,58,-58,62,-34],[38,-61,37,-55,47,-59],[26,-51,19,-51,32,-51],[13,-64,13,-71,13,-57],[26,-76,32,-76,19,-76],[39,-65,46,-66,38,-72],[64,-68,72,-68,55,-68],[89,-65,90,-72,82,-66],[102,-76,109,-76,95,-76],[114,-64,114,-57,114,-71],[102,-51,95,-51,109,-51],[89,-61,80,-59,90,-55],[70,-58,65,-34,70,-58],[127,0,127,0,127,0]]],[[[0,0,31,-11,0,0],[93,-23,107,-34,79,-13],[68,-76,41,-75,110,-77],[20,-32,29,-16,24,-58],[15,-33,16,-60,2,-19],[68,-83,90,-83,40,-82],[110,-59,115,-46,104,-72],[107,-23,99,-12,114,-32],[128,16,128,16,128,16]]],[[[0,0,35,-12,0,0],[28,-51,33,-55,3,-27],[32,-66,32,-71,31,-58],[39,-83,44,-76,45,-65],[40,-67,33,-62,46,-71],[42,-49,49,-52,35,-55],[51,-67,58,-68,44,-65],[66,-78,54,-76,55,-77],[55,-64,46,-61,64,-67],[57,-48,65,-56,52,-55],[76,-60,74,-69,80,-41],[78,-81,87,-65,84,-59],[81,-60,84,-43,79,-69],[68,-41,78,-34,74,-53],[96,-46,98,-63,95,-36],[118,-65,99,-62,103,-65],[103,-45,106,-35,101,-58],[88,-26,106,-34,83,-42],[123,-32,131,-42,116,-23],[127,-59,124,-37,118,-40],[128,-31,119,-22,140,-45],[105,-15,114,-13,107,-27],[134,-21,137,-30,132,-13],[159,-14,152,-19,148,-33],[138,-18,133,-10,144,-27],[118,-3,115,3,124,-15],[139,0,141,-7,138,8],[160,13,154,-5,157,-6],[139,10,135,16,146,-2],[123,8,118,13,128,3],[128,20,128,20,128,20]]],[[[0,0,-6,-8,0,0],[-1,-23,7,-33,-9,-14],[112,-11,126,-43,104,6],[148,-52,157,-47,133,-60],[127,15,127,15,127,15]]],[[[0,0,42,-34,0,0],[55,-97,70,-113,41,-83],[86,-99,95,-105,71,-91],[109,-85,124,-53,103,-98],[128,16,128,16,128,16]]],[[[0,0,10,-3,0,0],[50,-23,20,-39,56,-20],[26,-83,37,-94,11,-67],[64,-67,66,-88,62,-88],[101,-83,117,-67,90,-94],[78,-23,74,-21,107,-39],[106,-4,119,2,93,-10],[127,8,127,8,127,8]]],[[[0,0,-14,-15,0,0],[-10,-35,-6,-40,-15,-28],[10,-32,21,-21,2,-41],[38,-52,42,-52,25,-52],[50,-45,58,-36,45,-50],[74,-42,80,-47,67,-36],[92,-52,96,-51,86,-53],[102,-40,116,-3,99,-48],[138,-29,147,-7,128,-52],[128,5,128,5,128,5]]],[[[0,0,0,0,0,0],[32,-48,32,-48,7,-26],[-7,-63,-7,-66,-7,-61],[64,-87,68,-87,60,-87],[140,-63,140,-61,140,-66],[96,-48,122,-26,96,-48],[129,0,129,0,129,0]]],[[[0,0,-11,-5,0,0],[-9,-42,3,-79,2,-23],[64,-91,79,-91,36,-91],[99,-82,42,-52,92,-87],[10,-25,36,-23,-10,-26],[130,-19,133,-10,78,-23],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[3,-5,-5,-10,1,-2],[-9,-16,-8,-18,-10,-15],[7,-11,9,-15,-2,-15],[16,-23,10,-31,12,-19],[8,-39,9,-40,6,-38],[22,-27,25,-30,15,-35],[33,-34,33,-34,29,-32],[34,-35,31,-44,34,-34],[32,-52,33,-53,30,-52],[41,-37,45,-38,37,-46],[54,-39,55,-50,50,-39],[58,-59,60,-59,56,-59],[62,-39,66,-39,61,-50],[75,-38,79,-48,70,-39],[85,-55,86,-54,83,-55],[82,-37,87,-35,85,-47],[96,-32,103,-40,91,-34],[111,-44,112,-43,110,-45],[102,-28,105,-26,108,-36],[109,-23,111,-21,107,-25],[113,-18,122,-23,112,-20],[130,-24,131,-22,129,-25],[117,-12,120,-8,125,-18],[124,2,134,0,122,-3],[141,2,141,4,141,1],[126,8,127,13,135,6],[128,16,128,16,128,16]]],[[[0,0,0,0,0,0],[0,-128,0,-128,0,-128],[128,-128,128,-128,128,-128],[128,0,128,0,128,0]]],[[[0,0,46,-43,0,0],[-53,-32,-62,-35,-24,-21],[-93,-65,-96,-82,-89,-46],[-60,-102,-25,-107,-86,-98],[19,-54,50,-62,-27,-43],[96,-51,115,-42,79,-58],[108,-17,87,0,122,-28],[128,16,128,16,128,16]]],[[[0,0,16,-9,0,0],[28,-52,28,-52,8,-24],[12,-52,8,-52,16,-52],[8,-56,8,-56,8,-56],[16,-60,24,-60,8,-60],[32,-60,32,-60,32,-60],[64,-92,96,-92,32,-92],[96,-60,96,-60,96,-60],[112,-60,120,-60,104,-60],[120,-56,120,-56,120,-56],[116,-52,112,-52,120,-52],[100,-52,104,-39,100,-52],[113,-2,110,11,116,-20],[112,15,112,15,112,15]]]],s.neckArr=[[[[75,-75,82,-61,75,-75],[156,61,180,74,57,7],[218,72,218,72,218,72]],[[475,84,475,84,475,84],[204,136,154,139,221,135],[83,89,39,54,111,111],[0,0,0,0,22,9]]],[[[75,-75,87,-70,75,-75],[115,-25,120,-16,100,-56],[130,18,134,39,126,0],[155,42,155,42,155,42]],[[465,30,465,30,465,30],[141,131,110,133,158,131],[60,79,40,13,73,120],[0,0,0,0,20,7]]],[[[75,-75,75,-59,75,-75],[118,-21,139,-22,84,-19],[164,-36,181,-44,146,-28],[203,-44,203,-44,203,-44]],[[434,-14,434,-14,434,-14],[183,64,160,60,206,67],[69,76,12,52,116,97],[0,0,0,0,22,7]]],[[[75,-75,75,-75,75,-75],[88,37,81,76,100,-44],[112,139,158,154,79,129],[203,121,203,121,203,121]],[[364,338,364,338,364,338],[173,239,141,255,203,224],[53,225,9,197,94,250],[8,93,15,15,3,144],[0,0,0,0,20,11]]],[[[75,-75,94,-75,75,-75],[127,-43,150,4,114,-69],[171,181,179,216,158,124],[190,226,190,226,190,226]],[[178,430,178,430,178,430],[175,308,160,303,190,313],[122,264,91,218,144,295],[72,9,69,-4,93,97],[0,0,0,0,22,6]]],[[[75,-75,94,-64,75,-75],[307,-23,378,-24,153,-21],[499,64,547,113,452,15],[587,139,587,139,587,139]],[[620,214,620,214,620,214],[562,205,519,190,588,214],[431,96,376,59,473,126],[290,47,205,48,335,47],[91,19,49,5,143,37],[0,0,0,0,15,4]]],[[[75,-75,86,-66,75,-75],[102,-20,133,28,88,-41],[202,58,202,58,202,58]],[[227,227,227,227,227,227],[177,206,137,190,202,216],[89,140,46,89,104,159],[0,0,0,0,18,6]]],[[[75,-75,75,-75,75,-75],[100,-80,100,-80,100,-80],[100,-51,100,-51,100,-51],[126,-56,126,-56,126,-56],[126,-30,126,-30,126,-30],[153,-32,153,-32,153,-32],[152,-9,152,-9,152,-9],[175,-9,175,-9,175,-9],[176,16,176,16,176,16],[199,16,199,16,199,16],[198,40,198,40,198,40],[222,40,222,40,222,40],[223,64,223,64,223,64],[248,61,248,61,248,61],[252,85,252,85,252,85],[275,77,275,77,275,77],[285,99,285,99,285,99],[306,89,306,89,306,89],[318,106,318,106,318,106],[331,107,331,107,331,107]],[[346,169,346,169,346,169],[306,176,282,176,329,176],[168,103,147,80,222,161],[68,22,42,3,107,52],[0,0,0,0,22,3]]],[[[74,-73,74,-73,74,-73],[82,-41,91,-31,73,-52],[149,7,161,14,108,-15],[182,20,204,27,171,17],[265,72,305,115,230,34],[363,134,363,134,330,131]],[[364,275,364,275,364,275],[333,237,313,230,365,248],[274,186,256,168,292,203],[206,127,186,105,232,154],[158,96,119,91,177,102],[23,13,15,1,34,29],[1,1,1,1,17,8]]],[[[75,-75,76,-59,75,-75],[115,-65,175,-79,81,-57],[161,36,154,58,175,-5],[203,57,203,57,203,57]],[[229,121,229,121,229,121],[181,128,164,127,204,128],[119,125,86,122,150,128],[77,79,88,37,72,98],[66,16,26,33,89,6],[0,0,0,0,14,10]]],[[[75,-75,111,-78,75,-75],[148,-84,180,-86,117,-83],[220,-71,220,-71,220,-71]],[[197,205,197,205,197,205],[199,0,178,-2,220,3],[81,2,37,-19,165,44],[0,0,0,0,25,10]]],[[[75,-75,87,-74,75,-75],[95,-85,101,-84,84,-86],[112,-75,124,-73,104,-75],[132,-84,137,-83,121,-85],[149,-74,161,-72,141,-74],[169,-83,173,-83,157,-83],[180,-74,184,-72,176,-77],[186,-73,186,-73,186,-73]],[[346,-81,346,-81,346,-81],[174,3,140,5,188,3],[78,3,53,5,116,-2],[0,-1,0,-1,21,9]]],[[[74,-73,69,-58,74,-73],[74,-43,95,2,69,-48],[213,11,254,1,154,25],[303,-54,315,-79,287,-23],[336,-80,336,-80,336,-80]],[[333,179,333,179,333,179],[304,34,282,50,337,9],[227,69,147,88,255,63],[29,-1,25,-6,67,59],[0,0,0,0,12,9]]],[[[73,-72,73,-72,73,-72],[54,46,55,114,52,10],[66,129,92,164,65,127],[105,275,105,281,107,238],[108,284,122,301,107,283],[143,298,143,298,143,298]],[[171,407,171,407,171,407],[127,363,78,363,147,363],[65,274,67,241,63,315],[34,153,26,143,51,177],[14,47,12,9,16,121],[1,0,1,0,1,0]]],[[[75,-75,75,-75,75,-75],[195,-27,219,15,170,-70],[180,150,151,221,221,52],[268,219,268,219,268,219]],[[418,489,418,489,418,489],[237,315,140,307,269,317],[86,249,55,205,108,280],[100,119,116,86,72,177],[99,10,63,0,144,22],[0,0,0,0,28,8]]],[[[75,-75,148,-111,75,-75],[244,-127,304,-138,212,-121],[426,-121,517,-102,371,-132],[587,-67,587,-67,587,-67]],[[629,221,629,221,629,221],[544,-7,513,-24,579,13],[453,-47,384,-71,504,-29],[207,-53,131,-33,321,-83],[41,4,29,4,83,3],[0,1,0,1,17,7]]],[[[75,-75,102,-65,75,-75],[168,-90,172,-87,135,-61],[153,-52,180,-39,162,-60],[248,-43,249,-26,210,-21],[225,-10,252,5,230,-10],[332,14,338,17,296,26],[299,49,334,60,317,42],[418,75,420,80,368,95],[379,117,394,134,401,107],[416,134,416,134,416,134]],[[483,311,483,311,483,311],[384,203,311,188,415,209],[224,97,210,83,281,153],[113,22,58,-1,166,44],[0,0,0,0,23,5]]],[[[75,-75,75,-75,75,-75],[99,-88,99,-88,93,-88],[113,-70,113,-70,113,-70],[136,-88,136,-88,131,-88],[151,-70,151,-70,151,-70],[174,-88,174,-88,169,-88],[189,-70,189,-70,189,-70],[212,-88,212,-88,207,-88],[227,-70,227,-70,227,-70],[250,-88,250,-88,245,-88],[265,-70,265,-70,265,-70],[288,-88,288,-88,282,-88],[302,-70,302,-70,302,-70],[326,-88,326,-88,320,-88],[340,-70,340,-70,340,-70],[364,-88,364,-88,358,-88],[378,-70,378,-70,378,-70]],[[410,234,410,234,410,234],[349,3,318,4,380,2],[252,2,203,2,289,1],[87,-1,44,1,122,-2],[0,0,0,0,19,10]]],[[[75,-75,75,-75,75,-75],[206,-97,256,-93,144,-102],[322,-4,374,35,276,-40],[460,-53,460,-53,460,-53]],[[571,249,571,249,571,249],[432,52,381,83,462,33],[282,52,247,20,336,99],[182,-31,149,-30,218,-31],[62,-2,25,5,91,-8],[0,0,0,0,0,0]]],[[[75,-75,75,-75,75,-75],[106,-77,118,-72,90,-83],[134,-58,144,-54,124,-62],[183,-66,200,-63,159,-71],[221,-49,233,-49,201,-49],[254,-68,274,-75,241,-63],[283,-67,283,-67,283,-67]],[[347,187,347,187,347,187],[270,-15,260,-11,281,-20],[217,6,194,6,247,7],[169,-14,152,-16,189,-11],[115,-2,93,-8,141,5],[66,-18,45,-10,94,-29],[0,0,0,0,21,8]]],[[[75,-75,124,27,75,-75],[215,48,215,48,215,48]],[[212,227,212,227,212,227],[198,73,72,7,217,83],[0,0,0,0,12,5]]],[[[72,-73,80,-52,72,-73],[104,-39,125,-39,92,-40],[167,-15,176,-5,146,-38],[217,0,235,-8,196,9],[271,-9,290,-7,253,-10],[315,13,317,15,305,1],[337,22,350,24,323,19],[374,21,400,14,363,24],[500,25,531,50,465,1],[618,42,651,35,574,50],[711,56,732,65,674,39],[774,64,824,52,745,71],[883,71,883,71,839,56]],[[985,244,983,244,985,244],[863,152,823,139,880,157],[783,103,729,115,825,93],[672,83,653,77,711,97],[624,81,569,91,643,78],[477,58,463,48,515,88],[384,60,351,68,425,49],[284,38,278,31,304,62],[233,37,215,44,256,27],[177,38,162,33,196,45],[137,12,128,2,148,24],[102,1,58,-13,121,6],[3,1,3,1,3,1]]],[[[74,-73,74,-73,74,-73],[59,17,66,33,53,2],[107,47,124,47,86,47],[125,29,125,22,125,36],[104,17,93,20,115,13],[93,40,93,56,93,33],[109,93,130,119,95,73],[168,116,183,115,147,118],[192,98,193,87,191,111],[173,81,162,81,185,81],[157,106,158,118,155,92],[176,165,191,186,160,143],[233,189,249,189,212,189],[257,173,257,162,257,184],[239,156,228,157,250,155],[222,178,222,189,222,163],[242,246,258,262,225,228],[299,265,315,265,278,265],[324,248,324,237,324,260],[303,230,292,230,315,230],[289,255,290,267,287,241],[330,302,343,305,304,297],[362,308,362,308,362,308]],[[376,445,376,445,376,445],[344,395,323,394,363,397],[299,361,284,341,313,380],[260,271,253,246,264,281],[289,203,318,191,263,215],[353,255,351,275,358,217],[300,297,279,298,332,295],[225,265,200,236,250,296],[197,184,196,166,197,208],[227,133,247,127,200,143],[280,177,278,197,285,139],[229,215,208,216,260,214],[162,186,137,158,186,214],[131,113,129,96,133,129],[160,57,183,46,133,70],[218,102,216,123,223,64],[172,142,145,145,207,140],[96,110,76,85,116,135],[69,46,68,28,70,62],[99,-8,121,-13,71,0],[148,39,146,59,153,1],[97,68,77,65,128,73],[30,40,17,27,49,60],[0,0,0,0,8,6]]],[[[65,-70,65,-70,65,-70],[65,-26,65,-26,65,-26],[65,102,65,102,65,102],[81,118,97,118,65,118],[97,102,97,86,97,102],[113,86,113,86,113,86]],[[129,230,129,230,129,230],[81,166,33,166,113,166],[33,118,33,118,33,118],[33,21,33,5,33,21],[1,0,1,0,14,9]]],[[[75,-75,99,-105,75,-75],[163,-63,170,-40,145,-121],[212,-35,252,-45,181,-27],[245,25,189,97,279,-19],[286,95,286,95,286,95]],[[427,232,427,232,427,232],[256,156,216,153,286,159],[177,126,155,99,190,141],[188,27,211,-4,156,69],[127,-13,122,-26,144,33],[101,-39,88,-28,115,-51],[52,0,30,8,77,-8],[0,0,0,0,9,3]]],[[[75,-75,191,-98,75,-75],[274,-14,325,-8,223,-20],[505,-55,719,102,423,-115],[766,257,766,257,766,257]],[[741,481,741,481,741,481],[738,358,705,312,764,394],[469,-2,408,-42,675,132],[225,33,128,-22,313,82],[75,-10,37,-5,123,-17],[0,0,0,0,24,8]]],[[[75,-75,75,-75,75,-75],[139,-91,158,-83,116,-99],[148,-55,158,-52,138,-57],[206,-63,226,-50,186,-76],[208,-22,220,-14,198,-29],[261,-27,283,-13,239,-41],[270,18,278,26,263,11],[318,13,333,24,297,-3],[321,53,326,77,318,36],[363,73,363,73,363,73]],[[464,277,464,277,464,277],[344,106,326,92,361,119],[299,103,280,88,319,119],[283,57,274,51,299,68],[231,67,208,50,254,85],[223,19,219,17,227,22],[156,37,129,18,183,55],[154,-15,148,-21,161,-10],[89,10,70,-4,108,24],[86,-26,81,-31,92,-21],[0,0,0,0,25,11]]],[[[75,-75,93,-101,75,-75],[107,-65,117,-85,112,-88],[141,-55,146,-77,146,-88],[173,-45,184,-71,179,-79],[205,-35,221,-60,210,-65],[236,-24,252,-51,241,-53],[270,-13,280,-36,273,-41],[300,-5,300,-5,309,-33],[323,-17,335,-12,312,-22],[332,7,332,7,332,7]],[[423,265,423,265,423,265],[305,78,251,59,330,87],[108,20,77,11,161,34],[0,0,0,0,29,8]]],[[[80,-71,80,-71,80,-71],[80,-48,80,-48,80,-48],[128,-48,128,-48,128,-48],[128,0,128,0,128,0],[176,0,176,0,176,0],[176,48,176,48,176,48],[224,48,224,48,224,48],[224,96,224,96,224,96],[272,96,272,96,272,96],[272,144,272,144,272,144],[320,144,320,144,320,144],[320,192,320,192,320,192],[368,192,368,192,368,192],[368,240,368,240,368,240],[416,240,416,240,416,240],[416,288,416,288,416,288]],[[448,432,448,432,448,432],[368,336,368,336,368,336],[368,288,368,288,368,288],[320,288,320,288,320,288],[320,240,320,240,320,240],[272,240,272,240,272,240],[272,192,272,192,272,192],[224,192,224,192,224,192],[224,144,224,144,224,144],[176,144,176,144,176,144],[176,96,176,96,176,96],[128,96,128,96,128,96],[128,48,128,48,128,48],[80,48,80,48,80,48],[80,0,80,0,80,0],[32,0,32,0,32,0],[0,0,0,0,0,0]]],[[[75,-75,75,-75,75,-75],[142,28,136,59,161,-88],[249,94,247,119,257,27],[331,129,331,129,331,129]],[[389,279,389,279,389,279],[298,175,244,171,333,178],[196,110,201,90,186,145],[98,80,85,69,126,107],[85,10,92,-16,77,43],[0,0,0,0,23,6]]],[[[75,-75,75,-75,75,-75],[94,-73,104,-70,84,-75],[113,-66,113,-66,113,-66]],[[338,220,338,220,338,220],[97,5,86,2,112,10],[53,3,44,3,63,3],[0,0,0,0,22,5]]],[[[75,-75,99,-79,75,-75],[116,-59,147,-68,90,-52],[172,-37,203,-46,146,-30],[226,-15,257,-24,200,-7],[268,-9,268,-9,257,-23]],[[272,130,272,130,272,130],[243,98,231,93,264,108],[219,75,201,58,230,85],[162,62,148,44,179,83],[121,49,108,43,134,56],[98,26,80,9,109,37],[41,13,27,-5,58,34],[0,0,0,0,17,7]]],[[[76,-76,89,-74,76,-76],[93,-38,105,-36,81,-40],[119,-65,130,-63,109,-67],[134,-34,144,-32,124,-35],[156,-56,165,-55,147,-58],[168,-31,176,-29,160,-32],[185,-48,192,-47,178,-50],[197,-47,197,-47,197,-47]],[[187,178,187,178,187,178],[181,18,173,18,193,17],[166,-3,158,-3,174,-3],[150,21,142,21,159,21],[132,-5,122,-4,142,-5],[113,25,102,25,124,24],[90,-7,78,-6,102,-7],[68,22,55,21,81,23],[45,-3,36,-7,55,1],[0,1,0,1,10,5]]],[[[75,-75,75,-75,75,-75],[98,-70,104,-60,88,-85],[120,-53,124,-46,114,-68],[150,-45,159,-33,144,-52],[183,-34,193,-28,158,-51],[214,-27,226,-18,202,-36],[245,-26,260,-28,235,-25],[263,-28,263,-28,263,-28]],[[197,363,197,363,197,363],[238,138,217,130,263,147],[200,111,188,111,221,110],[172,93,159,94,190,91],[144,79,131,79,167,80],[121,66,102,63,133,67],[95,51,86,51,105,51],[72,38,62,39,88,37],[49,27,37,27,58,26],[33,16,9,14,38,16],[0,0,0,0,30,9]]],[[[75,-75,75,-75,75,-75],[75,-75,75,-75,75,-75],[301,-75,301,-75,301,-75]],[[291,152,291,152,291,152],[302,0,302,0,302,0],[75,0,75,0,75,0],[0,0,0,0,20,12]]],[[[75,-75,102,-74,75,-75],[263,-167,330,-161,138,-178],[429,-32,470,61,393,-113],[458,187,458,187,458,187]],[[488,311,488,311,488,311],[446,308,380,295,460,311],[379,119,380,27,378,266],[237,-88,161,-91,335,-84],[54,0,35,1,144,-1],[0,0,0,0,17,10]]],[[[75,-75,75,-75,75,-75],[97,-71,106,-77,90,-73],[119,-66,119,-66,115,-75],[144,-59,155,-64,130,-63],[166,-52,166,-52,162,-62],[191,-43,201,-48,177,-48],[212,-36,212,-36,208,-46],[236,-27,246,-33,223,-32],[258,-20,258,-20,256,-30],[283,-12,293,-17,269,-17],[304,-6,313,-3,301,-15],[330,2,330,2,330,2]],[[411,203,411,203,411,203],[310,99,234,71,321,103],[66,13,44,6,121,31],[0,0,0,0,25,2]]],[[[75,-75,88,-86,75,-75],[109,-72,121,-64,98,-80],[144,-74,158,-65,120,-91],[178,-77,195,-63,158,-91],[212,-79,226,-68,193,-94],[247,-81,263,-68,228,-95],[281,-83,297,-71,264,-97],[316,-85,331,-71,300,-100],[355,-86,365,-78,339,-100],[381,-91,389,-92,376,-90],[394,-87,394,-87,394,-87]],[[432,128,432,128,432,128],[387,8,343,6,396,9],[250,2,198,2,291,2],[85,0,48,0,140,1],[0,0,0,0,30,12]]],[[[74,-73,74,-73,74,-73],[75,-37,75,-37,75,-37],[155,-37,164,-37,155,-37],[172,-19,172,-19,172,-29],[172,29,172,39,172,29],[155,46,155,46,164,46],[92,46,92,46,92,46],[92,59,92,59,92,59],[155,59,164,59,155,59],[172,77,172,77,172,67],[172,125,172,135,172,125],[155,142,155,142,164,142],[92,142,92,142,92,142],[92,155,92,155,92,155],[207,155,207,155,207,155]],[[199,394,199,394,199,394],[190,246,173,220,208,274],[134,190,134,190,184,190],[75,190,65,190,75,190],[57,173,57,173,57,183],[57,125,57,115,57,125],[75,107,75,107,65,107],[137,107,137,107,137,107],[137,94,137,94,137,94],[75,94,65,94,75,94],[57,77,57,77,57,87],[57,29,57,19,57,29],[75,11,75,11,65,11],[137,11,137,11,137,11],[137,-2,137,-2,137,-2],[75,-2,75,-2,75,-2],[0,0,0,0,19,8]]],[[[75,-75,93,-57,75,-75],[74,110,59,151,116,-6],[143,202,141,232,146,143],[186,187,195,179,169,203],[208,182,208,182,208,182]],[[283,366,283,366,283,366],[194,252,178,255,210,249],[160,274,145,280,181,267],[119,270,99,261,131,276],[93,222,98,179,90,243],[27,160,7,128,48,191],[35,69,44,43,26,95],[42,18,34,-4,46,29],[0,0,0,0,26,19]]],[[[75,-75,97,-64,75,-75],[117,-22,136,12,108,-38],[154,27,154,27,154,27]],[[174,238,174,238,174,238],[137,144,97,119,158,159],[69,15,40,-7,98,36],[0,0,0,0,0,0]]],[[[75,-75,79,-56,75,-75],[121,-21,158,-17,90,-24],[180,44,180,65,179,10],[216,65,216,65,216,65]],[[249,210,249,210,249,210],[180,140,149,136,218,145],[112,82,103,37,120,120],[44,41,26,31,76,58],[0,0,0,0,21,6]]],[[[75,-75,96,-21,75,-75],[138,-22,123,-6,155,-39],[187,11,171,26,204,-6],[234,43,220,57,249,28],[266,74,266,74,266,74]],[[269,303,269,303,269,303],[243,145,213,135,265,151],[153,79,125,57,181,101],[59,15,38,3,94,33],[0,0,0,0,0,0]]],[[[75,-75,75,-75,75,-75],[103,-19,118,47,94,-55],[161,50,178,70,140,25],[193,107,205,121,169,80],[241,120,241,120,241,120]],[[298,328,298,328,298,328],[208,218,156,206,238,225],[170,121,159,111,192,142],[117,99,100,76,131,118],[103,45,88,31,119,59],[55,14,57,-17,52,46],[0,0,0,0,14,6]]],[[[75,-75,117,-35,75,-75],[71,8,98,-12,51,23],[94,18,107,0,83,36],[119,6,119,6,119,6]],[[168,159,168,159,168,159],[108,57,98,63,119,51],[37,78,0,66,78,90],[3,31,6,13,1,46],[0,0,0,0,18,7]]],[[[75,-75,85,15,75,-75],[182,-122,238,-123,119,-122],[247,22,251,100,243,-78],[320,8,332,-8,296,41],[347,-6,347,-6,347,-6]],[[439,191,439,191,439,191],[329,122,314,123,348,121],[251,143,219,139,313,150],[181,61,181,-23,181,116],[169,-30,152,-32,183,-29],[81,40,33,38,125,41],[0,0,0,0,24,7]]],[[[75,-75,75,-75,75,-75],[76,-70,76,-70,76,-70],[91,-56,92,-49,89,-64],[102,-55,102,-55,102,-55],[118,-47,121,-40,115,-54],[130,-50,130,-50,130,-50],[148,-43,152,-37,143,-50],[160,-48,160,-48,160,-48],[178,-46,184,-41,173,-51],[189,-55,189,-55,189,-55],[207,-58,212,-55,201,-61],[214,-71,214,-71,214,-71],[232,-77,238,-76,225,-79],[237,-93,237,-93,237,-93],[252,-102,259,-103,246,-102],[253,-119,253,-119,253,-119],[266,-133,271,-135,260,-131],[263,-151,263,-159,261,-145],[268,-163,268,-163,268,-163]],[[334,184,334,184,334,184],[263,23,219,40,273,19],[121,35,84,25,171,47],[39,6,33,4,56,11],[12,-5,12,-5,26,1]]],[[[75,-75,63,-39,75,-75],[73,-25,68,-16,86,-49],[79,4,74,15,89,-17],[89,28,85,43,94,8],[101,54,97,66,106,35],[117,80,113,94,122,62],[134,102,133,117,136,83],[155,127,154,142,157,111],[178,143,181,152,174,131],[185,152,185,152,185,152]],[[248,352,248,352,248,352],[172,225,128,215,183,228],[79,123,66,100,101,163],[37,29,32,10,42,47],[0,0,0,0,15,11]]],[[[75,-75,154,-90,75,-75],[126,17,141,18,99,14],[141,-18,152,-26,126,-7],[179,-24,179,-24,179,-24]],[[272,200,272,200,272,200],[156,84,135,84,181,84],[63,79,43,68,86,91],[47,0,31,-13,59,11],[0,0,0,0,20,8]]],[[[79,-75,79,-75,79,-75],[79,-49,79,-49,79,-49],[79,16,79,16,79,16],[130,16,130,16,130,16],[130,64,130,64,130,64],[170,64,170,64,170,64]],[[378,281,378,281,378,281],[161,105,161,105,161,105],[88,105,88,105,88,105],[88,56,88,56,88,56],[34,56,34,56,34,56],[34,0,17,0,34,0],[0,0,0,0,12,11]]],[[[74,-73,74,-50,74,-73],[79,-24,86,-20,69,-29],[105,-31,110,-37,96,-22],[114,-38,114,-38,114,-38]],[[120,186,120,186,120,186],[101,78,90,64,115,93],[56,58,42,58,79,58],[18,41,2,24,28,52],[1,-1,1,-1,11,8]]],[[[74,-72,74,-72,74,-72],[86,-50,102,-42,69,-58],[124,-44,124,-44,124,-44]],[[124,248,129,218,124,248],[86,155,86,155,124,155],[33,116,4,79,62,154],[4,22,3,9,4,22],[0,0,0,0,4,11]]],[[[75,-75,79,-70,75,-75],[89,-65,105,-60,84,-66],[176,-51,207,-21,144,-81],[185,30,185,30,185,30]],[[311,211,311,211,311,211],[145,106,106,134,165,92],[27,113,1,92,64,141],[2,18,3,9,1,51],[0,0,0,0,4,1]]],[[[75,-75,75,-75,75,-75],[107,-64,116,-47,98,-80],[142,-46,153,-32,133,-60],[180,-32,188,-20,172,-44],[203,-22,203,-22,203,-22]],[[237,200,237,200,237,200],[178,156,150,156,202,156],[127,133,102,129,152,138],[89,99,61,94,117,104],[53,65,30,59,76,72],[26,33,5,28,47,39],[0,0,0,0,17,7]]],[[[75,-75,78,-62,75,-75],[73,-19,87,-3,61,-33],[88,14,105,17,72,11],[126,10,139,15,115,7],[179,8,193,15,170,4],[221,8,240,11,212,7],[250,5,250,5,250,5]],[[282,173,282,173,282,173],[226,75,220,73,255,88],[192,72,173,59,199,77],[131,70,104,61,152,77],[77,66,63,64,116,71],[39,62,28,65,52,58],[13,53,5,44,20,59],[4,20,-2,11,12,33],[0,0,0,0,1,2]]],[[[75,-75,75,-75,75,-75],[173,-23,220,5,122,-53],[379,56,482,75,266,36],[588,57,588,57,588,57]],[[564,267,564,267,564,267],[551,123,515,127,587,120],[341,109,207,85,446,126],[88,4,66,2,129,7],[0,0,0,0,16,3]]],[[[75,-75,75,-75,75,-75],[94,-71,106,-72,83,-70],[120,-69,120,-69,103,-102],[139,-64,151,-62,128,-66],[164,-55,164,-55,156,-92],[181,-46,191,-41,171,-51],[202,-30,202,-30,205,-67],[215,-16,224,-8,207,-24],[231,6,231,6,244,-29],[245,19,254,26,236,12],[262,39,262,39,273,3],[278,50,288,56,268,44],[298,67,298,67,303,30],[316,74,327,78,305,71],[339,87,346,90,336,49],[363,91,363,91,363,91]],[[390,226,390,226,390,226],[344,170,323,170,364,171],[239,120,207,91,290,167],[110,10,63,-6,144,21],[0,0,0,0,23,8]]],[[[74,-71,74,-71,74,-71],[93,-26,93,-26,93,-26],[115,-26,115,-26,115,-26],[115,-70,115,-70,115,-70],[158,-70,158,-70,158,-70],[158,-26,158,-26,158,-26],[202,-26,202,-26,202,-26],[202,-70,202,-70,202,-70],[246,-70,246,-70,246,-70],[246,-26,246,-26,246,-26],[290,-26,290,-26,290,-26],[290,-70,290,-70,290,-70],[334,-70,334,-70,334,-70],[334,-26,334,-26,334,-26],[361,-26,361,-26,361,-26],[405,-70,405,-70,405,-70]],[[394,77,394,77,394,77],[361,0,361,0,361,0],[334,0,334,0,334,0],[334,44,334,44,334,44],[290,44,290,44,290,44],[290,0,290,0,290,0],[246,0,246,0,246,0],[246,44,246,44,246,44],[202,44,202,44,202,44],[202,0,202,0,202,0],[158,0,158,0,158,0],[158,44,158,44,158,44],[114,44,114,44,114,44],[115,0,115,0,115,0],[0,0,0,0,0,0]]],[[[75,-75,75,-75,75,-75],[176,-62,204,-24,157,-89],[220,103,220,103,220,103]],[[245,246,245,246,245,246],[181,198,171,198,224,199],[127,164,111,129,138,191],[140,-26,137,-35,149,-1],[78,-28,66,-25,100,-33],[0,0,0,0,26,12]]],[[[75,-75,80,-70,75,-75],[139,-42,164,-28,105,-61],[234,15,305,66,199,-10],[329,100,329,100,329,100]],[[370,281,370,281,370,281],[286,295,265,288,321,307],[217,261,123,206,244,277],[41,75,22,39,77,142],[0,0,0,0,19,8]]],[[[76,-73,76,-73,76,-73],[76,-73,76,-73,76,-73],[201,-73,201,-73,201,-73],[201,21,201,21,201,21],[162,21,162,21,162,21],[162,61,162,61,162,61],[277,61,277,61,277,61],[277,154,277,154,277,154],[238,154,238,154,238,154],[238,194,238,194,238,194],[353,194,353,194,353,194],[353,288,353,288,353,288],[313,288,313,288,313,288],[313,328,313,328,313,328],[428,328,428,328,428,328]],[[429,455,429,455,429,455],[418,408,418,408,418,408],[391,408,391,408,391,408],[391,355,391,355,391,355],[280,355,280,355,280,355],[280,262,280,262,280,262],[319,262,319,262,319,262],[319,222,319,222,319,222],[204,222,204,222,204,222],[204,128,204,128,204,128],[243,128,243,128,243,128],[243,88,243,88,243,88],[128,88,128,88,128,88],[128,-5,128,-5,128,-5],[168,-5,168,-5,168,-5],[168,-45,168,-45,168,-45],[75,-45,75,-45,75,-45],[75,0,75,0,75,0],[0,0,0,0,0,0]]],[[[75,-75,75,-75,75,-75],[98,-89,115,-111,87,-74],[238,-138,282,-134,144,-147],[176,-78,180,-72,162,-102],[263,-83,270,-72,256,-95],[218,-38,237,-21,199,-54],[274,-33,270,-17,278,-53],[246,8,258,22,235,-6],[293,27,275,59,310,-4],[329,59,329,59,329,59]],[[356,121,356,121,356,121],[306,137,284,137,332,138],[211,74,191,52,265,133],[121,11,96,-1,163,32],[0,0,0,0,46,15]]],[[[75,-75,75,-67,75,-75],[81,-58,94,-43,78,-62],[97,18,141,-55,120,-46],[202,-4,202,-4,202,-4]],[[277,130,277,130,277,130],[195,90,178,72,205,100],[52,116,-18,89,154,157],[0,0,0,0,16,6]]],[[[75,-75,75,-75,75,-75],[167,-58,216,-79,101,-29],[211,-129,207,-167,211,-129],[239,-190,239,-190,239,-190]],[[349,62,349,62,349,62],[237,-30,217,-11,260,-50],[173,7,135,16,203,0],[53,-2,31,-9,95,11],[0,0,0,0,19,6]]],[[[75,-75,75,-75,75,-75],[80,-64,84,-32,80,-71],[70,-21,71,-14,68,-32],[86,-14,86,-14,86,-14]],[[169,162,169,162,169,162],[65,56,-49,56,82,56],[0,0,0,0,18,9]]],[[[74,-73,74,-73,74,-73],[74,-57,74,-57,74,-57],[90,-57,90,-57,90,-57],[90,-41,90,-41,90,-41],[106,-41,106,-41,106,-41],[106,-25,106,-25,106,-25],[122,-25,122,-25,122,-25],[122,-9,122,-9,122,-9],[138,-9,138,-9,138,-9],[138,7,138,7,138,7],[154,7,154,7,154,7],[154,23,154,23,154,23],[170,23,170,23,170,23],[170,39,170,39,170,39],[186,39,186,39,186,39],[186,55,186,55,186,55],[202,55,202,55,202,55]],[[208,272,208,272,208,272],[176,160,176,160,176,160],[160,160,160,160,160,160],[160,144,160,144,160,144],[144,144,144,144,144,144],[144,128,144,128,144,128],[128,128,128,128,128,128],[128,112,128,112,128,112],[112,112,112,112,112,112],[112,96,112,96,112,96],[96,96,96,96,96,96],[96,80,96,80,96,80],[80,80,80,80,80,80],[80,64,80,64,80,64],[64,64,64,64,64,64],[64,48,64,48,64,48],[48,48,48,48,48,48],[48,32,48,32,48,32],[32,32,32,32,32,32],[32,16,32,16,32,16],[16,16,16,16,16,16],[16,0,16,0,16,0],[0,0,0,0,0,0]]],[[[75,-75,75,-75,75,-75],[75,-75,75,-75,75,-75],[246,-75,246,-75,246,-75],[246,93,246,93,246,93]],[[341,283,341,283,341,283],[172,178,172,178,238,178],[172,0,172,0,172,0],[75,0,75,0,75,0],[0,0,0,0,29,7]]],[[[75,-75,75,-75,75,-75],[75,-75,75,-75,75,-75],[207,-75,207,-75,207,-75],[305,27,305,27,305,27],[449,27,449,27,449,27]],[[537,193,537,193,537,193],[432,104,432,104,454,103],[270,104,270,104,270,104],[170,0,170,0,170,0],[61,0,61,0,61,0],[0,0,0,0,11,5]]],[[[75,-75,75,-75,75,-75],[120,-78,138,-61,108,-90],[148,-41,182,-43,109,-39],[139,33,129,51,139,33],[175,59,175,59,175,59]],[[233,201,233,201,233,201],[148,82,113,72,172,90],[112,24,123,10,93,48],[135,-16,136,-28,133,-4],[104,-40,102,-65,106,-14],[61,-19,49,2,76,-41],[0,0,0,0,18,3]]],[[[75,-75,75,-75,75,-75],[75,-75,75,-75,75,-75],[187,14,187,14,187,14]],[[158,225,158,225,158,225],[148,117,148,117,148,117],[0,0,0,0,0,0],[0,0,0,0,0,0]]],[[[75,-75,78,-54,75,-75],[114,80,142,132,87,27],[208,150,208,150,208,150]],[[228,654,228,654,228,654],[166,335,118,339,218,330],[8,268,-50,173,40,321],[13,45,16,31,7,68],[0,0,0,0,16,9]]],[[[74,-64,74,-64,74,-64],[189,-64,189,-64,75,-64],[189,-64,189,-64,189,-64]],[[161,395,161,395,161,395],[161,80,27,16,191,95],[0,1,0,1,23,10]]],[[[75,-75,82,-63,75,-75],[57,-20,53,-4,61,-35],[69,-3,81,-8,65,-1],[109,-18,120,-18,87,-17],[142,-3,154,12,134,-13],[156,41,158,56,156,41],[175,55,181,53,168,58],[214,40,225,40,192,40],[247,55,259,70,239,45],[261,98,263,114,261,98],[280,113,286,110,274,116],[319,97,330,97,297,98],[355,113,367,128,346,103],[375,154,375,154,375,154]],[[365,284,365,284,365,284],[352,210,341,203,381,231],[335,172,331,154,339,190],[310,144,304,147,327,134],[277,162,261,165,293,159],[234,146,223,131,244,161],[204,87,198,90,226,71],[172,104,156,108,188,101],[129,89,118,74,139,104],[95,23,90,27,117,8],[62,42,46,45,78,39],[23,28,13,16,32,38],[0,0,0,0,22,10]]],[[[75,-75,75,-75,75,-75],[90,-45,91,-26,89,-64],[113,-16,114,8,112,-33],[127,10,127,10,127,10]],[[132,254,124,203,132,254],[116,130,106,114,126,147],[89,97,80,96,100,102],[82,121,73,117,82,121],[72,87,66,84,70,96],[63,107,56,102,63,107],[54,69,48,66,53,78],[46,90,39,83,46,90],[38,50,31,52,37,60],[31,71,24,65,31,71],[20,32,14,38,19,39],[14,53,7,49,14,53],[5,26,7,14,4,38],[0,0,0,0,19,9]]],[[[75,-75,75,-75,75,-75],[80,-62,99,-34,76,-69],[158,36,172,44,147,30],[330,10,330,10,330,10]],[[337,312,337,312,337,312],[314,104,138,137,331,101],[118,118,118,118,135,138],[27,13,20,6,27,13],[0,0,0,0,9,3]]],[[[75,-75,75,-75,75,-75],[68,-40,72,-6,66,-53],[137,314,145,347,130,289],[159,348,159,348,159,348]],[[160,507,160,507,160,507],[127,406,99,397,158,416],[81,314,70,268,91,355],[30,46,23,15,35,72],[0,0,0,0,20,6]]],[[[75,-74,75,-74,75,-74],[91,-74,91,-74,91,-74],[91,-90,91,-90,91,-90],[116,-90,116,-90,116,-90],[116,-74,116,-74,116,-74],[139,-74,139,-74,139,-74],[139,-90,139,-90,139,-90],[164,-90,164,-90,164,-90],[164,-74,164,-74,164,-74],[187,-74,187,-74,187,-74],[187,-90,187,-90,187,-90],[212,-90,212,-90,212,-90],[212,-74,212,-74,212,-74],[235,-74,235,-74,235,-74],[235,-90,235,-90,235,-90],[260,-90,260,-90,260,-90],[260,-74,260,-74,260,-74],[283,-74,283,-74,283,-74],[283,-90,283,-90,283,-90],[308,-90,308,-90,308,-90],[308,-74,308,-74,308,-74],[331,-74,331,-74,331,-74],[331,-90,331,-90,331,-90],[356,-90,356,-90,356,-90],[356,-74,356,-74,356,-74],[379,-74,379,-74,379,-74],[379,-90,379,-90,379,-90],[404,-90,404,-90,404,-90],[404,-74,404,-74,404,-74],[432,-74,432,-74,432,-74]],[[389,106,389,106,389,106],[420,0,420,0,434,0],[63,0,63,0,63,0],[0,0,0,0,17,6]]],[[[75,-75,79,-63,75,-75],[86,-64,88,-56,83,-79],[97,-58,100,-47,95,-68],[108,-51,110,-38,106,-62],[119,-43,121,-30,117,-58],[130,-39,130,-34,127,-52],[136,-39,137,-42,135,-34],[145,-39,150,-33,138,-47],[154,-46,164,-40,144,-52],[165,-52,177,-46,153,-57],[178,-59,188,-55,164,-65],[188,-66,194,-63,176,-71],[193,-74,196,-76,191,-72],[199,-74,199,-74,199,-74]],[[193,167,193,167,193,167],[198,70,179,77,213,65],[137,79,89,77,167,80],[31,21,22,13,54,42],[0,0,0,0,17,8]]],[[[75,-72,75,-72,75,-72],[116,20,156,67,89,-11],[208,49,208,49,208,49]],[[191,207,191,207,191,207],[176,139,145,131,208,147],[99,38,69,8,145,83],[1,1,1,1,1,1]]],[[[77,-70,86,-59,77,-70],[109,-41,109,-41,97,-49],[128,-57,128,-57,128,-57],[125,-31,131,-28,125,-31],[143,-22,143,-22,137,-25],[163,-43,163,-43,163,-43],[162,-14,169,-12,162,-14],[184,-8,184,-8,177,-10],[198,-30,198,-30,198,-30],[203,-4,211,-2,203,-4],[227,0,227,0,219,-1],[240,-25,240,-25,240,-25],[247,2,255,3,247,2],[269,3,269,3,262,3],[279,-21,279,-21,279,-21],[289,3,296,3,289,3],[311,3,311,3,304,3],[319,-21,319,-21,319,-21],[330,2,338,1,330,2],[354,0,354,0,346,1],[360,-25,360,-25,360,-25],[373,-2,387,-4,373,-2],[395,-6,395,-6,395,-6]],[[473,167,473,167,473,167],[382,69,378,69,402,65],[369,70,369,70,374,70],[361,96,361,96,361,96],[349,71,341,72,349,71],[323,72,323,72,332,72],[314,97,314,97,314,97],[304,73,295,73,304,73],[277,72,277,72,286,73],[267,96,267,96,267,96],[258,72,248,71,258,72],[229,69,229,69,238,70],[215,93,215,93,215,93],[209,67,198,66,209,67],[177,62,177,62,187,64],[161,81,161,81,161,81],[159,57,149,54,159,57],[129,47,129,47,139,51],[110,65,110,65,110,65],[112,41,103,38,112,41],[85,31,85,31,94,34],[63,47,63,47,63,47],[67,23,39,11,67,23],[0,0,0,0,16,2]]],[[[80,-73,80,-73,80,-73],[80,-32,80,-32,80,-72],[80,22,80,22,80,22],[91,22,91,22,91,22],[91,-8,91,-30,91,-8],[131,-48,131,-48,109,-48],[131,-48,131,-48,131,-48]],[[162,161,162,161,162,161],[131,128,131,128,153,128],[40,128,18,128,40,128],[0,88,0,88,0,110],[0,0,0,0,0,0]]],[[[75,-74,78,-83,75,-74],[95,-84,103,-81,87,-87],[105,-63,108,-72,108,-72],[125,-73,133,-70,117,-76],[135,-52,138,-61,138,-61],[155,-62,164,-59,147,-65],[165,-41,168,-50,168,-50],[185,-51,194,-48,177,-54],[195,-30,198,-39,198,-39],[215,-40,224,-37,207,-43],[225,-19,228,-28,228,-28],[245,-29,254,-26,237,-32],[255,-8,258,-17,258,-17],[275,-18,284,-15,267,-21],[285,3,288,-6,288,-6],[306,-7,314,-4,297,-10],[315,14,315,14,318,5],[315,14,315,14,315,14]],[[299,171,302,170,299,171],[299,117,296,125,306,119],[279,126,270,123,287,129],[270,105,266,114,266,114],[249,114,241,111,257,118],[240,94,236,102,236,102],[218,104,210,100,227,107],[209,83,206,91,206,91],[189,92,180,89,197,95],[180,71,176,79,176,79],[159,80,151,77,167,83],[150,59,147,68,147,68],[129,68,121,65,137,72],[120,48,117,56,117,56],[99,57,91,53,108,60],[90,36,87,44,87,44],[70,45,61,42,78,48],[61,24,57,32,57,32],[40,33,32,30,48,36],[31,12,28,21,28,21],[10,21,2,18,18,25],[1,1,1,1,16,7]]],[[[75,-72,75,-72,75,-72],[88,-45,88,-45,88,-45],[102,-72,103,-75,102,-72],[110,-77,113,-77,106,-77],[118,-72,118,-72,117,-75],[132,-45,132,-45,132,-45],[145,-72,147,-75,145,-72],[153,-77,157,-77,150,-77],[162,-72,162,-72,160,-75],[175,-45,175,-45,175,-45],[189,-72,190,-75,189,-72],[197,-77,201,-77,193,-77],[205,-72,205,-72,204,-75],[219,-45,219,-45,219,-45],[232,-72,234,-75,232,-72],[240,-77,244,-77,237,-77],[249,-72,249,-72,247,-75],[262,-45,262,-45,262,-45],[276,-72,277,-75,276,-72],[284,-77,288,-77,280,-77],[292,-77,292,-77,292,-77]],[[300,23,300,23,300,23],[284,-47,284,-47,284,-47],[271,-20,269,-17,271,-20],[262,-15,259,-15,266,-15],[254,-20,254,-20,255,-17],[240,-47,240,-47,240,-47],[227,-20,226,-17,227,-20],[219,-15,215,-15,222,-15],[210,-20,210,-20,212,-17],[197,-47,197,-47,197,-47],[184,-20,182,-17,184,-20],[175,-15,172,-15,179,-15],[167,-20,167,-20,168,-17],[153,-47,153,-47,153,-47],[140,-20,138,-17,140,-20],[132,-15,128,-15,135,-15],[123,-20,123,-20,125,-17],[110,-47,110,-47,110,-47],[97,-20,95,-17,97,-20],[88,-15,85,-15,92,-15],[80,-20,80,-20,81,-17],[68,-39,68,-39,68,-39],[0,0,0,0,0,0]]],[[[74,-72,91,-72,74,-72],[114,-51,123,-64,106,-64],[154,-72,171,-72,138,-72],[194,-51,203,-64,186,-64],[234,-72,251,-72,218,-72],[274,-51,283,-64,266,-64],[314,-72,314,-72,298,-72],[314,-72,314,-72,314,-72]],[[359,164,351,177,359,164],[314,24,298,24,331,24],[274,2,266,15,283,15],[234,24,218,24,251,24],[194,2,186,15,203,15],[154,24,138,24,171,24],[114,2,106,15,123,15],[74,24,58,24,91,24],[34,2,34,2,43,15],[1,0,1,0,16,6]]],[[[75,-75,75,-75,75,-75],[138,-6,143,-6,120,-6],[153,-6,153,-6,148,-6],[153,-56,153,-56,153,-56],[246,-56,246,-56,246,-56]],[[289,223,289,223,289,223],[246,163,246,163,246,163],[153,163,153,163,153,163],[153,106,153,106,153,106],[132,106,85,97,132,106],[0,0,0,0,0,0]]],[[[75,-75,88,-59,75,-75],[89,-5,93,6,75,-36],[115,43,140,35,107,27],[184,64,201,83,168,46],[200,129,224,135,205,107],[251,138,251,138,251,138]],[[229,306,229,306,229,306],[221,199,200,196,254,203],[157,178,129,188,173,191],[78,158,56,134,97,180],[72,72,61,53,54,98],[42,26,28,5,49,37],[0,0,0,0,0,0]]],[[[74,-73,74,-73,74,-73],[96,-5,105,-5,73,-9],[112,-13,120,-13,104,-13],[127,-5,136,-5,119,-5],[143,-13,150,-13,136,-13],[158,-5,167,-5,150,-5],[174,-13,182,-13,166,-13],[190,-5,196,-5,183,-5],[205,-13,213,-13,197,-13],[221,-5,224,-18,213,-5],[247,-39,247,-39,247,-39]],[[323,182,321,182,323,182],[245,84,234,75,258,94],[221,8,213,8,221,8],[205,0,197,0,213,0],[190,8,183,8,196,8],[174,0,166,0,182,0],[158,8,150,8,167,8],[143,0,136,0,150,0],[127,8,119,8,136,8],[112,0,104,0,120,0],[96,8,88,8,104,8],[75,2,65,2,85,1],[41,4,25,5,54,3],[0,0,0,0,15,5]]],[[[75,-75,80,-70,75,-75],[97,-64,103,-74,89,-79],[114,-66,108,-60,108,-72],[120,-54,124,-51,122,-60],[141,-53,135,-37,142,-58],[153,-42,150,-27,146,-42],[160,-26,160,-10,164,-38],[176,-21,178,-12,166,-20],[186,-16,178,-9,182,-20],[195,-3,204,-10,189,2],[216,3,214,23,200,13],[225,12,230,8,212,20],[253,22,262,24,245,30],[257,37,270,39,251,34],[280,31,289,46,274,22],[298,42,298,42,298,42]],[[296,360,296,360,296,360],[190,280,143,264,288,313],[141,210,141,210,141,210],[128,193,118,188,143,201],[132,171,128,165,135,183],[116,168,123,159,119,176],[103,141,110,127,100,146],[93,133,101,116,113,129],[85,112,89,106,79,122],[71,105,67,102,77,97],[65,95,65,86,75,96],[59,80,47,86,74,79],[41,75,41,68,57,71],[30,64,25,66,45,56],[26,43,20,46,30,47],[14,39,7,33,19,32],[13,21,-2,15,4,29],[1,1,1,1,12,6]]],[[[74,-74,74,-74,74,-74],[80,0,80,0,80,0],[103,320,103,320,103,320]],[[106,479,106,479,106,479],[28,394,28,394,28,394],[0,0,0,0,0,0]]],[[[75,-75,75,-75,75,-75],[91,-75,164,-75,79,-75],[244,-50,265,-19,222,-83],[257,134,257,157,257,103],[392,134,392,134,392,134]],[[328,384,328,384,328,384],[359,241,169,241,388,241],[169,130,169,105,169,234],[165,11,154,-3,176,26],[58,0,31,0,134,0],[0,0,0,0,17,8]]],[[[74,-71,84,-62,74,-71],[90,-34,90,-24,90,-49],[83,-8,83,-8,87,-16],[174,83,186,74,174,83],[218,69,238,69,202,69],[271,89,271,89,257,76],[271,89,271,89,271,89]],[[254,263,254,263,254,263],[218,224,175,224,269,224],[141,146,141,130,141,189],[155,102,155,102,146,114],[64,11,57,15,64,11],[38,18,23,18,48,18],[0,0,0,0,9,11],[0,0,0,0,0,0]]],[[[74,-73,88,-52,74,-73],[69,-14,69,-14,78,-27],[78,-5,78,-5,78,-5],[85,-11,85,-11,85,-11],[92,-4,92,-4,92,-4],[85,2,85,2,85,2],[91,9,91,9,91,9],[98,3,98,3,98,3],[104,10,104,10,104,10],[97,16,97,16,97,16],[104,23,104,23,104,23],[111,17,111,17,111,17],[117,24,117,24,117,24],[110,30,110,30,110,30],[117,37,117,37,117,37],[124,31,124,31,124,31],[130,38,130,38,130,38],[123,44,123,44,123,44],[130,51,130,51,130,51],[137,45,137,45,137,45],[143,52,143,52,143,52],[136,58,136,58,136,58],[149,59,149,59,149,59]],[[182,250,182,250,182,250],[124,111,124,111,129,149],[118,74,118,74,118,74],[111,81,111,81,111,81],[105,74,105,74,105,74],[112,67,112,67,112,67],[106,60,106,60,106,60],[99,67,99,67,99,67],[92,60,92,60,92,60],[99,53,99,53,99,53],[93,46,93,46,93,46],[86,53,86,53,86,53],[79,46,79,46,79,46],[86,39,86,39,86,39],[80,32,80,32,80,32],[73,39,73,39,73,39],[66,32,66,32,66,32],[73,25,73,25,73,25],[67,18,67,18,67,18],[60,25,60,25,60,25],[54,18,54,18,54,18],[61,11,61,11,61,11],[52,2,29,15,52,2],[0,-1,0,-1,14,6]]],[[[75,-72,75,-72,75,-72],[75,-72,79,-51,75,-72],[72,-24,77,-14,72,-24],[68,5,68,5,75,-3],[105,72,110,72,105,72],[119,74,129,78,114,72],[135,98,135,98,135,88],[207,126,210,123,207,126],[217,119,230,114,213,120],[249,133,253,143,244,120],[241,161,241,161,249,155],[268,233,279,233,268,233],[293,249,293,249,289,239],[293,249,293,249,293,249]],[[317,377,317,377,317,377],[289,322,273,309,306,335],[261,281,255,279,267,283],[246,267,242,256,249,274],[254,238,254,238,246,245],[227,167,216,167,227,167],[202,151,201,147,206,161],[201,140,201,140,201,143],[129,112,123,120,129,112],[101,120,88,115,111,124],[87,88,88,85,82,101],[92,80,92,80,90,82],[55,12,45,14,55,12],[28,0,28,0,34,10],[13,6,5,6,23,6],[0,1,0,1,5,3]]],[[[74,-68,74,-68,74,-68],[63,-9,63,-9,89,-29],[81,16,81,16,81,16],[117,9,117,9,117,9],[137,39,137,39,137,39],[173,32,173,32,173,32],[198,66,210,53,198,66],[225,52,225,52,225,52]],[[196,215,196,215,196,215],[199,133,183,113,221,161],[185,75,185,75,185,75],[166,49,166,49,166,49],[130,57,130,57,130,57],[110,27,110,27,110,27],[74,34,74,34,74,34],[50,0,32,10,50,0],[0,0,0,0,13,6]]],[[[76,-70,76,-70,76,-70],[58,-21,58,-20,76,-37],[64,-17,66,-16,61,-18],[73,-19,117,-53,69,-16],[125,45,117,51,166,9],[123,60,126,63,120,56],[138,62,162,43,132,67],[196,68,206,80,185,55],[190,125,182,131,213,106],[188,140,196,128,186,137],[209,125,209,125,209,125]],[[222,259,222,259,222,259],[189,216,168,202,212,231],[170,168,153,148,170,168],[171,102,180,95,147,121],[167,82,165,82,174,86],[157,85,134,104,162,81],[100,79,89,66,110,91],[106,22,111,18,83,40],[110,12,108,4,111,15],[92,4,69,23,101,-3],[34,-2,22,8,45,11],[0,0,0,0,15,3]]],[[[74,-71,74,-71,74,-71],[74,-71,74,-71,74,-71],[105,-71,105,-71,105,-71],[105,-55,105,-55,105,-55],[138,-55,138,-55,138,-55],[138,-39,138,-39,138,-39],[170,-39,170,-39,170,-39],[170,-23,170,-23,170,-23],[202,-23,202,-23,202,-23]],[[225,144,225,144,225,144],[188,48,188,48,188,72],[156,48,156,48,156,48],[156,32,156,32,156,32],[124,32,124,32,124,32],[124,16,124,16,124,16],[91,16,91,16,91,16],[91,0,91,0,91,0],[60,0,60,0,60,0],[1,1,1,1,15,7]]],[[[75,-73,89,-64,75,-73],[96,-44,110,-46,80,-54],[120,-19,134,-22,122,-33],[144,6,159,2,147,-9],[170,30,186,27,173,16],[195,58,202,61,200,43],[207,76,219,74,207,68],[233,92,233,92,230,81],[233,92,233,92,233,92]],[[278,291,278,291,278,291],[218,214,211,201,233,242],[197,195,183,203,197,195],[165,176,148,185,165,192],[135,149,125,147,128,167],[117,128,104,134,117,139],[87,109,72,113,88,123],[61,84,44,87,58,99],[38,53,24,52,31,68],[21,24,21,24,15,36],[-2,2,-2,2,18,9]]],[[[76,-72,76,-72,76,-72],[65,-25,71,-18,84,-41],[87,-25,81,-18,81,-18],[87,-3,93,3,81,-9],[109,-3,103,3,103,3],[109,19,115,25,103,13],[131,19,125,25,125,25],[131,41,137,47,125,35],[153,41,147,47,147,47],[153,63,159,69,147,57],[175,63,169,69,169,69],[175,85,181,91,169,79],[197,85,191,91,191,91],[197,107,203,113,191,101],[219,107,212,113,212,113],[219,129,233,113,212,123],[245,112,245,112,245,112]],[[255,317,255,317,255,317],[211,203,193,190,245,228],[202,155,196,149,202,155],[173,152,179,146,179,146],[173,130,167,124,179,136],[151,130,157,124,157,124],[151,108,145,102,157,114],[130,108,136,102,136,102],[130,86,124,80,136,92],[108,86,114,80,114,80],[108,64,102,58,114,71],[86,64,92,58,92,58],[86,43,80,37,92,49],[64,43,70,37,70,37],[64,21,58,15,70,27],[42,21,48,15,48,15],[42,-1,30,8,48,5],[0,0,0,0,16,10]]],[[[73,-74,83,-74,73,-74],[97,-58,103,-68,91,-68],[121,-74,131,-74,112,-74],[145,-58,151,-68,140,-68],[169,-74,179,-74,160,-74],[193,-58,199,-68,188,-68],[217,-74,227,-74,208,-74],[241,-58,247,-68,236,-68],[265,-74,275,-74,256,-74],[289,-58,295,-68,284,-68],[313,-74,323,-74,304,-74],[337,-58,348,-75,331,-68],[361,-74,361,-74,361,-74]],[[395,77,395,77,395,77],[361,26,352,26,361,26],[337,9,331,19,343,19],[313,26,304,26,323,26],[289,9,284,19,295,19],[265,26,256,26,275,26],[241,9,236,19,247,19],[217,26,208,26,227,26],[193,9,188,19,199,19],[169,26,160,26,179,26],[145,9,140,19,151,19],[121,26,112,26,131,26],[97,9,91,19,103,19],[73,26,73,26,83,26],[45,22,32,14,59,29],[0,1,0,1,26,4]]],[[[72,-69,72,-69,72,-69],[72,-69,72,-69,72,-69],[72,23,72,23,72,23],[88,23,88,23,88,23],[88,71,88,71,88,71],[104,71,104,71,104,71],[104,119,104,119,104,119],[120,119,120,119,120,119],[120,167,120,167,120,167],[136,167,136,167,136,167],[136,215,136,215,136,215],[152,215,152,215,152,215],[152,263,152,263,152,263],[168,263,168,263,168,263],[194,244,194,244,194,244]],[[195,400,195,400,195,400],[167,327,167,327,194,327],[104,327,104,327,104,327],[104,279,104,279,104,279],[88,279,88,279,88,279],[88,231,88,231,88,231],[72,231,72,231,72,231],[72,183,72,183,72,183],[56,183,56,183,56,183],[56,135,56,135,56,135],[40,135,40,135,40,135],[40,87,40,87,40,87],[24,87,24,87,24,87],[24,39,24,39,24,39],[8,39,8,39,8,39],[8,22,8,22,8,22],[2,2,2,2,8,6]]]],s.backArr=[[[[0,0,40,-28,0,0],[226,-17,300,11,145,-47],[368,109,368,109,368,109]]],[[[0,0,24,3,0,0],[55,-19,69,-33,41,-4],[114,-66,153,-74,75,-58],[212,-31,245,-19,162,-50],[322,-23,337,-16,281,-43],[369,19,369,19,369,19]]],[[[0,0,22,2,0,0],[62,8,57,29,66,-13],[117,21,112,41,122,2],[166,40,156,58,176,22],[210,62,198,79,222,45],[248,88,236,102,259,73],[280,115,267,133,294,97],[308,145,290,161,327,128],[332,174,314,189,351,159],[352,204,329,217,375,191],[367,224,367,224,367,224]]],[[[0,0,21,-4,0,0],[58,-22,98,-27,32,-18],[149,12,185,-1,113,24],[234,29,251,47,215,7],[306,47,341,43,273,50],[368,87,368,87,368,87]]],[[[0,0,3,-3,0,0],[14,-11,9,-12,10,-8],[1,-18,-2,-20,2,-16],[-3,-49,0,-52,-6,-46],[32,-40,35,-39,29,-41],[35,-23,46,-31,34,-28],[56,-37,56,-37,54,-36],[39,-44,36,-46,42,-41],[31,-88,36,-92,26,-84],[77,-69,78,-67,76,-71],[80,-52,89,-57,80,-52],[101,-61,101,-61,91,-58],[82,-73,80,-76,85,-70],[99,-132,107,-136,91,-129],[142,-90,143,-86,141,-94],[136,-70,146,-72,136,-70],[163,-73,163,-73,151,-72],[149,-90,148,-94,150,-86],[183,-146,192,-147,171,-145],[217,-90,217,-87,217,-92],[202,-73,214,-72,202,-73],[230,-70,230,-70,219,-72],[225,-88,226,-91,225,-85],[267,-132,276,-130,258,-133],[282,-75,282,-72,283,-78],[267,-61,277,-58,267,-61],[288,-53,288,-53,280,-57],[291,-71,293,-74,289,-69],[338,-89,343,-86,333,-93],[337,-43,335,-39,339,-46],[317,-35,319,-33,317,-35],[335,-22,339,-28,327,-28],[342,-38,345,-40,340,-38],[376,-43,379,-40,373,-47],[372,-11,371,-10,375,-14],[358,-6,364,-3,364,-8],[367,0,367,0,367,0]]],[[[0,0,14,-10,0,0],[25,-27,25,-27,24,-23],[14,-70,17,-73,12,-68],[50,-46,50,-46,50,-46],[72,-58,71,-65,60,-51],[70,-76,72,-77,69,-76],[86,-65,97,-70,80,-70],[113,-76,113,-76,107,-74],[111,-123,115,-126,106,-120],[142,-85,142,-85,142,-85],[182,-95,183,-101,158,-91],[186,-110,188,-111,185,-110],[196,-96,208,-97,192,-103],[234,-95,234,-95,221,-97],[258,-131,260,-130,256,-131],[265,-90,265,-90,265,-90],[292,-73,298,-77,277,-82],[307,-81,308,-81,306,-82],[303,-65,315,-58,306,-72],[329,-47,329,-47,325,-50],[364,-58,367,-55,361,-60],[351,-28,358,-19,351,-28],[369,2,369,2,369,2]]],[[[0,0,0,0,0,0],[75,-60,59,-40,25,-45],[56,-27,56,-27,56,-27],[162,-62,148,-49,108,-65],[145,-39,145,-39,145,-39],[266,-33,247,-29,199,-60],[233,-22,233,-22,233,-22],[332,18,332,18,306,-4],[312,29,312,29,312,29],[377,73,377,73,365,50],[353,75,353,75,353,75],[398,116,398,116,391,104],[371,117,371,117,371,117]]],[[[0,0,0,0,0,0],[53,-32,45,-43,32,-25],[26,-59,43,-61,33,-46],[43,-96,60,-97,49,-83],[71,-128,90,-119,74,-111],[110,-150,134,-140,107,-133],[159,-163,178,-141,152,-145],[218,-163,218,-140,203,-147],[266,-155,263,-138,248,-143],[304,-131,300,-120,288,-124],[334,-98,322,-90,312,-96],[346,-60,338,-44,324,-65],[315,-31,340,-21,322,-40],[369,1,369,1,369,1]]],[[[0,0,0,0,0,0],[29,-38,29,-38,-5,-31],[73,-63,73,-63,37,-70],[121,-85,121,-85,81,-107],[174,-93,174,-93,137,-122],[224,-88,224,-88,202,-118],[268,-68,268,-68,258,-102],[308,-46,308,-46,300,-79],[341,-26,367,-28,334,-51],[368,-1,368,-1,368,-1]]],[[[0,0,0,-102,0,0],[184,-184,369,-184,83,-184],[369,0,369,0,369,0]]],[[[0,0,0,-63,0,0],[57,-87,161,-86,23,-87],[369,129,369,129,369,129]]],[[[0,0,0,0,0,0],[31,-15,31,-15,31,-15],[61,8,61,8,61,8],[92,-8,92,-8,92,-8],[123,15,123,15,123,15],[153,0,153,0,153,0],[184,23,184,23,184,23],[215,8,215,8,215,8],[246,31,246,31,246,31],[276,15,276,15,276,15],[307,38,307,38,307,38],[338,23,338,23,338,23],[369,46,369,46,369,46]]],[[[0,0,60,-1,0,0],[60,58,62,119,58,-3],[122,118,182,117,62,119],[182,176,184,237,181,116],[244,236,304,235,184,237],[304,294,306,355,303,234],[367,354,367,354,307,356],[367,354,367,354,367,354]]],[[[0,0,58,-60,0,0],[129,-16,168,-22,89,-9],[257,-3,306,30,209,-35],[321,111,366,142,275,81],[366,256,366,256,366,256]]],[[[0,0,20,-20,0,0],[47,-7,47,-7,38,2],[87,7,102,-11,70,27],[136,-14,136,-14,116,7],[168,4,186,-6,149,13],[207,18,212,29,201,7],[237,18,237,18,237,18],[256,32,266,30,246,34],[289,57,292,70,285,44],[331,67,331,67,322,73],[349,85,367,80,332,90],[368,112,368,112,368,112]]],[[[0,0,9,-9,0,0],[32,-20,32,-20,25,-18],[57,0,60,-1,54,2],[62,-32,62,-32,62,-32],[133,-46,133,-46,114,-45],[153,-16,159,-17,148,-14],[164,-47,164,-47,164,-47],[256,-35,256,-35,210,-53],[259,-4,262,-4,257,-4],[285,-19,285,-19,285,-19],[342,38,342,38,335,26],[332,62,334,65,329,59],[359,61,364,72,359,61],[369,95,369,95,369,95]]],[[[0,0,0,0,0,0],[60,-59,60,-59,37,-11],[64,-26,64,-26,64,-26],[147,-65,147,-65,122,-27],[147,-31,147,-31,147,-31],[255,-45,255,-45,204,-15],[241,-14,241,-14,241,-14],[329,-4,329,-4,293,9],[302,25,302,25,302,25],[370,46,370,46,340,60],[345,71,345,71,345,71],[402,103,402,103,369,104],[370,117,370,117,370,117]]],[[[0,0,16,38,0,0],[57,7,71,47,44,-33],[113,21,124,64,101,-23],[166,41,171,83,162,-1],[217,68,215,111,218,25],[264,101,257,143,270,58],[306,139,295,180,318,98],[344,182,329,221,359,143],[368,215,368,215,368,215]]],[[[0,0,0,0,0,0],[48,-20,88,-2,8,-39],[98,-35,93,-17,106,-69],[158,-26,179,2,138,-55],[209,-18,198,-2,228,-45],[258,4,262,36,254,-27],[302,27,278,43,327,12],[333,63,331,99,335,28],[359,99,327,103,385,95],[369,126,369,126,369,126]]],[[[0,0,5,-2,0,0],[13,-6,10,-14,9,-4],[10,-27,14,-28,7,-26],[25,-14,35,-21,22,-22],[60,-25,83,-23,42,-26],[99,-14,100,-27,84,-15],[109,-36,112,-36,105,-36],[115,-14,135,-13,114,-25],[187,15,191,6,162,-12],[201,1,205,3,198,0],[198,26,221,42,203,13],[265,63,272,55,249,27],[282,54,285,57,280,52],[273,75,286,91,281,65],[322,133,332,127,317,86],[343,127,345,130,341,124],[331,144,342,151,340,137],[360,167,362,179,357,155],[367,190,367,190,367,190]]],[[[0,0,55,-43,0,0],[138,5,171,-30,87,61],[266,25,297,-7,224,67],[370,66,370,66,370,66]]],[[[0,0,31,0,0,0],[51,23,75,33,34,15],[127,0,184,17,89,-12],[235,-31,279,-16,168,-52],[318,-65,349,-65,270,-64],[367,-47,367,-47,367,-47]]],[[[0,0,7,-15,0,0],[42,-38,51,-40,22,-33],[89,-30,96,-50,73,-39],[143,-69,221,-77,120,-67],[317,77,360,54,286,-19],[368,98,368,98,368,98]]],[[[0,0,20,-10,0,0],[31,-25,37,-39,28,-18],[56,-106,82,-113,30,-99],[101,-35,115,-13,96,-43],[153,-38,159,-55,142,-10],[188,-108,218,-107,162,-109],[219,-30,223,-11,216,-42],[254,-14,266,-22,236,-3],[316,-80,341,-70,291,-89],[333,11,342,25,325,-2],[368,34,368,34,368,34]]],[[[0,0,0,0,0,0],[15,-38,15,-38,15,-38],[66,-42,66,-42,66,-42],[107,-80,107,-80,107,-80],[160,-56,160,-56,160,-56],[212,-78,212,-78,212,-78],[258,-39,258,-39,258,-39],[326,-29,326,-29,326,-29],[328,29,328,29,328,29],[372,61,372,61,372,61],[355,118,355,118,355,118],[367,144,367,144,367,144]]],[[[0,0,8,-5,0,0],[22,-13,7,-40,15,-9],[62,-31,71,-35,50,-60],[88,-40,86,-52,80,-38],[104,-66,116,-69,93,-63],[131,-50,142,-51,128,-62],[162,-51,164,-63,152,-52],[186,-69,198,-67,175,-71],[205,-46,216,-43,206,-57],[235,-36,242,-45,226,-40],[264,-42,274,-37,254,-48],[273,-14,281,-8,278,-24],[296,5,318,-13,289,-2],[325,38,331,46,346,19],[341,60,351,56,336,53],[368,69,374,79,363,59],[361,99,365,106,371,92],[366,110,366,110,366,110]]],[[[0,0,0,0,0,0],[17,-13,17,-13,17,-13],[48,-9,48,-9,48,-9],[61,8,61,8,61,8],[82,-3,82,-3,82,-3],[112,5,112,5,112,5],[125,25,125,25,125,25],[144,16,144,16,144,16],[173,28,173,28,173,28],[182,48,182,48,182,48],[203,42,203,42,203,42],[230,57,230,57,230,57],[236,79,236,79,236,79],[258,76,258,76,258,76],[282,95,282,95,282,95],[287,118,287,118,287,118],[308,118,308,118,308,118],[330,140,330,140,330,140],[331,163,331,163,331,163],[353,165,353,165,353,165],[372,190,372,190,372,190],[370,213,370,213,370,213]]],[[[0,0,0,-5,0,0],[21,0,40,20,5,-16],[55,-3,78,24,25,-39],[104,1,120,26,74,-49],[166,12,173,38,150,-47],[240,34,236,85,244,-6],[329,85,300,149,346,50],[386,162,381,178,396,135],[368,179,368,179,368,179]]],[[[0,0,17,-6,0,0],[48,-22,65,-16,54,-58],[104,-31,117,-17,115,-70],[158,-31,167,-16,175,-66],[210,-23,213,-3,234,-52],[258,0,260,23,291,-28],[297,30,298,52,331,10],[331,66,334,86,368,51],[355,102,355,121,388,95],[369,126,369,126,369,126]]],[[[0,0,0,0,0,0],[40,0,40,0,40,0],[39,-32,39,-32,39,-32],[87,-32,87,-32,87,-32],[87,-64,87,-64,87,-64],[135,-64,135,-64,135,-64],[135,-96,135,-96,135,-96],[183,-96,183,-96,183,-96],[183,-128,183,-128,183,-128],[231,-128,231,-128,231,-128],[231,-160,231,-160,231,-160],[279,-160,279,-160,279,-160],[279,-192,279,-192,279,-192],[327,-192,327,-192,327,-192],[327,-224,327,-224,327,-224],[368,-224,368,-224,368,-224]]],[[[0,0,0,0,0,0],[78,0,78,0,78,0],[125,64,125,64,125,64],[202,64,202,64,202,64],[246,125,246,125,246,125],[327,125,327,125,327,125],[372,189,372,189,372,189]]],[[[0,0,18,9,0,0],[28,36,46,44,10,27],[74,35,92,43,55,26],[102,71,120,79,83,62],[147,70,165,78,129,61],[175,105,193,114,157,97],[220,104,239,113,202,96],[248,140,267,149,230,131],[294,139,312,148,275,130],[322,175,340,183,303,166],[367,174,367,174,349,165]]],[[[0,0,20,-3,0,0],[82,-2,115,7,49,-10],[171,-10,210,-10,133,-10],[271,1,303,-7,249,6],[368,0,368,0,368,0]]],[[[0,0,0,0,0,0],[0,-32,0,-32,0,-32],[123,-32,123,-32,123,-32],[123,-64,123,-64,123,-64],[246,-64,246,-64,246,-64],[246,-96,246,-96,246,-96],[369,-96,369,-96,369,-96]]],[[[0,0,-6,-27,0,0],[41,-21,41,-21,21,-37],[54,-69,76,-82,31,-56],[102,-50,102,-50,102,-50],[136,-102,169,-105,103,-98],[184,-63,184,-63,184,-63],[237,-104,272,-97,200,-110],[270,-49,270,-49,270,-49],[326,-65,353,-49,300,-82],[337,-10,337,-10,337,-10],[376,-8,397,12,362,-22],[368,36,368,36,368,36]]],[[[0,0,3,-2,0,0],[17,-8,18,-16,16,0],[13,-38,31,-48,-5,-29],[37,-19,44,-16,30,-22],[56,-27,58,-32,53,-22],[46,-83,67,-89,26,-76],[77,-35,82,-32,72,-37],[96,-40,99,-43,93,-37],[99,-78,123,-83,75,-73],[118,-44,124,-41,112,-47],[139,-46,143,-50,136,-43],[149,-105,172,-104,127,-105],[161,-47,164,-43,157,-51],[182,-46,186,-49,178,-43],[195,-72,221,-69,169,-74],[202,-44,206,-39,199,-49],[222,-40,227,-43,218,-38],[250,-96,272,-90,229,-103],[243,-35,245,-31,241,-39],[263,-29,269,-32,257,-27],[287,-57,305,-49,269,-64],[284,-21,286,-16,283,-27],[301,-14,308,-18,294,-11],[340,-58,357,-47,322,-69],[322,-4,324,1,320,-9],[339,5,344,4,335,6],[361,-9,380,1,342,-19],[359,17,359,23,359,12],[368,29,368,29,368,29]]],[[[0,0,0,0,0,0],[47,13,5,36,74,-2],[47,42,41,48,70,19],[93,44,48,94,107,28],[126,79,122,92,140,31],[177,66,152,110,191,42],[204,86,210,63,190,77],[226,60,260,138,219,46],[290,78,312,61,259,26],[298,28,356,72,281,15],[340,22,354,14,331,27],[369,24,369,24,369,24]]],[[[0,0,10,-21,0,0],[42,-30,56,-42,28,-18],[89,-71,111,-81,66,-60],[166,-100,185,-100,147,-100],[243,-73,262,-61,225,-85],[308,-47,320,-31,297,-61],[339,1,344,17,337,-9],[369,35,369,35,369,35]]],[[[0,0,0,0,0,0],[24,-35,38,21,13,10],[100,-36,94,43,66,13],[186,-10,163,55,130,39],[267,42,225,114,163,104],[333,101,266,163,222,136],[381,178,322,218,282,188],[393,258,337,282,316,243],[402,330,326,362,334,316],[369,388,369,388,369,388]]],[[[0,0,0,0,0,0],[38,-11,41,-29,35,6],[70,12,70,12,70,12],[110,8,116,-9,104,24],[136,36,136,36,136,36],[176,39,185,24,168,55],[198,72,198,72,198,72],[237,82,248,68,226,95],[252,118,252,118,252,118],[289,134,303,123,276,146],[296,170,296,170,296,170],[331,195,347,186,316,204],[334,235,334,235,334,235],[363,262,379,256,346,268],[357,299,357,299,357,299],[381,333,399,330,364,336],[370,371,370,371,370,371]]],[[[0,0,0,86,0,0],[321,51,350,58,222,29],[368,96,368,96,368,71],[368,96,368,96,368,96]]],[[[0,0,0,0,0,0],[32,-10,87,-40,22,-5],[157,-127,173,-115,122,-155],[185,-132,200,-131,169,-131],[212,-127,247,-155,196,-115],[337,-10,347,-5,282,-40],[369,0,369,0,369,0]]],[[[0,0,0,0,0,0],[39,0,39,0,39,0],[39,17,39,17,39,17],[81,17,81,17,81,17],[81,34,81,34,81,34],[122,34,122,34,122,34],[122,52,122,52,122,52],[163,52,163,52,163,52],[163,69,163,69,163,69],[203,69,203,69,203,69],[203,86,203,86,203,86],[244,86,244,86,244,86],[244,103,244,103,244,103],[285,103,285,103,285,103],[285,121,285,121,285,121],[326,121,326,121,326,121],[326,138,326,138,326,138],[367,138,367,138,367,138],[367,155,367,155,367,155]]],[[[0,0,29,-28,0,0],[90,-26,142,6,70,-38],[150,77,150,77,73,77],[368,77,368,77,368,77]]],[[[0,0,0,0,0,0],[-6,-32,15,-25,8,-10],[30,-9,30,-9,30,-9],[34,-46,50,-31,36,-27],[61,-13,61,-13,61,-13],[87,-51,83,-27,67,-39],[91,-12,91,-12,91,-12],[126,-41,113,-14,107,-35],[121,-6,121,-6,121,-6],[159,-28,146,-12,137,-27],[148,1,158,16,148,1],[229,49,270,111,209,20],[368,113,368,113,368,113]]],[[[0,0,4,0,0,0],[17,-4,22,-9,11,2],[21,-34,36,-38,6,-29],[43,-12,54,-9,32,-16],[69,-27,72,-33,66,-21],[73,-59,88,-62,58,-56],[96,-36,108,-32,84,-41],[120,-46,122,-51,117,-42],[128,-77,142,-79,112,-75],[148,-52,155,-48,140,-56],[171,-57,176,-61,167,-52],[184,-85,200,-85,169,-85],[200,-57,207,-51,193,-63],[225,-53,232,-56,218,-49],[246,-78,262,-75,231,-82],[253,-46,258,-38,248,-53],[277,-34,285,-37,270,-32],[304,-56,319,-49,289,-64],[303,-24,305,-17,301,-31],[324,-8,334,-10,314,-6],[355,-25,367,-17,341,-34],[348,5,351,13,345,-3],[368,17,368,17,368,17]]],[[[0,0,0,0,0,0],[0,-33,0,-33,0,-33],[33,-33,33,-33,33,-33],[33,-67,33,-67,33,-67],[67,-67,67,-67,67,-67],[67,-100,67,-100,67,-100],[100,-100,100,-100,100,-100],[100,-134,100,-134,100,-134],[134,-134,134,-134,134,-134],[134,-167,134,-167,134,-167],[167,-167,167,-167,167,-167],[167,-200,167,-200,167,-200],[200,-200,200,-200,200,-200],[200,-167,200,-167,200,-167],[234,-167,234,-167,234,-167],[234,-134,234,-134,234,-134],[267,-134,267,-134,267,-134],[267,-100,267,-100,267,-100],[301,-100,301,-100,301,-100],[301,-67,301,-67,301,-67],[334,-67,334,-67,334,-67],[334,-33,334,-33,334,-33],[367,-33,367,-33,367,-33],[368,0,368,0,368,0]]],[[[0,0,0,0,0,0],[42,-14,58,-7,21,-23],[64,29,77,37,50,21],[118,27,134,40,103,13],[136,70,149,77,122,62],[183,58,199,63,166,54],[216,96,233,97,200,94],[256,67,277,65,236,69],[297,100,312,102,281,99],[341,76,363,80,325,72],[368,113,368,113,368,113]]],[[[0,0,0,0,0,0],[47,-22,59,-22,36,-23],[93,2,104,4,81,0],[144,-7,155,-3,132,-10],[181,28,192,33,170,24],[233,33,242,39,223,27],[260,77,269,84,251,69],[308,94,316,103,300,86],[323,144,330,153,317,134],[366,173,371,183,360,163],[367,225,367,225,367,225]]],[[[0,0,0,0,0,0],[24,-22,24,-22,24,-22],[69,-22,69,-22,69,-22],[93,0,93,0,93,0],[116,-22,116,-22,116,-22],[162,-22,162,-22,162,-22],[185,0,185,0,185,0],[207,-22,207,-22,207,-22],[253,-22,253,-22,253,-22],[276,0,276,0,276,0],[298,-22,298,-22,298,-22],[344,-22,344,-22,344,-22],[367,0,367,0,367,0]]],[[[0,0,73,-1,0,0],[146,-102,146,-102,146,-102],[222,-102,298,6,222,-102],[368,0,368,0,368,0]]],[[[0,-1,0,-1,0,-1],[65,-15,86,-14,44,-16],[64,3,64,3,64,3],[130,-2,151,2,110,-6],[125,15,125,15,125,15],[192,21,212,28,173,14],[184,37,184,37,184,37],[249,52,266,62,231,42],[237,67,237,67,237,67],[298,91,314,103,283,79],[283,104,283,104,283,104],[338,136,351,150,326,122],[321,146,321,146,321,146],[369,186,378,203,359,170],[350,194,350,194,350,194],[388,240,394,258,382,223],[368,245,368,245,368,245]]],[[[0,0,4,-6,0,0],[-4,-24,14,-18,4,-12],[16,-1,46,3,14,-1],[98,25,94,16,66,35],[97,-3,97,-3,92,7],[113,19,126,10,105,24],[173,-15,180,-17,157,-13],[186,-45,186,-45,169,-30],[188,-19,260,-17,182,-28],[303,-36,305,-42,258,-41],[319,-55,319,-55,310,-50],[315,-34,333,-27,316,-44],[364,30,366,32,355,12],[392,29,374,34,376,22],[368,44,368,44,368,44]]],[[[0,0,0,0,0,0],[23,-23,23,-23,23,-23],[69,-23,69,-23,69,-23],[92,-46,92,-46,92,-46],[138,-46,138,-46,138,-46],[161,-69,161,-69,161,-69],[178,-69,178,-69,178,-69],[184,-80,190,-80,178,-80],[190,-69,190,-69,190,-69],[207,-69,207,-69,207,-69],[229,-46,229,-46,229,-46],[275,-46,275,-46,275,-46],[298,-23,298,-23,298,-23],[344,-23,344,-23,344,-23],[367,0,367,0,367,0]]],[[[0,0,0,0,0,0],[368,368,368,368,368,368]]],[[[0,0,13,30,0,0],[51,5,60,34,36,31],[101,13,106,42,84,39],[150,27,151,55,131,50],[198,44,197,73,177,66],[244,65,243,94,221,86],[288,91,283,121,263,109],[330,120,325,165,304,136],[369,153,369,153,369,153]]],[[[0,0,13,0,0,0],[24,-47,23,-10,4,-36],[68,-96,41,-27,36,-83],[129,-139,87,-71,83,-123],[217,-162,168,-117,152,-158],[314,-138,245,-128,219,-180],[372,-86,319,-89,318,-144],[387,-2,332,-42,384,-95],[375,95,349,30,405,10],[368,111,368,111,368,111]]],[[[0,0,0,0,0,0],[368,0,368,0,368,0],[368,368,368,368,368,368]]],[[[0,0,0,0,0,0],[184,-23,327,-23,41,-23],[368,0,368,0,368,0]]],[[[0,0,0,0,0,0],[22,0,22,0,22,0],[44,22,44,22,44,22],[66,22,66,22,66,22],[88,0,88,0,88,0],[109,0,109,0,109,0],[131,22,131,22,131,22],[153,22,153,22,153,22],[175,0,175,0,175,0],[197,0,197,0,197,0],[219,22,219,22,219,22],[241,22,241,22,241,22],[263,0,263,0,263,0],[285,0,285,0,285,0],[306,22,306,22,306,22],[328,22,328,22,328,22],[350,0,350,0,350,0],[368,0,368,0,368,0]]],[[[0,0,0,0,0,0],[0,-48,0,-48,0,-48],[31,-48,31,-48,31,-48],[31,-29,31,-29,31,-29],[56,-29,56,-29,56,-29],[56,-48,56,-48,56,-48],[87,-48,87,-48,87,-48],[87,-29,87,-29,87,-29],[113,-29,113,-29,113,-29],[113,-48,113,-48,113,-48],[144,-48,144,-48,144,-48],[144,-29,144,-29,144,-29],[169,-29,169,-29,169,-29],[169,-48,169,-48,169,-48],[200,-48,200,-48,200,-48],[200,-29,200,-29,200,-29],[225,-29,225,-29,225,-29],[225,-48,225,-48,225,-48],[256,-48,256,-48,256,-48],[256,-29,256,-29,256,-29],[282,-29,282,-29,282,-29],[282,-48,282,-48,282,-48],[313,-48,313,-48,313,-48],[313,-29,313,-29,313,-29],[338,-29,338,-29,338,-29],[338,-48,338,-48,338,-48],[369,-48,369,-48,369,-48],[369,0,369,0,369,0]]],[[[0,0,0,0,0,0],[0,-46,0,-46,0,-46],[123,-46,123,-46,123,-46],[123,-61,123,-61,123,-61],[0,-61,0,-61,0,-61],[0,-108,0,-108,0,-108],[123,-108,123,-108,123,-108],[123,-123,123,-123,123,-123],[0,-123,0,-123,0,-123],[0,-169,0,-169,0,-169],[369,-169,369,-169,369,-169],[369,-123,369,-123,369,-123],[246,-123,246,-123,246,-123],[246,-108,246,-108,246,-108],[369,-108,369,-108,369,-108],[369,-61,369,-61,369,-61],[246,-61,246,-61,246,-61],[246,-46,246,-46,246,-46],[369,-46,369,-46,369,-46],[369,0,369,0,369,0]]],[[[0,0,48,208,0,0],[369,208,369,208,369,208]]],[[[0,0,0,0,0,0],[36,-7,35,-14,36,-7],[46,-21,53,-22,40,-20],[60,-11,60,-11,59,-17],[127,-16,127,-22,127,-16],[138,-28,145,-29,132,-28],[151,-17,151,-17,151,-24],[219,-16,219,-23,219,-16],[231,-28,238,-27,224,-28],[243,-15,243,-15,243,-22],[310,-8,311,-15,310,-8],[323,-19,330,-18,317,-19],[334,-5,334,-5,334,-12],[370,1,370,1,370,1]]],[[[0,0,0,0,0,0],[12,-22,12,-22,12,-22],[34,-9,34,-9,34,-9],[21,12,21,12,21,12],[42,24,42,24,42,24],[55,3,55,3,55,3],[77,16,77,16,77,16],[65,37,65,37,65,37],[85,49,85,49,85,49],[98,28,98,28,98,28],[120,41,120,41,120,41],[108,62,108,62,108,62],[129,75,129,75,129,75],[142,53,142,53,142,53],[164,66,164,66,164,66],[151,87,151,87,151,87],[172,100,172,100,172,100],[185,78,185,78,185,78],[207,91,207,91,207,91],[194,112,194,112,194,112],[216,125,216,125,216,125],[228,103,228,103,228,103],[250,115,250,115,250,115],[237,137,237,137,237,137],[258,149,258,149,258,149],[271,127,271,127,271,127],[293,140,293,140,293,140],[281,162,281,162,281,162],[301,174,301,174,301,174],[314,152,314,152,314,152],[336,165,336,165,336,165],[324,187,324,187,324,187],[345,199,345,199,345,199],[358,178,358,178,358,178],[380,190,380,190,380,190],[367,212,367,212,367,212]]],[[[0,0,0,0,0,0],[80,48,160,48,0,48],[176,16,271,16,81,16],[273,-32,368,-32,177,-32],[369,-80,369,-80,369,-80]]],[[[0,0,109,-43,0,0],[241,-10,345,39,186,-37],[368,160,368,160,368,160]]],[[[0,0,0,0,0,0],[177,0,177,0,177,0],[177,-176,177,-176,177,-176],[192,-176,192,-176,192,-176],[192,0,192,0,192,0],[368,0,368,0,368,0]]],[[[0,0,32,0,0,0],[31,-46,61,-46,0,-46],[60,0,90,0,30,0],[92,-46,123,-46,61,-46],[122,0,155,0,90,0],[154,-46,184,-46,123,-46],[184,0,215,0,154,0],[215,-46,246,-46,184,-46],[245,0,274,0,216,0],[276,-46,307,-46,246,-46],[306,0,338,0,274,0],[338,-46,369,-46,307,-46],[369,0,369,0,340,0],[369,0,369,0,369,0]]],[[[0,0,0,0,0,0],[21,0,41,0,0,0],[40,20,40,20,40,20],[61,39,61,39,61,39],[82,39,103,39,62,39],[102,58,102,58,102,58],[123,78,123,78,123,78],[144,78,164,78,123,78],[163,98,163,98,163,98],[184,117,184,117,184,117],[205,117,226,117,185,117],[225,137,225,137,225,137],[246,156,246,156,246,156],[267,157,287,157,246,157],[286,176,286,176,286,176],[307,196,307,196,307,196],[328,196,349,196,308,196],[348,215,348,215,348,215],[369,235,369,235,369,235]]],[[[0,0,0,0,0,0],[184,57,330,57,37,57],[367,-1,367,-1,367,-1]]],[[[0,0,0,0,0,0],[27,3,27,3,4,-3],[40,-17,40,-17,40,-17],[38,7,69,17,38,7],[101,23,101,23,72,26],[102,0,102,0,102,0],[113,21,142,16,113,21],[182,10,182,10,146,5],[193,-13,193,-13,193,-13],[195,13,231,22,195,13],[255,49,255,49,230,33],[274,34,274,34,274,34],[266,56,292,69,266,56],[330,64,330,64,298,62],[338,42,338,42,338,42],[342,65,365,68,342,65],[368,72,368,72,368,72]]],[[[0,0,26,8,0,0],[101,2,164,-32,70,19],[256,-47,302,-47,215,-46],[356,0,387,44,335,-28],[368,91,368,91,368,91]]],[[[0,0,32,6,0,0],[81,21,91,21,36,22],[86,-14,86,-14,84,18],[113,19,113,19,113,19],[117,-19,117,-19,117,-19],[137,17,137,17,137,17],[147,-21,147,-21,147,-21],[164,18,164,18,164,18],[178,-21,178,-21,178,-21],[189,18,189,18,189,18],[210,-19,210,-19,210,-19],[215,18,215,18,215,18],[242,-15,242,-15,242,-15],[238,23,238,23,238,23],[267,-6,264,30,267,-6],[269,28,302,34,260,26],[339,35,363,40,321,31],[369,47,369,47,369,47]]],[[[0,0,3,-6,0,0],[13,-10,19,-15,9,-7],[-2,-25,20,-36,18,-21],[42,-14,48,-22,29,-9],[37,-62,40,-19,18,-37],[73,-24,84,-33,64,-34],[60,-55,89,-68,81,-55],[113,-33,129,-39,86,-32],[113,-91,106,-66,87,-60],[155,-34,168,-40,136,-25],[151,-86,155,-50,139,-56],[185,-31,220,-37,175,-58],[202,-87,196,-37,174,-47],[226,-20,233,-31,222,-60],[234,-61,275,-39,254,-33],[275,2,279,-16,237,-11],[294,-34,315,-8,295,-4],[303,34,320,27,273,5],[326,-2,309,35,299,14],[338,58,343,50,338,21],[352,29,360,36,360,53],[357,61,348,72,365,51],[368,80,368,80,368,80]]],[[[0,2,0,-23,0,2],[-38,-36,-30,-61,-42,-22],[45,-52,63,-74,2,0],[36,-148,68,-167,13,-134],[147,-85,193,-107,35,-30],[184,-184,215,-184,155,-184],[203,-86,301,-26,177,-102],[345,-132,372,-110,318,-153],[304,-33,351,16,274,-65],[403,-25,413,-18,387,-38],[373,5,363,15,385,-8],[369,30,369,30,369,30]]],[[[0,0,0,0,0,0],[106,-19,152,-5,60,-32],[193,24,239,38,147,10],[290,36,351,55,228,18],[368,110,368,110,368,110]]],[[[0,0,16,-21,0,0],[34,-22,28,-47,12,-33],[34,-63,41,-69,29,-59],[72,-50,90,-69,59,-55],[110,-62,114,-131,93,-78],[156,-80,180,-90,137,-93],[196,-75,209,-97,187,-97],[223,-105,233,-105,217,-105],[244,-71,271,-71,237,-84],[279,-50,336,-88,280,-73],[321,-25,343,-12,320,-48],[341,9,367,7,353,-11],[381,16,386,25,378,10],[360,54,373,77,368,42],[368,93,368,93,386,78]]],[[[-1,-2,-1,-2,-1,-2],[30,-32,61,-32,-1,-32],[61,-3,61,-3,61,-3],[92,-34,122,-34,61,-34],[122,-3,122,-3,122,-3],[153,-32,184,-32,122,-32],[185,-2,185,-2,185,-2],[215,-32,246,-32,185,-32],[246,-3,246,-3,246,-3],[277,-34,308,-34,246,-34],[307,-3,307,-3,307,-3],[338,-32,369,-32,308,-32],[370,-2,370,-2,370,-2]]],[[[0,0,0,0,0,0],[184,-288,368,-288,0,-288],[368,0,368,0,368,0]]],[[[0,0,16,-16,0,0],[15,-32,15,-78,15,-32],[99,-116,145,-116,52,-116],[183,-32,183,15,183,-78],[267,52,313,52,220,52],[351,-32,352,-48,351,15],[367,-48,367,-48,367,-48]]],[[[0,0,0,0,0,0],[184,-250,184,-250,184,-250],[368,0,368,0,368,0]]],[[[0,0,11,-6,0,0],[41,8,46,6,24,0],[56,-5,56,-5,51,2],[52,12,85,24,51,3],[99,16,102,13,88,15],[106,-3,106,-3,105,6],[111,17,133,20,105,9],[167,17,168,11,148,29],[163,-6,165,-4,169,3],[180,7,202,-12,170,4],[225,-10,228,-15,214,-11],[231,-32,231,-32,231,-22],[244,-9,267,-13,235,-17],[282,-29,283,-34,276,-26],[279,-49,282,-45,283,-42],[294,-37,313,-49,288,-40],[341,-53,343,-57,329,-53],[348,-69,348,-69,346,-62],[351,-53,361,-52,348,-61],[366,-48,366,-48,366,-48]]],[[[0,0,13,-56,0,0],[101,-62,157,-38,83,-70],[233,-96,257,-96,210,-96],[260,-28,282,-21,234,-37],[301,-28,307,-28,286,-30],[310,-11,313,-9,305,-13],[324,-12,335,9,318,-23],[369,16,369,16,369,16]]],[[[0,0,7,-6,0,0],[7,-14,17,-17,-2,-12],[30,-4,54,-4,11,-5],[52,-19,67,-19,38,-19],[76,-4,98,0,53,-8],[105,-9,116,-1,93,-16],[116,14,130,21,102,8],[143,12,158,20,128,5],[154,35,169,44,140,26],[183,40,195,51,171,29],[190,68,202,83,178,53],[220,77,229,92,211,64],[219,106,229,120,208,92],[249,113,262,127,237,98],[252,144,266,153,238,135],[282,142,292,153,272,131],[285,175,298,183,271,167],[318,169,333,176,303,162],[329,196,343,198,315,194],[350,187,360,188,339,185],[367,202,367,202,367,202]]],[[[0,0,0,-16,0,0],[19,-24,28,-24,9,-24],[38,0,38,32,38,-16],[77,0,77,-32,77,32],[115,0,115,33,115,-33],[153,0,153,-33,153,33],[191,0,191,33,191,-33],[230,0,230,-33,230,33],[268,0,268,33,268,-33],[306,0,306,-16,306,33],[325,-24,335,-25,316,-24],[345,0,345,30,345,-16],[367,33,367,33,367,33]]],[[[0,0,29,3,0,0],[49,10,69,10,29,10],[95,26,118,26,73,26],[141,41,161,41,122,41],[188,57,212,57,164,57],[234,72,258,72,211,72],[281,88,304,88,258,88],[327,104,346,104,308,104],[368,119,368,119,368,119]]],[[[0,-1,9,-4,0,-1],[18,-11,30,0,16,-13],[39,-16,46,-22,34,-12],[53,-12,55,-10,48,-15],[66,-6,70,-3,63,-9],[75,-8,79,-12,70,-3],[91,-13,96,-17,87,-10],[106,-12,105,-5,107,-21],[113,-4,122,-12,110,-2],[125,1,130,-2,121,3],[137,-6,142,1,134,-9],[142,3,145,5,140,1],[157,-2,161,-3,147,-1],[171,6,176,5,167,7],[182,3,185,5,179,1],[184,14,183,21,185,7],[194,18,208,33,190,17],[222,27,228,25,199,35],[222,33,224,37,220,28],[240,33,242,33,233,34],[248,49,253,49,242,48],[265,49,269,51,261,47],[281,57,279,63,283,51],[279,68,284,69,274,67],[294,70,299,79,291,65],[309,73,311,66,308,77],[321,73,322,78,321,68],[322,85,326,84,316,87],[333,91,337,93,329,89],[344,95,345,99,343,91],[340,104,337,108,343,99],[356,117,359,121,354,113],[354,128,360,132,350,125],[369,133,369,133,369,133]]],[[[0,0,6,-17,0,0],[36,-37,40,-38,19,-31],[47,-39,45,-56,43,-39],[70,-80,87,-88,54,-72],[118,-70,120,-71,106,-84],[124,-72,133,-74,122,-72],[146,-71,153,-86,140,-73],[185,-96,203,-96,168,-96],[224,-66,228,-68,219,-83],[240,-66,245,-64,233,-68],[254,-57,265,-70,250,-61],[300,-69,318,-62,283,-75],[326,-26,329,-24,328,-44],[335,-20,341,-15,332,-23],[344,1,362,-3,343,-7],[390,23,405,63,383,5],[368,71,368,71,368,71]]],[[[0,0,0,0,0,0],[49,-14,49,-14,49,-14],[81,32,81,32,81,32],[129,-1,129,-1,129,-1],[165,45,165,45,165,45],[207,11,207,11,207,11],[251,50,251,50,251,50],[283,5,283,5,283,5],[333,33,333,33,333,33],[368,-4,368,-4,368,-4]]],[[[0,0,0,0,0,0],[0,-34,0,-34,0,-34],[34,-34,34,-34,34,-34],[34,0,34,0,34,0],[67,0,67,0,67,0],[67,-34,67,-34,67,-34],[101,-34,101,-34,101,-34],[101,0,101,0,101,0],[134,0,134,0,134,0],[134,-34,134,-34,134,-34],[168,-34,168,-34,168,-34],[168,0,168,0,168,0],[202,0,202,0,202,0],[202,-34,202,-34,202,-34],[235,-34,235,-34,235,-34],[235,0,235,0,235,0],[269,0,269,0,269,0],[269,-34,269,-34,269,-34],[302,-34,302,-34,302,-34],[302,0,304,0,302,0],[336,0,336,0,336,0],[336,-34,336,-34,336,-34],[370,-34,370,-34,370,-34],[370,0,370,0,370,0]]],[[[0,0,24,0,0,0],[60,12,60,12,37,4],[73,-42,73,-42,73,-42],[109,-33,109,-33,109,-33],[105,-18,105,-18,105,-18],[82,-23,82,-23,82,-23],[72,14,101,17,72,14],[145,37,145,37,122,32],[158,-18,158,-18,158,-18],[194,-8,194,-8,194,-8],[191,7,191,7,191,7],[167,1,167,1,167,1],[157,39,189,41,157,39],[234,64,234,64,213,58],[248,11,248,11,248,11],[284,21,284,21,284,21],[281,36,281,36,281,36],[257,30,257,30,257,30],[246,67,263,77,246,67],[316,90,316,90,296,89],[329,39,329,39,329,39],[365,48,365,48,365,48],[361,63,361,63,361,63],[338,58,338,58,338,58],[329,92,358,100,329,92],[368,113,368,113,368,113]]],[[[0,0,14,-2,0,0],[44,-2,44,-2,29,-3],[44,-42,44,-42,44,-42],[68,-42,68,-42,68,-42],[68,2,99,10,68,2],[142,47,174,93,127,26],[266,87,274,85,200,101],[289,84,289,84,282,84],[289,48,289,48,289,48],[312,48,312,48,312,48],[312,87,350,97,312,87],[368,128,368,128,368,128]]],[[[0,0,0,0,0,0],[17,0,17,12,17,0],[39,22,51,22,27,22],[61,0,61,0,61,12],[81,0,82,12,81,0],[104,22,116,22,91,22],[126,0,126,0,126,12],[157,0,157,12,157,0],[179,22,191,22,167,22],[201,0,201,0,201,12],[233,0,233,12,233,0],[255,22,267,22,243,22],[277,0,277,0,277,12],[309,0,309,12,309,0],[331,22,343,22,318,22],[353,0,353,0,353,12],[370,0,370,0,370,0]]],[[[0,0,0,0,0,0],[15,-10,12,-21,8,-5],[48,-27,48,-26,43,-34],[48,-26,58,-31,48,-26],[77,-40,85,-62,67,-36],[119,-52,127,-53,121,-54],[142,-55,152,-69,134,-54],[184,-54,193,-53,188,-59],[212,-49,222,-56,202,-52],[255,-34,261,-31,261,-40],[274,-24,289,-28,267,-28],[312,5,318,11,321,-1],[328,22,330,22,323,16],[333,21,346,19,331,21],[354,59,359,68,364,51],[367,88,367,88,364,78]]],[[[0,0,0,0,0,0],[0,-32,0,-32,0,-32],[368,-32,368,-32,368,-32],[368,0,368,0,368,0]]],[[[0,0,1,32,0,0],[67,54,88,73,40,30],[141,57,203,94,123,46],[242,32,272,35,212,30],[313,-28,343,-38,283,-18],[341,-114,365,-134,319,-96],[369,-173,369,-185,368,-154],[368,-189,368,-189,368,-189]]],[[[0,0,21,-3,0,0],[17,-43,32,-55,0,-31],[35,-87,60,-100,11,-74],[55,-132,73,-137,33,-126],[78,-169,104,-177,61,-164],[105,-211,125,-212,89,-210],[142,-245,165,-244,125,-245],[183,-259,203,-258,166,-259],[216,-245,235,-242,199,-248],[250,-218,253,-201,247,-236],[275,-188,276,-164,275,-199],[297,-147,289,-127,303,-161],[319,-108,313,-93,326,-126],[340,-62,337,-51,345,-79],[356,-27,349,-13,362,-40],[368,0,368,0,368,0]]],[[[0,0,46,16,0,0],[25,-27,15,-53,31,-13],[-9,-123,5,-129,-21,-118],[84,-58,103,-63,66,-53],[88,-187,106,-195,71,-178],[171,-85,190,-89,152,-82],[228,-209,248,-207,210,-211],[259,-72,274,-66,243,-78],[353,-149,369,-138,337,-160],[320,-33,328,-20,312,-44],[417,-41,421,-27,412,-56],[351,12,318,48,366,-4],[368,82,368,82,368,82]]],[[[0,0,0,0,0,0],[46,-66,46,-66,46,-66],[44,-10,44,-10,44,-10],[147,-107,147,-107,147,-107],[133,-22,133,-22,133,-22],[261,-103,261,-103,261,-103],[227,-11,227,-11,227,-11],[355,-55,355,-55,355,-55],[298,30,298,30,298,30],[412,20,412,20,412,20],[342,82,342,82,342,82],[444,99,444,99,444,99],[361,135,364,135,361,135],[432,172,432,172,432,172],[367,185,367,185,367,185]]]],s.tailArr=[[[[0,0,25,4,0,0],[121,58,179,94,71,27],[246,91,246,91,246,91],[185,116,159,119,226,110],[76,100,43,89,112,113],[1,90,1,90,1,90]]],[[[0,0,17,4,0,0],[91,44,158,59,43,33],[246,44,249,52,242,37],[113,93,40,95,208,89],[0,77,0,77,0,77]]],[[[0,0,25,0,0,0],[72,37,94,59,57,22],[127,100,133,103,98,89],[126,108,122,109,134,106],[100,107,79,104,115,109],[53,88,38,83,68,92],[16,87,9,89,27,85],[1,89,1,89,1,89]]],[[[0,0,8,-3,0,0],[52,-3,66,2,24,-12],[102,28,123,47,82,11],[165,64,205,71,139,60],[241,33,241,33,241,33],[172,91,119,95,233,86],[62,41,51,35,74,47],[22,55,12,64,32,46],[1,80,1,80,1,80]]],[[[0,0,17,4,0,0],[69,34,93,44,30,18],[158,64,200,75,131,57],[285,87,343,94,238,80],[419,89,393,98,381,86],[288,101,263,99,336,105],[171,90,144,86,231,100],[87,80,39,72,116,85],[1,86,1,86,1,86]]],[[[0,0,25,10,0,0],[119,50,145,64,65,21],[200,70,215,68,168,66],[227,54,225,66,225,53],[217,73,217,73,220,70],[229,75,238,75,229,75],[251,62,250,69,249,62],[243,77,243,77,243,77],[255,79,262,78,251,78],[272,70,271,74,271,69],[264,82,267,83,267,80],[289,86,275,91,276,85],[247,88,234,87,261,89],[192,89,138,91,224,88],[85,75,37,64,104,80],[1,89,1,89,1,89]]],[[[0,0,0,0,0,0],[53,37,73,43,24,28],[114,43,125,43,104,43],[137,28,146,34,129,22],[125,43,125,43,125,43],[148,46,147,55,148,36],[125,48,125,48,125,48],[139,62,131,69,147,56],[115,49,104,49,126,49],[53,56,23,62,76,51],[0,89,0,89,0,89]]],[[[0,0,48,24,0,0],[68,-4,70,-3,65,-5],[48,24,88,43,65,17],[104,18,107,20,101,16],[89,43,124,59,100,37],[135,39,137,40,133,38],[124,59,154,72,133,56],[161,57,163,58,159,55],[155,72,182,84,163,66],[188,74,190,75,187,73],[183,85,196,92,189,82],[206,93,206,96,205,90],[159,120,136,123,195,115],[69,134,33,135,106,133],[0,134,0,134,0,134]]],[[[0,0,8,5,0,0],[26,26,42,23,15,28],[57,31,67,35,47,27],[82,33,90,30,73,36],[106,36,110,30,97,36],[118,32,121,35,115,30],[115,39,115,41,115,36],[118,45,114,49,120,43],[106,42,98,42,108,45],[83,41,76,44,91,39],[54,40,45,35,65,46],[23,37,12,41,34,34],[0,89,0,89,0,89]]],[[[0,0,13,-6,0,0],[35,-1,46,4,25,-6],[59,25,70,48,55,15],[68,62,75,63,63,61],[100,48,122,54,76,42],[121,80,126,83,117,77],[144,79,155,82,133,76],[154,101,151,108,157,94],[132,106,124,101,140,110],[118,86,114,87,124,85],[87,99,67,93,109,105],[66,73,59,72,72,74],[35,98,10,105,56,93],[0,90,0,90,0,90]]],[[[0,0,14,-7,0,0],[45,-13,60,-12,26,-14],[105,12,165,51,79,-5],[235,2,235,2,235,2],[189,77,168,95,224,45],[99,111,77,111,139,110],[43,105,15,99,58,109],[0,89,0,89,0,89]]],[[[0,0,17,1,0,0],[36,22,52,45,28,10],[87,77,116,75,57,78],[123,43,131,37,110,54],[173,40,124,40,144,34],[123,81,118,91,134,60],[92,108,78,114,106,102],[43,112,7,102,61,117],[0,89,0,89,0,89]]],[[[0,0,10,0,0,0],[38,21,55,22,20,20],[102,26,103,24,89,24],[105,24,106,24,104,25],[107,21,109,21,106,22],[111,22,112,22,110,22],[115,22,117,23,113,21],[117,25,118,26,116,24],[120,27,121,29,119,25],[119,31,119,32,119,30],[120,34,119,36,120,33],[116,36,116,37,117,36],[114,39,113,40,116,39],[111,39,109,38,112,39],[107,39,105,38,109,40],[105,36,104,35,106,37],[102,34,86,34,102,36],[42,36,14,41,56,34],[1,89,1,89,1,89]]],[[[0,0,19,0,0,0],[48,-7,49,-17,33,-8],[64,-18,71,-19,59,-18],[84,-21,80,-5,77,-10],[66,-9,65,-6,68,-14],[71,-4,75,-3,68,-4],[88,-1,97,4,82,-4],[106,16,107,12,102,13],[112,9,117,6,110,10],[130,5,129,14,123,17],[122,15,118,15,127,14],[125,23,138,27,116,21],[155,14,148,13,149,22],[148,4,149,0,147,9],[158,-7,158,-1,156,-3],[154,3,154,7,154,0],[162,3,166,-6,157,8],[178,-19,186,-24,171,-13],[214,-26,188,-18,197,-27],[185,22,185,27,191,5],[192,26,197,24,187,27],[200,16,196,22,193,18],[195,32,191,35,201,27],[181,32,176,44,189,36],[150,63,145,64,160,60],[146,70,152,74,144,69],[161,69,153,72,151,68],[140,76,133,74,152,79],[134,63,111,65,132,70],[92,52,85,52,102,54],[88,62,92,65,85,59],[107,67,96,64,98,59],[87,70,80,69,95,72],[71,54,55,60,68,65],[41,79,24,89,58,70],[1,93,1,93,1,93]]],[[[0,0,21,-4,0,0],[43,6,66,24,33,0],[118,38,139,29,69,59],[176,31,220,40,159,28],[250,76,238,74,250,76],[140,56,128,66,175,28],[81,81,60,81,114,82],[32,65,6,65,48,65],[0,89,0,89,0,89]]],[[[0,0,37,0,0,0],[125,31,125,27,67,29],[132,24,136,24,129,24],[140,30,142,30,140,26],[146,30,147,26,144,30],[154,23,158,23,150,23],[162,30,164,30,161,26],[168,30,168,26,166,30],[175,22,178,22,171,23],[183,28,191,26,182,24],[202,30,206,35,199,25],[184,53,161,64,196,47],[57,89,23,92,98,85],[0,91,0,91,0,91]]],[[[0,0,9,19,0,0],[21,29,34,31,14,28],[54,43,62,48,45,37],[76,49,81,51,65,44],[90,60,95,62,84,58],[106,64,110,65,99,61],[116,66,118,66,110,66],[127,69,129,70,124,67],[130,73,129,75,131,71],[124,71,122,69,127,73],[119,70,118,72,120,69],[124,76,127,78,121,74],[126,82,124,83,127,81],[121,79,119,76,123,82],[116,76,115,77,116,74],[117,82,119,85,117,79],[116,88,114,88,117,88],[114,81,113,79,114,84],[110,75,108,73,111,77],[105,68,97,64,107,69],[88,64,82,61,93,67],[72,53,59,48,77,54],[50,47,46,45,60,52],[19,39,10,43,28,35],[0,90,0,90,0,90]]],[[[0,0,18,6,0,0],[35,15,35,15,24,11],[61,-10,61,-10,61,-10],[52,21,62,24,52,21],[82,29,82,29,72,27],[108,3,108,3,108,3],[100,33,111,35,100,33],[131,38,131,38,121,37],[157,13,157,13,157,13],[150,40,162,41,150,40],[183,42,183,42,173,42],[204,22,204,22,204,22],[198,42,211,42,198,42],[225,40,225,40,216,41],[239,27,239,27,239,27],[236,40,245,39,236,40],[261,35,261,35,261,35],[174,73,161,76,243,58],[132,79,100,82,147,78],[51,84,19,86,72,83],[1,86,1,86,1,86]]],[[[0,0,0,0,0,0],[19,22,27,37,12,7],[52,52,72,58,36,47],[93,70,114,73,78,68],[141,71,165,78,117,64],[178,73,188,75,156,67],[200,73,204,67,198,77],[215,73,215,78,215,68],[207,79,207,79,207,79],[216,83,217,89,215,79],[202,86,196,83,210,92],[177,86,158,80,189,89],[135,88,113,83,159,94],[88,91,60,86,105,94],[31,91,15,86,55,98],[0,88,0,88,0,88]]],[[[0,0,2,-4,0,0],[25,5,36,-3,19,-7],[46,10,51,7,42,0],[63,14,67,11,60,2],[81,18,84,18,78,7],[96,22,100,23,92,11],[114,26,118,25,110,14],[134,33,141,32,129,21],[154,43,156,33,149,36],[171,23,187,26,159,20],[171,43,171,43,171,43],[191,49,192,63,191,35],[171,57,171,57,171,57],[178,74,168,82,188,66],[154,60,152,66,159,69],[135,67,128,76,141,68],[116,71,110,79,123,72],[99,77,93,84,105,76],[81,79,74,88,87,78],[63,82,60,89,68,82],[45,84,38,95,52,91],[23,87,11,103,28,93],[0,89,0,89,0,89]]],[[[0,1,13,0,0,1],[81,12,107,19,50,3],[129,50,129,63,129,31],[105,79,91,84,119,73],[56,88,27,88,73,87],[0,88,0,88,0,88]]],[[[0,0,10,9,0,0],[21,24,27,32,14,16],[48,18,57,5,35,34],[73,10,80,1,65,20],[94,5,83,7,86,3],[79,16,75,28,81,10],[60,25,60,35,60,17],[87,21,96,6,79,35],[118,5,127,6,108,5],[133,-1,130,7,128,3],[114,13,104,12,123,14],[105,29,114,32,97,26],[132,17,141,17,108,14],[158,7,140,11,140,4],[136,23,126,25,147,22],[130,33,146,36,121,31],[162,15,175,16,143,14],[191,20,185,26,176,26],[173,25,164,23,180,26],[154,31,149,37,159,26],[164,44,178,44,150,45],[190,31,203,27,177,34],[234,36,229,41,212,41],[208,41,200,40,218,43],[186,43,178,50,195,37],[162,57,151,55,172,58],[133,48,125,55,141,42],[145,63,156,63,135,64],[168,71,160,63,160,61],[149,70,137,73,154,69],[122,65,117,61,129,71],[106,62,102,66,111,57],[116,75,126,71,109,78],[138,83,131,79,130,74],[121,81,112,85,126,79],[100,76,93,61,104,85],[86,70,84,79,87,65],[101,84,93,87,93,81],[78,77,73,69,83,85],[69,61,64,58,78,65],[55,67,55,73,56,61],[72,72,63,90,65,76],[40,70,35,65,45,75],[22,71,17,76,29,65],[0,89,0,89,0,89]]],[[[0,0,23,7,0,0],[54,26,87,48,40,16],[97,74,97,75,96,72],[97,76,97,77,98,76],[95,76,93,74,96,76],[14,44,0,46,39,40],[5,72,3,81,7,62],[0,88,0,88,0,88]]],[[[0,0,14,15,0,0],[28,71,37,82,12,52],[79,95,78,100,80,89],[26,97,11,94,55,102],[0,89,0,89,0,89]]],[[[0,0,9,7,0,0],[12,53,5,77,18,31],[60,65,71,51,48,81],[83,2,94,-1,45,13],[129,10,153,18,107,2],[162,1,179,-16,155,9],[192,-1,207,0,176,-2],[219,-9,202,-11,198,-15],[192,5,177,4,208,6],[166,8,142,41,177,-6],[93,21,73,34,113,8],[78,82,66,93,105,58],[41,98,18,99,53,97],[0,89,0,89,0,89]]],[[[0,0,47,-5,0,0],[95,14,125,24,61,4],[172,45,172,45,135,33],[177,36,177,36,177,36],[182,47,182,47,182,47],[190,39,190,39,190,39],[193,50,193,50,193,50],[203,44,203,44,203,44],[203,54,203,54,203,54],[218,66,216,71,219,61],[199,71,199,71,199,71],[195,80,195,80,195,80],[188,71,188,71,188,71],[181,79,181,79,181,79],[177,69,177,69,177,69],[168,75,168,75,168,75],[167,66,125,55,167,66],[85,41,65,34,120,54],[16,34,4,40,35,23],[0,88,0,88,0,88]]],[[[0,0,8,11,0,0],[21,44,37,62,12,33],[71,85,69,97,73,75],[0,89,0,89,0,89]]],[[[0,0,4,5,0,0],[10,21,10,21,7,17],[21,5,32,8,9,2],[24,22,24,22,24,22],[43,11,53,18,33,5],[37,30,37,30,37,30],[55,37,56,51,55,22],[36,44,36,44,36,44],[44,62,38,68,52,55],[24,55,24,55,24,55],[21,70,12,73,30,66],[9,55,7,68,9,55],[1,107,1,107,1,107]]],[[[0,0,48,-4,0,0],[80,27,111,33,61,24],[145,18,166,22,120,14],[194,41,215,47,175,36],[255,32,262,42,249,23],[191,59,172,54,216,65],[141,38,121,35,161,42],[74,49,47,41,101,56],[19,34,8,43,35,22],[7,73,3,87,11,61],[0,90,0,90,0,90]]],[[[0,0,29,18,0,0],[29,24,38,16,21,31],[54,18,57,25,51,11],[48,26,48,26,48,26],[55,32,55,38,55,25],[48,39,48,39,48,39],[54,45,54,51,54,39],[48,51,48,51,48,51],[55,59,55,65,55,53],[48,65,48,65,48,65],[54,73,51,79,57,66],[29,67,23,61,38,75],[15,81,8,87,26,69],[0,91,0,91,0,91]]],[[[0,0,10,-2,0,0],[24,9,30,16,18,2],[41,31,53,41,35,25],[61,49,59,56,63,44],[39,65,33,69,43,63],[22,82,12,89,31,76],[0,90,0,90,0,90]]],[[[0,0,52,0,0,0],[109,12,141,14,70,9],[170,8,172,10,169,6],[111,47,88,54,144,37],[57,63,46,67,80,55],[21,81,9,87,30,77],[0,89,0,89,0,89]]],[[[0,0,36,-6,0,0],[109,-4,180,2,74,-6],[238,18,238,18,238,18],[247,43,247,43,247,43],[234,41,234,41,240,42],[227,26,227,26,227,26],[227,41,224,41,227,41],[211,40,211,40,215,40],[207,23,207,23,207,23],[204,39,199,39,204,39],[187,38,187,38,193,39],[183,21,183,21,183,21],[181,38,178,37,181,38],[163,36,163,36,166,37],[159,19,159,19,159,19],[157,36,151,36,157,36],[141,35,141,35,146,35],[136,18,136,18,136,18],[136,35,129,35,136,35],[118,34,118,34,123,34],[114,17,114,17,114,17],[113,34,112,34,113,34],[98,34,98,34,103,34],[93,17,93,17,93,17],[92,35,87,35,92,35],[78,35,78,35,84,35],[71,19,71,19,71,19],[71,37,67,38,71,37],[55,38,55,38,56,38],[47,22,47,22,47,22],[47,40,42,41,47,40],[32,45,28,48,37,42],[14,67,8,81,21,53],[0,85,0,85,0,85]]],[[[0,0,25,-2,0,0],[68,-13,91,-21,40,-3],[145,-24,162,-23,118,-25],[200,-15,213,-12,181,-19],[236,4,214,-3,226,-7],[189,-1,189,-1,220,7],[219,23,203,11,221,11],[175,8,175,8,198,25],[196,33,187,22,204,27],[162,15,162,15,178,30],[180,47,170,27,184,34],[150,22,150,22,164,39],[161,55,154,30,168,37],[133,26,133,26,145,44],[140,58,134,35,150,43],[115,31,115,31,130,46],[121,63,121,43,134,47],[99,34,99,34,110,50],[98,66,102,49,114,55],[80,38,80,38,92,58],[76,67,84,46,91,61],[61,41,61,41,67,57],[54,66,60,48,70,61],[41,39,41,39,49,57],[33,64,41,46,46,59],[25,39,21,34,31,53],[6,66,5,80,7,39],[1,88,1,88,1,88]]],[[[0,0,24,10,0,0],[40,56,53,57,25,54],[107,-3,125,-13,66,20],[156,-10,170,-6,143,-15],[182,18,185,32,179,4],[161,55,143,59,178,52],[130,44,125,33,133,50],[143,19,153,16,132,22],[160,28,160,31,159,23],[154,38,151,39,159,37],[146,32,150,35,146,38],[153,29,152,27,154,33],[145,28,142,29,148,26],[141,38,143,42,139,33],[158,42,168,39,151,45],[163,16,155,6,170,24],[122,15,105,25,139,5],[87,66,76,89,96,47],[47,102,23,106,61,99],[0,91,0,91,0,91]]],[[[0,0,9,0,0,0],[28,11,51,12,19,10],[98,15,98,15,75,14],[98,21,115,21,98,21],[143,41,164,66,127,22],[191,62,216,63,168,61],[235,108,230,113,239,104],[189,77,167,76,211,78],[133,58,120,43,155,83],[98,43,98,43,110,43],[98,48,81,49,98,48],[27,48,11,49,46,48],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[19,19,19,19,19,19],[92,19,98,19,92,19],[103,30,103,35,103,24],[92,40,92,40,98,40],[19,40,19,40,19,40],[19,51,19,51,19,51],[92,51,98,51,92,51],[103,61,103,67,103,55],[92,72,92,72,98,72],[19,72,19,72,19,72],[0,89,0,89,0,89]]],[[[0,0,21,-2,0,0],[64,-4,131,-2,42,-4],[182,14,182,14,182,14],[180,4,181,-2,179,8],[191,5,196,1,188,-1],[200,10,198,15,202,4],[192,18,192,18,192,18],[212,28,211,31,212,26],[189,29,189,29,189,29],[194,39,194,45,195,33],[184,40,179,45,187,46],[173,37,174,32,173,43],[179,28,179,28,179,28],[65,46,22,64,127,21],[0,89,0,89,0,89]]],[[[0,0,14,15,0,0],[16,46,19,48,2,37],[16,50,5,57,18,49],[6,79,4,88,7,72],[0,90,0,90,0,90]]],[[[0,0,29,12,0,0],[56,4,76,4,38,4],[90,-11,90,3,83,2],[80,23,70,31,91,14],[54,48,45,51,73,40],[33,66,24,83,38,55],[1,89,1,89,1,89]]],[[[0,0,7,2,0,0],[16,3,28,0,11,5],[42,6,49,11,33,-1],[62,12,52,17,51,12],[38,12,29,7,49,17],[16,17,7,23,23,12],[6,47,4,82,6,42],[0,88,0,88,0,88]]],[[[0,0,0,0,0,0],[8,0,8,0,8,0],[8,8,8,8,8,8],[17,8,17,8,17,8],[17,16,17,16,17,16],[25,16,25,16,25,16],[25,25,25,25,25,25],[33,25,33,25,33,25],[33,33,33,33,33,33],[41,33,41,33,41,33],[41,41,41,41,41,41],[49,41,49,41,49,41],[49,49,49,49,49,49],[41,49,41,49,41,49],[41,57,41,57,41,57],[33,57,33,57,33,57],[33,65,33,65,33,65],[25,65,25,65,25,65],[25,74,25,74,25,74],[17,74,17,74,17,74],[17,82,17,82,17,82],[8,82,8,82,8,82],[8,90,8,90,8,90],[0,90,0,90,0,90]]],[[[0,0,12,7,0,0],[19,22,35,32,12,18],[76,77,108,89,50,67],[153,64,153,64,135,82],[163,58,166,61,160,55],[157,68,147,78,157,68],[121,87,105,90,134,84],[73,82,47,71,88,88],[17,32,0,21,32,41],[6,61,9,75,4,48],[0,88,0,88,0,88]]],[[[0,0,26,10,0,0],[33,33,30,28,27,39],[39,25,44,27,34,23],[38,36,45,35,45,33],[43,44,40,47,46,42],[34,41,28,36,34,47],[15,74,7,86,27,56],[0,91,0,91,0,91]]],[[[0,0,26,5,0,0],[36,28,45,30,24,26],[58,17,68,13,49,22],[94,28,104,39,84,17],[123,37,126,32,117,44],[121,22,114,19,126,25],[111,27,112,28,110,23],[118,28,119,36,115,31],[104,29,102,26,108,36],[105,17,109,12,102,21],[125,12,133,14,116,10],[141,39,140,53,142,24],[122,70,112,75,133,65],[81,69,65,62,98,76],[37,96,17,99,72,91],[0,89,0,89,0,89]]],[[[0,0,3,0,0,0],[14,1,14,1,7,1],[26,-8,36,-7,15,-9],[36,3,44,4,36,3],[49,5,49,5,47,4],[62,-4,72,-3,52,-5],[72,8,81,9,72,8],[86,10,86,10,78,10],[97,1,105,2,88,0],[108,12,114,12,108,12],[120,12,120,12,114,12],[130,3,138,2,122,3],[141,12,149,13,141,12],[154,12,154,12,147,12],[163,3,172,2,154,3],[174,11,181,11,174,11],[197,14,199,22,195,9],[167,48,155,53,192,36],[107,68,93,70,125,65],[60,82,35,92,75,75],[0,89,0,89,0,89]]],[[[0,0,5,2,0,0],[14,26,40,40,10,24],[124,41,124,41,124,41],[131,48,131,53,131,42],[123,54,123,54,125,54],[13,59,10,64,20,46],[5,77,4,81,8,70],[0,87,0,87,0,87]]],[[[0,0,30,-8,0,0],[108,-11,197,-15,70,-9],[236,12,214,16,236,12],[148,15,104,24,188,6],[37,71,21,83,81,41],[0,89,0,89,0,89]]],[[[0,0,17,0,0,0],[32,18,32,18,27,5],[63,32,63,32,55,13],[85,38,96,52,74,25],[108,42,102,53,102,47],[86,63,79,65,95,60],[63,59,55,77,71,64],[32,72,26,93,32,72],[0,90,0,90,0,90]]],[[[0,0,21,13,0,0],[71,27,108,38,46,21],[119,49,119,49,119,49],[96,73,82,79,115,63],[60,88,53,91,72,84],[31,95,14,98,40,93],[0,98,0,98,0,98]]],[[[0,0,0,0,0,0],[24,0,24,0,24,0],[24,32,24,32,24,32],[32,32,32,32,32,32],[32,0,32,0,32,0],[56,0,56,0,56,0],[56,32,56,32,56,32],[64,32,64,32,64,32],[64,0,64,0,64,0],[88,0,88,0,88,0],[88,88,88,88,88,88],[64,88,64,88,64,88],[64,56,64,56,64,56],[56,56,56,56,56,56],[56,88,56,88,56,88],[32,88,32,88,32,88],[32,56,32,56,32,56],[24,56,24,56,24,56],[24,88,24,88,24,88],[0,88,0,88,0,88]]],[[[0,0,1,0,0,0],[5,1,7,2,4,0],[10,6,12,7,8,6],[16,3,18,4,13,3],[23,10,25,11,20,9],[31,8,33,9,28,7],[39,16,42,17,36,15],[48,14,51,15,45,13],[58,22,61,23,55,21],[67,21,70,22,64,20],[76,29,78,30,73,28],[84,27,86,29,81,26],[91,35,93,36,89,34],[97,33,99,34,95,32],[102,40,104,41,101,39],[108,38,111,39,104,37],[114,46,114,50,114,41],[108,54,103,54,111,54],[102,52,101,52,104,51],[97,59,95,59,99,58],[91,57,89,57,93,56],[84,64,81,65,86,63],[76,63,73,64,78,62],[67,71,64,72,70,70],[58,69,55,71,61,68],[48,77,45,78,51,76],[39,76,36,77,42,75],[31,84,28,84,33,83],[23,81,20,82,25,81],[16,88,13,89,18,88],[10,85,8,86,12,85],[5,91,3,92,7,90],[0,91,0,91,0,91]]],[[[0,0,9,3,0,0],[22,23,31,23,18,20],[38,35,43,35,32,35],[53,23,63,23,44,23],[69,35,75,35,64,35],[85,23,94,23,76,23],[101,35,105,35,97,35],[116,23,120,23,108,23],[122,27,122,29,122,25],[116,32,110,32,120,32],[101,44,92,44,109,44],[85,32,80,32,90,32],[69,44,60,44,79,44],[53,32,48,32,59,32],[38,44,28,44,47,44],[22,32,16,31,28,33],[11,60,7,77,16,37],[0,89,0,89,0,89]]],[[[0,0,7,-1,0,0],[33,22,37,31,28,12],[46,46,64,49,30,43],[81,24,106,30,44,15],[96,58,114,62,80,54],[124,40,147,44,94,34],[140,67,152,69,128,65],[161,54,181,57,140,50],[175,74,184,75,166,73],[188,64,197,65,178,63],[197,78,197,79,198,69],[206,82,205,86,206,79],[196,84,194,92,196,83],[184,93,174,91,191,94],[174,79,165,78,184,81],[154,93,134,89,173,97],[139,74,125,72,151,76],[115,94,85,90,137,98],[94,68,79,66,112,71],[69,95,35,90,95,98],[43,63,27,60,61,65],[23,81,15,88,30,73],[1,89,1,89,1,89]]],[[[0,0,20,4,0,0],[54,22,68,14,4,50],[85,12,95,13,77,11],[119,31,134,42,104,21],[166,24,189,15,136,35],[226,38,191,41,191,38],[166,27,136,38,189,18],[118,36,90,17,133,46],[53,32,26,49,84,11],[17,71,11,87,25,48],[0,89,0,89,0,89]]],[[[0,0,7,3,0,0],[14,6,22,1,14,6],[29,-2,29,-2,29,-2],[31,15,34,17,31,15],[42,19,49,15,40,18],[57,10,57,10,57,10],[58,27,61,29,58,27],[68,33,74,29,66,31],[82,25,82,25,82,25],[84,40,87,41,84,40],[93,44,93,44,90,43],[106,37,106,37,106,37],[109,51,111,52,109,51],[116,54,121,52,115,54],[129,47,129,47,129,47],[132,61,134,61,132,61],[138,63,142,60,136,62],[149,56,149,56,149,56],[153,68,155,69,153,68],[160,71,165,67,157,70],[169,64,169,64,169,64],[174,76,176,77,174,76],[180,78,184,74,178,77],[190,72,190,72,190,72],[193,82,196,83,193,82],[202,85,208,80,199,84],[211,79,211,79,211,79],[215,89,232,94,215,89],[240,98,240,102,240,94],[138,118,108,121,214,111],[44,118,17,116,69,121],[1,114,1,114,1,114]]],[[[0,0,9,1,0,0],[30,23,32,28,26,11],[50,48,52,48,44,48],[55,39,58,33,54,43],[68,25,75,25,61,25],[81,37,83,41,78,32],[87,44,89,44,85,44],[93,39,95,35,90,42],[105,30,116,30,99,30],[127,40,130,44,126,40],[121,46,119,43,125,49],[105,37,103,37,112,38],[99,43,97,46,102,39],[87,51,80,51,93,51],[74,40,72,36,77,45],[68,33,66,33,70,33],[62,42,60,49,64,38],[50,56,40,57,57,56],[23,26,19,20,27,33],[7,55,7,76,7,18],[0,88,0,88,0,88]]],[[[0,0,35,-17,0,0],[92,-3,120,10,67,-15],[140,60,142,90,138,35],[153,105,160,107,142,100],[164,105,164,116,164,103],[112,79,106,63,129,118],[65,50,30,50,86,50],[0,88,0,88,0,88]]],[[[0,0,18,-1,0,0],[58,21,68,27,40,10],[86,35,90,36,73,31],[95,35,97,39,93,31],[88,43,86,49,90,39],[70,69,61,76,81,60],[31,86,18,89,54,82],[0,88,0,88,0,88]]],[[[0,0,41,8,0,0],[98,41,138,51,73,34],[189,88,187,103,194,59],[144,113,120,116,167,111],[73,106,38,92,91,113],[0,88,0,88,0,88]]],[[[0,0,7,0,0,0],[20,0,41,2,14,0],[67,23,81,38,56,11],[83,69,79,84,86,57],[49,79,39,74,59,84],[26,68,15,69,38,66],[0,89,0,89,0,89]]],[[[0,0,18,1,0,0],[57,7,72,7,28,8],[94,1,92,-5,84,4],[102,-1,98,-12,98,-13],[110,-4,118,-6,108,-8],[126,-2,128,1,123,-6],[126,11,130,14,128,6],[122,18,133,26,133,23],[118,26,114,35,122,27],[106,52,87,81,110,46],[44,92,24,95,75,88],[0,89,0,89,0,89]]],[[[0,0,6,6,0,0],[20,50,24,58,16,43],[48,53,58,53,30,54],[69,55,80,55,66,55],[80,38,77,36,80,46],[83,25,90,26,75,25],[86,38,87,50,88,36],[70,62,62,61,84,63],[49,60,36,60,57,60],[13,56,4,47,23,66],[0,89,0,89,0,89]]],[[[0,0,9,-1,0,0],[22,9,32,6,19,0],[42,17,53,14,40,8],[64,26,72,24,61,18],[82,34,88,31,79,28],[99,39,105,36,96,34],[115,43,119,39,111,38],[131,45,135,41,127,40],[147,47,150,42,143,42],[162,49,165,45,159,43],[175,49,179,45,172,45],[189,54,189,61,189,47],[175,58,172,62,177,62],[162,59,159,63,165,62],[147,60,144,64,150,64],[131,60,126,64,135,65],[114,60,109,65,118,65],[96,60,91,64,101,65],[77,56,72,61,82,62],[59,55,59,55,65,61],[39,62,39,62,52,67],[22,77,17,92,38,79],[0,88,0,88,0,88]]],[[[0,0,31,-10,0,0],[56,1,74,19,47,-7],[78,61,88,61,60,61],[99,50,100,48,94,59],[100,41,102,37,98,46],[102,46,103,46,101,46],[106,42,105,49,106,38],[102,51,99,62,103,48],[80,74,66,75,95,72],[46,51,33,14,52,70],[12,63,12,81,12,45],[0,88,0,88,0,88]]],[[[0,0,14,-8,0,0],[17,7,17,7,17,7],[36,12,36,12,29,-2],[55,17,55,17,50,5],[73,23,73,23,67,11],[90,29,90,29,86,17],[108,33,113,44,101,20],[94,69,86,76,106,57],[67,88,56,93,77,82],[32,98,15,100,43,96],[0,99,0,99,0,99]]],[[[0,0,25,8,0,0],[44,-2,44,-2,44,-2],[91,9,91,9,64,23],[140,23,140,23,107,32],[183,36,183,36,157,44],[221,47,221,47,196,56],[246,56,235,74,227,58],[171,63,147,59,211,71],[96,52,54,57,130,48],[27,84,10,90,50,75],[0,89,0,89,0,89]]],[[[0,0,25,1,0,0],[41,35,71,30,36,35],[115,30,153,32,95,29],[176,45,182,51,173,41],[175,68,173,61,182,63],[161,59,159,63,169,58],[149,67,149,62,155,66],[138,58,136,62,147,55],[125,66,126,61,131,65],[114,57,112,62,124,54],[102,65,102,61,108,65],[91,56,89,61,101,54],[79,64,79,60,84,64],[68,55,66,60,77,53],[56,64,56,60,62,63],[44,56,38,57,54,53],[20,76,13,87,30,59],[0,89,0,89,0,89]]],[[[0,0,24,-4,0,0],[39,25,56,1,29,40],[108,8,128,18,87,-2],[139,63,146,91,130,27],[184,49,196,47,155,53],[231,67,169,50,211,50],[157,99,146,105,179,87],[121,100,110,94,132,105],[97,68,92,45,101,84],[78,59,70,75,84,46],[45,92,20,99,68,86],[6,82,1,83,11,80],[0,88,0,88,0,88]]],[[[0,0,17,3,0,0],[21,39,28,39,16,40],[35,42,38,46,32,40],[33,55,26,59,36,53],[20,49,16,50,23,48],[14,73,10,86,19,57],[0,88,0,88,0,88]]],[[[0,0,23,0,0,0],[35,15,53,15,17,15],[65,26,73,36,57,14],[89,36,99,34,79,38],[116,45,122,53,110,37],[140,54,150,51,131,57],[167,63,171,70,162,57],[190,72,199,70,183,73],[215,81,220,90,210,73],[240,98,242,108,238,86],[193,115,144,113,221,115],[60,93,30,87,98,101],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[16,0,16,0,16,0],[16,8,16,8,16,8],[32,8,32,8,32,8],[32,16,32,16,32,16],[48,16,48,16,48,16],[48,24,48,24,48,24],[64,24,64,24,64,24],[64,32,64,32,64,32],[80,32,80,32,80,32],[80,40,80,40,80,40],[96,40,96,40,96,40],[96,48,96,48,96,48],[112,48,112,48,112,48],[112,56,112,56,112,56],[128,56,128,56,128,56],[128,64,128,64,128,64],[144,64,144,64,144,64],[144,72,144,72,144,72],[160,72,160,72,160,72],[160,88,160,88,160,88],[136,88,136,88,136,88],[136,80,136,80,136,80],[120,80,120,80,120,80],[120,72,120,72,120,72],[104,72,104,72,104,72],[104,64,104,64,104,64],[88,64,88,64,88,64],[88,56,88,56,88,56],[72,56,72,56,72,56],[72,48,72,48,72,48],[56,48,56,48,56,48],[56,40,56,40,56,40],[40,40,40,40,40,40],[40,48,40,48,40,48],[24,48,24,48,24,48],[24,56,24,56,24,56],[8,56,8,72,8,56],[0,88,0,88,0,88]]],[[[0,0,10,5,0,0],[3,33,17,45,-7,23],[47,46,71,40,27,51],[88,61,102,64,74,57],[123,53,146,56,109,52],[162,79,184,87,148,74],[204,81,204,81,204,81],[159,84,146,79,181,93],[124,67,116,66,139,67],[87,77,70,77,109,77],[49,65,31,68,68,62],[4,62,-1,59,16,69],[-2,74,0,87,-3,64],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[34,14,48,23,18,4],[62,33,70,38,57,31],[112,37,112,37,103,35],[112,53,103,55,112,53],[62,56,57,59,70,52],[34,76,18,86,48,67],[0,90,0,90,0,90]]],[[[0,0,10,12,0,0],[20,33,21,31,15,36],[27,31,44,28,23,32],[60,13,31,13,33,10],[27,34,51,34,50,27],[76,32,51,14,51,13],[27,38,41,49,49,37],[74,48,50,28,52,26],[26,43,43,59,46,48],[64,59,42,42,43,39],[28,49,26,47,43,58],[20,42,9,46,21,45],[8,70,5,80,11,56],[0,89,0,89,0,89]]],[[[0,0,2,-6,0,0],[19,6,21,-1,21,-1],[37,12,39,4,39,4],[54,17,57,9,56,10],[70,24,73,16,73,16],[86,30,89,21,89,22],[102,35,105,27,105,27],[119,40,121,31,122,32],[138,44,139,36,139,35],[155,47,156,39,157,39],[174,50,175,42,175,42],[191,53,191,45,192,45],[208,53,208,45,208,45],[225,54,225,47,225,46],[240,54,241,48,241,48],[256,57,255,73,256,50],[202,83,185,86,237,77],[141,88,114,89,161,88],[71,91,36,92,100,91],[1,90,1,90,1,90]]],[[[0,0,7,5,0,0],[17,46,17,46,17,28],[33,46,35,37,33,46],[51,31,61,31,42,31],[69,48,69,58,69,38],[51,66,42,66,61,66],[33,51,33,51,35,60],[17,51,17,68,17,51],[0,89,0,89,0,89]]],[[[0,0,25,-3,0,0],[74,30,90,50,59,13],[84,76,79,59,84,76],[74,80,70,62,72,60],[63,83,58,66,61,63],[51,87,46,68,49,68],[38,89,18,47,37,70],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[24,41,24,41,24,14],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,24,41,24,41],[24,41,25,41,24,41],[81,5,82,1,67,40],[90,1,94,2,87,0],[94,10,86,30,95,6],[56,48,71,54,71,42],[94,85,96,88,86,64],[90,94,90,94,94,93],[88,94,85,94,89,94],[81,90,67,55,82,93],[24,55,24,55,26,55],[24,55,24,76,24,55],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[30,43,32,40,30,10],[39,37,44,37,35,37],[49,45,51,40,48,40],[59,37,64,37,55,37],[69,45,71,40,68,40],[79,37,85,37,75,37],[90,48,90,54,90,42],[79,59,75,59,85,59],[69,51,68,56,71,56],[59,59,55,59,64,59],[49,51,48,56,51,56],[39,59,35,59,44,59],[30,53,30,87,32,56],[0,96,0,96,0,96]]],[[[0,0,33,-6,0,0],[76,16,104,35,57,3],[129,67,137,68,120,64],[149,65,142,66,142,61],[138,68,147,67,138,68],[152,70,147,72,152,70],[139,71,144,71,139,71],[155,76,150,78,155,76],[139,74,144,77,142,75],[153,84,147,82,151,80],[138,77,138,77,138,77],[150,88,146,86,147,84],[136,79,139,82,141,84],[144,91,144,91,141,86],[133,81,133,81,137,85],[140,91,129,88,134,86],[126,76,116,73,132,77],[46,97,14,97,86,97],[0,88,0,88,0,88]]],[[[0,0,39,11,0,0],[78,8,106,15,28,-2],[161,14,195,9,137,17],[223,18,229,28,218,8],[193,29,193,29,193,29],[221,39,218,48,225,29],[187,42,187,42,187,42],[214,58,210,67,219,49],[180,55,180,55,180,55],[203,75,195,82,212,68],[167,66,167,66,167,66],[184,90,174,95,194,85],[149,75,149,75,149,75],[159,100,148,104,171,96],[129,80,129,80,129,80],[130,106,118,109,141,103],[107,82,107,82,107,82],[100,109,87,110,113,107],[82,83,82,83,82,83],[72,110,60,109,84,110],[55,84,55,84,55,84],[45,110,32,111,59,110],[28,85,28,85,28,85],[17,112,6,114,32,110],[0,91,0,91,0,91]]],[[[0,0,15,6,0,0],[20,21,20,21,15,16],[52,1,52,1,52,1],[89,26,89,26,89,26],[111,10,111,10,111,10],[141,30,141,30,141,30],[156,16,156,16,156,16],[188,39,188,39,188,39],[159,27,159,27,159,27],[140,44,140,44,140,44],[114,27,114,27,114,27],[89,47,89,47,89,47],[56,28,56,28,56,28],[24,52,10,80,24,52],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[18,11,18,22,18,0],[2,22,2,22,2,22],[18,32,18,43,18,22],[2,44,2,44,2,44],[18,54,18,65,18,43],[2,66,2,66,2,66],[18,76,18,87,18,65],[0,88,0,88,0,88]]],[[[0,0,19,0,0,0],[20,12,20,12,20,7],[20,72,20,75,20,72],[24,72,24,72,24,75],[24,18,24,3,24,18],[47,18,47,18,46,3],[47,65,47,68,47,65],[51,65,51,65,51,68],[51,25,51,10,51,25],[74,25,74,25,73,10],[74,59,74,61,74,59],[78,59,78,59,78,61],[78,32,78,24,78,32],[89,20,95,20,84,20],[101,32,101,32,100,24],[101,52,101,55,101,52],[105,52,105,52,105,54],[105,38,105,23,105,38],[127,38,127,38,127,23],[127,45,127,48,127,45],[132,45,132,38,132,48],[143,34,148,33,137,34],[154,45,154,52,154,37],[145,45,145,43,145,52],[141,45,141,60,141,42],[118,45,118,45,118,60],[118,38,118,36,118,38],[114,39,114,39,114,35],[114,52,114,59,114,52],[103,63,97,63,108,63],[91,52,91,52,91,59],[91,32,91,29,91,32],[87,32,87,32,87,29],[87,59,87,74,87,59],[64,59,64,59,65,74],[64,25,64,22,64,25],[60,25,60,25,60,22],[60,65,60,73,60,65],[49,77,43,77,54,77],[38,65,38,65,38,73],[38,18,38,16,38,18],[33,18,33,18,33,15],[33,72,33,87,33,72],[11,72,11,72,11,87],[11,12,11,9,11,12],[6,12,6,12,6,9],[6,79,6,88,6,79],[0,88,0,88,0,88]]],[[[0,0,0,0,0,0],[16,7,21,-1,8,-1],[36,8,41,1,31,1],[54,10,60,-1,49,3],[76,14,81,9,75,5],[92,18,92,18,90,9],[115,21,120,16,107,8],[136,25,142,19,130,15],[155,29,155,29,153,19],[170,39,170,39,169,26],[190,45,190,45,184,31],[205,47,205,47,198,37],[220,49,224,46,214,36],[233,54,236,51,230,48],[242,58,241,64,243,53],[232,59,228,63,235,63],[219,58,213,69,220,63],[203,56,196,66,205,61],[188,54,179,62,188,54],[171,49,161,55,172,54],[153,41,144,48,154,47],[136,35,126,43,136,43],[113,32,102,47,116,39],[93,30,86,40,92,31],[75,27,71,36,76,36],[53,24,48,36,56,34],[32,27,30,38,37,36],[10,32,1,46,18,39],[0,86,0,86,0,86]]],[[[0,0,0,0,0,0],[19,9,29,10,8,8],[37,14,37,14,37,14],[44,18,47,21,44,18],[50,28,50,35,50,24],[37,38,30,38,44,38],[24,28,24,24,24,35],[31,18,31,18,27,21],[37,14,37,14,37,14],[52,11,59,11,44,11],[66,14,66,14,66,14],[73,18,76,21,73,18],[79,28,79,35,79,24],[66,38,59,38,73,38],[53,28,53,24,53,35],[60,18,60,18,56,21],[66,14,66,14,66,14],[81,11,88,11,73,11],[95,14,95,14,95,14],[102,18,105,21,102,18],[108,28,108,35,108,24],[95,38,88,38,102,38],[82,28,82,24,82,35],[89,18,89,18,85,21],[95,14,95,14,95,14],[108,11,114,11,99,11],[122,15,122,16,123,13],[110,15,104,16,114,15],[102,18,102,18,105,16],[95,21,95,21,95,21],[90,28,90,31,90,24],[95,32,98,32,92,32],[101,28,101,24,101,31],[95,21,95,21,95,21],[89,18,86,17,89,18],[81,16,78,16,84,16],[73,18,73,18,75,17],[66,21,66,21,66,21],[61,28,61,31,61,24],[66,32,69,32,63,32],[72,28,72,24,72,31],[66,21,66,21,66,21],[60,18,57,17,60,18],[52,16,49,16,55,16],[44,18,44,18,46,17],[37,21,37,21,37,21],[32,28,32,31,32,24],[37,32,40,32,34,32],[43,28,43,24,43,31],[37,21,37,21,37,21],[31,18,28,17,31,18],[19,19,13,21,22,18],[10,48,9,67,12,34],[0,89,0,89,0,89]]],[[[0,0,37,-7,0,0],[108,6,136,-3,62,22],[181,-3,194,0,162,-8],[207,25,207,37,208,10],[210,43,203,33,208,36],[195,9,181,-8,213,19],[186,24,182,42,185,16],[187,53,185,46,189,35],[185,40,181,35,189,45],[184,23,189,0,181,28],[164,11,153,28,162,-13],[163,55,167,43,171,36],[161,33,159,27,164,44],[159,14,165,-4,161,20],[141,21,143,26,127,-8],[145,42,147,44,142,37],[145,54,146,43,146,50],[142,36,143,31,141,43],[131,7,126,2,139,11],[119,8,114,16,120,5],[120,24,123,45,115,25],[118,50,115,39,117,37],[114,23,123,0,127,31],[96,35,99,42,83,5],[96,52,98,44,101,42],[94,32,92,30,98,38],[90,22,87,11,94,25],[75,15,70,12,78,17],[71,39,73,43,69,34],[71,60,74,50,75,52],[69,41,70,15,68,49],[53,26,50,34,60,3],[48,50,52,59,41,44],[48,78,47,68,47,69],[44,46,40,39,50,57],[49,13,33,-2,66,13],[25,36,27,43,21,18],[25,58,28,69,23,48],[23,87,23,82,24,66],[23,68,23,60,22,72],[23,48,26,43,19,56],[21,29,23,25,18,35],[14,17,1,17,19,18],[0,88,0,88,0,88]]],[[[0,0,12,-15,0,0],[40,-17,58,-14,27,-19],[78,14,84,31,73,-1],[107,5,134,-10,90,14],[153,25,164,25,138,24],[175,15,187,11,165,18],[200,31,210,38,190,23],[233,35,207,13,210,8],[191,36,180,27,215,54],[165,40,156,47,182,28],[143,47,130,43,149,48],[112,39,101,53,126,21],[82,61,69,63,91,59],[46,43,37,34,57,55],[19,68,15,89,24,46],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[81,0,81,0,81,0],[93,12,93,23,93,0],[81,23,81,23,81,23],[11,23,11,23,11,23],[16,76,10,84,30,55],[0,88,0,88,0,88]]],[[[0,0,0,0,0,0],[85,-8,85,-8,85,-8],[85,97,85,97,85,97],[0,90,0,90,0,90]]],[[[0,0,15,2,0,0],[44,-5,61,-12,24,3],[82,-31,100,-22,64,-39],[76,-3,95,-44,76,-3],[78,12,106,0,138,4],[118,22,117,33,119,12],[77,30,135,37,104,43],[69,49,92,59,103,91],[84,84,76,91,92,77],[53,65,81,99,62,89],[26,73,42,92,28,116],[9,101,-1,96,22,107],[0,85,0,85,0,85]]],[[[0,0,6,18,0,0],[19,28,24,19,15,31],[39,6,58,-4,31,10],[78,14,83,24,71,1],[65,47,77,57,77,37],[78,81,71,93,83,70],[39,89,33,85,58,99],[23,73,16,64,27,79],[0,90,0,90,0,90]]],[[[0,0,12,8,0,0],[34,36,34,36,17,41],[30,33,30,33,30,33],[37,33,37,33,37,33],[39,27,39,27,39,27],[41,33,41,33,41,33],[47,33,47,33,47,33],[42,37,42,37,42,37],[45,43,45,43,45,43],[39,39,39,39,39,39],[34,43,34,43,34,43],[35,39,22,43,35,39],[14,76,6,88,22,65],[0,89,0,89,0,89]]],[[[0,0,11,-5,0,0],[36,7,42,17,27,-6],[69,36,47,55,45,29],[42,87,20,104,57,74],[0,89,0,89,0,89]]],[[[0,0,6,5,0,0],[22,19,29,19,11,18],[41,4,43,4,36,5],[45,14,47,47,44,6],[69,19,71,52,68,-10],[95,24,97,56,94,-7],[120,31,120,60,120,2],[141,36,140,61,141,12],[162,42,161,63,162,20],[180,45,179,51,167,58],[165,66,161,68,172,62],[156,57,154,36,157,66],[135,54,132,36,140,76],[115,54,111,26,118,78],[89,53,84,20,93,83],[62,51,57,13,65,80],[36,46,33,18,41,78],[5,76,2,91,13,45],[0,100,0,100,1,102]]],[[[0,0,5,-14,0,0],[19,-13,30,-25,11,-5],[51,-10,65,-18,34,-1],[80,-1,100,-7,66,4],[107,19,123,18,89,19],[131,36,142,37,108,36],[143,53,148,56,133,49],[152,70,148,75,156,65],[135,77,135,87,136,67],[118,81,106,69,125,88],[95,85,85,78,105,93],[74,83,63,97,80,74],[44,83,35,94,56,70],[20,81,13,89,32,68],[1,85,1,85,1,85]]],[[[0,0,0,0,0,0],[84,44,84,44,84,44],[0,88,0,88,0,88]]],[[[0,0,21,-5,0,0],[34,23,39,33,28,9],[56,15,65,16,45,13],[71,32,63,37,53,38],[56,22,57,15,56,36],[40,41,44,79,38,28],[0,89,0,89,0,89]]],[[[0,0,0,0,0,0],[56,-3,72,-3,24,-3],[97,11,107,20,87,2],[113,44,113,58,113,31],[94,79,84,87,105,71],[56,92,17,92,71,92],[12,44,12,24,12,65],[56,8,114,10,32,8],[56,81,32,80,114,79],[25,44,25,30,25,67],[56,19,73,19,39,19],[86,44,86,58,86,30],[56,70,43,69,73,70],[38,44,39,36,37,61],[56,30,79,30,46,30],[57,59,53,59,79,59],[49,50,49,44,49,57],[56,41,62,40,52,42],[58,47,54,48,64,46],[59,53,66,52,54,53],[67,44,66,34,68,49],[45,45,44,59,46,34],[56,63,69,63,51,63],[78,44,77,19,78,54],[33,44,33,66,34,19],[56,74,103,72,40,74],[56,14,36,14,103,16],[20,44,20,73,20,28],[56,85,83,85,31,85],[104,44,101,-12,104,67],[7,45,7,66,6,-9],[0,89,0,89,0,89]]]],s.legsArr=[[[[0,0,-9,16,0,0],[-25,21,-25,21,-18,18],[-28,89,-28,89,-28,89],[-71,89,-71,89,-71,89],[-64,73,-64,64,-70,76],[-71,25,-71,25,-70,47],[-95,23,-95,23,-81,25],[-101,89,-101,89,-101,89],[-144,89,-144,89,-144,89],[-137,72,-139,48,-144,79],[-145,19,-162,19,-145,40],[-192,16,-192,16,-180,18],[-198,89,-198,89,-194,84],[-240,89,-240,89,-240,89],[-234,73,-228,60,-240,78],[-249,12,-249,12,-244,21],[-267,10,-267,10,-267,10],[-281,89,-281,89,-277,84],[-322,89,-322,89,-322,89],[-315,74,-309,65,-321,80],[-328,15,-335,-3,-320,34],[-345,-30,-372,-54,-343,-25],[-380,-115,-380,-115,-380,-115]]],[[[0,0,6,36,0,0],[-13,51,-5,55,-13,47],[26,43,43,54,-2,27],[50,53,57,54,32,50],[66,55,73,66,63,50],[64,80,52,79,56,65],[60,92,45,94,53,86],[57,103,57,103,57,103],[45,70,37,67,21,93],[18,75,1,77,34,72],[-10,100,-17,101,5,96],[-37,92,-45,82,-29,102],[-60,73,-60,73,-54,82],[-93,85,-93,85,-72,84],[-109,111,-106,119,-97,105],[-97,142,-98,154,-94,110],[-90,168,-92,175,-84,149],[-90,184,-97,189,-84,180],[-109,187,-112,182,-104,183],[-127,186,-133,173,-119,176],[-141,185,-141,185,-141,185],[-113,168,-109,169,-144,161],[-123,149,-132,140,-110,162],[-157,123,-163,111,-152,136],[-174,92,-212,96,-172,115],[-259,77,-259,77,-233,89],[-282,104,-287,107,-271,98],[-326,108,-334,102,-316,115],[-345,107,-352,106,-337,108],[-354,117,-354,117,-356,110],[-358,96,-358,96,-370,111],[-372,105,-377,97,-368,93],[-364,83,-364,83,-376,86],[-383,87,-383,87,-378,77],[-363,68,-348,70,-385,65],[-336,81,-331,85,-345,71],[-304,82,-304,82,-304,82],[-295,49,-325,34,-303,59],[-340,24,-340,24,-318,29],[-378,30,-384,28,-372,32],[-412,-1,-412,-10,-412,10],[-426,-20,-427,-26,-423,-9],[-442,-20,-442,-20,-436,-25],[-424,-33,-424,-33,-442,-32],[-440,-39,-436,-48,-428,-46],[-419,-46,-419,-46,-430,-54],[-434,-59,-434,-59,-422,-61],[-407,-56,-399,-44,-420,-74],[-400,-26,-400,-19,-399,-39],[-377,-2,-377,-2,-377,-2],[-355,-18,-381,-58,-366,-16],[-384,-110,-384,-110,-384,-110]]],[[[0,0,-5,17,0,0],[-25,29,-25,29,-25,29],[-29,66,-32,79,-25,40],[-20,109,-23,122,-17,97],[-38,146,-40,157,-37,135],[-41,169,-40,159,-33,158],[-46,161,-46,165,-46,157],[-66,179,-73,178,-52,182],[-88,178,-94,180,-72,173],[-101,179,-107,177,-95,169],[-111,177,-113,172,-99,170],[-93,160,-76,159,-103,160],[-63,137,-52,126,-73,149],[-57,100,-59,91,-54,109],[-92,74,-96,66,-84,88],[-107,57,-105,62,-103,63],[-107,75,-111,89,-104,68],[-105,109,-109,122,-102,97],[-120,141,-122,153,-119,130],[-121,163,-124,152,-115,154],[-129,157,-130,168,-128,152],[-148,179,-155,178,-134,182],[-172,179,-176,179,-155,173],[-183,179,-189,177,-177,167],[-194,177,-195,169,-180,165],[-176,160,-158,159,-186,160],[-146,137,-135,126,-156,149],[-142,97,-144,88,-139,107],[-168,69,-175,61,-157,82],[-194,30,-205,29,-191,55],[-283,-53,-291,-97,-274,-6],[-337,-128,-337,-128,-314,-124],[-342,-118,-343,-115,-341,-122],[-351,-114,-352,-113,-349,-116],[-350,-110,-350,-109,-350,-112],[-347,-107,-347,-107,-349,-108],[-353,-108,-353,-108,-351,-105],[-353,-105,-353,-105,-356,-107],[-357,-108,-357,-108,-357,-104],[-358,-104,-358,-104,-359,-107],[-360,-110,-360,-110,-362,-105],[-355,-118,-351,-119,-359,-117],[-348,-122,-349,-125,-347,-118],[-349,-129,-349,-129,-349,-129],[-356,-129,-356,-129,-356,-129],[-361,-120,-363,-117,-360,-123],[-369,-116,-370,-115,-367,-117],[-369,-113,-370,-111,-369,-114],[-367,-107,-367,-107,-369,-108],[-373,-110,-373,-110,-371,-107],[-371,-106,-371,-106,-373,-108],[-376,-109,-376,-109,-376,-105],[-377,-105,-377,-105,-378,-108],[-380,-111,-380,-111,-381,-106],[-372,-121,-368,-121,-377,-121],[-367,-125,-368,-128,-366,-121],[-367,-130,-367,-130,-367,-130],[-368,-141,-377,-154,-365,-136],[-384,-161,-384,-161,-384,-161]]],[[[0,0,0,0,0,0],[-15,20,-15,20,1,15],[-9,51,-9,57,-9,30],[-24,84,-24,84,-16,78],[-27,93,-36,97,-25,93],[-51,94,-58,95,-46,92],[-45,78,-38,76,-55,81],[-35,58,-35,51,-35,69],[-62,18,-62,18,-55,39],[-73,17,-73,17,-73,17],[-57,55,-58,61,-56,33],[-69,83,-71,89,-65,82],[-73,94,-82,96,-71,92],[-97,94,-102,95,-92,92],[-91,78,-80,76,-102,81],[-81,59,-81,50,-81,65],[-114,16,-135,12,-109,48],[-216,-39,-216,-39,-171,0],[-230,23,-237,36,-218,4],[-227,94,-227,94,-225,92],[-248,94,-248,94,-248,94],[-243,80,-244,74,-241,87],[-258,18,-257,7,-260,30],[-269,-50,-269,-50,-271,-23],[-280,-53,-280,-53,-280,-53],[-283,22,-289,31,-277,13],[-282,94,-282,94,-278,93],[-306,94,-306,94,-306,94],[-297,80,-298,73,-297,86],[-306,23,-305,12,-307,34],[-327,-65,-360,-78,-341,-29],[-384,-144,-384,-144,-384,-144]]],[[[0,0,0,0,0,0],[-38,18,-38,18,-4,13],[-45,59,-18,71,-66,50],[-29,119,-29,119,-23,99],[-75,119,-75,119,-75,119],[-59,108,-51,113,-67,104],[-74,73,-112,55,-45,87],[-105,26,-116,28,-105,26],[-110,63,-87,72,-129,56],[-99,118,-99,118,-92,100],[-145,118,-145,118,-145,118],[-129,107,-123,110,-137,103],[-137,81,-178,67,-109,90],[-176,18,-176,18,-176,18],[-243,16,-243,16,-209,22],[-289,81,-295,95,-277,55],[-415,76,-426,76,-404,75],[-432,94,-432,94,-428,86],[-436,80,-436,80,-436,80],[-444,89,-444,89,-444,89],[-446,76,-446,76,-446,76],[-456,85,-456,71,-456,85],[-439,54,-425,46,-454,63],[-311,62,-304,56,-318,68],[-289,-5,-289,-5,-289,-5],[-306,-17,-306,-17,-306,-17],[-355,46,-361,59,-342,21],[-481,38,-492,37,-470,38],[-499,55,-499,55,-494,48],[-502,40,-502,40,-502,40],[-512,51,-512,51,-512,51],[-513,37,-513,37,-513,37],[-523,47,-522,39,-523,47],[-506,16,-492,9,-523,23],[-376,26,-369,20,-383,32],[-350,-42,-371,-61,-350,-42],[-385,-110,-385,-110,-385,-110]]],[[[0,0,0,0,0,0],[-16,20,-26,43,0,14],[-32,55,-20,57,-48,53],[-8,69,0,69,-13,69],[-5,79,-10,83,-1,76],[-9,89,-15,90,-6,89],[-13,97,-28,95,-13,97],[-18,79,-20,75,-17,82],[-43,75,-53,73,-31,78],[-76,59,-83,40,-69,78],[-80,23,-80,23,-80,23],[-107,38,-130,50,-97,33],[-125,62,-117,71,-132,53],[-119,95,-113,99,-124,92],[-123,102,-130,100,-118,104],[-135,107,-139,104,-133,109],[-141,109,-148,106,-141,109],[-141,99,-138,97,-145,101],[-134,93,-133,88,-135,97],[-145,72,-150,64,-138,83],[-163,39,-157,20,-168,58],[-144,8,-144,8,-144,8],[-240,-4,-235,12,-187,17],[-241,48,-242,56,-240,29],[-275,81,-277,87,-273,71],[-281,96,-281,96,-279,85],[-273,112,-273,112,-281,102],[-290,93,-295,97,-290,112],[-294,115,-305,107,-295,105],[-290,74,-277,65,-309,87],[-266,42,-255,37,-276,47],[-281,-11,-281,-11,-280,23],[-290,-12,-290,-12,-290,-12],[-329,39,-332,50,-321,13],[-376,34,-380,36,-367,30],[-393,38,-393,38,-388,36],[-405,53,-405,53,-403,39],[-400,29,-400,29,-415,45],[-417,42,-417,24,-415,38],[-385,18,-371,23,-401,13],[-348,21,-339,27,-360,15],[-331,-26,-370,-38,-341,-7],[-385,-95,-385,-95,-385,-95]]],[[[0,0,0,0,0,0],[-51,25,-51,25,0,30],[-62,96,-62,96,-56,90],[-104,96,-104,96,-104,96],[-101,87,-105,72,-100,93],[-111,26,-111,26,-112,46],[-121,26,-121,26,-121,26],[-125,95,-125,95,-122,84],[-170,96,-170,96,-170,96],[-168,86,-172,73,-167,92],[-176,27,-183,29,-178,51],[-193,29,-193,29,-187,29],[-204,96,-204,96,-202,90],[-245,96,-245,96,-245,96],[-242,87,-244,74,-241,92],[-252,35,-252,35,-250,48],[-263,96,-263,96,-263,96],[-301,96,-301,96,-301,96],[-299,86,-303,70,-297,92],[-313,25,-371,24,-310,38],[-384,-75,-384,-75,-384,-75]]],[[[0,0,0,0,0,0],[-47,33,-50,33,1,36],[-53,56,-53,56,-53,56],[-94,56,-94,56,-94,56],[-100,33,-104,33,-96,32],[-106,56,-106,56,-106,50],[-146,56,-146,56,-146,56],[-151,35,-165,38,-148,35],[-195,35,-198,35,-180,38],[-201,56,-201,56,-201,56],[-242,56,-242,56,-242,56],[-247,33,-252,33,-243,32],[-254,56,-254,56,-253,50],[-293,56,-293,56,-293,56],[-298,33,-360,31,-296,33],[-382,-80,-382,-80,-382,-80]]],[[[0,0,7,48,0,0],[-48,80,-66,127,-10,74],[-144,112,-176,147,-101,131],[-240,112,-290,136,-208,148],[-336,80,-384,73,-323,128],[-384,0,-384,0,-393,43],[-384,-64,-384,-64,-384,-64]]],[[[0,0,9,16,0,0],[14,53,14,112,14,34],[-92,159,-132,159,-33,159],[-185,105,-203,137,-167,137],[-278,159,-337,159,-238,159],[-384,53,-384,34,-384,112],[-370,0,-385,-44,-379,16],[-384,-103,-384,-103,-384,-103]]],[[[0,0,-5,11,0,0],[-17,14,-17,14,-17,14],[-16,52,-11,78,-10,45],[-21,93,-21,93,-21,93],[-52,93,-52,93,-52,93],[-46,83,-44,82,-51,85],[-45,54,-52,39,-41,63],[-54,16,-54,16,-54,16],[-67,16,-67,16,-67,16],[-68,54,-68,54,-63,49],[-75,93,-75,93,-66,79],[-105,93,-105,93,-105,93],[-98,83,-98,83,-103,84],[-95,55,-98,50,-93,59],[-106,18,-106,18,-103,37],[-267,21,-267,21,-215,31],[-264,59,-264,59,-262,54],[-268,93,-268,93,-258,90],[-298,93,-298,93,-298,93],[-291,83,-291,83,-297,87],[-291,57,-291,52,-290,62],[-302,20,-302,20,-301,34],[-317,20,-317,20,-313,21],[-314,61,-314,61,-306,51],[-319,93,-319,93,-309,81],[-348,93,-348,93,-348,93],[-342,84,-342,84,-346,88],[-338,57,-338,53,-338,62],[-352,16,-379,-15,-350,35],[-385,-90,-385,-90,-385,-90]]],[[[0,0,-10,20,0,0],[-25,25,-26,34,-24,8],[-19,66,-23,87,-14,43],[-7,95,-10,95,3,95],[-13,95,-16,101,-13,93],[-16,117,-30,122,-10,114],[-31,132,-43,124,-24,124],[-54,131,-54,131,-54,131],[-42,112,-37,100,-63,118],[-58,76,-84,64,-22,94],[-93,28,-93,28,-95,53],[-100,28,-100,28,-97,29],[-105,66,-112,74,-100,60],[-99,89,-96,95,-102,83],[-105,91,-103,96,-107,86],[-103,112,-120,114,-100,112],[-117,131,-122,128,-107,124],[-143,131,-143,131,-129,124],[-135,113,-112,76,-150,116],[-162,58,-173,44,-143,82],[-177,26,-177,26,-177,26],[-243,19,-245,35,-219,27],[-257,54,-258,60,-256,46],[-268,74,-279,82,-266,72],[-272,102,-274,108,-270,99],[-275,101,-275,106,-276,97],[-278,117,-278,125,-278,110],[-281,132,-281,132,-277,127],[-296,131,-297,130,-289,128],[-293,120,-287,115,-300,124],[-290,100,-290,99,-291,108],[-292,95,-288,90,-298,104],[-287,79,-288,68,-286,88],[-292,53,-292,45,-293,61],[-295,18,-298,18,-293,18],[-306,64,-310,73,-301,55],[-310,95,-306,110,-313,80],[-313,98,-312,102,-313,94],[-314,118,-312,125,-316,113],[-317,131,-318,132,-314,127],[-333,130,-334,127,-321,127],[-330,119,-326,115,-335,123],[-326,98,-326,96,-325,105],[-329,94,-326,90,-335,104],[-324,75,-327,62,-322,86],[-335,53,-337,40,-335,60],[-342,11,-376,-11,-347,24],[-381,-79,-381,-79,-381,-79]]],[[[0,0,-10,25,0,0],[-28,27,-23,45,-28,21],[-29,84,-23,89,-46,70],[-13,108,-13,116,-14,100],[-31,146,-27,152,-35,139],[-40,156,-53,150,-30,160],[-58,161,-64,156,-51,164],[-68,161,-68,161,-68,161],[-69,149,-66,144,-73,154],[-59,150,-46,145,-62,152],[-40,130,-38,113,-42,143],[-61,98,-68,93,-49,107],[-87,83,-97,75,-79,91],[-106,48,-120,59,-106,63],[-131,66,-138,69,-121,63],[-126,81,-121,86,-138,69],[-114,113,-103,117,-119,111],[-116,130,-123,132,-104,125],[-121,143,-124,147,-117,140],[-130,151,-130,151,-130,143],[-138,146,-141,138,-137,151],[-130,137,-126,132,-135,143],[-128,114,-132,104,-123,122],[-149,100,-160,98,-138,101],[-176,93,-194,84,-155,104],[-187,31,-228,21,-188,32],[-255,-5,-255,-5,-237,8],[-256,29,-257,39,-256,24],[-301,28,-301,28,-284,35],[-314,31,-313,21,-306,36],[-297,15,-290,15,-304,15],[-281,18,-282,15,-278,22],[-291,-19,-291,-19,-290,-12],[-296,-21,-296,-21,-296,-21],[-335,8,-344,11,-329,6],[-375,-5,-375,-5,-358,0],[-392,-6,-388,-15,-387,2],[-373,-16,-366,-16,-380,-15],[-342,-13,-340,-16,-345,-9],[-331,-31,-364,-51,-337,-23],[-384,-122,-384,-122,-384,-122]]],[[[0,0,-6,13,0,0],[-19,16,-20,24,-8,13],[-31,45,-17,53,-41,40],[-21,83,-25,91,3,41],[-31,103,-37,105,-17,99],[-44,114,-44,114,-27,112],[-56,107,-56,107,-56,107],[-69,113,-69,113,-69,113],[-63,99,-54,89,-71,106],[-36,83,-32,71,-43,101],[-40,69,-57,70,-31,69],[-102,41,-102,32,-102,73],[-100,21,-97,11,-101,28],[-118,21,-121,31,-110,9],[-123,45,-109,53,-132,40],[-112,83,-117,91,-88,41],[-122,103,-128,105,-109,99],[-135,114,-135,114,-118,112],[-147,107,-147,107,-147,107],[-160,113,-160,113,-160,113],[-155,99,-146,89,-162,106],[-128,83,-123,71,-135,101],[-131,69,-149,70,-122,69],[-193,41,-197,24,-187,72],[-180,-13,-159,-42,-203,19],[-182,-36,-182,-36,-182,-41],[-198,34,-210,42,-178,17],[-211,81,-211,81,-193,70],[-220,114,-220,114,-209,109],[-268,114,-272,114,-264,113],[-260,94,-251,88,-269,100],[-249,37,-251,30,-247,44],[-262,-39,-262,-39,-265,-12],[-278,-39,-278,-39,-270,-37],[-294,28,-303,33,-278,19],[-316,78,-324,81,-297,70],[-325,114,-335,114,-315,113],[-377,114,-377,114,-378,113],[-366,93,-360,89,-373,96],[-346,37,-347,31,-345,43],[-360,-42,-407,-89,-361,-23],[-385,-188,-385,-188,-385,-188]]],[[[0,0,-17,41,0,0],[-80,61,-80,61,-44,61],[-95,82,-110,82,-80,82],[-110,61,-110,61,-110,61],[-125,61,-125,61,-125,61],[-139,82,-154,82,-125,82],[-154,61,-154,61,-154,61],[-169,61,-169,61,-169,61],[-184,82,-199,82,-169,82],[-199,61,-199,61,-199,61],[-214,61,-214,61,-214,61],[-229,82,-244,82,-214,82],[-244,61,-244,61,-244,61],[-259,61,-259,61,-259,61],[-274,82,-289,82,-259,82],[-289,61,-331,60,-289,61],[-369,0,-369,0,-356,38],[-384,-63,-384,-63,-384,-63]]],[[[0,0,4,30,0,0],[-25,45,-4,82,-14,37],[-32,101,-21,102,-55,98],[-5,125,6,137,-17,112],[17,149,-9,157,19,132],[-35,193,-45,185,-29,177],[0,146,2,138,-34,151],[-29,119,-38,109,-15,134],[-110,80,-99,122,-84,145],[-127,138,-117,144,-146,125],[-113,172,-111,188,-115,155],[-109,204,-135,197,-97,192],[-179,211,-183,198,-165,201],[-121,192,-115,187,-152,177],[-132,156,-136,143,-125,176],[-201,92,-202,135,-187,157],[-232,142,-225,150,-247,125],[-228,179,-230,195,-226,162],[-232,211,-255,197,-217,202],[-302,199,-302,186,-286,194],[-241,196,-234,193,-267,174],[-242,158,-242,145,-241,179],[-292,80,-304,121,-295,146],[-335,121,-331,131,-342,99],[-344,157,-352,171,-336,141],[-360,185,-377,163,-343,182],[-420,148,-416,136,-404,149],[-363,168,-355,167,-379,138],[-349,133,-345,120,-356,152],[-377,45,-373,32,-397,109],[-381,22,-381,22,-370,25],[-405,64,-408,90,-402,34],[-466,74,-466,74,-451,54],[-462,122,-470,119,-475,98],[-482,74,-482,74,-489,101],[-470,56,-443,49,-489,54],[-427,56,-417,62,-436,51],[-413,10,-413,10,-424,27],[-458,28,-476,47,-436,6],[-512,-4,-512,-4,-488,-10],[-539,36,-544,29,-534,10],[-525,-14,-525,-14,-548,3],[-505,-20,-479,-9,-518,-35],[-471,5,-467,16,-475,-4],[-436,-18,-436,-18,-451,-13],[-483,-29,-509,-25,-453,-34],[-509,-85,-509,-85,-486,-76],[-554,-68,-554,-76,-535,-86],[-514,-100,-514,-100,-542,-100],[-493,-93,-479,-69,-496,-113],[-481,-53,-484,-41,-479,-63],[-432,-53,-434,-64,-452,-56],[-462,-85,-474,-93,-445,-73],[-460,-134,-471,-142,-443,-123],[-510,-135,-506,-147,-484,-147],[-455,-150,-455,-150,-485,-168],[-439,-137,-441,-121,-438,-151],[-444,-99,-449,-93,-434,-110],[-412,-81,-418,-114,-424,-95],[-384,-159,-384,-159,-384,-159]]],[[[0,0,-6,17,0,0],[-23,26,-23,26,-23,26],[-22,92,-22,92,-22,92],[-86,92,-86,92,-86,92],[-76,80,-75,79,-84,81],[-90,26,-90,26,-90,26],[-97,92,-97,92,-97,92],[-165,92,-165,92,-165,92],[-152,80,-152,80,-162,81],[-152,26,-152,26,-152,26],[-219,26,-219,26,-219,26],[-225,92,-225,92,-225,92],[-289,92,-289,92,-289,92],[-279,80,-278,79,-287,81],[-286,26,-286,26,-286,26],[-300,92,-300,92,-300,92],[-368,92,-368,92,-368,92],[-354,80,-354,80,-365,81],[-346,14,-381,-7,-346,14],[-384,-90,-384,-90,-384,-90]]],[[[0,0,0,0,0,0],[-15,15,-15,15,-4,10],[-35,71,-35,71,-35,71],[-69,71,-69,71,-69,71],[-90,29,-90,29,-90,29],[-111,71,-111,71,-111,71],[-149,71,-149,71,-149,71],[-170,23,-170,23,-170,23],[-184,23,-184,23,-184,23],[-207,71,-207,71,-207,71],[-241,71,-241,71,-241,71],[-262,29,-262,29,-262,29],[-283,71,-283,71,-283,71],[-321,71,-321,71,-321,71],[-341,-2,-380,-27,-341,-2],[-383,-100,-383,-100,-383,-100]]],[[[0,0,-18,32,0,0],[-49,20,-49,20,-32,11],[-39,51,-30,57,-49,45],[-16,69,-16,82,-17,56],[-38,113,-38,113,-38,113],[-32,127,-32,127,-31,121],[-55,126,-55,126,-44,119],[-79,127,-79,127,-68,120],[-48,110,-48,110,-70,106],[-35,75,-38,73,-32,77],[-75,63,-82,58,-56,75],[-96,22,-100,23,-95,51],[-106,23,-106,23,-106,23],[-99,58,-94,66,-108,46],[-73,73,-68,85,-77,63],[-92,113,-92,113,-92,113],[-86,127,-86,127,-86,121],[-110,126,-110,126,-99,119],[-133,127,-133,127,-122,120],[-103,110,-103,110,-124,106],[-87,81,-88,79,-85,83],[-146,54,-148,44,-138,82],[-151,26,-151,26,-151,26],[-250,0,-250,0,-184,38],[-242,53,-232,67,-251,38],[-278,94,-279,114,-277,69],[-277,124,-277,124,-277,124],[-292,125,-292,125,-290,109],[-305,126,-305,126,-302,113],[-301,80,-279,50,-322,110],[-266,49,-266,43,-266,56],[-280,-4,-280,-4,-283,25],[-316,-6,-316,-6,-302,4],[-307,40,-295,58,-319,22],[-338,92,-337,111,-340,58],[-333,122,-333,122,-333,122],[-349,124,-349,124,-345,107],[-364,124,-364,124,-360,109],[-368,79,-351,44,-381,107],[-332,40,-336,33,-328,47],[-345,-12,-377,-36,-347,20],[-384,-89,-384,-89,-384,-89]]],[[[0,0,0,0,0,0],[-29,26,-29,26,0,26],[-36,104,-36,104,-6,106],[-77,104,-77,104,-77,104],[-74,93,-74,93,-84,98],[-84,26,-84,26,-60,78],[-100,26,-100,26,-100,26],[-107,104,-107,104,-77,106],[-148,104,-148,104,-148,104],[-144,93,-144,93,-155,98],[-155,26,-155,26,-132,79],[-204,25,-204,25,-204,25],[-233,104,-233,104,-203,106],[-271,104,-271,104,-271,104],[-268,93,-268,93,-278,98],[-256,26,-256,26,-251,80],[-273,26,-273,26,-273,26],[-302,104,-302,104,-272,106],[-340,104,-340,104,-340,104],[-337,93,-337,93,-347,98],[-325,26,-380,24,-320,80],[-384,-81,-384,-81,-384,-81]]],[[[1,0,1,0,1,0],[-32,14,-39,14,-12,14],[-51,36,-57,36,-44,36],[-71,15,-83,15,-59,15],[-90,36,-97,36,-84,36],[-109,14,-121,15,-102,14],[-255,14,-255,14,-250,14],[-267,36,-270,36,-264,36],[-275,14,-275,14,-276,21],[-281,14,-281,14,-281,14],[-293,36,-296,36,-290,36],[-301,14,-372,10,-302,21],[-384,-42,-384,-42,-384,-42]]],[[[0,0,0,9,0,0],[-25,24,-9,31,-9,17],[0,48,0,56,0,39],[-25,72,-9,79,-9,65],[0,95,0,104,0,87],[-25,119,-9,126,-9,112],[0,143,0,152,0,134],[-25,167,-9,174,-9,160],[0,191,0,199,0,182],[-25,214,-9,221,-9,207],[0,238,0,265,0,230],[-192,272,-298,272,-86,272],[-384,238,-384,230,-384,265],[-359,214,-375,207,-375,221],[-384,191,-384,182,-384,199],[-359,167,-375,160,-375,174],[-384,143,-384,134,-384,152],[-359,119,-375,112,-375,126],[-384,95,-384,87,-384,104],[-359,72,-375,65,-375,79],[-384,48,-384,39,-384,56],[-359,24,-375,17,-375,31],[-384,0,-384,0,-384,9],[-384,-48,-384,-48,-384,-48]]],[[[0,0,0,0,0,0],[0,12,0,12,0,12],[-51,63,-102,63,0,63],[-102,12,-102,12,-102,12],[-154,63,-204,63,-103,63],[-205,12,-205,12,-205,12],[-205,-65,-205,-116,-205,-65],[-256,-116,-256,-116,-256,-116],[-282,-91,-307,-91,-256,-91],[-307,-116,-307,-116,-307,-116],[-333,-91,-358,-91,-308,-91],[-358,-116,-358,-116,-358,-116],[-358,-167,-358,-167,-358,-167],[-384,-193,-384,-193,-384,-193]]],[[[0,0,0,0,0,0],[-14,16,-22,24,-3,12],[-18,62,-11,67,-38,45],[7,113,7,113,19,103],[2,123,0,124,5,123],[-21,123,-27,124,-11,122],[-25,107,-18,101,-34,114],[-39,85,-49,76,-34,89],[-71,57,-73,42,-70,75],[-87,15,-95,26,-87,15],[-85,66,-67,78,-101,56],[-63,113,-63,113,-50,103],[-67,123,-70,124,-64,123],[-90,123,-96,124,-80,122],[-94,107,-88,101,-104,114],[-109,85,-119,76,-104,89],[-142,61,-144,46,-141,79],[-152,15,-153,13,-152,15],[-203,19,-215,52,-174,22],[-227,73,-224,84,-235,46],[-251,113,-251,113,-241,100],[-255,123,-258,124,-252,123],[-279,123,-285,124,-269,122],[-283,107,-277,101,-293,114],[-269,74,-279,65,-264,79],[-281,37,-277,30,-290,57],[-274,20,-274,20,-275,24],[-279,20,-283,38,-279,20],[-293,54,-294,61,-292,46],[-290,68,-285,79,-292,62],[-319,113,-319,113,-307,103],[-323,123,-326,124,-320,123],[-347,123,-353,124,-337,122],[-351,107,-345,101,-361,114],[-335,74,-345,65,-330,78],[-344,39,-340,25,-350,61],[-333,12,-381,-8,-333,12],[-384,-85,-384,-85,-384,-85]]],[[[0,0,-10,22,0,0],[-45,20,-45,20,-38,8],[-19,59,-2,70,-34,50],[-36,108,-36,109,-36,108],[-86,109,-83,102,-86,109],[-61,97,-61,97,-71,97],[-53,66,-83,58,-34,71],[-102,24,-105,19,-102,24],[-116,24,-116,24,-118,20],[-91,58,-71,72,-105,48],[-102,108,-102,109,-102,108],[-152,109,-150,98,-152,109],[-126,96,-126,96,-136,94],[-121,65,-170,53,-102,70],[-195,-35,-195,-35,-195,20],[-199,-36,-199,-36,-199,-36],[-213,16,-213,27,-213,16],[-230,37,-230,37,-219,38],[-258,88,-253,106,-258,88],[-273,109,-273,109,-273,109],[-315,109,-315,109,-315,109],[-288,93,-288,93,-311,89],[-239,17,-239,17,-239,17],[-252,-37,-252,-37,-252,-37],[-262,-37,-262,-37,-262,-37],[-271,12,-271,22,-271,12],[-288,33,-288,33,-277,33],[-318,88,-313,106,-318,88],[-333,109,-333,109,-333,109],[-376,109,-376,109,-376,109],[-348,93,-348,93,-371,89],[-298,13,-298,13,-298,13],[-319,-54,-372,-68,-319,-54],[-385,-137,-385,-137,-385,-137]]],[[[0,0,0,0,0,0],[-14,15,-14,15,-14,15],[-29,15,-29,15,-29,15],[-29,48,-29,48,-29,48],[-14,48,-14,48,-14,48],[-14,100,-14,100,-14,100],[-58,100,-58,100,-58,100],[-58,86,-58,86,-58,86],[-29,86,-29,86,-29,86],[-29,67,-29,67,-29,67],[-58,67,-58,67,-58,67],[-58,24,-58,24,-58,24],[-86,24,-86,24,-86,24],[-86,48,-86,48,-86,48],[-72,48,-72,48,-72,48],[-72,100,-72,100,-72,100],[-115,100,-115,100,-115,100],[-115,86,-115,86,-115,86],[-86,86,-86,86,-86,86],[-86,67,-86,67,-86,67],[-115,67,-115,67,-115,67],[-115,-1,-115,-1,-115,-1],[-270,-1,-270,-1,-270,-1],[-270,57,-270,57,-270,57],[-313,100,-313,100,-313,100],[-342,100,-342,100,-342,100],[-342,86,-342,86,-342,86],[-327,86,-327,86,-327,86],[-299,57,-299,57,-299,57],[-299,-1,-299,-1,-299,-1],[-327,-1,-327,-1,-327,-1],[-327,57,-327,57,-327,57],[-371,100,-371,100,-371,100],[-400,100,-400,100,-400,100],[-400,86,-400,86,-400,86],[-385,86,-385,86,-385,86],[-356,57,-356,57,-356,57],[-356,-1,-356,-1,-356,-1],[-371,-15,-371,-15,-371,-15],[-385,-102,-385,-102,-385,-102]]],[[[0,0,-43,0,0,0],[-43,86,-86,86,0,86],[-86,0,-129,0,-43,0],[-129,86,-172,86,-86,86],[-172,0,-214,0,-129,0],[-214,86,-257,86,-172,86],[-257,0,-300,0,-214,0],[-300,86,-343,86,-257,86],[-343,0,-386,0,-300,0],[-386,-129,-386,-129,-386,-129]]],[[[0,0,0,0,0,0],[-10,29,-10,29,1,15],[-51,80,-51,80,-19,76],[-51,124,-44,125,-51,124],[-39,140,-39,140,-39,132],[-72,140,-72,132,-72,140],[-60,124,-60,124,-67,125],[-60,80,-88,77,-60,80],[-99,48,-122,48,-77,48],[-133,79,-133,79,-108,74],[-133,124,-126,125,-133,124],[-121,140,-121,140,-121,132],[-154,140,-154,132,-154,140],[-142,124,-142,124,-149,125],[-142,80,-174,81,-142,80],[-184,48,-199,48,-168,48],[-221,80,-221,80,-193,77],[-221,124,-213,125,-221,124],[-208,140,-208,140,-208,132],[-242,140,-242,132,-242,140],[-229,124,-229,124,-236,125],[-229,80,-257,77,-229,80],[-263,48,-288,48,-238,48],[-303,80,-303,80,-278,77],[-303,124,-296,125,-303,124],[-290,140,-290,140,-290,132],[-324,140,-324,132,-324,140],[-311,124,-311,124,-318,125],[-311,80,-341,75,-311,80],[-351,28,-378,-7,-351,28],[-384,-83,-384,-83,-384,-83]]],[[[0,0,-11,31,0,0],[-36,41,-36,41,-36,41],[-34,89,-34,89,-34,89],[18,94,18,94,-6,95],[43,100,43,100,27,100],[44,119,44,119,44,119],[35,120,40,121,38,117],[44,125,44,125,44,125],[49,154,49,154,49,154],[12,122,12,122,12,150],[-53,118,-64,110,-44,124],[-85,58,-85,58,-81,80],[-92,61,-92,61,-92,61],[-107,108,-107,108,-107,108],[-62,131,-62,131,-87,127],[-44,146,-44,146,-58,137],[-49,163,-49,163,-49,163],[-57,161,-54,164,-52,159],[-52,169,-52,169,-52,167],[-59,193,-59,193,-59,193],[-80,157,-80,157,-88,184],[-143,127,-147,122,-133,141],[-143,65,-143,65,-146,88],[-238,49,-238,49,-216,57],[-238,110,-248,125,-234,104],[-302,139,-302,139,-302,139],[-325,148,-325,148,-315,138],[-339,137,-339,137,-339,137],[-334,130,-338,132,-334,136],[-343,132,-343,132,-341,133],[-363,116,-363,116,-363,116],[-319,113,-301,111,-341,95],[-274,91,-274,91,-274,91],[-287,37,-287,37,-287,37],[-294,34,-294,34,-294,34],[-329,100,-338,105,-319,96],[-393,103,-393,103,-393,103],[-420,105,-420,105,-406,99],[-428,88,-428,88,-428,88],[-420,84,-425,85,-422,88],[-431,83,-431,83,-431,83],[-446,58,-446,58,-446,58],[-398,75,-381,73,-410,49],[-347,70,-347,70,-347,70],[-343,20,-385,-12,-343,20],[-384,-69,-384,-69,-384,-69]]],[[[0,0,0,0,0,0],[-30,24,-30,24,-4,25],[-25,116,-25,116,9,118],[-68,116,-68,116,-68,116],[-45,93,-45,93,-67,93],[-86,23,-86,23,-86,23],[-107,24,-107,24,-107,24],[-102,116,-102,116,-68,118],[-145,116,-145,116,-145,116],[-122,93,-122,93,-144,93],[-163,23,-163,23,-163,23],[-206,24,-206,24,-206,24],[-201,116,-201,116,-167,118],[-244,116,-244,116,-244,116],[-221,93,-221,93,-243,93],[-262,23,-262,23,-262,23],[-273,24,-273,24,-273,24],[-267,116,-267,116,-234,118],[-310,116,-310,116,-310,116],[-288,93,-288,93,-309,93],[-329,23,-384,14,-329,23],[-385,-79,-385,-79,-385,-79]]],[[[0,0,0,0,0,0],[-38,38,-38,38,-38,38],[-77,0,-77,0,-77,0],[-115,38,-115,38,-115,38],[-154,0,-154,0,-154,0],[-192,38,-192,38,-192,38],[-230,0,-230,0,-230,0],[-269,38,-269,38,-269,38],[-307,0,-307,0,-307,0],[-346,38,-346,38,-346,38],[-384,0,-384,0,-384,0],[-384,-134,-384,-134,-384,-134]]],[[[0,0,0,0,0,0],[-28,20,-28,20,-2,17],[-26,87,-26,87,-26,87],[-89,87,-89,87,-89,87],[-82,72,-82,72,-86,74],[-91,23,-91,23,-91,23],[-101,23,-101,23,-101,23],[-100,87,-100,87,-100,87],[-165,87,-165,87,-165,87],[-156,72,-156,72,-164,75],[-166,22,-166,22,-166,22],[-204,23,-204,23,-204,23],[-197,55,-197,55,-197,55],[-217,87,-217,87,-217,87],[-274,87,-274,87,-274,87],[-263,74,-263,74,-274,74],[-248,51,-248,51,-248,51],[-255,24,-255,24,-255,24],[-264,24,-264,24,-264,24],[-264,51,-264,51,-264,51],[-290,87,-290,87,-290,87],[-347,87,-347,87,-347,87],[-333,71,-333,71,-346,73],[-319,52,-319,52,-319,52],[-323,23,-374,-8,-323,23],[-384,-83,-384,-83,-384,-83]]],[[[0,0,0,0,0,0],[0,19,0,19,0,19],[0,35,0,35,0,35],[-18,35,-18,35,-18,35],[-18,18,-18,18,-18,18],[-35,18,-35,18,-35,18],[-35,35,-35,35,-35,35],[-53,35,-53,35,-53,35],[-53,18,-53,18,-53,18],[-70,18,-70,18,-70,18],[-70,35,-70,35,-70,35],[-88,35,-88,35,-88,35],[-88,18,-88,18,-88,18],[-106,18,-106,18,-106,18],[-106,35,-106,35,-106,35],[-123,35,-123,35,-123,35],[-123,18,-123,18,-123,18],[-141,18,-141,18,-141,18],[-141,35,-141,35,-141,35],[-158,35,-158,35,-158,35],[-158,18,-158,18,-158,18],[-176,18,-176,18,-176,18],[-176,35,-176,35,-176,35],[-194,35,-194,35,-194,35],[-194,18,-194,18,-194,18],[-211,18,-211,18,-211,18],[-211,35,-211,35,-211,35],[-229,35,-229,35,-229,35],[-229,18,-229,18,-229,18],[-246,18,-246,18,-246,18],[-246,35,-246,35,-246,35],[-264,35,-264,35,-264,35],[-264,18,-264,18,-264,18],[-282,18,-282,18,-282,18],[-282,35,-282,35,-282,35],[-299,35,-299,35,-299,35],[-299,18,-299,18,-299,18],[-317,18,-317,18,-317,18],[-317,35,-317,35,-317,35],[-334,35,-334,35,-334,35],[-334,18,-334,18,-334,18],[-352,18,-352,18,-352,18],[-352,35,-352,35,-352,35],[-370,35,-370,35,-370,35],[-370,18,-370,18,-370,18],[-384,-96,-384,-96,-384,-96]]],[[[0,0,0,0,0,0],[-86,61,-92,62,-17,45],[-82,80,-75,97,-89,65],[-77,121,-77,121,-70,117],[-106,121,-110,121,-106,121],[-107,112,-102,109,-115,116],[-126,69,-127,68,-120,78],[-133,70,-130,77,-133,69],[-126,89,-117,117,-127,85],[-124,121,-124,121,-124,121],[-156,121,-156,121,-156,121],[-155,113,-152,106,-163,117],[-170,72,-181,73,-163,82],[-200,72,-206,99,-189,73],[-217,121,-217,121,-212,117],[-246,121,-246,121,-246,121],[-242,112,-242,112,-248,114],[-235,76,-235,73,-236,87],[-240,69,-245,68,-235,70],[-247,75,-254,110,-247,72],[-261,121,-261,121,-257,118],[-289,121,-289,121,-289,121],[-285,112,-281,100,-292,116],[-278,63,-379,30,-277,82],[-384,-86,-384,-86,-384,-86]]],[[[0,0,0,0,0,0],[-64,32,-72,48,-21,18],[-63,86,-53,96,-77,70],[-24,97,-17,95,-37,101],[-3,71,-2,60,-6,89],[-18,50,-25,47,-10,53],[-42,57,-46,63,-36,47],[-41,70,-38,74,-42,69],[-29,75,-26,75,-33,77],[-25,72,-26,71,-25,73],[-27,69,-31,69,-26,69],[-34,62,-34,58,-34,66],[-27,55,-19,56,-31,55],[-12,69,-10,78,-13,61],[-24,89,-33,92,-15,85],[-52,79,-59,70,-45,88],[-54,50,-44,34,-60,59],[-13,37,24,50,-26,32],[-20,110,-39,116,15,100],[-73,95,-89,78,-60,110],[-81,37,-103,43,-88,56],[-160,49,-204,102,-129,47],[-108,98,-101,79,-125,144],[-142,74,-150,82,-126,60],[-133,95,-131,95,-141,96],[-129,93,-129,92,-129,94],[-130,90,-139,87,-130,90],[-126,77,-119,79,-135,74],[-115,94,-116,102,-114,86],[-132,109,-142,110,-123,109],[-157,93,-169,63,-152,104],[-109,62,-78,83,-132,45],[-132,131,-151,133,-95,129],[-181,103,-191,84,-172,121],[-177,49,-187,49,-187,65],[-208,48,-221,47,-197,49],[-246,43,-305,81,-234,45],[-211,106,-199,89,-244,147],[-238,75,-244,78,-220,65],[-243,87,-243,91,-244,85],[-235,97,-233,98,-240,96],[-231,95,-230,94,-231,97],[-231,93,-239,88,-230,93],[-224,81,-217,84,-232,76],[-217,100,-220,108,-215,93],[-237,111,-247,109,-228,113],[-257,89,-259,78,-255,101],[-245,62,-228,54,-254,67],[-204,70,-194,81,-213,59],[-200,115,-209,126,-189,100],[-235,133,-258,133,-222,133],[-283,93,-289,70,-278,115],[-263,38,-286,32,-278,51],[-320,11,-339,15,-305,22],[-364,52,-365,66,-363,28],[-344,87,-338,90,-357,80],[-312,83,-303,76,-325,94],[-307,58,-310,51,-303,65],[-330,46,-340,48,-318,43],[-333,68,-330,69,-340,65],[-328,68,-327,67,-329,69],[-327,65,-330,62,-327,66],[-327,55,-325,52,-330,58],[-317,55,-312,61,-320,52],[-316,76,-321,83,-312,69],[-338,81,-347,77,-330,85],[-352,55,-351,43,-353,66],[-333,32,-298,24,-343,35],[-303,94,-318,105,-275,72],[-351,99,-368,91,-335,107],[-378,51,-377,23,-379,71],[-333,0,-377,-39,-355,7],[-384,-87,-384,-87,-385,-88]]],[[[0,0,-19,36,0,0],[-48,24,-48,24,-38,14],[-23,69,-7,85,-45,47],[-18,103,-27,128,-12,86],[-22,161,-18,164,-40,147],[-38,161,-36,151,-39,168],[-89,165,-89,165,-68,153],[-46,146,-40,151,-64,130],[-33,82,-32,74,-34,91],[-122,33,-122,33,-103,89],[-104,69,-88,85,-125,47],[-99,103,-107,128,-92,86],[-103,161,-99,164,-121,147],[-119,161,-117,151,-120,168],[-170,165,-170,165,-149,153],[-127,146,-121,151,-145,130],[-114,82,-112,74,-115,91],[-210,29,-210,29,-195,91],[-261,3,-177,-7,-251,21],[-258,40,-247,42,-199,52],[-226,64,-232,74,-221,55],[-276,64,-276,66,-261,67],[-256,86,-259,95,-252,76],[-301,85,-301,85,-301,85],[-277,118,-282,119,-273,116],[-311,103,-311,103,-311,103],[-288,149,-299,147,-277,151],[-320,117,-320,117,-320,117],[-311,150,-316,150,-307,150],[-324,130,-324,130,-324,130],[-324,160,-335,160,-314,160],[-339,105,-339,105,-339,105],[-362,146,-369,142,-356,150],[-347,84,-336,49,-349,90],[-326,31,-326,31,-328,40],[-340,34,-340,34,-320,43],[-331,67,-338,68,-324,65],[-361,52,-361,52,-361,52],[-357,85,-361,89,-353,81],[-382,55,-382,55,-382,55],[-379,99,-384,98,-374,100],[-400,66,-400,66,-400,66],[-407,120,-415,111,-398,128],[-416,74,-416,74,-416,74],[-427,107,-431,104,-423,110],[-427,82,-427,82,-427,82],[-446,107,-455,100,-437,113],[-428,56,-428,56,-428,56],[-464,82,-467,74,-460,89],[-421,31,-415,28,-426,35],[-378,2,-362,-1,-410,6],[-350,-16,-380,-49,-354,-11],[-384,-127,-384,-127,-384,-127]]],[[[0,0,0,0,0,0],[-24,34,-28,55,-20,14],[-4,88,-29,103,19,74],[-71,49,-89,42,-53,57],[-120,65,-124,79,-115,47],[-160,90,-176,79,-141,104],[-164,47,-187,43,-140,52],[-230,86,-228,125,-232,46],[-260,132,-281,119,-239,146],[-268,56,-270,42,-267,71],[-309,67,-319,88,-300,47],[-381,106,-407,84,-355,128],[-342,23,-337,-8,-347,54],[-373,-36,-387,-70,-360,-2],[-384,-102,-384,-102,-384,-102]]],[[[0,0,0,0,0,0],[-16,64,-16,64,-16,64],[4,113,4,113,4,113],[-56,135,-56,135,-56,135],[-80,64,-80,64,-80,64],[-96,64,-96,64,-96,64],[-120,135,-120,135,-120,135],[-180,113,-180,113,-180,113],[-160,64,-160,64,-160,64],[-224,64,-224,64,-224,64],[-204,113,-204,113,-204,113],[-264,135,-264,135,-264,135],[-288,64,-288,64,-288,64],[-304,64,-304,64,-304,64],[-328,135,-328,135,-328,135],[-388,113,-388,113,-388,113],[-368,64,-368,64,-368,64],[-384,0,-384,0,-384,0],[-400,-88,-400,-88,-400,-88]]],[[[0,0,0,0,0,0],[0,94,0,105,0,94],[-28,111,-41,111,-14,111],[-55,96,-55,96,-55,106],[-55,41,-55,41,-55,41],[-92,41,-92,41,-92,41],[-92,96,-92,118,-92,96],[-147,96,-147,96,-147,118],[-147,41,-147,41,-147,41],[-221,41,-221,41,-221,41],[-221,96,-221,117,-221,96],[-276,96,-276,96,-276,117],[-276,41,-276,41,-276,41],[-313,41,-313,41,-313,41],[-313,96,-313,118,-313,96],[-368,96,-368,96,-368,118],[-368,0,-368,0,-368,0],[-385,-96,-385,-96,-385,-96]]],[[[0,0,0,0,0,0],[-29,33,-29,33,-1,29],[-29,103,-29,103,-29,103],[-101,103,-101,103,-101,103],[-101,74,-101,74,-101,74],[-77,74,-77,74,-77,74],[-77,31,-77,31,-77,31],[-112,31,-112,31,-112,31],[-112,103,-112,103,-112,103],[-184,103,-184,103,-184,103],[-184,74,-184,74,-184,74],[-160,74,-160,74,-160,74],[-160,31,-160,31,-160,31],[-201,31,-201,31,-201,31],[-201,103,-201,103,-201,103],[-273,103,-273,103,-273,103],[-273,74,-273,74,-273,74],[-249,74,-249,74,-249,74],[-249,31,-249,31,-249,31],[-283,31,-283,31,-283,31],[-283,103,-283,103,-283,103],[-355,103,-355,103,-355,103],[-355,74,-355,74,-355,74],[-331,74,-331,74,-331,74],[-331,31,-380,5,-331,31],[-384,-78,-384,-78,-384,-78]]],[[[0,0,-7,39,0,0],[58,82,78,85,19,75],[111,69,111,69,97,80],[126,90,84,120,126,90],[-8,67,-15,58,21,110],[-23,37,-60,51,-23,48],[-64,129,-57,147,-78,92],[-27,169,-27,169,-43,161],[-37,191,-114,157,-37,191],[-32,14,-32,14,-112,45],[-186,-18,-200,-4,-186,-18],[-207,33,-207,51,-207,14],[-186,83,-172,97,-200,69],[-136,104,-136,104,-154,104],[-136,129,-202,129,-136,129],[-226,0,-290,0,-249,62],[-277,121,-277,121,-321,77],[-294,139,-354,79,-294,139],[-226,-25,-226,-25,-312,-25],[-222,-57,-227,-71,-217,-44],[-381,-167,-381,-167,-381,-167]]],[[[0,0,-16,27,0,0],[-86,50,-90,51,-53,47],[-93,58,-92,61,-93,53],[-85,77,-85,90,-85,73],[-108,92,-121,92,-95,92],[-131,77,-131,73,-131,90],[-122,58,-122,54,-124,61],[-130,50,-130,50,-125,51],[-133,50,-137,51,-133,50],[-141,58,-139,61,-140,53],[-132,77,-132,90,-132,73],[-155,92,-168,92,-143,92],[-178,77,-178,73,-178,90],[-170,58,-170,54,-172,61],[-177,50,-177,50,-173,52],[-187,50,-191,52,-187,50],[-194,58,-192,61,-194,54],[-185,77,-185,90,-185,73],[-209,92,-221,92,-196,92],[-232,77,-232,73,-232,90],[-223,58,-224,54,-225,61],[-231,50,-231,50,-226,51],[-234,50,-238,51,-234,50],[-242,58,-240,61,-241,54],[-233,77,-233,90,-233,73],[-256,92,-269,92,-243,92],[-279,77,-279,73,-279,90],[-270,58,-271,53,-272,61],[-278,50,-385,50,-273,51],[-384,-78,-384,-78,-384,-78]]],[[[0,0,-18,33,0,0],[-40,31,-40,31,-40,31],[-58,66,-58,66,-58,66],[-26,84,-37,108,-26,84],[-34,168,-45,166,-36,135],[-64,168,-64,168,-55,162],[-86,162,-86,162,-86,162],[-94,168,-94,168,-94,168],[-94,145,-83,131,-105,159],[-56,142,-56,142,-56,142],[-72,96,-80,85,-64,108],[-121,83,-142,62,-101,104],[-150,31,-150,31,-150,31],[-149,70,-149,70,-149,70],[-118,95,-129,115,-118,95],[-125,168,-135,166,-130,141],[-155,168,-155,168,-145,162],[-177,162,-177,162,-177,162],[-184,168,-184,168,-184,168],[-184,145,-173,131,-195,159],[-146,142,-146,142,-146,142],[-162,96,-170,85,-154,108],[-212,83,-233,62,-191,104],[-243,37,-254,41,-243,37],[-261,99,-261,99,-251,77],[-270,116,-270,116,-270,116],[-254,125,-260,137,-254,125],[-258,167,-263,166,-259,151],[-273,167,-273,167,-269,164],[-284,164,-284,164,-284,164],[-288,167,-288,167,-288,167],[-288,156,-283,149,-294,163],[-269,154,-269,154,-269,154],[-277,131,-281,126,-273,137],[-302,125,-312,114,-292,135],[-316,98,-316,98,-316,98],[-316,118,-316,118,-316,118],[-300,131,-305,141,-300,131],[-304,167,-309,166,-306,154],[-318,167,-318,167,-314,164],[-330,164,-330,164,-330,164],[-333,167,-333,167,-333,167],[-333,156,-328,149,-339,163],[-314,154,-314,154,-314,154],[-322,131,-326,126,-318,137],[-347,125,-357,114,-337,135],[-364,98,-390,63,-364,98],[-384,-61,-384,-61,-384,-61]]],[[[0,0,0,0,0,0],[-21,25,-21,25,1,22],[-48,51,-48,62,-48,33],[-5,87,2,93,-19,74],[3,109,3,109,6,97],[-31,109,-35,107,-31,109],[-18,94,-18,94,-31,87],[-43,74,-78,55,-27,83],[-67,30,-72,27,-62,33],[-93,54,-92,69,-93,36],[-56,88,-51,94,-69,74],[-49,109,-49,109,-47,99],[-83,109,-87,107,-83,109],[-70,94,-70,94,-82,87],[-90,77,-116,62,-74,86],[-107,31,-149,43,-109,49],[-266,29,-295,31,-228,40],[-304,95,-299,104,-311,85],[-303,110,-303,110,-302,109],[-323,110,-323,110,-323,110],[-320,96,-320,96,-326,100],[-302,32,-295,18,-325,74],[-326,31,-356,53,-313,21],[-351,95,-347,101,-355,89],[-350,110,-350,110,-347,105],[-372,110,-372,110,-372,110],[-367,95,-367,95,-373,100],[-334,17,-383,10,-373,46],[-385,-89,-385,-89,-385,-89]]],[[[0,0,-8,16,0,0],[-21,23,-27,42,-21,23],[-48,62,-21,60,-68,64],[-15,77,-13,78,-28,73],[3,90,9,76,-5,83],[26,86,0,81,21,73],[-3,113,-42,119,18,109],[-35,149,-48,129,-35,149],[-1,100,-1,100,-43,98],[-52,78,-89,81,-29,76],[-99,38,-99,38,-98,41],[-119,60,-91,86,-128,52],[-119,107,-119,110,-120,93],[-131,138,-117,138,-125,129],[-117,158,-123,132,-106,150],[-160,148,-176,112,-153,163],[-205,129,-196,109,-205,129],[-145,139,-145,139,-161,104],[-133,76,-164,68,-110,82],[-172,34,-205,32,-171,37],[-226,5,-226,5,-207,17],[-245,53,-247,70,-243,37],[-293,36,-307,27,-277,48],[-250,144,-281,127,-300,80],[-317,51,-324,74,-317,84],[-270,153,-298,141,-319,116],[-339,49,-339,49,-347,118],[-317,147,-333,137,-362,91],[-333,4,-310,-18,-405,72],[-253,43,-252,36,-257,67],[-271,-9,-271,-9,-271,-9],[-280,-12,-280,-12,-280,-12],[-314,30,-327,50,-305,16],[-384,14,-398,18,-361,8],[-360,131,-393,105,-403,54],[-415,23,-424,52,-421,64],[-382,142,-413,125,-425,86],[-436,21,-436,21,-446,88],[-422,134,-422,134,-460,64],[-461,48,-461,25,-463,94],[-419,-21,-387,-43,-450,1],[-323,21,-320,14,-331,39],[-320,-25,-362,-38,-320,-25],[-381,-108,-381,-108,-381,-108]],[[0,0,-12,24,0,0],[-32,26,-32,26,-32,26],[-54,63,-20,82,-87,44],[-38,115,-36,118,-44,103],[-36,138,-22,134,-33,128],[-19,154,-30,133,-10,144],[-61,151,-89,123,-50,162],[-114,150,-114,129,-114,150],[-50,139,-50,139,-74,110],[-60,76,-94,64,-39,84],[-96,38,-96,38,-95,41],[-118,61,-83,78,-128,56],[-105,114,-103,117,-112,102],[-107,134,-92,130,-103,124],[-88,151,-100,128,-79,140],[-132,147,-161,121,-120,158],[-189,149,-189,127,-189,149],[-121,135,-121,135,-144,105],[-125,76,-158,64,-103,84],[-172,34,-205,32,-171,37],[-226,5,-226,5,-207,17],[-245,53,-247,70,-243,37],[-293,36,-307,27,-277,48],[-250,144,-281,127,-300,80],[-317,51,-324,74,-317,84],[-270,153,-298,141,-319,116],[-339,49,-339,49,-347,118],[-317,147,-333,137,-362,91],[-333,4,-310,-18,-405,72],[-253,43,-252,36,-257,67],[-271,-9,-271,-9,-271,-9],[-280,-12,-280,-12,-280,-12],[-314,30,-327,50,-305,16],[-384,14,-398,18,-361,8],[-360,131,-393,105,-403,54],[-415,23,-424,52,-421,64],[-382,142,-413,125,-425,86],[-436,21,-436,21,-446,88],[-422,134,-422,134,-460,64],[-461,48,-461,25,-463,94],[-419,-21,-387,-43,-450,1],[-323,21,-320,14,-331,39],[-320,-25,-362,-38,-320,-25],[-381,-108,-381,-108,-381,-108]]],[[[0,0,0,30,0,0],[-2,56,-2,73,-2,38],[-53,74,-81,74,-25,74],[-108,56,-108,39,-108,73],[-53,24,-53,24,-91,9],[-53,-1,-53,-1,-54,21],[-113,-1,-113,29,-113,-1],[-115,56,-115,73,-115,38],[-166,74,-194,74,-138,74],[-220,56,-220,39,-220,73],[-166,24,-166,24,-204,6],[-166,-1,-199,-32,-167,21],[-303,-83,-316,-77,-255,-24],[-326,-62,-332,-54,-320,-70],[-341,-65,-346,-62,-343,-56],[-350,-75,-355,-73,-354,-67],[-353,-88,-343,-101,-360,-78],[-326,-110,-337,-123,-326,-110],[-345,-133,-359,-134,-345,-133],[-377,-123,-384,-117,-368,-130],[-390,-130,-395,-128,-395,-121],[-395,-141,-400,-141,-401,-135],[-394,-155,-382,-165,-404,-146],[-362,-168,-381,-202,-362,-168],[-385,-226,-385,-226,-385,-226]]],[[[0,0,0,0,0,0],[-26,79,-40,93,0,52],[-68,105,-89,109,-54,102],[-131,79,-167,43,-111,101],[-236,79,-252,97,-202,42],[-287,106,-305,106,-270,106],[-341,79,-367,52,-324,97],[-367,0,-367,-54,-367,0],[-386,-108,-386,-108,-386,-108]]],[[[0,0,0,0,0,0],[-16,24,-16,24,-5,10],[-56,126,-56,126,-56,126],[-83,126,-83,126,-83,126],[-85,28,-85,28,-85,28],[-102,28,-102,28,-102,28],[-103,126,-103,126,-103,126],[-131,126,-131,126,-131,126],[-169,28,-169,28,-169,28],[-202,28,-202,28,-202,28],[-221,126,-221,126,-221,126],[-247,126,-247,126,-247,126],[-269,28,-269,28,-269,28],[-286,28,-286,28,-286,28],[-299,126,-299,126,-299,126],[-326,126,-326,126,-326,126],[-361,17,-380,8,-361,17],[-384,-88,-384,-88,-384,-88]]],[[[0,0,0,0,0,0],[-24,65,-47,65,-1,65],[-48,16,-48,16,-48,16],[-72,78,-96,78,-48,78],[-96,32,-96,32,-96,32],[-120,88,-146,88,-94,88],[-144,48,-144,48,-144,48],[-168,93,-189,93,-147,93],[-192,64,-192,64,-192,64],[-216,93,-237,93,-195,93],[-240,48,-240,48,-240,48],[-264,88,-288,88,-240,88],[-288,32,-288,32,-288,32],[-312,78,-333,78,-291,78],[-336,16,-336,16,-336,16],[-360,65,-386,65,-334,65],[-384,0,-384,0,-384,0],[-386,-79,-386,-79,-386,-79]]],[[[0,0,0,0,0,0],[-20,24,-20,24,-5,12],[-21,99,-21,99,-21,99],[-97,99,-97,99,-97,99],[-97,69,-85,56,-109,82],[-72,69,-58,53,-85,85],[-72,24,-80,12,-64,37],[-108,24,-117,38,-98,10],[-108,99,-108,99,-108,99],[-184,99,-184,99,-184,99],[-184,69,-174,56,-193,83],[-158,69,-145,55,-172,83],[-158,24,-164,13,-152,36],[-202,24,-209,36,-195,13],[-202,99,-202,99,-202,99],[-278,99,-278,99,-278,99],[-278,69,-263,57,-293,81],[-252,69,-241,61,-264,77],[-252,24,-259,14,-246,35],[-288,24,-296,35,-279,14],[-288,99,-288,99,-288,99],[-363,99,-363,99,-363,99],[-363,69,-355,58,-372,80],[-338,69,-328,60,-348,78],[-338,24,-387,-5,-338,24],[-384,-89,-384,-89,-384,-89]]],[[[0,0,-7,11,0,0],[-16,14,-22,26,-16,14],[-3,44,-19,53,12,35],[-20,70,-20,70,-20,70],[-67,70,-67,70,-67,70],[-60,57,-59,57,-69,61],[-31,53,-23,50,-39,56],[-23,41,-39,35,-18,43],[-60,16,-60,16,-46,35],[-81,14,-74,30,-70,17],[-68,44,-83,53,-52,35],[-84,70,-84,70,-84,70],[-131,70,-131,70,-131,70],[-125,57,-124,57,-134,61],[-96,53,-88,50,-103,56],[-87,41,-104,34,-83,43],[-126,14,-141,4,-114,34],[-167,-10,-162,6,-145,-6],[-154,27,-177,42,-132,13],[-178,70,-178,70,-178,70],[-245,70,-245,70,-245,70],[-236,50,-235,49,-249,56],[-194,43,-182,38,-205,47],[-182,23,-206,12,-175,27],[-236,-19,-236,-19,-212,20],[-265,-21,-258,4,-251,-15],[-246,27,-269,42,-224,13],[-270,70,-270,70,-270,70],[-338,70,-338,70,-338,70],[-328,50,-327,49,-341,56],[-286,43,-275,38,-297,47],[-274,23,-299,12,-267,27],[-329,-21,-341,-38,-305,11],[-349,-52,-380,-74,-340,-45],[-384,-127,-384,-127,-384,-127]]],[[[0,0,0,0,0,0],[-16,16,-32,16,0,16],[-32,0,-32,0,-32,0],[-48,16,-64,16,-32,16],[-64,0,-64,0,-64,0],[-80,16,-96,16,-64,16],[-96,0,-96,0,-96,0],[-112,16,-128,16,-96,16],[-128,0,-128,0,-128,0],[-144,16,-160,16,-128,16],[-160,0,-160,0,-160,0],[-176,16,-192,16,-160,16],[-192,0,-192,0,-192,0],[-208,16,-224,16,-192,16],[-224,0,-224,0,-224,0],[-240,16,-256,16,-224,16],[-256,0,-256,0,-256,0],[-272,16,-288,16,-256,16],[-288,0,-288,0,-288,0],[-304,16,-320,16,-288,16],[-320,0,-320,0,-320,0],[-336,16,-352,16,-320,16],[-352,0,-352,0,-352,0],[-368,16,-384,16,-352,16],[-384,0,-384,0,-384,0],[-416,-128,-416,-128,-416,-128]]],[[[0,0,-6,7,0,0],[-20,7,-20,7,-20,7],[-46,17,-46,33,-46,0],[-19,27,-19,27,-19,27],[-7,102,-7,102,-7,102],[-58,102,-58,102,-58,102],[-59,91,-51,80,-67,101],[-21,89,-21,89,-21,89],[-34,40,-40,32,-28,49],[-64,24,-79,8,-49,40],[-80,5,-80,5,-80,5],[-110,17,-110,32,-110,1],[-83,27,-83,27,-83,27],[-72,102,-72,102,-72,102],[-122,102,-122,102,-122,102],[-123,91,-115,80,-131,101],[-86,89,-86,89,-86,89],[-98,40,-104,32,-92,49],[-130,24,-144,8,-115,40],[-146,7,-146,7,-146,7],[-257,4,-257,4,-226,13],[-266,38,-268,44,-263,31],[-315,67,-317,79,-290,62],[-359,92,-359,92,-335,86],[-363,103,-363,103,-363,103],[-404,103,-399,88,-404,103],[-363,79,-343,74,-377,83],[-325,52,-307,51,-330,71],[-283,32,-283,32,-285,37],[-281,2,-281,2,-281,2],[-303,-2,-303,-2,-303,-2],[-311,30,-317,40,-308,24],[-361,57,-363,70,-346,56],[-428,92,-428,92,-403,86],[-431,103,-431,103,-431,103],[-473,103,-468,88,-473,103],[-431,76,-411,71,-444,80],[-371,42,-353,41,-376,61],[-330,25,-330,25,-332,30],[-328,-5,-366,-5,-328,-5],[-384,-97,-384,-97,-384,-97]]],[[[0,0,1,15,0,0],[-8,15,-58,56,-8,15],[-1,81,-2,88,7,33],[-9,107,-9,107,-4,97],[-25,107,-25,107,-25,107],[-30,101,-30,101,-30,101],[-36,107,-36,107,-36,107],[-50,107,-50,107,-50,107],[-51,101,-51,101,-51,101],[-62,107,-62,107,-62,107],[-78,107,-78,86,-78,107],[-54,79,-93,80,-40,79],[-100,21,-100,21,-100,21],[-105,21,-149,58,-105,21],[-95,78,-96,86,-90,43],[-103,107,-103,107,-98,96],[-120,107,-120,107,-120,107],[-124,101,-124,101,-124,101],[-132,107,-132,107,-132,107],[-146,107,-146,107,-146,107],[-147,101,-147,101,-147,101],[-157,107,-157,107,-157,107],[-173,107,-173,85,-173,107],[-149,79,-187,81,-134,78],[-199,15,-202,14,-199,15],[-210,9,-230,31,-206,12],[-225,78,-228,99,-224,67],[-237,107,-237,107,-237,107],[-270,107,-277,91,-262,91],[-305,107,-305,107,-305,107],[-291,76,-299,41,-288,91],[-276,2,-280,4,-276,2],[-288,1,-314,29,-285,3],[-309,78,-311,99,-307,67],[-320,107,-320,107,-320,107],[-354,107,-360,91,-346,91],[-388,107,-388,107,-388,107],[-375,76,-382,41,-371,91],[-359,2,-354,-28,-359,2],[-384,-106,-384,-106,-384,-106]]],[[[0,0,-12,77,0,0],[-118,64,-118,64,-93,62],[-135,85,-125,91,-150,77],[-126,107,-126,112,-127,99],[-125,117,-133,112,-122,110],[-137,116,-144,111,-132,118],[-150,116,-150,113,-150,116],[-133,110,-133,110,-145,104],[-138,93,-156,89,-127,95],[-146,63,-146,63,-146,65],[-166,85,-156,91,-181,76],[-157,107,-157,111,-158,98],[-156,116,-164,112,-153,110],[-168,115,-175,111,-163,118],[-181,116,-181,112,-181,116],[-164,109,-164,109,-176,103],[-169,93,-194,86,-158,95],[-177,63,-177,63,-176,64],[-319,9,-326,7,-275,46],[-322,20,-323,21,-319,18],[-328,15,-330,17,-327,14],[-326,22,-329,21,-326,22],[-332,16,-332,16,-331,20],[-332,24,-332,24,-332,24],[-336,13,-335,9,-337,17],[-327,3,-327,3,-327,3],[-333,-2,-341,-2,-333,-2],[-340,12,-342,13,-336,10],[-344,7,-346,9,-343,6],[-344,14,-347,13,-344,14],[-348,7,-348,7,-349,10],[-350,14,-350,14,-350,14],[-352,3,-350,-1,-354,8],[-341,-7,-385,-43,-341,-7],[-383,-104,-383,-104,-383,-104]]],[[[0,0,-1,18,0,0],[-60,101,-60,101,1,72],[-39,127,37,108,-100,142],[33,190,33,190,33,190],[18,197,5,193,30,202],[5,223,5,223,5,223],[-3,194,-4,177,-2,211],[13,183,13,183,13,183],[-17,143,-51,146,24,140],[-117,144,-117,144,-85,172],[-127,196,-102,254,-149,146],[-173,273,-173,273,-173,273],[-185,261,-184,248,-185,274],[-213,256,-213,256,-213,256],[-188,240,-172,235,-204,246],[-173,252,-173,252,-173,252],[-143,217,-148,181,-138,253],[-195,147,-195,147,-195,147],[-282,125,-282,125,-250,165],[-245,182,-240,240,-249,136],[-351,264,-377,255,-298,281],[-385,202,-385,185,-387,228],[-415,214,-421,165,-413,195],[-364,204,-366,216,-357,169],[-353,237,-333,256,-362,228],[-272,191,-271,155,-275,242],[-311,107,-316,102,-311,107],[-333,92,-333,92,-327,95],[-419,134,-476,152,-385,123],[-525,52,-523,25,-527,108],[-474,4,-457,2,-500,8],[-498,-23,-448,-53,-467,-26],[-472,24,-483,26,-427,16],[-499,44,-513,68,-493,34],[-435,110,-399,103,-489,121],[-353,73,-431,34,-353,73],[-379,-89,-379,-89,-379,-89]]],[[[0,0,0,0,0,0],[0,31,0,31,0,31],[-32,31,-32,31,-32,31],[-32,48,-32,48,-32,48],[-128,48,-128,48,-128,48],[-128,32,-128,32,-128,32],[-240,31,-240,31,-240,31],[-240,48,-240,48,-240,48],[-336,48,-336,48,-336,48],[-336,32,-336,32,-336,32],[-368,32,-368,32,-368,32],[-368,0,-368,0,-368,0],[-384,-128,-384,-128,-384,-128]]],[[[0,0,8,56,0,0],[-22,71,-22,71,-2,60],[-51,71,-51,71,-51,71],[-57,56,-46,44,-69,68],[-76,10,-77,9,-72,14],[-81,10,-77,47,-80,9],[-102,71,-102,71,-83,60],[-132,71,-132,71,-132,71],[-138,56,-130,47,-150,68],[-151,12,-167,11,-142,23],[-178,12,-175,47,-178,12],[-199,72,-199,72,-180,61],[-227,72,-227,72,-227,72],[-233,57,-223,47,-244,68],[-250,14,-256,15,-244,20],[-268,14,-262,40,-262,15],[-283,72,-283,72,-265,60],[-311,72,-311,72,-311,72],[-318,59,-306,49,-331,69],[-348,0,-396,-37,-348,0],[-385,-140,-385,-140,-385,-140]]],[[[0,0,0,0,0,0],[0,21,0,21,0,21],[-52,74,-52,74,-52,74],[-52,126,-52,126,-52,126],[-105,126,-105,126,-105,126],[-105,74,-105,74,-105,74],[-157,21,-157,21,-157,21],[-210,21,-210,21,-210,21],[-262,74,-262,74,-262,74],[-262,126,-262,126,-262,126],[-315,126,-315,126,-315,126],[-315,74,-315,74,-315,74],[-367,21,-367,21,-367,21],[-367,-31,-367,-31,-367,-31],[-392,-31,-392,-31,-392,-31],[-392,-62,-392,-62,-392,-62],[-367,-62,-367,-62,-367,-62],[-367,-81,-367,-81,-367,-81],[-392,-81,-392,-81,-392,-81],[-392,-112,-392,-112,-392,-112],[-367,-112,-367,-112,-367,-112],[-384,-175,-384,-175,-384,-175]]],[[[0,0,-7,36,0,0],[-32,46,-16,80,-45,13],[-25,130,-25,130,-60,77],[-58,130,-58,130,-58,130],[-59,110,-46,96,-72,124],[-63,69,-49,52,-78,87],[-75,37,-76,28,-74,69],[-114,48,-136,88,-105,31],[-114,130,-114,130,-114,130],[-153,130,-153,130,-153,130],[-144,106,-134,92,-154,121],[-149,71,-134,55,-164,86],[-156,42,-156,26,-156,63],[-218,45,-241,81,-207,28],[-218,130,-218,130,-218,130],[-257,130,-257,130,-257,130],[-248,110,-231,97,-264,123],[-251,74,-239,65,-263,83],[-279,31,-305,32,-257,30],[-317,65,-319,79,-315,48],[-312,130,-312,130,-312,130],[-351,130,-351,130,-351,130],[-339,104,-330,92,-349,117],[-344,59,-333,49,-355,69],[-343,19,-344,-55,-355,38],[-384,-86,-384,-86,-384,-86]]],[[[0,0,0,0,0,0],[0,93,0,93,0,93],[-9,93,-9,93,-9,93],[-19,0,-19,0,-19,0],[-34,0,-34,0,-34,0],[-39,93,-39,93,-39,93],[-48,93,-48,93,-48,93],[-53,0,-53,0,-53,0],[-317,0,-317,0,-317,0],[-316,93,-316,93,-316,93],[-326,93,-326,93,-326,93],[-336,0,-336,0,-336,0],[-353,0,-353,0,-353,0],[-361,93,-361,93,-361,93],[-370,93,-370,93,-370,93],[-371,0,-371,0,-371,0],[-384,-96,-384,-96,-384,-96]]],[[[0,0,-31,0,0,0],[-46,31,-72,31,-21,31],[-92,0,-123,0,-61,0],[-138,31,-164,31,-113,31],[-184,0,-215,0,-154,0],[-230,31,-256,31,-205,31],[-276,0,-307,0,-246,0],[-323,31,-348,31,-297,31],[-369,0,-399,0,-338,0],[-384,-112,-384,-112,-384,-112]]],[[[0,0,-17,19,0,0],[-33,14,-63,52,-33,14],[-11,73,-32,101,1,45],[-61,136,-89,141,-56,126],[-105,136,-105,136,-89,110],[-104,121,-96,103,-110,134],[-66,125,-66,125,-66,125],[-31,75,-35,70,-25,85],[-87,63,-107,65,-58,59],[-129,19,-156,71,-115,40],[-87,79,-108,107,-85,66],[-134,136,-162,141,-129,126],[-177,136,-177,136,-162,110],[-177,121,-169,103,-183,134],[-139,125,-139,125,-139,125],[-107,79,-113,69,-100,88],[-190,66,-207,49,-173,84],[-223,11,-223,11,-223,11],[-261,-24,-261,-24,-237,-8],[-244,38,-230,55,-280,-4],[-280,93,-278,116,-282,48],[-257,134,-257,134,-257,134],[-309,96,-311,54,-306,146],[-272,43,-272,43,-272,43],[-305,-26,-305,-26,-311,21],[-322,-26,-322,-26,-322,-26],[-306,38,-292,54,-341,-5],[-341,92,-340,115,-344,47],[-319,133,-319,133,-319,133],[-370,95,-373,53,-368,145],[-334,42,-334,42,-334,42],[-366,-29,-406,-46,-374,21],[-385,-120,-385,-120,-385,-120]]],[[[0,0,0,0,0,0],[-22,13,10,35,-4,10],[7,64,-2,77,16,52],[-64,87,-81,75,-49,98],[-62,62,-75,42,-53,75],[-76,21,-76,21,-75,33],[-90,24,-79,52,-90,24],[-102,89,-115,96,-89,81],[-174,79,-184,61,-165,96],[-161,58,-163,32,-159,72],[-151,24,-176,27,-150,28],[-217,20,-188,47,-190,28],[-196,78,-206,88,-185,67],[-269,88,-285,73,-256,101],[-263,63,-274,39,-257,77],[-274,19,-274,19,-276,31],[-290,18,-283,48,-290,18],[-310,89,-324,95,-295,84],[-380,71,-387,50,-373,88],[-364,51,-363,18,-364,66],[-345,10,-403,-5,-332,13],[-384,-91,-384,-91,-384,-91]]],[[[0,0,-28,25,0,0],[-58,14,-58,14,-58,14],[-42,30,-23,26,-64,36],[-12,56,-6,53,-28,63],[-7,66,-15,85,-3,59],[14,80,7,85,14,80],[-18,71,-25,74,-21,87],[-21,92,-41,91,-32,85],[-26,61,-26,61,-32,65],[-45,48,-69,68,-34,39],[-95,18,-95,18,-94,19],[-129,21,-145,36,-121,14],[-158,44,-147,60,-175,18],[-190,74,-194,81,-181,58],[-212,69,-210,21,-212,81],[-236,37,-227,24,-236,37],[-205,57,-200,47,-202,28],[-206,26,-176,29,-194,36],[-201,66,-201,66,-199,60],[-174,45,-201,20,-163,55],[-171,13,-171,13,-183,11],[-249,-57,-249,-57,-218,16],[-258,6,-254,16,-266,-12],[-332,4,-359,17,-310,-7],[-320,56,-320,56,-367,37],[-324,65,-324,65,-324,65],[-360,36,-360,36,-347,60],[-333,75,-333,75,-361,51],[-342,82,-342,82,-342,82],[-368,38,-368,38,-368,58],[-354,87,-354,87,-374,62],[-365,92,-365,92,-365,92],[-342,-4,-314,-16,-401,21],[-271,-2,-271,-2,-305,-12],[-274,-68,-274,-68,-258,-58],[-286,-73,-286,-73,-286,-73],[-349,-32,-354,-23,-338,-49],[-389,-95,-414,-110,-367,-83],[-449,-69,-449,-69,-433,-114],[-457,-73,-457,-73,-457,-73],[-431,-108,-431,-108,-453,-95],[-467,-82,-467,-82,-446,-109],[-474,-90,-474,-90,-474,-90],[-434,-115,-434,-115,-452,-115],[-479,-100,-479,-100,-456,-120],[-485,-111,-485,-111,-485,-111],[-387,-107,-362,-91,-441,-142],[-349,-47,-349,-47,-361,-81],[-313,-83,-358,-83,-305,-65],[-384,-180,-384,-180,-384,-180]]],[[[0,0,-7,4,0,0],[-19,11,-17,16,-13,8],[-14,27,-8,60,-15,21],[-63,99,-65,99,-30,92],[-68,99,-68,99,-66,99],[-68,158,-68,158,-68,158],[-98,158,-98,148,-98,158],[-82,143,-82,143,-92,144],[-82,99,-108,96,-82,99],[-135,49,-136,46,-130,76],[-136,39,-141,39,-136,42],[-154,39,-154,45,-148,39],[-157,56,-164,77,-155,51],[-201,96,-201,96,-181,91],[-201,158,-201,158,-201,158],[-232,158,-232,147,-232,158],[-215,143,-215,143,-225,143],[-215,97,-222,97,-215,97],[-236,94,-268,83,-229,96],[-273,15,-272,13,-284,47],[-271,10,-296,-2,-272,11],[-351,-59,-352,-58,-328,-26],[-355,-57,-363,-54,-354,-57],[-376,-66,-379,-74,-372,-58],[-368,-86,-369,-88,-375,-82],[-371,-93,-372,-92,-370,-90],[-375,-91,-383,-88,-373,-91],[-395,-102,-397,-110,-392,-93],[-384,-122,-383,-122,-393,-119],[-380,-122,-381,-129,-381,-122],[-382,-145,-382,-145,-382,-137],[-383,-185,-383,-185,-383,-185]]],[[[0,0,0,26,0,0],[-30,22,-30,22,-30,22],[-43,115,-66,115,-17,115],[-61,22,-61,22,-61,22],[-80,22,-80,22,-80,22],[-93,115,-116,115,-67,115],[-111,19,-111,19,-111,19],[-224,22,-224,22,-224,22],[-237,115,-261,115,-212,115],[-255,22,-255,22,-255,22],[-273,22,-273,22,-273,22],[-286,115,-309,115,-260,115],[-303,19,-384,18,-303,19],[-384,-113,-384,-113,-384,-113]]],[[[0,0,0,0,0,0],[0,16,0,16,0,16],[5,56,5,56,5,56],[-24,56,-24,56,-24,56],[-19,16,-19,16,-19,16],[-116,16,-116,16,-116,16],[-111,56,-111,56,-111,56],[-140,56,-140,56,-140,56],[-136,16,-136,16,-136,16],[-232,16,-232,16,-232,16],[-227,56,-227,56,-227,56],[-256,56,-256,56,-256,56],[-252,16,-252,16,-252,16],[-348,16,-348,16,-348,16],[-344,56,-344,56,-344,56],[-373,56,-373,56,-373,56],[-368,16,-368,16,-368,16],[-368,-3,-368,-3,-368,-3],[-386,-105,-386,-105,-386,-105]]],[[[0,0,0,0,0,0],[0,16,0,16,0,16],[-16,16,-16,16,-16,16],[-16,32,-16,32,-16,32],[-32,32,-32,32,-32,32],[-32,47,-32,47,-32,47],[-48,48,-48,48,-48,48],[-48,64,-48,64,-48,64],[-64,64,-64,64,-64,64],[-64,96,-64,96,-64,96],[-96,96,-96,96,-96,96],[-96,80,-96,80,-96,80],[-80,80,-80,80,-80,80],[-80,64,-80,64,-80,64],[-96,64,-96,64,-96,64],[-96,48,-96,48,-96,48],[-112,48,-112,48,-112,48],[-112,32,-112,32,-112,32],[-128,32,-128,32,-128,32],[-128,48,-128,48,-128,48],[-144,48,-144,48,-144,48],[-144,64,-144,64,-144,64],[-160,64,-160,64,-160,64],[-160,96,-160,96,-160,96],[-192,96,-192,96,-192,96],[-192,80,-192,80,-192,80],[-176,80,-176,80,-176,80],[-176,64,-176,64,-176,64],[-192,64,-192,64,-192,64],[-192,48,-192,48,-192,48],[-208,48,-208,48,-208,48],[-208,32,-208,32,-208,32],[-224,32,-224,32,-224,32],[-224,16,-224,16,-224,16],[-240,16,-240,16,-240,16],[-240,0,-240,0,-240,0],[-256,0,-256,0,-256,0],[-256,-16,-256,-16,-256,-16],[-272,-16,-272,-16,-272,-16],[-272,-32,-272,-32,-272,-32],[-288,-32,-288,-32,-288,-32],[-288,-48,-288,-48,-288,-48],[-304,-48,-304,-48,-304,-48],[-304,-16,-304,-16,-304,-16],[-320,-32,-320,-32,-320,-32],[-320,-48,-320,-48,-320,-48],[-336,-48,-336,-48,-336,-48],[-336,-16,-336,-16,-336,-16],[-352,-32,-352,-32,-352,-32],[-352,-48,-352,-48,-352,-48],[-368,-48,-368,-48,-368,-48],[-384,-144,-384,-144,-384,-144]]],[[[0,0,0,0,0,0],[-44,44,-44,44,-44,44],[-44,70,-44,70,-44,70],[-9,70,-9,70,-9,70],[-9,125,-9,125,-9,125],[-40,125,-40,125,-40,125],[-33,116,-33,116,-33,116],[-33,96,-33,96,-33,96],[-83,96,-83,96,-83,96],[-83,41,-83,41,-83,41],[-130,41,-130,41,-130,41],[-130,67,-130,67,-130,67],[-96,67,-96,67,-96,67],[-96,125,-96,125,-96,125],[-129,125,-129,125,-129,125],[-120,115,-120,115,-120,115],[-120,92,-120,92,-120,92],[-165,92,-165,92,-165,92],[-165,38,-165,38,-165,38],[-204,38,-204,38,-204,38],[-204,86,-204,86,-204,86],[-240,86,-240,86,-240,86],[-240,125,-240,125,-240,125],[-282,125,-282,125,-282,125],[-273,115,-273,115,-273,115],[-273,57,-273,57,-273,57],[-244,57,-244,57,-244,57],[-244,36,-244,36,-244,36],[-285,36,-285,36,-285,36],[-285,83,-285,83,-285,83],[-321,83,-321,83,-321,83],[-321,125,-321,125,-321,125],[-364,125,-364,125,-364,125],[-353,114,-353,114,-353,114],[-353,54,-353,54,-353,54],[-322,54,-322,54,-322,54],[-322,33,-322,33,-322,33],[-384,-75,-384,-75,-384,-75]]],[[[0,0,-4,9,0,0],[-13,12,-3,35,-13,12],[-19,55,-19,55,-19,55],[-40,55,-40,55,-40,55],[-40,44,-27,25,-44,50],[-40,15,-40,15,-40,15],[-47,15,-36,38,-47,15],[-53,55,-53,55,-53,55],[-73,55,-73,55,-73,55],[-73,44,-61,25,-77,50],[-73,15,-73,15,-73,15],[-286,15,-275,38,-286,15],[-292,55,-292,55,-292,55],[-313,55,-313,55,-313,55],[-312,44,-300,25,-316,50],[-312,15,-312,15,-312,15],[-322,15,-311,38,-322,15],[-328,55,-328,55,-328,55],[-348,55,-348,55,-348,55],[-348,44,-336,25,-352,50],[-348,15,-376,-5,-348,15],[-384,-72,-384,-72,-384,-72]]],[[[0,0,0,0,0,0],[-16,12,-16,12,-3,8],[-41,54,-9,54,-45,27],[0,101,-11,109,12,92],[-10,128,-10,128,-10,128],[-42,128,-42,128,-42,128],[-22,118,-16,124,-33,104],[-24,83,-68,75,-7,86],[-89,33,-89,33,-89,52],[-97,33,-103,37,-94,34],[-105,59,-78,60,-106,47],[-72,101,-83,109,-61,94],[-82,128,-82,128,-82,128],[-114,128,-114,128,-114,128],[-94,118,-88,124,-105,104],[-99,86,-143,77,-82,89],[-151,46,-158,50,-149,63],[-254,54,-254,71,-204,52],[-268,107,-285,118,-254,99],[-318,117,-318,117,-313,112],[-322,128,-322,128,-324,120],[-328,124,-328,124,-328,124],[-333,128,-333,128,-333,128],[-338,124,-338,124,-338,124],[-344,128,-344,128,-344,128],[-349,124,-349,124,-349,124],[-354,128,-352,110,-354,128],[-329,104,-323,104,-336,104],[-297,95,-294,78,-297,95],[-293,58,-293,58,-292,68],[-318,58,-324,73,-307,57],[-343,103,-355,109,-329,96],[-393,115,-393,115,-386,108],[-394,128,-394,128,-395,121],[-399,124,-399,124,-399,124],[-405,128,-405,128,-405,128],[-410,124,-410,124,-410,124],[-416,128,-416,128,-416,128],[-421,124,-421,124,-421,124],[-427,128,-426,117,-427,128],[-408,103,-402,101,-418,105],[-368,88,-359,70,-368,88],[-359,53,-385,33,-359,53],[-383,-71,-383,-71,-383,-71]]],[[[0,0,0,0,0,0],[0,20,-48,20,0,20],[-48,68,-63,68,-32,68],[-95,20,-143,20,-48,20],[-143,68,-158,68,-127,68],[-190,20,-238,20,-143,20],[-238,68,-253,68,-222,68],[-285,20,-333,20,-238,20],[-333,68,-348,68,-317,68],[-380,20,-380,20,-333,20],[-384,-123,-384,-123,-384,-123]]],[[[0,0,-15,40,0,0],[-43,44,-42,75,-43,14],[-22,112,-22,112,-22,112],[-90,112,-90,112,-90,112],[-68,40,-86,47,-68,71],[-123,40,-123,72,-104,47],[-102,112,-102,112,-102,112],[-171,112,-171,112,-171,112],[-149,40,-173,53,-149,71],[-223,40,-223,72,-198,52],[-202,112,-202,112,-202,112],[-271,112,-271,112,-271,112],[-249,40,-268,48,-249,71],[-303,40,-303,72,-285,47],[-282,112,-282,112,-282,112],[-351,112,-351,112,-351,112],[-329,40,-389,16,-329,71],[-384,-67,-384,-67,-384,-67]]],[[[0,0,-24,31,0,0],[-62,39,-70,63,-54,19],[-96,93,-56,88,-130,98],[-72,154,-64,163,-86,138],[-82,167,-87,164,-74,173],[-121,159,-124,161,-118,157],[-119,167,-124,169,-128,165],[-133,164,-141,152,-128,170],[-123,147,-115,156,-127,142],[-87,154,-87,154,-87,154],[-98,102,-145,109,-77,98],[-135,50,-135,50,-134,52],[-151,50,-151,50,-151,50],[-166,96,-126,93,-200,98],[-142,154,-134,163,-156,138],[-154,167,-158,164,-146,173],[-191,159,-192,160,-187,157],[-191,167,-195,169,-201,165],[-205,164,-214,152,-200,170],[-194,147,-186,156,-199,142],[-160,153,-160,153,-160,153],[-167,103,-214,110,-146,99],[-213,28,-259,-3,-212,54],[-263,-133,-263,-133,-170,-127],[-264,-73,-266,-70,-261,-76],[-306,-50,-308,-44,-305,-52],[-301,-18,-303,-21,-301,-18],[-313,-46,-316,-43,-311,-34],[-316,-16,-319,-22,-315,-19],[-319,-47,-324,-41,-322,-34],[-330,-18,-330,-18,-328,-21],[-319,-54,-310,-60,-331,-47],[-273,-78,-275,-85,-271,-71],[-290,-138,-290,-138,-291,-138],[-304,-141,-304,-141,-304,-141],[-309,-81,-312,-78,-306,-84],[-353,-61,-356,-51,-352,-63],[-349,-26,-351,-30,-349,-26],[-361,-53,-367,-45,-359,-41],[-365,-25,-366,-28,-363,-28],[-369,-55,-371,-55,-372,-43],[-379,-27,-379,-27,-377,-30],[-366,-66,-357,-73,-383,-53],[-317,-87,-318,-94,-315,-80],[-331,-145,-375,-152,-332,-145],[-381,-217,-381,-217,-381,-217]]],[[[0,0,-10,13,0,0],[-41,32,-38,35,-24,23],[-36,43,-36,51,-36,39],[-57,57,-57,57,-44,55],[-57,63,-57,67,-57,63],[-64,70,-68,70,-60,70],[-71,63,-71,63,-71,67],[-71,59,-75,59,-71,59],[-84,59,-84,59,-79,59],[-84,63,-84,67,-84,63],[-91,70,-95,70,-87,70],[-98,63,-98,63,-98,67],[-98,59,-103,59,-98,59],[-137,59,-137,59,-130,59],[-137,63,-137,67,-137,63],[-144,70,-147,70,-140,70],[-150,63,-150,63,-150,67],[-150,59,-155,59,-150,59],[-164,58,-164,58,-160,59],[-164,63,-164,67,-164,63],[-171,70,-175,70,-167,70],[-178,63,-178,63,-178,67],[-178,57,-188,54,-178,57],[-194,43,-194,39,-194,50],[-189,32,-223,15,-192,35],[-246,-62,-246,-62,-246,-17],[-318,9,-367,28,-280,-6],[-430,7,-431,6,-395,17],[-438,8,-441,7,-434,10],[-445,7,-446,6,-443,8],[-438,3,-439,0,-440,3],[-445,1,-445,0,-445,3],[-437,-2,-438,-4,-442,-2],[-444,-4,-444,-4,-444,-2],[-437,-7,-435,-7,-442,-7],[-431,-4,-416,8,-432,-5],[-324,1,-294,-14,-361,20],[-301,-81,-301,-81,-301,-81],[-378,-29,-426,-23,-336,-34],[-472,-61,-475,-61,-445,-39],[-481,-64,-484,-64,-479,-63],[-486,-64,-487,-66,-486,-63],[-478,-68,-481,-70,-481,-68],[-486,-69,-486,-70,-485,-67],[-476,-71,-478,-75,-483,-72],[-483,-74,-483,-75,-483,-72],[-473,-75,-472,-74,-479,-77],[-470,-73,-460,-51,-471,-74],[-380,-38,-340,-58,-409,-24],[-351,-124,-351,-124,-351,-124],[-384,-191,-384,-191,-384,-191]]],[[[0,0,0,0,0,0],[-25,16,-28,88,-25,16],[40,145,40,145,40,145],[7,178,7,178,7,178],[-74,48,-74,97,-74,97],[-155,178,-155,178,-155,178],[-187,145,-187,145,-187,145],[-122,16,-122,16,-120,88],[-247,16,-249,88,-247,16],[-182,145,-182,145,-182,145],[-214,178,-214,178,-214,178],[-295,48,-295,97,-295,97],[-376,178,-376,178,-376,178],[-409,145,-409,145,-409,145],[-344,16,-344,16,-342,88],[-384,-80,-384,-80,-384,-80]]],[[[0,0,2,23,0,0],[-17,53,-22,59,0,37],[-10,81,-8,93,-4,56],[-19,95,-19,95,-16,95],[-52,95,-52,95,-52,95],[-52,81,-60,77,-62,96],[-68,56,-72,38,-67,62],[-61,16,-65,14,-61,16],[-71,16,-72,37,-68,13],[-82,53,-86,58,-73,42],[-79,81,-76,91,-73,50],[-86,95,-86,95,-83,95],[-120,95,-119,95,-120,95],[-120,81,-128,77,-130,96],[-133,55,-136,37,-131,62],[-130,17,-198,42,-130,17],[-244,19,-238,30,-200,21],[-238,53,-238,59,-236,35],[-242,83,-242,91,-233,66],[-249,95,-249,95,-247,95],[-284,95,-283,95,-284,95],[-286,81,-288,63,-296,96],[-281,51,-294,39,-273,58],[-299,19,-303,21,-299,19],[-309,20,-307,41,-306,21],[-302,52,-302,59,-302,36],[-320,83,-319,90,-309,69],[-327,95,-327,95,-325,95],[-359,95,-359,95,-359,95],[-364,81,-363,66,-374,96],[-345,49,-361,39,-337,54],[-363,19,-391,-21,-363,19],[-383,-111,-383,-111,-383,-111]]],[[[0,0,-18,22,0,0],[-48,19,-145,22,-32,19],[-298,23,-336,26,-266,19],[-298,120,-266,122,-330,118],[-95,119,-79,118,-108,121],[-95,101,-118,98,-81,102],[-276,101,-307,101,-244,101],[-276,43,-249,43,-309,44],[-66,44,-20,46,-118,42],[-66,158,-84,160,-19,153],[-302,158,-378,157,-228,159],[-370,23,-369,-5,-371,47],[-384,-95,-384,-95,-384,-95]]],[[[0,0,0,0,0,0],[23,55,23,55,23,55],[12,80,-6,88,30,73],[-14,70,-14,70,-14,70],[-36,15,-36,15,-36,15],[-78,15,-78,15,-78,15],[-100,70,-100,70,-100,70],[-126,80,-144,73,-108,88],[-137,55,-137,55,-137,55],[-114,0,-114,0,-114,0],[-290,23,-290,23,-290,23],[-274,62,-274,62,-274,62],[-281,80,-294,86,-268,75],[-300,73,-300,73,-300,73],[-316,34,-316,34,-316,34],[-345,34,-345,34,-345,34],[-361,73,-361,73,-361,73],[-380,80,-393,75,-367,86],[-387,62,-387,62,-387,62],[-371,23,-371,23,-371,23],[-384,-78,-384,-78,-384,-78]]],[[[0,0,0,19,0,0],[-29,37,-29,37,-6,31],[-54,78,-54,78,-54,78],[-16,78,-16,78,-16,78],[-16,99,-16,99,-16,99],[-82,99,-82,99,-82,99],[-82,78,-82,78,-82,78],[-61,42,-79,44,-61,42],[-117,46,-117,46,-94,45],[-135,78,-135,78,-135,78],[-96,78,-96,78,-96,78],[-96,99,-96,99,-96,99],[-162,99,-162,99,-162,99],[-162,78,-162,78,-162,78],[-145,46,-171,46,-145,46],[-229,46,-229,46,-204,46],[-247,78,-247,78,-247,78],[-209,78,-209,78,-209,78],[-209,99,-209,99,-209,99],[-275,99,-275,99,-275,99],[-275,78,-275,78,-275,78],[-257,45,-278,45,-257,45],[-306,41,-306,41,-290,43],[-328,78,-328,78,-328,78],[-290,78,-290,78,-290,78],[-290,99,-290,99,-290,99],[-356,99,-356,99,-356,99],[-356,78,-356,78,-356,78],[-331,36,-353,30,-331,36],[-369,0,-369,0,-369,19],[-384,-80,-384,-80,-384,-80]]],[[[0,0,-14,13,0,0],[-63,20,-63,20,-35,20],[-41,55,-45,58,-29,44],[-35,130,-35,130,-35,130],[-91,130,-91,130,-91,130],[-46,120,-41,126,-56,108],[-64,57,-84,52,-49,61],[-99,35,-99,35,-98,52],[-113,36,-107,43,-113,36],[-109,55,-113,58,-104,50],[-103,130,-103,130,-103,130],[-160,130,-160,130,-160,130],[-114,120,-109,126,-125,108],[-132,57,-152,52,-117,61],[-167,35,-167,35,-167,52],[-217,30,-217,30,-217,30],[-208,55,-212,58,-196,44],[-203,130,-203,130,-203,130],[-259,130,-259,130,-259,130],[-214,120,-209,126,-224,108],[-232,57,-251,52,-216,61],[-266,35,-266,35,-266,52],[-281,35,-275,42,-281,35],[-276,55,-280,58,-271,50],[-271,130,-271,130,-271,130],[-327,130,-327,130,-327,130],[-282,120,-277,126,-292,108],[-300,57,-319,52,-284,61],[-337,30,-378,0,-337,46],[-384,-83,-384,-83,-384,-83]]],[[[0,0,-32,36,0,0],[-76,44,-76,44,-76,44],[-100,74,-100,74,-78,75],[-149,74,-149,74,-149,74],[-166,51,-166,74,-166,74],[-183,74,-183,74,-183,74],[-235,74,-235,74,-235,74],[-255,44,-255,44,-255,74],[-351,-20,-361,-16,-311,37],[-368,-7,-368,-7,-368,-7],[-372,-4,-377,-1,-371,0],[-377,-7,-376,-20,-377,-7],[-365,-35,-365,-36,-371,-29],[-366,-38,-378,-36,-366,-37],[-386,-26,-386,-26,-386,-26],[-390,-23,-394,-20,-389,-19],[-394,-25,-394,-45,-394,-25],[-374,-58,-384,-78,-378,-56],[-384,-126,-384,-126,-384,-126]]],[[[0,0,0,23,0,0],[-42,20,-41,70,-36,11],[-8,130,-18,130,5,73],[-119,130,-119,130,-119,130],[-87,93,-94,68,-123,95],[-83,19,-83,19,-83,45],[-110,20,-109,41,-110,20],[-93,65,-95,82,-102,53],[-93,89,-128,94,-93,89],[-124,130,-124,130,-124,130],[-186,130,-186,130,-186,130],[-155,93,-161,68,-191,95],[-150,19,-177,16,-150,45],[-203,65,-218,73,-180,53],[-253,69,-252,96,-235,74],[-234,129,-239,129,-227,98],[-295,129,-295,129,-295,129],[-278,109,-281,95,-298,110],[-275,69,-287,62,-275,83],[-320,69,-320,96,-308,60],[-302,129,-307,129,-295,98],[-363,129,-363,129,-363,129],[-345,109,-349,95,-365,110],[-343,65,-395,51,-343,80],[-384,-51,-384,-51,-384,-51]]],[[[0,0,19,33,0,0],[29,112,29,236,29,71],[-192,336,-314,336,-70,336],[-413,112,-413,71,-413,236],[-384,0,-384,0,-403,33],[-383,-32,-383,-32,-383,-32]]],[[[0,0,0,0,0,0],[-47,30,-47,30,-20,27],[-47,91,-47,91,-47,91],[-87,91,-87,91,-87,91],[-87,30,-87,30,-87,30],[-111,30,-111,30,-111,30],[-111,91,-111,91,-111,91],[-150,91,-150,91,-150,91],[-150,37,-150,37,-150,37],[-183,37,-183,37,-183,37],[-183,91,-183,91,-183,91],[-240,91,-240,91,-240,91],[-240,7,-240,7,-240,7],[-277,7,-277,7,-277,7],[-277,91,-277,91,-277,91],[-334,91,-334,91,-334,91],[-334,-5,-374,-32,-334,-5],[-384,-127,-384,-127,-384,-127]]],[[[0,0,0,26,0,0],[-26,26,-26,52,-26,26],[-52,52,-52,52,-52,52],[-79,78,-79,78,-52,78],[-97,104,-97,104,-79,99],[-97,138,-97,138,-97,138],[-131,138,-131,138,-131,138],[-131,125,-131,125,-131,125],[-113,121,-113,121,-113,121],[-113,104,-131,99,-113,104],[-131,78,-131,78,-131,78],[-157,52,-157,52,-157,78],[-183,26,-183,52,-183,52],[-210,52,-210,78,-210,52],[-236,78,-236,78,-236,78],[-254,104,-254,104,-236,99],[-254,138,-254,138,-254,138],[-288,138,-288,138,-288,138],[-288,125,-288,125,-288,125],[-270,121,-270,121,-270,121],[-270,104,-288,99,-270,104],[-288,78,-314,78,-288,78],[-314,52,-314,52,-314,52],[-341,26,-341,26,-341,52],[-367,0,-383,-22,-367,26],[-384,-79,-384,-79,-384,-79]]],[[[0,0,-3,36,0,0],[-45,24,-47,45,-42,4],[-26,54,-25,59,-28,41],[-33,92,-33,92,-22,92],[-54,92,-53,93,-54,92],[-51,86,-39,76,-62,87],[-51,62,-83,60,-43,62],[-86,37,-86,37,-86,37],[-92,59,-91,64,-96,41],[-100,92,-100,92,-89,92],[-121,92,-121,93,-121,92],[-118,86,-106,76,-129,87],[-118,62,-141,61,-111,62],[-140,42,-133,3,-141,49],[-185,-6,-183,18,-186,-17],[-160,22,-159,31,-163,0],[-173,91,-173,91,-154,91],[-211,91,-210,91,-211,91],[-205,79,-185,62,-226,81],[-206,36,-264,34,-192,36],[-268,-15,-268,-15,-268,-15],[-280,30,-278,40,-287,-1],[-294,91,-294,91,-275,91],[-332,91,-331,91,-332,91],[-326,79,-306,62,-347,81],[-327,36,-385,34,-313,36],[-360,-24,-352,-43,-360,-24],[-388,-79,-400,-121,-379,-48],[-384,-157,-384,-157,-384,-157]]],[[[0,0,0,0,0,0],[-14,20,-14,20,0,13],[-11,86,-13,96,-10,75],[-45,103,-62,104,-29,103],[-78,78,-77,43,-78,96],[-51,56,-51,56,-51,56],[-48,22,-60,26,-48,47],[-89,22,-89,22,-73,25],[-86,86,-88,96,-84,75],[-119,103,-136,104,-104,103],[-153,78,-152,43,-153,96],[-126,56,-126,56,-126,56],[-124,19,-124,19,-123,43],[-273,-9,-287,4,-200,29],[-295,100,-298,104,-292,96],[-339,96,-341,92,-336,105],[-331,79,-331,49,-331,88],[-311,-24,-311,-24,-325,-8],[-320,-29,-345,-5,-320,-29],[-349,100,-353,104,-346,96],[-395,92,-396,87,-393,101],[-385,72,-384,41,-385,81],[-357,-48,-385,-61,-379,-22],[-384,-128,-384,-128,-384,-128]]],[[[0,0,0,0,0,0],[-49,39,-49,39,-45,21],[-51,77,-38,108,-51,77],[-52,119,-61,119,-52,119],[-77,119,-86,112,-70,110],[-100,119,-106,113,-91,113],[-120,119,-120,119,-113,114],[-94,74,-84,69,-147,102],[-102,39,-102,39,-102,39],[-139,39,-128,60,-139,39],[-141,119,-150,109,-130,100],[-162,119,-170,108,-158,106],[-182,119,-193,110,-176,111],[-189,39,-189,39,-177,61],[-199,39,-199,39,-199,39],[-201,77,-187,107,-201,77],[-202,119,-212,119,-202,119],[-229,119,-236,113,-219,107],[-250,119,-257,114,-243,112],[-270,119,-270,119,-263,113],[-243,76,-233,71,-296,103],[-250,39,-250,39,-250,39],[-289,39,-278,59,-289,39],[-291,119,-300,109,-281,109],[-312,119,-320,108,-308,106],[-331,119,-343,110,-326,111],[-339,39,-387,19,-327,61],[-384,-69,-384,-69,-384,-69]]],[[[0,0,-10,19,0,0],[-25,19,-25,19,-25,19],[-25,86,-25,86,-25,86],[-90,86,-90,86,-90,86],[-90,23,-90,23,-90,23],[-101,23,-101,23,-101,23],[-101,86,-101,86,-101,86],[-166,86,-166,86,-166,86],[-165,23,-165,23,-165,23],[-206,23,-194,45,-206,23],[-197,86,-197,86,-197,86],[-258,86,-258,86,-258,86],[-271,23,-271,23,-265,37],[-279,23,-284,37,-279,23],[-291,86,-291,86,-291,86],[-353,86,-353,86,-353,86],[-341,19,-388,-4,-356,39],[-384,-93,-384,-93,-384,-93]]],[[[0,0,0,0,0,0],[-27,45,-27,45,-5,45],[-47,45,-47,45,-47,45],[-47,66,-30,69,-47,66],[-17,100,-17,100,-17,83],[-23,100,-23,87,-23,100],[-43,73,-43,73,-32,76],[-43,77,-34,81,-43,77],[-27,100,-27,114,-27,90],[-52,125,-65,125,-38,125],[-76,100,-76,90,-76,114],[-60,77,-60,77,-69,81],[-60,73,-72,76,-60,73],[-80,100,-80,100,-80,87],[-86,100,-86,83,-86,100],[-57,66,-57,66,-73,69],[-57,45,-57,45,-57,45],[-135,45,-135,45,-135,45],[-135,66,-118,69,-135,66],[-105,100,-105,100,-105,83],[-111,100,-111,87,-111,100],[-132,73,-132,73,-120,76],[-132,77,-122,81,-132,77],[-115,100,-115,114,-115,90],[-140,125,-153,125,-126,125],[-164,100,-164,90,-164,114],[-148,77,-148,77,-158,81],[-148,73,-160,76,-148,73],[-169,100,-169,100,-169,87],[-174,100,-174,83,-174,100],[-145,66,-145,66,-162,69],[-145,45,-145,45,-145,45],[-223,45,-223,45,-223,45],[-223,66,-206,69,-223,66],[-193,100,-193,100,-193,83],[-199,100,-199,87,-199,100],[-220,73,-220,73,-208,76],[-220,77,-210,81,-220,77],[-203,100,-203,114,-203,90],[-228,125,-242,125,-214,125],[-253,100,-253,90,-253,114],[-236,77,-236,77,-246,81],[-236,73,-248,76,-236,73],[-257,100,-257,100,-257,87],[-263,100,-263,83,-263,100],[-233,66,-233,66,-250,69],[-233,45,-233,45,-233,45],[-311,45,-311,45,-311,45],[-311,66,-294,69,-311,66],[-282,100,-282,100,-282,83],[-288,100,-288,87,-288,100],[-308,73,-308,73,-296,76],[-308,77,-298,81,-308,77],[-292,100,-292,114,-292,90],[-316,125,-330,125,-303,125],[-341,100,-341,90,-341,114],[-324,77,-324,77,-334,81],[-324,73,-336,76,-324,73],[-345,100,-345,100,-345,87],[-351,100,-351,83,-351,100],[-321,66,-321,66,-338,69],[-321,45,-321,45,-321,45],[-341,45,-363,45,-341,45],[-368,0,-368,0,-368,0],[-383,-79,-383,-79,-383,-79]]],[[[0,0,-59,32,0,0],[-72,67,-67,71,-35,1],[-70,83,-70,83,-67,79],[-47,120,-32,125,-47,120],[-22,155,-22,155,-22,139],[-98,155,-98,134,-98,155],[-59,117,-59,117,-80,117],[-78,88,-83,89,-78,88],[-91,83,-97,75,-88,87],[-80,64,-80,64,-90,63],[-57,23,-81,29,-57,23],[-135,31,-135,31,-108,32],[-156,67,-151,71,-156,67],[-154,83,-154,83,-151,79],[-131,120,-116,125,-131,120],[-106,155,-106,155,-106,139],[-182,155,-182,134,-182,155],[-143,117,-143,117,-164,117],[-162,88,-167,89,-162,88],[-175,83,-181,75,-172,87],[-164,64,-164,64,-174,63],[-146,30,-228,26,-146,30],[-291,-53,-291,-53,-291,-10],[-304,-111,-304,-111,-291,-88],[-353,-62,-351,-57,-353,-62],[-356,-47,-357,-46,-352,-51],[-361,-44,-361,-44,-359,-45],[-361,19,-361,19,-361,-2],[-329,19,-329,29,-329,19],[-351,35,-361,35,-340,35],[-370,19,-370,19,-370,29],[-370,-45,-378,-49,-370,-45],[-374,-66,-370,-69,-380,-60],[-359,-68,-359,-68,-364,-70],[-309,-118,-326,-133,-309,-118],[-357,-126,-357,-126,-343,-134],[-408,-75,-405,-68,-408,-75],[-416,-57,-416,-57,-409,-59],[-416,8,-416,8,-416,-11],[-384,8,-384,19,-384,8],[-406,25,-416,25,-395,25],[-425,8,-425,-11,-425,19],[-425,-58,-440,-65,-425,-58],[-414,-81,-414,-81,-429,-88],[-364,-131,-381,-163,-364,-131],[-381,-201,-381,-201,-381,-201]]],[[[0,0,0,0,0,0],[-31,19,-31,19,-12,16],[-31,78,-31,78,-31,78],[-44,77,-42,81,-44,77],[-41,91,-42,103,-41,86],[-65,111,-77,110,-53,112],[-85,87,-84,83,-86,99],[-80,76,-80,76,-83,79],[-90,76,-90,76,-90,76],[-85,22,-85,22,-85,22],[-120,20,-120,20,-120,20],[-119,74,-119,74,-119,74],[-132,74,-129,78,-132,74],[-129,87,-130,99,-128,82],[-152,107,-164,106,-140,108],[-172,83,-172,79,-173,95],[-168,72,-168,72,-170,75],[-178,72,-178,72,-178,72],[-172,13,-172,13,-172,13],[-241,-22,-241,-22,-241,-22],[-277,51,-277,51,-277,51],[-287,46,-287,50,-287,46],[-290,58,-295,68,-287,54],[-316,66,-325,61,-307,71],[-323,39,-322,36,-329,49],[-316,32,-316,32,-319,34],[-324,28,-324,28,-324,28],[-283,-43,-283,-43,-293,-23],[-311,-57,-311,-57,-311,-57],[-347,17,-347,17,-347,17],[-357,12,-356,16,-357,12],[-359,24,-364,33,-357,20],[-385,31,-395,26,-376,37],[-393,5,-391,2,-398,14],[-386,-2,-386,-2,-389,-1],[-394,-6,-394,-6,-394,-6],[-353,-77,-376,-97,-363,-58],[-384,-144,-384,-144,-384,-144]]],[[[0,0,0,0,0,0],[-41,46,-41,46,-8,43],[-41,89,-41,89,-41,89],[-101,89,-101,89,-101,89],[-101,50,-101,50,-101,50],[-111,50,-111,50,-111,50],[-111,89,-111,89,-111,89],[-172,89,-172,89,-172,89],[-172,46,-202,13,-172,46],[-238,-29,-238,-29,-238,-29],[-238,89,-238,89,-238,89],[-298,89,-298,89,-298,89],[-298,-24,-298,-24,-298,-24],[-308,-24,-308,-24,-308,-24],[-308,89,-308,89,-308,89],[-369,89,-369,89,-369,89],[-369,-29,-369,-29,-369,-29],[-384,-131,-384,-131,-384,-131]]],[[[0,0,0,0,0,0],[0,48,0,48,0,48],[-173,48,-173,48,-173,48],[-173,139,-173,139,-173,139],[-138,139,-138,139,-138,139],[-138,162,-138,162,-138,162],[-230,162,-230,162,-230,162],[-230,139,-230,139,-230,139],[-195,139,-195,139,-195,139],[-195,48,-195,48,-195,48],[-368,48,-368,48,-368,48],[-368,0,-368,0,-368,0],[-384,-81,-384,-81,-384,-81]]],[[[0,0,0,0,0,0],[21,21,31,31,21,21],[21,59,15,65,31,49],[1,67,-6,67,8,67],[-18,59,-18,59,-13,65],[-63,15,-63,15,-63,15],[-107,59,-118,70,-107,59],[-146,59,-157,49,-136,70],[-146,21,-146,21,-157,31],[-126,0,-126,0,-126,0],[-243,0,-243,0,-243,0],[-222,21,-211,31,-222,21],[-222,59,-228,65,-211,49],[-242,67,-249,67,-235,67],[-261,59,-261,59,-256,65],[-306,15,-306,15,-306,15],[-350,59,-361,70,-350,59],[-389,59,-400,49,-378,70],[-389,21,-389,21,-400,31],[-369,0,-369,0,-369,0],[-385,-103,-385,-103,-385,-103]]],[[[0,0,0,0,0,0],[-29,36,-29,36,-7,21],[-52,36,-52,36,-52,36],[-52,143,-52,143,-52,143],[-67,143,-67,143,-67,143],[-67,36,-67,36,-67,36],[-100,36,-100,36,-100,36],[-100,143,-100,143,-100,143],[-115,143,-115,143,-115,143],[-115,36,-115,36,-115,36],[-252,36,-252,36,-252,36],[-252,143,-252,143,-252,143],[-267,143,-267,143,-267,143],[-267,36,-267,36,-267,36],[-300,36,-300,36,-300,36],[-300,143,-300,143,-300,143],[-315,143,-315,143,-315,143],[-315,36,-315,36,-315,36],[-343,36,-383,4,-343,36],[-383,-93,-383,-93,-383,-93]]],[[[0,0,0,78,0,0],[-149,157,-141,166,-64,143],[-135,192,-135,192,-135,178],[-233,192,-233,178,-233,192],[-219,157,-304,143,-227,166],[-368,0,-368,0,-368,78],[-384,-64,-384,-64,-384,-64]]],[[[0,0,0,0,0,0],[0,48,0,48,0,48],[-128,48,-128,48,-128,48],[-128,63,-128,63,-128,63],[0,63,0,63,0,63],[0,111,0,111,0,111],[-128,111,-128,111,-128,111],[-128,127,-128,127,-128,127],[0,127,0,127,0,127],[0,175,0,175,0,175],[-368,175,-368,175,-368,175],[-368,127,-368,127,-368,127],[-240,127,-240,127,-240,127],[-240,111,-240,111,-240,111],[-368,111,-368,111,-368,111],[-368,63,-368,63,-368,63],[-240,63,-240,63,-240,63],[-240,48,-240,48,-240,48],[-368,48,-368,48,-368,48],[-368,0,-368,0,-368,0],[-384,-80,-384,-80,-384,-80]]]]},891:(a,s)=\u003e{function v(a){return JSON.parse(JSON.stringify(a))}function t(a,s,v,t){var r=Math.cos(s),h=Math.sin(s);return[(a[0]*r-a[1]*h)*v,(a[0]*h+a[1]*r)*t,(a[2]*r-a[3]*h)*v,(a[2]*h+a[3]*r)*t,(a[4]*r-a[5]*h)*v,(a[4]*h+a[5]*r)*t]}function r(a){a.sort((function(a,s){return s.val-a.val}))}function h(a){a.sort((function(a,s){return s.sat-a.sat}))}function l(a,s){a.sort((function(a,v){return(360-a.hsv[0]+s)%360-(360-v.hsv[0]+s)%360}))}function g(a,s){var v=a.length;h(a);for(var t=0;t\u003cv;t++)a[t].sat2=t;r(a);for(var l=0;l\u003cv;l++)a[l].val2=l;a.sort((function(a,v){return a.sat2*s+a.val2*(1-s)-(v.sat2*s+v.val2*(1-s))}))}Object.defineProperty(s,\"__esModule\",{value:!0}),s.easingInOut=s.easing=s.satValSort=s.hueSortPlus=s.hueSort=s.saturationSort=s.valueSort=s.shuffle=s.RGBtoHSV=s.HSVtoRGB=s.makeColor=s.shiftPoints=s.scalePoints=s.RotateAndScaleAndShift=s.rotateAndScalePoints=s.getCrossPoint=s.refresh=s.draw=s.deepCopy=s.porm=void 0,s.porm=function(){return Math.random()\u003c.5?1:-1},s.deepCopy=v,s.draw=function(a,s,v,t,r,h,l,g,b){b||a.save();var e=0;void 0!==h\u0026\u0026(a.globalAlpha=h),a.globalCompositeOperation=l||\"source-over\",a.fillStyle=v,g\u0026\u0026(a.shadowColor=v),g\u0026\u0026(a.shadowBlur=g),a.beginPath(),a.moveTo(s[e][0]*t,s[e][1]*r);for(var n=1,o=s.length;n\u003c=o;n++)if(s[n]\u0026\u0026n!==o){if(\"end\"===s[n-1])b||a.clip(),e=n,a.moveTo(s[e][0]*t,s[e][1]*r);else if(s[n-1]\u0026\u00266===s[n-1].length){var i=s[n],c=s[n-1];\"end\"===i\u0026\u0026(i=s[e]),a.bezierCurveTo(c[2]*t,c[3]*r,i[4]*t,i[5]*r,i[0]*t,i[1]*r)}}else a.closePath();a.fill(),b||a.restore()},s.refresh=function(a,s,v,t,r,h,l,g){a.beginPath(),a.fillStyle=s,a.fillRect(v,t,r*l,h*g)},s.getCrossPoint=function(a,s,v,t){var r=(s[1]-a[1])/(s[0]-a[0]),h=(t[1]-v[1])/(t[0]-v[0]),l=(r*a[0]-a[1]-h*v[0]+v[1])/(r-h);return[l,(s[1]-a[1])/(s[0]-a[0])*(l-a[0])+a[1]]},s.rotateAndScalePoints=t,s.RotateAndScaleAndShift=function(a,s,r,h,l,g){for(var b=v(a),e=[],n=0,o=b.length;n\u003co;n++){var i=b[n];(i=t(i,s,r,h))[0]+=l,i[1]+=g,i[2]+=l,i[3]+=g,i[4]+=l,i[5]+=g,e.push(i)}return e},s.scalePoints=function(a,s,v){for(var t=[],r=0,h=a.length;r\u003ch;r++){var l=a[r];t.push([l[0]*s,l[1]*v,l[2]*s,l[3]*v,l[4]*s,l[5]*v])}return t},s.shiftPoints=function(a,s,v){for(var t=[],r=0,h=a.length;r\u003ch;r++){var l=a[r];\"string\"!=typeof l?t.push([l[0]+s,l[1]+v,l[2]+s,l[3]+v,l[4]+s,l[5]+v]):t.push(l)}return t},s.makeColor=function(a){return\"rgb(\\n \".concat(a[0],\",\\n \").concat(a[1],\",\\n \").concat(a[2],\")\")},s.HSVtoRGB=function(a,s,v){var t=function(s){return(s+a/60)%6},r=function(a){return v*(1-s*Math.max(0,Math.min(t(a),4-t(a),1)))};return[255*r(5),255*r(3),255*r(1)]},s.RGBtoHSV=function(a,s,v){var t,r,h,l,g,b,e,n,o,i,c=0;return t=a/255,r=s/255,h=v/255,n=Math.max(t,r,h),i=function(a){return(n-a)/6/o+.5},0==(o=n-Math.min(t,r,h))?c=e=0:(e=o/n,l=i(t),g=i(r),b=i(h),t===n?c=b-g:r===n?c=1/3+l-b:h===n\u0026\u0026(c=2/3+g-l),c\u003c0?c+=1:c\u003e1\u0026\u0026(c-=1)),[Math.round(360*c),e,n]},s.shuffle=function(a){for(var s,t=v(a),r=t.length-1;r\u003e0;r--){var h=Math.floor(Math.random()*(r+1));s=[t[h],t[r]],t[r]=s[0],t[h]=s[1]}return t},s.valueSort=r,s.saturationSort=h,s.hueSort=l,s.hueSortPlus=function(a,s,v,t){var r=a.length;l(a,v);for(var h=0;h\u003cr;h++)a[h].hue=h;for(g(a,t),h=0;h\u003cr;h++)a[h].sv=h;a.sort((function(a,v){return v.hue*s-v.sv*(1-s)-(a.hue*s-a.sv*(1-s))}))},s.satValSort=g,s.easing=function(a,s){return s\u003e0?Math.pow(a,s):1-Math.pow(1+a,s)},s.easingInOut=function(a,s){var v=Math.abs(s);return a\u003c.5?Math.pow(2,v-1)*Math.pow(a,v):1-Math.pow(-2*a+2,v)/2}}},s={};function v(t){var r=s[t];if(void 0!==r)return r.exports;var h=s[t]={exports:{}};return a[t](h,h.exports,v),h.exports}(()=\u003e{var a,s=v(774),t=v(891),r=v(936),h=window.innerWidth,l=window.innerHeight,g=window.devicePixelRatio,b=document.createElement(\"canvas\");document.body.prepend(b);var e=b.getContext(\"2d\",{alpha:!1});b.style.width=h+\"px\",b.style.height=l+\"px\",b.width=h*g,b.height=l*g,e.scale(g,g);var n=h\u003el?l/h:h/l,o=Math.max(10*Math.pow(n,.5),1),i=(h\u003el?l:h)/4/o,c=i+Math.random()*i*(o-1),f=1,p=1,d=1,M=1;h\u003el?(p=Math.round(l/c),M=l/p,f=Math.round(h/M),d=h/f):(f=Math.round(h/c),d=h/f,p=Math.round(l/d),M=l/p),console.log(f,p,d,M);var u,P,m,w=\"#000\",A=f*p/30,y=Math.ceil(A*Math.pow(Math.random(),2.5)),C=!1,S=[],k=[];u=Math.random(),P=360*Math.random(),m=Math.random(),(0,t.hueSortPlus)(r.allColors,u,P,m);var x=r.allColors.length,R=Math.floor(x*Math.pow(Math.random(),1.25)),q=Math.floor(x*Math.pow(Math.random(),.8));R\u003eq\u0026\u0026(R=(a=[q,R])[0],q=a[1]);for(var I=r.allColors.slice(R,q),O=0;O\u003cp;O++)for(var V=0;V\u003cf;V++)S[_=O*f+V]={face:Math.floor(s.faceArr.length*Math.random()),head:Math.floor(s.headArr.length*Math.random()),neck:Math.floor(s.neckArr.length*Math.random()),back:Math.floor(s.backArr.length*Math.random()),tail:Math.floor(s.tailArr.length*Math.random()),legs:Math.floor(s.legsArr.length*Math.random()),index:_,x:V*d,y:O*M,shape:[],color:(0,t.makeColor)(I[Math.floor(Math.random()*I.length)].rgb),isWrong:!1};for(O=0;O\u003cp;O++)for(V=0;V\u003cf;V++){var _,B=S[_=O*f+V];B.shape=B.isWrong?W(V*d,O*M,_):H(V*d,O*M,_)}function E(){k=[];for(var a=[],s=0;s\u003cy;s++){for(var v=Math.floor(S.length*Math.random());a.includes(v);)v=Math.floor(S.length*Math.random());a.push(v)}s=0;for(var r=a.length;s\u003cr;s++){var h=a[s],l=S[h];l.isWrong=Math.random()\u003c.25,l.isWrong?l.shape=W(l.x,l.y,h):l.shape=H(l.x,l.y,h),k.push(S[h])}k.forEach((function(a){(0,t.refresh)(e,w,a.x,a.y,d,M,1,1),(0,t.draw)(e,a.shape,a.color,1,1)})),C||requestAnimationFrame(E)}function H(a,v,r){var h=S[r],l=(0,t.deepCopy)(s.faceArr[h.face][0]),g=(0,t.deepCopy)(s.headArr[h.head][0]),b=(0,t.deepCopy)(s.neckArr[h.neck]),e=b[0],n=b[1].slice(1),o=(0,t.deepCopy)(s.backArr[h.back][0]),i=(0,t.deepCopy)(s.tailArr[h.tail][0]),c=(0,t.deepCopy)(s.legsArr[h.legs][0]),f=Math.PI/6;if(Math.random()\u003c.66){var p=f*(0,t.porm)()*Math.pow(Math.random(),2),u=Math.atan2(o[o.length-1][1]-o[0][1],o[o.length-1][0]-o[0][0]);o=(0,t.RotateAndScaleAndShift)(o,p,1,1,0,0);var P=Math.atan2(o[o.length-1][1]-o[0][1],o[o.length-1][0]-o[0][0]),m=Math.cos(u)/Math.cos(P);m*=1-p/f*(.05+(1-Math.cos(u))*(p\u003e0?1:.75)),o=(0,t.scalePoints)(o,m,m)}var w=1+.95*Math.random()*(0,t.porm)();e=(0,t.scalePoints)(e,w,w),n=(0,t.scalePoints)(n,w,w);var A=1.2+.8*Math.random()*(0,t.porm)();o=(0,t.scalePoints)(o,A,A),c=(0,t.scalePoints)(c,A,A);var y=1+.95*Math.random()*(0,t.porm)();i=(0,t.scalePoints)(i,y,y);var C=1+.95*Math.random()*(0,t.porm)();l=(0,t.scalePoints)(l,C,C);var k=1+.95*Math.random()*(0,t.porm)();function x(){var a=g[g.length-1][0],s=(e[0][0]-l[l.length-1][0])/a;g=(0,t.scalePoints)(g,s,s)}g=(0,t.scalePoints)(g,k,k);for(var R=0;l[l.length-1][0]+g[g.length-1][0]\u003ee[0][0]\u0026\u0026R\u003c400;)if(R++,Math.random()\u003c.5){var q=1.01;e=(0,t.scalePoints)(e,q,q),n=(0,t.scalePoints)(n,q,q)}else q=.99,l=(0,t.scalePoints)(l,q,q),x();for(R=0;l[l.length-1][1]+g[g.length-1][1]\u003ee[0][1]\u0026\u0026R\u003c400;)R++,Math.random()\u003c.5?(q=.99,e=(0,t.scalePoints)(e,q,q),n=(0,t.scalePoints)(n,q,q)):(q=1.01,l=(0,t.scalePoints)(l,q,q),x());for(var I=0;n[0][1]\u003ee[e.length-1][1]+o[o.length-1][1]+i[i.length-1][1]+c[c.length-1][1]\u0026\u0026I\u003c200;){I++;var O;if(O=o[o.length-1][1]-o[0][1]+c[0][1]-c[c.length-1][1]?.99:1.01,o=(0,t.scalePoints)(o,O,O),c=(0,t.scalePoints)(c,O,O),i=(0,t.scalePoints)(i,1.01,1.01),200===I){var V=n[0][1]-e[e.length-1][1],_=e[e.length-1][1]+o[o.length-1][1]+i[i.length-1][1]+c[c.length-1][1]-e[e.length-1][1];if(V\u003e_){var B=V-_,E=i[i.length-1][1]-i[0][1],H=(E+B)/E;if(H*y\u003e3){var W=B-2*i[i.length-1][1];if(W\u003e0){H=3/y;var G=Math.sqrt(Math.pow(c[1][0],2)+Math.pow(c[1][1],2)),j=Math.sqrt(Math.pow(c[0][2],2)+Math.pow(c[0][3],2))/G;c[0][3]+=W*j;var T=Math.sqrt(Math.pow(c[1][4],2)+Math.pow(c[1][5],2))/G;c[1][1]+=W,c[1][3]+=W,c[1][5]+=W*T;for(var J=2,L=c.length;J\u003cL;J++){var N=c[J];N[1]+=W,N[3]+=W,N[5]+=W}}}i=(0,t.scalePoints)(i,H,H)}}}l[0][4]=Math.min(-l[0][2],n[n.length-2][0]),l[0][5]=-l[0][3];var z=(g=(0,t.shiftPoints)(g,l[l.length-1][0],l[l.length-1][1]))[g.length-1][0]-e[0][0];e[0][0]+=z,e[0][2]+=z,e[0][4]+=z;var F=g[g.length-1][1],D=e[0][1]-F,K=g[g.length-1][0]===g[g.length-2][0]\u0026\u0026g[g.length-1][1]===g[g.length-2][1];if(D\u003e0)e[0][1]-=D,e[0][3]-=D,e[0][5]-=D;else{g[g.length-1][1]+=D,g[g.length-1][3]+=D,g[g.length-1][5]+=D,K\u0026\u0026(g[g.length-2][1]=g[g.length-1][1],g[g.length-2][3]=g[g.length-1][3],g[g.length-2][5]=g[g.length-1][5]);var Q=K?g.length\u003c3?g[g.length-2]:g[g.length-3]:g[g.length-2],U=Math.sqrt(Math.pow(g[g.length-1][0]-Q[0],2)+Math.pow(F-Q[1],2)),X=Math.sqrt(Math.pow(Q[0]-Q[2],2)+Math.pow(Q[1]-Q[3],2)),Y=Math.min(X/U,.5)||0;Q[3]+=D*Y}o=(0,t.shiftPoints)(o,e[e.length-1][0],e[e.length-1][1]),i=(0,t.shiftPoints)(i,o[o.length-1][0],o[o.length-1][1]),c=(0,t.shiftPoints)(c,i[i.length-1][0],i[i.length-1][1]);var Z=n[0][1]-e[e.length-1][1],$=c[c.length-1][1];c[c.length-1][1]=e[e.length-1][1]+Z;var aa=c[c.length-1][1]-$,sa=c[c.length-1][0],va=c[c.length-1][1],ta=Math.sqrt(Math.pow(c[c.length-2][1]-$,2)+Math.pow(c[c.length-2][0]-sa,2)),ra=Math.sqrt(Math.pow(c[c.length-2][1]-va,2)+Math.pow(c[c.length-2][0]-sa,2)),ha=Math.sqrt(Math.pow(c[c.length-2][3]-$,2)+Math.pow(c[c.length-2][2]-sa,2))/ra/(Math.sqrt(Math.pow(c[c.length-2][3]-$,2)+Math.pow(c[c.length-2][2]-sa,2))/ta);c[c.length-2][3]+=aa*ha;var la=l.concat((0,t.deepCopy)(g)).concat((0,t.deepCopy)(e).splice(0,e.length-1)).concat((0,t.deepCopy)(o).splice(0,o.length-1)).concat((0,t.deepCopy)(i).splice(0,i.length-1)).concat((0,t.deepCopy)(c).splice(0,c.length-1)).concat((0,t.deepCopy)(n).splice(0,n.length-1));la.push(l[0]);var ga=1/0,ba=-1/0,ea=-1/0,na=1/0;for(J=0,L=l.length;J\u003cL;J++)ga\u003e(oa=l[J][0])\u0026\u0026(ga=oa);for(J=0,L=g.length;J\u003cL;J++)ga\u003e(oa=g[J][0])\u0026\u0026(ga=oa);for(J=0,L=c.length;J\u003cL;J++)ga\u003e(oa=c[J][0])\u0026\u0026(ga=oa);for(J=0,L=i.length;J\u003cL;J++)ba\u003c(oa=i[J][0])\u0026\u0026(ba=oa);for(J=0,L=c.length;J\u003cL;J++)ba\u003c(oa=c[J][0])\u0026\u0026(ba=oa);for(J=0,L=o.length;J\u003cL;J++){var oa;ba\u003c(oa=o[J][0])\u0026\u0026(ba=oa)}for(J=0,L=c.length;J\u003cL;J++)ea\u003c(ia=c[J][1])\u0026\u0026(ea=ia);for(J=0,L=g.length;J\u003cL;J++)na\u003e(ia=g[J][1])\u0026\u0026(na=ia);for(J=0,L=l.length;J\u003cL;J++)na\u003e(ia=l[J][1])\u0026\u0026(na=ia);for(J=0,L=e.length;J\u003cL;J++)na\u003e(ia=e[J][1])\u0026\u0026(na=ia);for(J=0,L=o.length;J\u003cL;J++){var ia;na\u003e(ia=o[J][1])\u0026\u0026(na=ia)}var ca,fa,pa,da=ba-ga,Ma=ea-na;da\u003eMa?(fa=.05*d,pa=(M-Ma*(ca=.9*d/da))/2):(fa=(d-da*(ca=.9*M/Ma))/2,pa=.05*M);var ua=fa-ga*ca+a,Pa=pa-na*ca+v;return la=(0,t.scalePoints)(la,ca,ca),(0,t.shiftPoints)(la,ua,Pa)}function W(a,v,r){var h,l,g=S[r],b=(0,t.deepCopy)(s.faceArr[g.face][0]),e=(0,t.deepCopy)(s.headArr[g.head][0]),n=(0,t.deepCopy)(s.neckArr[g.neck]),o=n[0],i=n[1].slice(1),c=(0,t.deepCopy)(s.backArr[g.back][0]),f=(0,t.deepCopy)(s.tailArr[g.tail][0]),p=(0,t.deepCopy)(s.legsArr[g.legs][0]),u=[p,b,e,o=(0,t.shiftPoints)(o,-o[0][0],-o[0][1]),c,f,i=(0,t.shiftPoints)(i,-i[0][0],-i[0][1])],P=Math.random()\u003c.25;P?(u=(0,t.shuffle)(u.slice(1))).unshift(p):u=(0,t.shuffle)(u);for(var m=u.length,w=P?1:0;w\u003cm;w++){var A=u[w],y=A[0],C=A[A.length-1],k=Math.atan2(C[1]-y[1],C[0]-y[0]);u[w]=(0,t.RotateAndScaleAndShift)(A,-k,1,1,0,0)}for(w=0;w\u003cm-2;w++)u[w]=(h=u[w],void 0,l=1+9*Math.random(),(0,t.scalePoints)(h,l,l));var x=P?[0]:[],R=2*Math.PI/m,q=P?0:2*Math.PI*Math.random(),I=q;for(w=P?1:0;w\u003cm-2;w++)I+=R*(.5+Math.random()),I=Math.min(I,R*(w+.5)),x.push(I);I+=.5*(2*Math.PI-(I-q)),x.push(I),x.push(q+2*Math.PI);var O=Math.PI;for(w=P?1:0;w\u003cm;w++){var V=u[w];u[w]=(0,t.RotateAndScaleAndShift)(V,O+x[w],1,1,0,0)}u[m-1]=(0,t.shiftPoints)(u[m-1],-u[m-1][u[m-1].length-1][0],-u[m-1][u[m-1].length-1][1]);var _=0,B=0;for(w=0;w\u003cm-2;w++){var E=u[w];_+=E[E.length-1][0],B+=E[E.length-1][1]}var H=(0,t.shiftPoints)((0,t.deepCopy)(u[m-2]),_,B),W=(0,t.getCrossPoint)([0,0],[u[m-1][0][0],u[m-1][0][1]],[H[0][0],H[0][1]],[H[H.length-1][0],H[H.length-1][1]]),G=Math.abs(W[0]/u[m-1][0][0]);u[m-1]=(0,t.shiftPoints)(u[m-1],-u[m-1][0][0],-u[m-1][0][1]),u[m-1]=(0,t.scalePoints)(u[m-1],G,G),u[m-1]=(0,t.shiftPoints)(u[m-1],-u[m-1][u[m-1].length-1][0],-u[m-1][u[m-1].length-1][1]);var j=Math.abs((W[0]-H[0][0])/(H[H.length-1][0]-H[0][0]));for(u[m-2]=(0,t.scalePoints)(u[m-2],j,j),w=1;w\u003cm-1;w++)u[w]=(0,t.shiftPoints)(u[w],u[w-1][u[w-1].length-1][0],u[w-1][u[w-1].length-1][1]);var T=(0,t.deepCopy)(u[0]).splice(0,u[0].length-1);for(w=1;w\u003cm;w++)T=w===m-1?T.concat((0,t.deepCopy)(u[w])):T.concat((0,t.deepCopy)(u[w]).splice(0,u[w].length-1));for(var J=1/0,L=-1/0,N=-1/0,z=1/0,F=(w=0,T.length);w\u003cF;w++){var D=T[w][0],K=T[w][1];J\u003eD\u0026\u0026(J=D),L\u003cD\u0026\u0026(L=D),N\u003cK\u0026\u0026(N=K),z\u003eK\u0026\u0026(z=K)}var Q,U,X,Y=L-J,Z=N-z;Y\u003eZ?(U=.1*d,X=(M-Z*(Q=.85*d/Y))/2):(U=(d-Y*(Q=.85*M/Z))/2,X=.1*M);var $=U-J*Q+a,aa=X-z*Q+v;return T=(0,t.scalePoints)(T,Q,Q),(0,t.shiftPoints)(T,$,aa)}(0,t.refresh)(e,w,0,0,h,l,1,1),S.forEach((function(a){(0,t.draw)(e,a.shape,a.color,1,1)})),E(),b.addEventListener(\"click\",(function(){(C=!C)||E()})),window.addEventListener(\"keypress\",(function(a){\"p\"===a.key\u0026\u0026((C=!C)||E())}))})()})();","artId":"ch712tkn70rkl4ca3ur0","libraries":[]}],"like":0,"thumbFileName":"ch712tkn70rkl4ca3ur0.png","selectedThumbFileName":"ch712tkn70rkl4ca3ur0.png","thumbnailFileUrl":"","resourceFileName":"ch712tkn70rkl4ca3ur0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmNyBCTQWUgaHzf3frTjybDTWGWrBK9wzo7wMFWwat3XWH","resourceType":1,"metadataUrl":"","tags":[{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch726pcn70rkl4ca3v30","title":"Jumpy Walking","description":"","createdAt":1682842471,"updatedAt":1683119690,"user":{"id":"ctdhDGDqQwQSv15IHpAKaOh42hg2","customId":"gin","name":"ギン","biography":"Generative Artist\ntwitter(JP): https://twitter.com/gin_graphic\ntwitter(EN): https://twitter.com/ginzi_o\nlinktree: https://linktr.ee/gin_graphic","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ctdhDGDqQwQSv15IHpAKaOh42hg2.jpg","createdAt":1637141678304,"updatedAt":1702694434431},"codes":[{"id":"ch726psn70rkl4ca3v40","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"ja\"\u003e\n\u003chead\u003e\n \u003cmeta charset=\"UTF-8\"\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n \u003ctitle\u003eHello p5\u003c/title\u003e\n \u003clink rel=\"stylesheet\" href=\"main.css\"\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js\"\u003e\u003c/script\u003e\n\n\u003c/head\u003e\n\u003cbody\u003e\n \u003cscript src=\"main.js\"\u003e\u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e","artId":"ch726pcn70rkl4ca3v30","libraries":[]},{"id":"ch726psn70rkl4ca3v4g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ch726pcn70rkl4ca3v30","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch726psn70rkl4ca3v50","type":2,"text":"const colors = [\n\t[\"#FFD4B2\",\"#FFF6BD\",\"#CEEDC7\",\"#86C8BC\",\"#404060\"],\n\t[\"#30b0a0\",\"#1A4D2E\",\"#FF9F29\",\"#FAF3E3\",\"#0f0f06\"],\n\t[\"#06283D\",\"#1363DF\",\"#47B5FF\",\"#50b0dd\",\"#EFF6FF\"],\n\t[\"#8B1874\",\"#B71375\",\"#DC3535\",\"#454545\",\"#D989B5\"]\n]\n\nfunction setup() {\n\tcreateCanvas(w=11012, h=1080)\n\tpixelDensity(1)\n\n\tlet color_pat = random(colors)\n\tcolor_pat = shuffle(color_pat)\n\tbg = color_pat.pop()\n\n\tobj = []\n\tfor(let i=0;i\u003c200;i++){\n\t\tobj[i] = {x:random(w), y:random(h),\n\t\t\t\t\tsize:random(h*0.05),\n\t\t\t\t\tmode:random([0, 1, 2, 3]),\n\t\t\t\t\tcolor:random(color_pat)\n\t\t\t\t\t}\n\t}\n\n\tframeRate(10)\n\tnoFill()\n\td = h*0.025\n}\n\nfunction draw() {\n\tbackground(bg)\n\t\n\tfor(let i=0;i\u003cobj.length;i++){\n\t\tlet x_next, y_next\n\n\t\tif(obj[i].mode == 0){\n\t\t\tx_next = obj[i].x + random(-1,1)*d\n\t\t\ty_next = obj[i].y + sin(obj[i].x/w*TAU)*d\n\t\t} else if(obj[i].mode == 1){\n\t\t\tx_next = obj[i].x + cos(obj[i].y/h*TAU)*d\n\t\t\ty_next = obj[i].y + random(-1,1)*d\n\t\t} else{\n\t\t\tx_next = obj[i].x\n\t\t\ty_next = obj[i].y\n\t\t\tobj[i].size += random(-1,1)*h*0.025\n\t\t\tif(obj[i].size \u003c h*0.025){obj[i].size = h*0.025}\n\t\t\tif(obj[i].size \u003e h*0.15){obj[i].size = h*0.15}\n\t\t}\n\n\t\tstroke(obj[i].color)\n\t\tline(obj[i].x, obj[i].y, x_next, y_next)\n\t\tellipse((obj[i].x+x_next)/2, (obj[i].y+y_next)/2, obj[i].size)\n\n\t\tobj[i].x = (x_next + w) % w\n\t\tobj[i].y = (y_next + h) % h\n\n\t\tif(random()\u003c0.5){\n\t\t\tobj[i].mode = random([0, 1, 2, 3])\n\t\t}\n\t}\n\n\tif(second()%20==0){setup()}\n}","artId":"ch726pcn70rkl4ca3v30","libraries":[]}],"like":0,"thumbFileName":"ch726pcn70rkl4ca3v30.png","selectedThumbFileName":"ch726pcn70rkl4ca3v30.png","thumbnailFileUrl":"","resourceFileName":"ch726pcn70rkl4ca3v30.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmWqXnY9jai2RuLgArwfHWonRKMS2Em8hYeDedPMMtfP3B","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8m74kn70rkl4ca4b7g","title":"Generative Art Monster for CURATION FREE #2","description":"","createdAt":1683063301,"updatedAt":1683063301,"user":{"id":"hFBT0WFq3KOEE3ReCvJA7rAKOqS2","customId":"hFBT0WFq3KOEE3ReCvJA7rAKOqS2","name":"raf","biography":"Digital artist - Illustration x Creative coding\nイラストとクリエイティブコーティング (WebGL / three.js) によるアート作品を作っています。イラストがズビズビ動きます! Webブラウザで動きます!","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/hFBT0WFq3KOEE3ReCvJA7rAKOqS2.png","createdAt":1654617164951,"updatedAt":1690532617245},"codes":[{"id":"ch8m75kn70rkl4ca4b8g","type":0,"text":"\u003cscript async type=\"module\" crossorigin src=\"https://stat.neort.io/externalResource/ch8o1asn70rkl4ca4bgg.js\"\u003e\u003c/script\u003e\n\u003cdiv class=\"loading js-loading\"\u003e\u003c/div\u003e\n\u003cdiv class=\"main js-main\"\u003e\u003c/div\u003e","artId":"ch8m74kn70rkl4ca4b7g","libraries":[]},{"id":"ch8m75kn70rkl4ca4b90","type":1,"text":"html,body,.main,.loading{\n position:fixed;\n top:0;\n right:0;\n bottom:0;\n left:0;\n padding:0;\n margin:0\n}\n.loading{\n z-index:1001;\n display:flex;\n flex-direction:column;\n flex-wrap:nowrap;\n align-items:center;\n justify-content:center;\n width:100%;\n height:100%;\n font-family:sans-serif;\n font-size:16px;\n font-weight:700;\n color:#ccc;\n text-align:center;\n letter-spacing:.06em;\n white-space:nowrap;\n background-color:#fff;\n transition:opacity .2s linear,visibility .2s linear\n}\n.loading:before{\n position:relative;\n z-index:1;\n display:block;\n content:\"Loading...\"\n}\n.loading.is-loaded{\n visibility:hidden;\n opacity:0\n}","artId":"ch8m74kn70rkl4ca4b7g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch8m75kn70rkl4ca4b9g","type":2,"text":"","artId":"ch8m74kn70rkl4ca4b7g","libraries":[]}],"like":1,"thumbFileName":"ch8m74kn70rkl4ca4b7g.png","selectedThumbFileName":"ch8m74kn70rkl4ca4b7g.png","thumbnailFileUrl":"","resourceFileName":"ch8m74kn70rkl4ca4b7g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVc5K76XnM1e3vR66YXvsEqFgDSkrkFKLi3WkWr8nFavj","resourceType":1,"metadataUrl":"","tags":[{"id":"bmk0qi43p9f7m1g01q1g","name":"WebGL"},{"id":"bpcq6043p9f4nmb8bb60","name":"threejs"},{"id":"c8nof7c3p9f0i94dgb7g","name":"illustration"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8tdrsn70rkl4ca4csg","title":"Galactic Stream","description":"Mouse Click : New noise \u0026 Redraw\n\nMouse Move : Change direction\n\nMouse Wheel : Zoom in \u0026 Zoom out","createdAt":1683085042,"updatedAt":1683086922,"user":{"id":"X9oC9Zoah7MwobvFt5RNJ9ExlRg2","customId":"X9oC9Zoah7MwobvFt5RNJ9ExlRg2","name":"Atsushi Tanaka","biography":"Processing p5.js TouchDesiger Unity","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/X9oC9Zoah7MwobvFt5RNJ9ExlRg2.png","createdAt":1669109903757,"updatedAt":1727256248322},"codes":[{"id":"ch8tdskn70rkl4ca4ctg","type":0,"text":"\u003cscript src=\"https://cdn.jsdelivr.net/npm/p5@1.5.0/lib/p5.js\"\u003e\u003c/script\u003e","artId":"ch8tdrsn70rkl4ca4csg","libraries":[]},{"id":"ch8tdskn70rkl4ca4cu0","type":1,"text":"body {\n\t-webkit-text-size-adjust: 100%;\n\tbackground-color: #000000;\n\tpadding: 0;\n\tmargin: 0;\n\toverflow-x: visible;\n}\n\n#top_view {\n\tposition: fixed;\n\ttop: 0px;\n\tleft: 0px;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: -1;\n}","artId":"ch8tdrsn70rkl4ca4csg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch8tdskn70rkl4ca4cug","type":2,"text":"var agents = [];\r\nvar agents_count = 2000;\r\n\r\nvar noise_scale = 740;\r\nvar noise_strength = 20;\r\n\r\nvar noise_step = 0.6;\r\nvar now_step = 0.6;\r\nvar target_step = 160;\r\n\r\nvar agent_alpha = 100;\r\n\r\nvar init_zoom = 0;\r\nvar now_zoom = 0;\r\nvar target_zoom = 0;\r\nvar rot_x = 0;\r\nvar rot_y = 0;\r\nvar target_rotx = 0;\r\nvar target_roty = 0;\r\nvar space_w = 0;\r\nvar space_h = 0;\r\nvar space_d = 0;\r\nvar guide_draw = false;\r\n\r\nvar back_hue;\r\nvar ball_hue;\r\nvar temp_hue;\r\n\r\nfunction setup () {\r\n\r\n\tcanvas = createCanvas (windowWidth, windowHeight, WEBGL);\r\n\tcanvas.id ('top_view');\r\n\r\n\tpixelDensity (displayDensity ());\r\n\tcolorMode (HSB, 360, 100, 100);\r\n\r\n\tspace_w = min (width, height) * 0.343;\r\n\tspace_h = min (width, height) * 0.343;\r\n\tspace_d = min (width, height) * 0.343;\r\n\r\n\tback_hue = random (0, 360);\r\n\tball_hue = [];\r\n\tfor (var i = -50; i \u003c 60; i += 10) {\r\n\t\tif (back_hue + i \u003c 0) {\r\n\t\t\ttemp_hue = back_hue + i + 360;\r\n\t\t} else if (back_hue + i \u003e 360) {\r\n\t\t\ttemp_hue = back_hue + i - 360;\r\n\t\t} else {\r\n\t\t\ttemp_hue = back_hue + i\r\n\t\t}\r\n\t\tball_hue.push (temp_hue + i);\r\n\t}\r\n\tinit_zoom = random (-space_w * 1.6, space_w * 0.8);\r\n\tnow_zoom = init_zoom;\r\n\ttarget_zoom = init_zoom;\r\n\ttarget_rotx = random (-10, 10);\r\n\ttarget_roty = random (-10, 10);\r\n\r\n\tbackground (back_hue, 20, 100);\r\n\r\n\tnoiseSeed (int (random (100000)));\r\n\r\n\tfor (var i = 0; i \u003c agents_count; i++) {\r\n\t\tagents.push (new Agent (ball_hue[i % ball_hue.length]));\r\n\t}\r\n\r\n\tdocument.addEventListener ('touchmove', handleTouchMove, {passive: false});\r\n\r\n}\r\n\r\nfunction draw () {\r\n\r\n\tif (frameCount == 100) {\r\n\t\ttarget_step = 0.6;\r\n\t}\r\n\r\n\tpush ();\r\n\r\n\tnow_zoom += (target_zoom - now_zoom) * 0.04;\r\n\r\n\ttranslate (0, 0, now_zoom);\r\n\r\n\ttarget_rotx += (mouseY - pmouseY) * 0.008;\r\n\ttarget_roty += (mouseX - pmouseX) * 0.004;\r\n\r\n\trot_x += (target_rotx - rot_x) * 0.008;\r\n\trot_y += (target_roty - rot_y) * 0.008;\r\n\r\n\trotateX (-rot_x);\r\n\trotateY (-rot_y);\r\n\r\n\tif (guide_draw == true) {\r\n\t\tnoFill ();\r\n\t\tstroke (back_hue, 10, 80);\r\n\t\tstrokeWeight (0.5);\r\n\t\tbox (space_w * 2, space_h * 2, space_d * 2);\r\n\t}\r\n\r\n\tfor (var i = 0; i \u003c agents.length; i++) {\r\n\t\tagents[i].update ();\r\n\t\tagents[i].render ();\r\n\t}\r\n\r\n\tpop ();\r\n\r\n\t// console.log (now_zoom);\r\n\r\n}\r\n\r\nfunction Agent (h) {\r\n\r\n\tvar pos;\r\n\tvar offset;\r\n\tvar ball_rad;\r\n\tvar ball_col;\r\n\tvar angley;\r\n\tvar anglez;\r\n\r\n\tpos = new p5.Vector (0, 0, 0);\r\n\r\n\toffset = 10000;\r\n\r\n\tball_rad = 1;\r\n\tball_col = color (h, 100, 80);\r\n\r\n\tset_position ();\r\n\t\r\n\tthis.update = function () {\r\n\r\n\t\tnow_step += (target_step - now_step) * 0.00002;\r\n\t\tnoise_step = constrain (now_step, 0.6, 10);\r\n\r\n\t\tangley = noise (pos.x / noise_scale, pos.y / noise_scale, pos.z / noise_scale) * noise_strength;\r\n\t\tanglez = noise (pos.x / noise_scale + offset, pos.y / noise_scale, pos.z / noise_scale) * noise_strength;\r\n\r\n\t\tpos.x += cos (anglez) * cos (angley) * noise_step;\r\n\t\tpos.y += sin (anglez) * noise_step;\r\n\t\tpos.z += cos (anglez) * sin (angley) * noise_step;\r\n\r\n\t\tif (pos.x \u003c -space_w || pos.x \u003e space_w || pos.y \u003c -space_h || pos.y \u003e space_h || pos.z \u003c -space_d || pos.z \u003e space_d) {\r\n\t\t\t// set_position ();\r\n\t\t}\r\n\r\n\t}\r\n\r\n\tthis.render = function () {\r\n\r\n\t\tpush ();\r\n\r\n\t\ttranslate (pos.x, pos.y, pos.z);\r\n\t\trotateY (rot_y);\r\n\t\trotateX (rot_x);\r\n\r\n\t\tfill (ball_col);\r\n\t\tnoStroke ();\r\n\t\tellipse (0, 0, ball_rad, ball_rad);\r\n\r\n\t\tpop ();\r\n\r\n\t}\r\n\r\n\tthis.init = function () {\r\n\r\n\t\tset_position ();\r\n\r\n\t}\r\n\r\n\tfunction set_position () {\r\n\r\n\t\tpos.x = random (-space_w, space_w);\r\n\t\tpos.y = random (-space_h, space_h);\r\n\t\tpos.z = random (-space_d, space_d);\r\n\r\n\t}\r\n\r\n}\r\n\r\nfunction mousePressed () {\r\n\r\n\tbackground (back_hue, 20, 100);\r\n\tfor (var i = 0; i \u003c agents.length; i++) {\r\n\t\tagents[i].init ();\r\n\t}\r\n\tnoiseSeed (int (random (100000)));\r\n\ttarget_step = 160;\r\n\r\n}\r\n\r\nfunction mouseReleased () {\r\n\r\n\ttarget_step = 0.6;\r\n\r\n}\r\n\r\nfunction mouseWheel (event) {\r\n\r\n\ttarget_zoom -= (event.delta * 1.8);\r\n\r\n}\r\n\r\nfunction keyPressed () {\r\n\r\n\tif (key == 'g') {\r\n\t\tguide_draw = !guide_draw;\r\n\t}\r\n\r\n}\r\n\r\nfunction handleTouchMove (event) {\r\n\r\n\tevent.preventDefault ();\r\n\r\n}\r\n\r\nfunction windowResized () {\r\n\r\n\tcanvas = resizeCanvas (windowWidth, windowHeight);\r\n\tspace_w = min (width, height) * 0.343;\r\n\tspace_h = min (width, height) * 0.343;\r\n\tspace_d = min (width, height) * 0.343;\r\n\tbackground (back_hue, 10, 100);\r\n\r\n}","artId":"ch8tdrsn70rkl4ca4csg","libraries":[]}],"like":1,"thumbFileName":"ch8tdrsn70rkl4ca4csg.png","selectedThumbFileName":"ch8tdrsn70rkl4ca4csg.png","thumbnailFileUrl":"","resourceFileName":"ch8tdrsn70rkl4ca4csg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmb8Enda16hopEatsXJyREQ7KvFYKvPSvb74tj82fUah9E","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8tg4kn70rkl4ca4d0g","title":"Toward / Against Harmony = Harmony","description":"調和は、状態ではなく運動である。\n\n「全体的な均衡をもつ最後の限界は、灰色であろう。これは生命のない調和である。」\nパウル・クレー 『造形思考(下)』土方定一・菊盛英夫・坂崎乙郎 訳\n","createdAt":1683085335,"updatedAt":1728740940,"user":{"id":"krziztg8vBRxTsBU9PkmcngzxIq2","customId":"doshin","name":"Do-Shin","biography":"童心、同心、Do心、Do新\nScrapbox’s page as my portfolio :\nhttps://scrapbox.io/convivialist/Takahiro_Fujii\nGenerative art’s account of Instagram :\nhttps://instagram.com/the_fish_who_discovered_water?igshid=YmMyMTA2M2Y=","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/krziztg8vBRxTsBU9PkmcngzxIq2.jpg","createdAt":1588570720000,"updatedAt":1732245368234},"codes":[],"like":0,"thumbFileName":"ch8tg4kn70rkl4ca4d0g.png","selectedThumbFileName":"","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/Qmby8gJJxzCUNkZ6kXxKamYG7FaPhcypK8KdLYV8bP7kRf","resourceFileName":"ch8tg4kn70rkl4ca4d0g.png","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPHzwVa7EwyDXQpiAF8GUAGsgKL3Q7xrgvgX7NbbZLL9C","resourceType":4,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmavHuBgcyaYWGoo84QdnwpLEK21qcRqLemKiJqGZGD6mz","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"#000","layoutType":2,"price":{"amount":0.04,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ch8c9bsn70rkl4ca4860","title":"zure","description":"ずれ、\n\nピクセルがずれ、\n\nデータがずれ、\n\n座標がずれ、\n\n傾きがずれる。\n\n離れてみると、\n\n小さな変化は大きな変化の一部だった。\n\n-----------------------------------------\n最近、自分がずれていることに不安になったり、逆に安心したり、道を踏み外そうとしたらそこが別の道だったり、真っ直ぐ進んでいるつもりだったのに溝に落ちたりします。ズレと言うのは相対的なもので比べなければ分からないはずです。他の惑星と比べずに地球と太陽だけを取り出したら、どちらがどちらの周りを回っているのかわかりません。周りが無ければズレることはありませんが、人間社会に生きることとは隣の人がいることです。嫌でも比べてしまうズレに悩まされ、よりズレます。しかし、ズレとズレが並ぶことで面白い、もしくは心地よいリズムが生まれることも知ってしまっています。","createdAt":1683085549,"updatedAt":1683085549,"user":{"id":"dU0UUrsxXqRhE5LFeziMJUMONl83","customId":"dU0UUrsxXqRhE5LFeziMJUMONl83","name":"uesən","biography":"https://twitter.com/testtesttestts5\nuesYn / 音とモーション。\nhttps://uesen.gif.jp/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/dU0UUrsxXqRhE5LFeziMJUMONl83.png","createdAt":1577451826000,"updatedAt":1727259355848},"codes":[{"id":"ch8c9d4n70rkl4ca4870","type":0,"text":"","artId":"ch8c9bsn70rkl4ca4860","libraries":[]},{"id":"ch8c9d4n70rkl4ca487g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ch8c9bsn70rkl4ca4860","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch8c9d4n70rkl4ca4880","type":2,"text":"var num = 200;\r\nvar ballX = [];\r\nvar ballY = [];\r\nvar ballXacc = [];\r\nvar ballYacc = [];\r\nvar ballSize = 10;\r\nvar t = 0;\r\nvar u = 0;\r\nvar a,b,c;\r\n\r\nfunction setup(){\r\n noSmooth();\r\n createCanvas(11012, 1080);\r\n background(0);\r\n for(var i=0; i\u003cnum; i++){\r\n ballX[i] = ((i%(num/2))*width/(num/2))+width/(num/4);\r\n ballY[i] = ((i%2)*height/2)+height/4;\r\n var r0 = 2*PI*i/num+PI/2;\r\n ballXacc[i] = sin(r0);\r\n ballYacc[i] = cos(r0);\r\n }\r\n\r\n}\r\n\r\nfunction draw() {\r\n blendMode(ADD);\r\n for(var i=0; i\u003cnum; i++){\r\n for(var j=0; j\u003cnum; j++){\r\n if(i\u003cj \u0026\u0026 dist(ballX[i],ballY[i],ballX[j],ballY[j])\u003c200){\r\n stroke(255,255-255*dist(ballX[i],ballY[i],ballX[j],ballY[j])/200);\r\n line(ballX[i],ballY[i],ballX[j],ballY[j]);\r\n }\r\n }\r\n blendMode(BLEND);\r\n\r\n stroke(0);\r\n fill(255);\r\n ellipse(ballX[i], ballY[i], ballSize, ballSize);\r\n ballX[i] += ballXacc[i];\r\n ballY[i] += ballYacc[i];\r\n if(ballY[i]\u003c0 || height\u003cballY[i])ballYacc[i]*=-1;\r\n \r\n if(ballX[i]\u003cballSize)ellipse(width+ballX[i], ballY[i], ballSize, ballSize);\r\n if(ballX[i]\u003c-ballSize)ballX[i] = width+ballX[i]-1;\r\n if(width-ballSize\u003cballX[i])ellipse(ballX[i]-width, ballY[i], ballSize, ballSize);\r\n if(width+ballSize\u003cballX[i])ballX[i] = ballX[i]-width+1;\r\n }\r\n if(t%15==9){\r\n loadPixels();\r\n for(var i=0; i\u003cwidth; i++){\r\n for(var j=0; j\u003cheight; j++){\r\n if(pixels[(i*height+j)*4+0]\u003c=255/4)\r\n pixels[(i*height+j)*4+0] = pixels[(i*height+j+1)*4+0]*1.05;\r\n if(pixels[(i*height+j)*4+1]\u003c=255/4)\r\n pixels[(i*height+j)*4+1] = pixels[(i*height+j+2)*4+1]*1.05;\r\n if(pixels[(i*height+j)*4+2]\u003c=255/4)\r\n pixels[(i*height+j)*4+2] = pixels[(i*height+j+3)*4+2]*1.05;\r\n }\r\n }\r\n updatePixels();\r\n }\r\n t++;\r\n}","artId":"ch8c9bsn70rkl4ca4860","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"ch8c9bsn70rkl4ca4860.png","selectedThumbFileName":"ch8c9bsn70rkl4ca4860.png","thumbnailFileUrl":"","resourceFileName":"ch8c9bsn70rkl4ca4860.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmauQQrLbX7W3nzE6Rg2z8qMrRAUCBThLLkGj6PWSWm8qp","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch97iecn70rkl4ca4gd0","title":"While Away","description":"*Please make sure to turn on the background sound when displaying. Thank you.\n\nThis was a video installation inspired by one of Josef Albers' sketches called \"Wings\" from 1934. I appropriated its form and translated it into my own “window” at the end. Through the use of dynamic still images and attached sounds, I aimed to examine the multiple possibilities of people's perception towards one thing. With the overwhelming size of the piece, I intended to immerse the viewer into the imagery of this constructed environment, allowing them to experience their own imagination and create their own interpretation of what was happening behind the scenes.","createdAt":1683126628,"updatedAt":1683136618,"user":{"id":"TObRaoiDL6NY8EC7vcNBANEuvO92","customId":"TObRaoiDL6NY8EC7vcNBANEuvO92","name":"QiuChen Fan","biography":"drawing✍️ + painting👩🏻‍🎨🫧 traditional/digital\n\nhttps://bio.site/QiuchenFan","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/TObRaoiDL6NY8EC7vcNBANEuvO92.jpg","createdAt":1670163905247,"updatedAt":1728324112953},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch97iecn70rkl4ca4gd0.png","thumbnailFileUrl":"","resourceFileName":"ch97iecn70rkl4ca4gd0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmRhNAxbxH1kSaMgnbE9wmEY5iP8BRa3rrsSdEoSSeQQPS","resourceType":2,"metadataUrl":"","tags":[{"id":"bqb92vc3p9f6qoqnnffg","name":"sound"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9m9msn70rkl4ca4km0","title":"Flare_2","description":"Method:\nTiltBrush(3D painting), KaiberAI, Video Editing\n\n\"Flare_2\"\n\nThis work is a remake of a piece I painted two years ago called \"Flare\".\nAlmost of the motifs I had painted in this work in the past have been replaced by butterflies.\nI recently changed my environment in order to concentrate on my creative work, and my heart is eager to flap its wings.\n\nこの作品は2年前に描いた「Flare」という作品のリメイクです。\n過去のこの作品の中に描いていたモチーフがほとんど蝶に置き換わっています。\nここ最近、創作に集中するために環境を変えたばかりの私の心は羽ばたきたくてしようがない、そんな心の高揚とともに未来へ進んでゆく強い決心を表現した作品です。\n","createdAt":1683186953,"updatedAt":1683186953,"user":{"id":"01vBlOx7Z7Sf4G4WdXQBPbF14nt1","customId":"","name":"Torazo🐯Artist","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/01vBlOx7Z7Sf4G4WdXQBPbF14nt1.jpg","createdAt":1683178794724,"updatedAt":1701689430551},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch9m9msn70rkl4ca4km0.png","thumbnailFileUrl":"","resourceFileName":"ch9m9msn70rkl4ca4km0.mov","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVRRmtDJt8pJ8x9aLfbfMJWJQHq4hBiWQKyQC3cFCp3M1","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"},{"id":"ch9ma2cn70rkl4ca4kn0","name":"Torazo"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9odskn70rkl4ca4mq0","title":"Street of tigers live surrounded by flowers.","description":"Method: TiltBrush(3D painting), KaiberAI, Video Editing\n\nFlowers disguised as moons will greet you with their big mouths open.\nStraight toward is a small japanese alcove, and as you slip through, golden sunlight will pour down on you.\nTigers with peaceful expressions look at you gently.\nBut never approach them, for they are thinking of eating your thoughts.\n\n月に化けた花は大きな口を開けてあなたを迎え入れるでしょう。\nそのまままっすぐに進んだ先には小さな床の間があって、すり抜けると金色の太陽の光が降り注ぎます。\n穏やかな表情の寅たちは優しくこちらを見ています。\nしかし、決して近づいてはいけません。なぜなら人間たちの思考を喰てっしまおうと考えているからです。\n","createdAt":1683195649,"updatedAt":1683195649,"user":{"id":"01vBlOx7Z7Sf4G4WdXQBPbF14nt1","customId":"","name":"Torazo🐯Artist","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/01vBlOx7Z7Sf4G4WdXQBPbF14nt1.jpg","createdAt":1683178794724,"updatedAt":1701689430551},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch9odskn70rkl4ca4mq0.jpg","thumbnailFileUrl":"","resourceFileName":"ch9odskn70rkl4ca4mq0.mov","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZK87bR6WeCgqviK8VsG7vJVvNrsxNXBmZPmqbY6Dn28t","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"},{"id":"ch9ma2cn70rkl4ca4kn0","name":"Torazo"},{"id":"ch9oe0cn70rkl4ca4mr0","name":"Tiger"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9t384n70rkl4ca4p5g","title":"Atlascape","description":"Topographical map with a high level of detail phasing through colors based on the height. \n\nMade in P5.js ","createdAt":1683214763,"updatedAt":1683214763,"user":{"id":"j9CcHMdR7HY9NQ8qvZpqFsnZE0J3","customId":"j9CcHMdR7HY9NQ8qvZpqFsnZE0J3","name":"P1xelboy","biography":"I make generative art using p5.js and pico8. CompSci MSc. ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/j9CcHMdR7HY9NQ8qvZpqFsnZE0J3.png","createdAt":1669799993564,"updatedAt":1686588000555},"codes":[],"like":0,"thumbFileName":"ch9t384n70rkl4ca4p5g.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ch9t384n70rkl4ca4p60.png","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZ1EgwkqLg5dNTGGrZtUrNjze5eGEG8YDke7KcpefeW59","resourceType":4,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"c6d83ks3p9f3v3bl1fug","name":"p5"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"},{"id":"ch9t3asn70rkl4ca4p70","name":"map"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"rgba(30, 5, 31, 1)","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cha061sn70rkl4ca4pqg","title":"Phyllotaxis","description":"Exploration on Phyllotaxis patterns and implementation. Done in Vulkan using Rust. \n\nSource: \n\nhttps://gitlab.com/sortofsleepy/yoi/-/blob/cleanup/sketches/src/bin/phyllotaxis.rs\n\n\nBased on work by Deborah Fowler\n\nhttps://www.deborahrfowler.com/WebGL/WebGLExamples/Phyllotaxis/phylloWebgl.html\n","createdAt":1683227440,"updatedAt":1683227440,"user":{"id":"xRmBysk6W5PkiQ0TDiDuE8QNxrJ3","customId":"sortofsleepy","name":"sortofsleepy","biography":"Sometimes creative coder. \n\nA little more about me can be found @ lnnks.co/30da","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/xRmBysk6W5PkiQ0TDiDuE8QNxrJ3.jpg","createdAt":1640582202822,"updatedAt":1730682449035},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"cha061sn70rkl4ca4pqg.png","thumbnailFileUrl":"","resourceFileName":"cha061sn70rkl4ca4pqg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmReFzuPzRLELphY7js2CqmLMoy59Xe2KbYNH3sm72wh4Q","resourceType":2,"metadataUrl":"","tags":[{"id":"bvghers3p9fb02meqtqg","name":"Rust"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"},{"id":"cha06c4n70rkl4ca4prg","name":"Vulkan"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cha65usn70rkl4ca4q70","title":"Morph","description":"Molded SphereSOP in TouchDesigner with VertexShader","createdAt":1683252011,"updatedAt":1683252011,"user":{"id":"9asagcABrCYeZHIma9xRVQrpAgD2","customId":"9asagcABrCYeZHIma9xRVQrpAgD2","name":"MASATOnoUSB","biography":"Twitter : https://twitter.com/usbhatyu","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/9asagcABrCYeZHIma9xRVQrpAgD2.jpg","createdAt":1607210377000,"updatedAt":1683434389149},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"cha65usn70rkl4ca4q70.jpg","thumbnailFileUrl":"","resourceFileName":"cha65usn70rkl4ca4q70.mov","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUVhFb1GDiuUfmAF5kqcQREXVDmpPGXtTDux7zoYkZ2yz","resourceType":2,"metadataUrl":"","tags":[{"id":"bmj9a6k3p9fdr6916kp0","name":"TouchDesigner"},{"id":"bmj9c1c3p9fdr6916krg","name":"GLSL"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"cha65ncn70rkl4ca4q60","name":"CURATION_FREE_2 "},{"id":"cha65ncn70rkl4ca4q6g","name":"VertexShader"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cha706cn70rkl4ca4qlg","title":"MULTI-SCREEN","description":"","createdAt":1683255324,"updatedAt":1683261239,"user":{"id":"unsxEjo3hkNY4IbOCIa5Z8cw81t2","customId":"unsxEjo3hkNY4IbOCIa5Z8cw81t2","name":"bokoko33","biography":"Web Creative\nhttps://twitter.com/bokoko33","image":"","createdAt":1683253020301,"updatedAt":1714661630988},"codes":[{"id":"cha7074n70rkl4ca4qmg","type":0,"text":"\u003cdiv class=\"container\"\u003e\n \u003cdiv class=\"canvasWrapper\"\u003e\n \u003ccanvas class=\"canvas\"\u003e\u003c/canvas\u003e\n \u003c/div\u003e\n\u003c/div\u003e\n\u003cscript type=\"module\" crossorigin src=\"https://stat.neort.io/externalResource/cha8dckn70rkl4ca4rb0.js\"\u003e\u003c/script\u003e","artId":"cha706cn70rkl4ca4qlg","libraries":[]},{"id":"cha7074n70rkl4ca4qn0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}\n\n*{margin:0;padding:0}.container{display:flex;justify-content:center}.canvasWrapper{flex-shrink:0;width:100%;max-width:2753px;height:100vh}.canvas{width:100%;height:100%}.lil-gui{transform:scale(2);transform-origin:top right}\n","artId":"cha706cn70rkl4ca4qlg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cha7074n70rkl4ca4qng","type":2,"text":"","artId":"cha706cn70rkl4ca4qlg","libraries":[]}],"like":2,"thumbFileName":"cha706cn70rkl4ca4qlg.png","selectedThumbFileName":"cha706cn70rkl4ca4qlg.png","thumbnailFileUrl":"","resourceFileName":"cha706cn70rkl4ca4qlg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVPbHSnwHkPFz9qBVfEaJsFsDMoGNQJBPnYioQDwtMvLA","resourceType":1,"metadataUrl":"","tags":[{"id":"bmj9c1c3p9fdr6916krg","name":"GLSL"},{"id":"bmk0qi43p9f7m1g01q1g","name":"WebGL"},{"id":"bpcq6043p9f4nmb8bb60","name":"threejs"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chad2fsn70rkl4ca50b0","title":"000-052305448","description":"","createdAt":1683280200,"updatedAt":1683280200,"user":{"id":"ciLxURq6h1RmSqhPbAlxPvTjx4H3","customId":"jsf","name":"Julio Smitter","biography":"JSF twitter.com/thejaysf","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ciLxURq6h1RmSqhPbAlxPvTjx4H3.png","createdAt":1574404743000,"updatedAt":1734444596488},"codes":[{"id":"chad2i4n70rkl4ca50c0","type":0,"text":"","artId":"chad2fsn70rkl4ca50b0","libraries":[]},{"id":"chad2i4n70rkl4ca50cg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"chad2fsn70rkl4ca50b0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chad2i4n70rkl4ca50d0","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n rectMode(CENTER);\n colorMode(HSB, 360, 255, 255);\n angleMode(DEGREES);\n noCursor();\n}\n\nfunction draw() {\n background(0);\n randomSeed(052305448);\n noFill(0);\n\n for (let i = 0; i \u003c 40; i++) {\n push();\n forma();\n pop();\n }\n}\n\nfunction forma() {\n let s1 = 888;\n let s2 = 400;\n stroke(random(360), 255, 255);\n translate(random(0, width), random(0, height));\n rotate(random(-180, 180));\n rotate(random(-millis() / 200, millis() / 200));\n scale(2);\n\n for (let i = 0; i \u003c 20; i++) {\n strokeWeight(i / 3);\n rect(0, 0, s1 * 1.1, s2 * 1.1, 5000);\n s1 = s1 - 21;\n s2 = s2 - 21;\n }\n}","artId":"chad2fsn70rkl4ca50b0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"chad2fsn70rkl4ca50b0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"chad2fsn70rkl4ca50b0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUvg7eZFCQYLPjuPmb8ix9U9k8qMAge4LhNzTaZeWwudZ","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ce683hcn70rh3gntrpqg","name":"JSF"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chado8kn70rkl4ca51pg","title":"001-8741","description":"","createdAt":1683282987,"updatedAt":1683282987,"user":{"id":"ciLxURq6h1RmSqhPbAlxPvTjx4H3","customId":"jsf","name":"Julio Smitter","biography":"JSF twitter.com/thejaysf","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ciLxURq6h1RmSqhPbAlxPvTjx4H3.png","createdAt":1574404743000,"updatedAt":1734444596488},"codes":[{"id":"chadoasn70rkl4ca51qg","type":0,"text":"","artId":"chado8kn70rkl4ca51pg","libraries":[]},{"id":"chadoasn70rkl4ca51r0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"chado8kn70rkl4ca51pg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chadoasn70rkl4ca51rg","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n rectMode(CENTER);\n colorMode(HSB, 360, 255, 255);\n angleMode(DEGREES);\n noCursor();\n}\n\nfunction draw() {\n background('#2F004E');\n randomSeed(8741);\n noFill(0);\n\n for (let i = 0; i \u003c 40; i++) {\n push();\n forma();\n pop();\n }\n}\n\nfunction forma() {\n let s1 = 888;\n let s2 = 400;\n stroke(random(245,320), 255, random(111,255));\n translate(random(0, width), random(0, height));\n rotate(random(-180, 180));\n rotate(random(-millis() / 200, millis() / 200));\n scale(2);\n\n for (let i = 0; i \u003c 20; i++) {\n strokeWeight(i / 3);\n rect(0, 0, s1 * 1.1, s2 * 1.1, 5000);\n s1 = s1 - 21;\n s2 = s2 - 21;\n }\n}","artId":"chado8kn70rkl4ca51pg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"chado8kn70rkl4ca51pg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"chado8kn70rkl4ca51pg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmemYrYW9JboTsf3Y8v42T64v3Cudq4vzYgSTZV7EZwSrh","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ce683hcn70rh3gntrpqg","name":"JSF"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chafmr4n70rkl4ca5350","title":"Scale","description":"","createdAt":1683290996,"updatedAt":1683291228,"user":{"id":"i29YtpFCfyMF9EwbjVcp4EFVSGu1","customId":"i29YtpFCfyMF9EwbjVcp4EFVSGu1","name":"Okazz","biography":"https://twitter.com/okazz_","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/i29YtpFCfyMF9EwbjVcp4EFVSGu1.png","createdAt":1550934600000,"updatedAt":1709822849400},"codes":[{"id":"chafmt4n70rkl4ca5360","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js\"\u003e\u003c/script\u003e","artId":"chafmr4n70rkl4ca5350","libraries":[]},{"id":"chafmt4n70rkl4ca536g","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"chafmr4n70rkl4ca5350","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chafmt4n70rkl4ca5370","type":2,"text":"let SEED = Math.floor(Math.random() * 10000);\nlet minSideLength;\nlet minArea;\nlet objs = [];\nlet colors = ['#00916e', '#f71735', '#ff9f1c', '#067bc2', '#ecc30b', '#f5f3f3', '#000000', '#ff70a6', '#a4459f'];\n\nlet noiseFilter;\n\nfunction setup() {\n\tcreateCanvas(windowWidth, windowHeight);\n\trectMode(CENTER);\n\tINIT();\n}\n\nfunction draw() {\n\trandomSeed(SEED);\n\n\tbackground(25);\n\tfor (let i of objs) {\n\t\ti.show();\n\n\t}\n\timage(noiseFilter, 0, 0);\n}\n\nfunction division(a, b, c, d) {\n\tlet ab = p5.Vector.dist(a, b);\n\tlet bd = p5.Vector.dist(b, d);\n\tlet da = p5.Vector.dist(d, a);\n\tlet bc = p5.Vector.dist(b, c);\n\tlet cd = p5.Vector.dist(c, d);\n\tlet s1 = (ab + bd + da) / 2;\n\tlet s2 = (bc + cd + bd) / 2;\n\tlet S1 = sqrt(s1 * (s1 - ab) * (s1 - bd) * (s1 - da));\n\tlet S2 = sqrt(s2 * (s2 - bc) * (s2 - cd) * (s2 - bd));\n\tlet area = S1 + S2;\n\tlet p = map(area, minSideLength**2, 0, 3, 0.7);\n\n\tif (area \u003e minArea \u0026\u0026 random() \u003c p) {\n\t\tlet nn = 5;\n\t\tlet r1 = map(int(random(nn)), 0, nn - 1, 0.3, 0.7);\n\t\tlet r2 = map(int(random(nn)), 0, nn - 1, 0.3, 0.7);\n\t\tif (((ab + cd) \u003e= (da + bc) * 0.99)) {\n\t\t\tlet p1 = p5.Vector.lerp(a, b, r1);\n\t\t\tlet p2 = p5.Vector.lerp(c, d, r2);\n\t\t\tdivision(a, p1, p2, d);\n\t\t\tdivision(p1, b, c, p2);\n\t\t} else {\n\t\t\tlet p1 = p5.Vector.lerp(a, d, r1);\n\t\t\tlet p2 = p5.Vector.lerp(b, c, r2);\n\t\t\tdivision(a, b, p2, p1);\n\t\t\tdivision(p1, p2, c, d);\n\t\t}\n\t} else {\n\t\tobjs.push(new Objct(a, b, c, d));\n\n\n\t}\n}\n\nfunction INIT() {\n\trandomSeed(SEED);\n\tobjs = [];\n\tminSideLength = min(width, height) * 0.95;\n\tminArea = minSideLength * minSideLength / 10;\n\tlet origin = createVector((width - minSideLength) / 2, (height - minSideLength) / 2);\n\tlet p1 = createVector(0, 0);\n\tlet p2 = createVector(0 + width, 0);\n\tlet p3 = createVector(0 + width, 0 + height);\n\tlet p4 = createVector(0, 0 + height);\n\tdivision(p1, p2, p3, p4);\n\n\tnoiseFilter = createImage(width, height);\n\tnoiseFilter.loadPixels();\n\tlet pix = noiseFilter.width * noiseFilter.height * 4;\n\tfor (let i = 0; i \u003c pix; i += 4) {\n\t\tnoiseFilter.pixels[i] = random(255);\n\t\tnoiseFilter.pixels[i + 1] = random(255);\n\t\tnoiseFilter.pixels[i + 2] = random(255);\n\t\tnoiseFilter.pixels[i + 3] = 20;\n\t}\n\tnoiseFilter.updatePixels();\n}\n\nfunction windowResized() {\n\tresizeCanvas(windowWidth, windowHeight);\n\tINIT();\n}\n\nfunction easeOutCirc(x) {\n\treturn sqrt(1 - Math.pow(x - 1, 2));\n}\n\n\nclass Objct {\n\tconstructor(p1, p2, p3, p4) {\n\t\tthis.p1 = p1;\n\t\tthis.p2 = p2;\n\t\tthis.p3 = p3;\n\t\tthis.p4 = p4;\n\t\tthis.center = createVector((this.p1.x + this.p2.x + this.p3.x + this.p4.x) / 4, (this.p1.y + this.p2.y + this.p3.y + this.p4.y) / 4);\n\n\t\tlet arr = [p5.Vector.dist(this.p1, this.center), p5.Vector.dist(this.p2, this.center), p5.Vector.dist(this.p3, this.center), p5.Vector.dist(this.p4, this.center)];\n\t\tthis.d = 2 * max(arr);\n\n\t\tthis.n = int(random(5, 12));\n\t\tthis.te = int(random(200, 400));\n\t\tthis.circles = [];\n\t\tthis.cols = [];\n\t\tthis.ct = int(random(100))\n\t\tfor (let i = 0; i \u003c this.n; i++) {\n\t\t\tthis.cols.push(random(colors));\n\t\t\tthis.circles.push(new Circle(this.center.x, this.center.y, this.d * 1.1, -((this.te / this.n) * i) + this.te, this.te, this.cols[i]));\n\t\t}\n\t\tthis.count = 0;\n\t}\n\n\tshow() {\n\t\tpush();\n\t\tfill(0);\n\t\tnoStroke();\n\t\tbeginShape();\n\t\tvertex(this.p1.x, this.p1.y);\n\t\tvertex(this.p2.x, this.p2.y);\n\t\tvertex(this.p3.x, this.p3.y);\n\t\tvertex(this.p4.x, this.p4.y);\n\t\tendShape(CLOSE);\n\t\tfill(255);\n\t\tdrawingContext.clip();\n\t\tfor (let i = 0; i \u003c this.circles.length; i++) {\n\t\t\tlet r = this.circles[i];\n\t\t\tr.show();\n\t\t\tr.move();\n\t\t}\n\t\tfor (let i = 0; i \u003c this.circles.length; i++) {\n\t\t\tlet r = this.circles[i];\n\t\t\tif (r.isDead) {\n\t\t\t\tthis.count++;\n\t\t\t\tthis.circles.splice(i, 1);\n\t\t\t\tthis.circles.push(new Circle(this.center.x, this.center.y, this.d * 1.1, 0, this.te, this.cols[this.count % this.cols.length]));\n\t\t\t}\n\t\t}\n\t\tpop();\n\t}\n\n}\n\nclass Circle {\n\tconstructor(x, y, d, t0, t1, col) {\n\t\tlet th = random(TAU);\n\t\tlet r = random(d);\n\t\tthis.x0 = x + r * cos(th);\n\t\tthis.x1 = x;\n\t\tthis.y0 = y + r * sin(th)\n\t\tthis.y1 = y;\n\t\tthis.x = this.x1;\n\t\tthis.y = this.y1;\n\t\tthis.d = 0;\n\t\tthis.d1 = d;\n\t\tthis.t = t0;\n\t\tthis.t1 = t1;\n\t\tthis.isDead = false;\n\t\tthis.col = col;\n\t}\n\n\tshow() {\n\t\tnoStroke();\n\t\tfill(this.col);\n\t\tcircle(this.x, this.y, this.d);\n\t}\n\n\tmove() {\n\t\tif (0 \u003c this.t \u0026\u0026 this.t \u003c this.t1) {\n\t\t\tlet n = norm(this.t, 0, this.t1 - 1);\n\t\t\tthis.d = lerp(0, this.d1, easeOutCirc(n));\n\t\t}\n\t\tif (this.t \u003e this.t1) {\n\t\t\tthis.isDead = true;\n\t\t}\n\t\tthis.t++;\n\t}\n}","artId":"chafmr4n70rkl4ca5350","libraries":[]}],"like":2,"thumbFileName":"chafmr4n70rkl4ca5350.png","selectedThumbFileName":"chafmr4n70rkl4ca5350.png","thumbnailFileUrl":"","resourceFileName":"chafmr4n70rkl4ca5350.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmR6pDA7NpQodvrbpiL2JLvAiLGWUsn2FPCZwC7KsmDmpi","resourceType":1,"metadataUrl":"","tags":[{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chah5tsn70rkl4ca5510","title":"Exponentially ","description":"Immerse in the enigmatic \"Exponential Dance,\" a visual representation of AI's rapid growth and its influence on our lives.","createdAt":1683297022,"updatedAt":1683304300,"user":{"id":"NTm0nkH075em8lIvLEy8TznW0Eh2","customId":"NTm0nkH075em8lIvLEy8TznW0Eh2","name":"Hajime","biography":"","image":"","createdAt":1683271402668,"updatedAt":1687874041540},"codes":[{"id":"chah5vkn70rkl4ca5520","type":0,"text":"","artId":"chah5tsn70rkl4ca5510","libraries":[]},{"id":"chah5vkn70rkl4ca552g","type":1,"text":"html, body {\n width: 100%;\n height: 100%;\n overflow: hidden;\n margin: 0;\n}","artId":"chah5tsn70rkl4ca5510","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chah5vkn70rkl4ca5530","type":2,"text":"let elapsedTime = 0;\r\nlet forward = true;\r\nlet startTimes = [];\r\n\r\nfunction setup() {\r\n createCanvas(windowWidth, windowHeight, WEBGL);\r\n noStroke();\r\n\r\n // Set up random start times for each element\r\n for (let i = 0; i \u003c 150; i++) {\r\n startTimes.push(random(0, 5));\r\n }\r\n}\r\n\r\nfunction draw() {\r\n let bgColor = lerpColor(color(50, 54, 64), color(200, 204, 214), map(elapsedTime, 0, 30, 0, 1));\r\n background(bgColor);\r\n\r\n let numCircles = floor(map(elapsedTime, 0, 30, 2, 150));\r\n let maxSize = map(elapsedTime, 0, 30, 10, 100);\r\n\r\n let fov = map(elapsedTime, 0, 30, PI / 4, PI / 12);\r\n perspective(fov, width / height, 1, 1000);\r\n\r\n let cameraX = map(sin(elapsedTime / 2), -1, 1, -500, 500);\r\n let cameraY = map(sin(elapsedTime / 2 + PI / 2), -1, 1, -500, 500);\r\n let cameraZ = map(sin(elapsedTime / 2 + PI), -1, 1, -500, 500);\r\n camera(cameraX, cameraY, cameraZ, 0, 0, 0, 0, 1, 0);\r\n\r\n for (let i = 0; i \u003c numCircles; i++) {\r\n let noiseVal = noise(i / 10, elapsedTime / 2 + startTimes[i]);\r\n let x = map(noiseVal, 0, 1, -width / 2, width / 2);\r\n let y = map(noiseVal, 0, 1, -height / 2, height / 2);\r\n let z = sin(elapsedTime + i) * 20;\r\n\r\n let size = map(sin(elapsedTime + i), -1, 1, 5, maxSize);\r\n\r\n let detailLevel = floor(map(elapsedTime, 0, 30, 10, 100));\r\n let detailX = map(noiseVal, 0, 1, -1, 1);\r\n let detailY = map(noiseVal, 0, 1, -1, 1);\r\n\r\n let colorIndex = floor(map(i, 0, numCircles, 0, 7));\r\n let colors = [\r\n [50, 54, 64],\r\n [253, 255, 254],\r\n [0, 163, 246],\r\n [193, 215, 225],\r\n [163, 232, 246],\r\n [247, 202, 174],\r\n [239, 179, 172],\r\n ];\r\n\r\n fill(colors[colorIndex]);\r\n push();\r\n translate(x, y, z);\r\n sphere(size, detailLevel, detailLevel);\r\n pop();\r\n }\r\n\r\n if (forward) {\r\n elapsedTime += deltaTime / 1000.0;\r\n if (elapsedTime \u003e= 30) {\r\n forward = false;\r\n }\r\n } else {\r\n elapsedTime -= deltaTime / 1000.0;\r\n if (elapsedTime \u003c= 0) {\r\n forward = true;\r\n }\r\n }\r\n}","artId":"chah5tsn70rkl4ca5510","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"]}],"like":0,"thumbFileName":"chah5tsn70rkl4ca5510.png","selectedThumbFileName":"chah5tsn70rkl4ca5510.png","thumbnailFileUrl":"","resourceFileName":"chah5tsn70rkl4ca5510.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmReYVGg2xXQaDHZPRWJLZ1TdxMyznsnKvXChNBFN4afyp","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chahiosn70rkl4ca5690","title":"Dancers","description":"","createdAt":1683298666,"updatedAt":1683298666,"user":{"id":"H60nBbyIRLY17gpKd5Cyal0AU0W2","customId":"","name":"Ryotaro Nakagaki","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/H60nBbyIRLY17gpKd5Cyal0AU0W2.jpg","createdAt":1683298053828,"updatedAt":1713090305056},"codes":[{"id":"chahiqkn70rkl4ca56a0","type":0,"text":"","artId":"chahiosn70rkl4ca5690","libraries":[]},{"id":"chahiqkn70rkl4ca56ag","type":1,"text":"html, body {\n width: 100%;\n height: 100%;\n overflow: hidden;\n margin: 0;\n}","artId":"chahiosn70rkl4ca5690","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chahiqkn70rkl4ca56b0","type":2,"text":"function setup() {\r\n colorMode(HSB)\r\n frameRate(8)\r\n\r\n // 定数\r\n BLACK = \"#111\", WHITE = \"#EEE\", DARK_GRAY = \"#222\"\r\n HUE = 0, SAT = 80, BRI = 80\r\n MAIN_COLOR = color(HUE, SAT, BRI)\r\n}\r\n\r\nfunction draw() {\r\n createCanvas(11012, 1080)\r\n background(DARK_GRAY)\r\n strokeJoin(ROUND)\r\n strokeCap(PROJECT)\r\n\r\n main()\r\n}\r\n\r\nfunction main() {\r\n MAIN_COLOR = color(frameCount % 360, SAT, BRI)\r\n\r\n for (let y = 0; y \u003c= height; y += height / 4) {\r\n for (let x = 0; x \u003c= width; x += width / 40) {\r\n drawDancer(x, y)\r\n }\r\n }\r\n}\r\n\r\nfunction drawDancer(x, y) {\r\n translate(x, y)\r\n\r\n const offset = random(0, 360)\r\n\r\n let rt1 = [], rt2 = []\r\n for (let theta = offset; theta \u003c offset + 360; theta += 20) {\r\n rt1[theta] = randomGaussian(0, 50)\r\n rt2[theta] = randomGaussian(0, 25)\r\n }\r\n\r\n beginShape()\r\n stroke(WHITE)\r\n strokeWeight(3 * min(width, height) / 80)\r\n noFill()\r\n for (let theta = offset; theta \u003c offset + 360; theta += 20) {\r\n curveVertex(\r\n min(width, height) / 12 * cos(radians(theta + rt1[theta])),\r\n min(width, height) / 12 * sin(radians(theta + rt2[theta]))\r\n )\r\n }\r\n endShape(CLOSE)\r\n\r\n beginShape()\r\n stroke(BLACK)\r\n strokeWeight(min(width, height) / 80)\r\n fill(MAIN_COLOR)\r\n for (let theta = offset; theta \u003c offset + 360; theta += 20) {\r\n curveVertex(\r\n min(width, height) / 12 * cos(radians(theta + rt1[theta])),\r\n min(width, height) / 12 * sin(radians(theta + rt2[theta]))\r\n )\r\n }\r\n endShape(CLOSE)\r\n\r\n strokeWeight(min(width, height) / 80)\r\n drawSmilyFace(0, 0, min(width, height) / 1000)\r\n\r\n translate(-x, -y)\r\n}\r\n\r\nfunction drawSmilyFace(x, y, size) {\r\n translate(x, y)\r\n\r\n // 左目\r\n line(\r\n size * (randomGaussian() + 9), size * (randomGaussian() - 30),\r\n size * (randomGaussian() + 9), size * (randomGaussian() - 0)\r\n )\r\n\r\n // 右目\r\n line(\r\n size * (randomGaussian() - 9), size * (randomGaussian() - 30),\r\n size * (randomGaussian() - 9), size * (randomGaussian() - 0)\r\n )\r\n\r\n // 口\r\n noFill()\r\n beginShape()\r\n vertex(size * (randomGaussian() - 30), size * (randomGaussian() + 10))\r\n vertex(size * (randomGaussian() - 25), size * (randomGaussian() - 5))\r\n vertex(size * (randomGaussian() - 15), size * (randomGaussian() + 30))\r\n vertex(size * (randomGaussian() + 15), size * (randomGaussian() + 30))\r\n vertex(size * (randomGaussian() + 25), size * (randomGaussian() - 5))\r\n vertex(size * (randomGaussian() + 30), size * (randomGaussian() + 10))\r\n endShape()\r\n\r\n translate(-x, -y)\r\n}","artId":"chahiosn70rkl4ca5690","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"]}],"like":1,"thumbFileName":"chahiosn70rkl4ca5690.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"chahiosn70rkl4ca5690.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYAJmhUq4bQFnxau2UDzdXQAB1w2qe6gG8WCmFPgGN2em","resourceType":1,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chahjl4n70rkl4ca56gg","title":"Fake Hokusai 1","description":"偽物の北斎です","createdAt":1683298858,"updatedAt":1683298858,"user":{"id":"cjQ1tLdsiXhpjo4iB8QhqSsfkS02","customId":"","name":"HAKKEI.","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/cjQ1tLdsiXhpjo4iB8QhqSsfkS02.jpg","createdAt":1683222545026,"updatedAt":1685393844313},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"chahjl4n70rkl4ca56gg.png","thumbnailFileUrl":"","resourceFileName":"chahjl4n70rkl4ca56gg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmX7JCK6PW3sASYYLUthjfExJSeSuSgsiTBAx7xJMNgCxy","resourceType":2,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chahldkn70rkl4ca56ng","title":"Fake Hokusai 2","description":"偽物の北斎","createdAt":1683299072,"updatedAt":1683299072,"user":{"id":"cjQ1tLdsiXhpjo4iB8QhqSsfkS02","customId":"","name":"HAKKEI.","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/cjQ1tLdsiXhpjo4iB8QhqSsfkS02.jpg","createdAt":1683222545026,"updatedAt":1685393844313},"codes":[],"like":2,"thumbFileName":"","selectedThumbFileName":"chahldkn70rkl4ca56ng.png","thumbnailFileUrl":"","resourceFileName":"chahldkn70rkl4ca56ng.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmdqAX5FHZ7kN7HZTdBTUKRWA4wU6HYWJRYQKuMLWFWeBm","resourceType":2,"metadataUrl":"","tags":[{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chatpq4n70rkl4ca5acg","title":"4D-HyperSpace (4Dーハイパースペース)","description":"4D-HyperSpace (4Dーハイパースペース)\n\n2023.5.6\n\np5js. GLSL. Artwork for Neort Space, 11012x1080 px, in 4 separate walls. 4-Wall Immersive screens recommended, or similar size.\n\nInteraction Guide (操作方法):\n\n0 Default/Lowest Resolution, Designed for Wall (低解像度)\n\n1-9 for low to high resolution. 9 is Highest. (9 は高解像度)\n\n\nS to save screen at window resolution(ファイルを保存する). Infinite hyperspace jumps, reset for new view. \n\n","createdAt":1683348717,"updatedAt":1683441512,"user":{"id":"qnn1cjHNk0XIOh9PhzhmBFPrtii1","customId":"qnn1cjHNk0XIOh9PhzhmBFPrtii1","name":"j4son3099","biography":"An artist located in Tokyo who loves traditional art, street art, and code art. ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/qnn1cjHNk0XIOh9PhzhmBFPrtii1.png","createdAt":1669608388448,"updatedAt":1683725472704},"codes":[{"id":"chatprcn70rkl4ca5adg","type":0,"text":"","artId":"chatpq4n70rkl4ca5acg","libraries":[]},{"id":"chatprcn70rkl4ca5ae0","type":1,"text":"html, body {\n width: 100%;\n height: 100%;\n overflow: hidden;\n margin: 0;\n}","artId":"chatpq4n70rkl4ca5acg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chatprcn70rkl4ca5aeg","type":2,"text":"let hash,WIDTH,HEIGHT,backgroundColor,theShader;function isNumeric(t){return\"string\"==typeof t\u0026\u0026(!isNaN(t)\u0026\u0026!isNaN(parseFloat(t)))}function getCustomWidth(t,s,i){return i?t:s%2==0?2408*WIDTH/11012\u003e\u003e0:3098*WIDTH/11012\u003e\u003e0}function getScreenXPosition(t,s,i){if(i)return 0;switch(s){case 0:return 0;case 1:return 2408*t/11012\u003e\u003e0;case 2:return 5506*t/11012\u003e\u003e0;case 3:return 7914*t/11012\u003e\u003e0;case 4:return t}}let s,backgroundShader=[],loopCount=0,maxLoops=250,backgroundShaderTexture=[];var canv;let fileName,planeZ,cameraZ,uPosition,mainGraphic,tWidth,tHeight,shaderTexture,animation=!0,c_cubes=[],currentUniverse=0,universeCounters=[],maxSecondaries=3,minSpeed=1,fs2=[],uniPlanes=[],graphics=[],screenArray=[],resolutionScale=.06125,vs=\"\\n\\n attribute vec3 aPosition;\\n\\n attribute vec2 aTexCoord;\\n\\n varying vec2 vTexCoord;\\n\\n void main() {\\n\\n\\n vTexCoord = aTexCoord;\\n\\n vec4 positionVec4 = vec4(aPosition, 1.0);\\n positionVec4.xy = positionVec4.xy * 2.0 - 1.0;\\n\\n gl_Position = positionVec4;\\n }\\n\\n\",fs=\"\\n#ifdef GL_ES\\nprecision mediump float;\\n#endif\\n#extension GL_OES_standard_derivatives : enable\\n\\nuniform float time;\\nuniform vec2 resolution;\\n\\nvoid main( void ) {\\n\\n\\tvec2 texcoord = ( gl_FragCoord.xy / resolution.xy );\\n vec3 color = vec3(clamp(cos(time),0.0,0.3), sin(pow(mod(time,10.),2.) + 5.0), tan(clamp(time + 4.0,0.0,radians(180.)/4.01)));\\n\\n gl_FragColor = vec4(color * (texcoord.y + texcoord.x)*.5, 1.0);\\n}\\n\\n\",fs2Start=\"\\n\\n\\nprecision mediump float;\\nuniform float time;\\nuniform vec2 resolution;\\n\\nvec2 translate(vec2 pos, vec2 translate) {\\n\\treturn pos + vec2(-translate.x, -translate.y);\\n}\\n\\nmat2 rotate2d(float angle){\\n\\treturn mat2(cos(angle), -sin(angle), sin(angle), cos(angle));\\n}\\n\\n\\n\\nvoid main(void){\\n\\n\",fs2TranslateLine=[],fs2main=\"\\n\\n highp vec2 size = vec2(resolution.x, resolution.y);\\n vec2 uv = (2.0 * gl_FragCoord.xy - size) / size.x;\\n\\tvec2 p = (gl_FragCoord.xy * 2.1 - resolution) / min(resolution.x, resolution.y);\\n\\n\\tuv = translate(p, vec2(pos.x,pos.y));\\n\\tuv *= rotate2d(0.5*time);\\n\\tp = translate(p, vec2(pos.x,pos.y));\\n\\tp *= rotate2d(time/100.);\\n\\n\",fs2ColorLine=[];fs2ColorLine[0]=\"\\n float t = .15 / abs(0.5*(sin(p.x)+cos(1.8*p.x))-length(p));\\n vec3 color = vec3(clamp(p.x,0.5,0.7),clamp(sin(p.y*time),.55,.65),clamp(abs(sin(time)),0.4,.8)) ;\\n gl_FragColor = vec4(vec3(t) * color,1.0);\\n\",fs2ColorLine[1]=\"\\nvec2 rPos = ( gl_FragCoord.xy / resolution.xy );\\n\\nfloat color = sin(rPos.x*sin(time/10.))+sin(rPos.y*sin(time/2.)*3.0);\\ncolor *= sin( time / 3.0 );\\ngl_FragColor = vec4( vec3( clamp(cos(color*3.+time/2.),0.5,1.0), clamp(sin(color*8.5+3.),0.3,0.5), cos( color*time )), 1.0 );\\n\\n\",fs2ColorLine[2]=\"\\n float t = .7 / abs(0.5*(sin(p.x)+cos(p.x))-length(p));\\n vec3 color = vec3(clamp(sin(p.y*time),0.0,.6),clamp(sin(p.y*time),.1,.8),clamp(abs(sin(pow(mod(time,10.),2.))),0.8,1.)) ;\\n gl_FragColor = vec4(vec3(t) * color,1.0);\\n\",fs2ColorLine[3]=\"\\nvec2 rPos = ( gl_FragCoord.xy / resolution.xy );\\n\\nfloat color = sin(rPos.x*sin(time/10.))+sin(rPos.y*sin(time/2.)*3.0);\\ncolor *= sin( time / 3.0 );\\ngl_FragColor = vec4( vec3( tan(clamp(color*mod(time,10.),0.0,radians(180.)/4.01)), clamp(sin(color*8.5+3.),0.0,0.3), clamp(sin( color*8. + time / 5. ), .5, .8)), 1.0 );\\n\",fs2ColorLine[4]=\"\\n float t = .15 / abs(0.5*(tan(clamp(p.x,0.0,radians(180.)/4.01))+tan(clamp(p.y,0.0,radians(180.)/4.01)))-length(p));\\n vec3 color = vec3(clamp(p.x,0.97,1.),clamp(sin(p.y*time),.89,.95),clamp(abs(sin(time)),.9,.99)) ;\\n gl_FragColor = vec4(vec3(sin(pow(t,3.))) * color,1.0);\\n\";let fs2Close=\"}\";function normalizeRadians(t){return(t%(2*Math.PI)+2*Math.PI)%(2*Math.PI)}function preload(){}function setup(){tWidth=windowWidth,tHeight=windowHeight,WIDTH=tWidth*resolutionScale\u003e\u003e0,HEIGHT=tHeight*resolutionScale\u003e\u003e0,planeZ=max(-WIDTH/10\u003e\u003e0,-WIDTH/80\u003e\u003e0),cameraZ=WIDTH/4\u003e\u003e0,s=min([WIDTH,HEIGHT,cameraZ-planeZ\u003e\u003e0])/2,canv=createCanvas(tWidth,tHeight,WEBGL),mainGraphic=createGraphics(WIDTH,HEIGHT,WEBGL);for(let t=0;t\u003c4;t++)graphics.push(createGraphics(getCustomWidth(WIDTH,t,!1)\u003e\u003e0,HEIGHT,WEBGL)),graphics[t].camera(0,0,cameraZ,0,0,0);let t,i;shaderTexture=createGraphics(s/2\u003e\u003e0,s/2\u003e\u003e0,WEBGL),shaderTexture.noStroke(),theShader=shaderTexture.createShader(vs,fs),hash=randomHash(),fileName=\"4dHyperSpace_\"+getSeed(),console.log(getSeed()),backgroundColor=color(15*random()\u003e\u003e0,10*random()\u003e\u003e0,40*random()\u003e\u003e0),backgroundColor2=color(110+15*random()\u003e\u003e0,110+20*random()\u003e\u003e0,110+55*random()\u003e\u003e0),fs2TranslateLine[0]=\"vec2 pos = vec2(0.,0.);\",fs2TranslateLine[1]=\"vec2 pos = vec2(\"+random(.2,.8)+\",\"+random(.2,.8)+\");\",fs2TranslateLine[2]=\"vec2 pos = vec2(\"+random(.2,.8)+\",\"+random(.2,.8)+\");\",fs2TranslateLine[3]=\"vec2 pos = vec2(\"+random(.2,.8)+\",\"+random(.2,.8)+\");\",fs2TranslateLine[4]=\"vec2 pos = vec2(\"+random(.2,.8)+\",\"+random(.2,.8)+\");\",uPosition=createVector(0,0,planeZ);for(let s=1;s\u003c5;s++)t=random(fs2ColorLine.length)\u003e\u003e0,i=random(fs2TranslateLine.length)\u003e\u003e0,fs2[s]=fs2Start+fs2TranslateLine[i]+fs2main+fs2ColorLine[t]+fs2Close,backgroundShaderTexture[s]=createGraphics(WIDTH,HEIGHT,WEBGL),backgroundShaderTexture[s].noStroke(),backgroundShader[s]=backgroundShaderTexture[s].createShader(vs,fs2[s]),uniPlanes[s]=new UniPlane(uPosition,backgroundShaderTexture[s],backgroundShader[s],WIDTH,HEIGHT,s);for(let t=0;t\u003c4;t++){let i,e;universeCounters[t]=1+random(3)\u003e\u003e0;let o,r,a,h,n,c,l=min([WIDTH,HEIGHT,cameraZ-planeZ\u003e\u003e0])/5,p=random(.8,1.2),d=shaderTexture,m=shaderTexture,u=backgroundColor,x=theShader,v=theShader,H=-500,T=400,I=350,y=color(\"#401240\"),g=2*l,b=color(\"#131050\"),C=3*l,W=color(\"#882088\"),f=5*l,z=255,D=!0,S=s/2.5,L=2,M=1,V=uniPlanes,Z=universeCounters[t];screenArray[t]=[];for(let s=0;s\u003cmaxSecondaries;s++)c=0==s?\"main\":\"normal\",n=random(150,200)\u003e\u003e0,i=createVector(random(-WIDTH,WIDTH)\u003e\u003e0,random(-HEIGHT,HEIGHT)\u003e\u003e0,random(-WIDTH/2*s,-WIDTH*s)\u003e\u003e0),o=createVector(random(-10,10),random(-10,10),random(-10,10)),r=createVector(random(.5,1),random(.5,1),random(.5,1)).mult(random([-1,1])),a=createVector(random(.5,1),random(.5,1),random(.5,1)).mult(random([-1,1])),h=createVector(random(-.01,.01),random(-.01,.01),random(-.01,.01)),e=i.copy(),screenArray[t][s]=new C_Cube_Node_1(i,e,l,o,r,a,p,d,m,u,x,v,h,n,H,T,I,y,g,b,C,W,f,z,c,D,s,S,V,L,M,Z)}randomSeed(getSeed()),mainGraphic.background(backgroundColor)}function draw(){if(animation){push(),translate(-tWidth/2\u003e\u003e0,-tHeight/2\u003e\u003e0),image(mainGraphic,0,0,tWidth,tHeight),pop();for(let t=0;t\u003c4;t++){graphics[t].clear(),screenArray[t][0].universe\u003e0\u0026\u0026uniPlanes[screenArray[t][0].universe].draw(p5,graphics[t]);for(let s=0;s\u003cmaxSecondaries;s++)screenArray[t][s].animateShaders(),0==s\u0026\u0026(currentUniverse=screenArray[t][0].universe),screenArray[t][s].animateCube(p5,screenArray[t]),screenArray[t][s].draw(currentUniverse,p5,graphics[t]),mainGraphic.push(),mainGraphic.translate(-WIDTH/2\u003e\u003e0,-HEIGHT/2\u003e\u003e0),mainGraphic.image(graphics[t],getScreenXPosition(WIDTH,t,!1)\u003e\u003e0,0),mainGraphic.pop()}loopCount++}}function windowResized(){if(animation){tWidth=windowWidth,tHeight=windowHeight,WIDTH=tWidth*resolutionScale\u003e\u003e0,HEIGHT=tHeight*resolutionScale\u003e\u003e0,planeZ=max(-WIDTH/10\u003e\u003e0,-WIDTH/80\u003e\u003e0),cameraZ=WIDTH/4\u003e\u003e0,s=min([WIDTH,HEIGHT,cameraZ-planeZ\u003e\u003e0])/2,uPosition.z=planeZ,shaderTexture.resizeCanvas(s/2\u003e\u003e0,s/2\u003e\u003e0),resizeCanvas(tWidth,tHeight),mainGraphic.resizeCanvas(WIDTH,HEIGHT);for(let t=0;t\u003c4;t++)graphics[t].resizeCanvas(getCustomWidth(WIDTH,t,!1)\u003e\u003e0,HEIGHT),graphics[t].camera(0,0,cameraZ,0,0,0);for(let t=0;t\u003c4;t++)for(let s=0;s\u003cc_cubes.length;s++)screenArray[t][s].s=min([WIDTH,HEIGHT,cameraZ-planeZ\u003e\u003e0])/5,screenArray[t][s].texture1.resizeCanvas(c_cubes[s].s/2\u003e\u003e0,c_cubes[s].s/2\u003e\u003e0),screenArray[t][s].texture2.resizeCanvas(c_cubes[s].s/2\u003e\u003e0,c_cubes[s].s/2\u003e\u003e0),screenArray[t][s].sphere1=2*c_cubes[s].s,screenArray[t][s].sphere2=3*c_cubes[s].s,screenArray[t][s].taurus3=5*c_cubes[s].s;for(let t=1;t\u003c5;t++)backgroundShaderTexture[t].resizeCanvas(WIDTH,HEIGHT),uniPlanes[t].width=WIDTH,uniPlanes[t].height=HEIGHT,uniPlanes[t].pos.z=uPosition.z,uniPlanes[t].rescaledWidth=WIDTH*max(abs(uniPlanes[t].pos.z/cameraZ),1),uniPlanes[t].rescaledHeight=HEIGHT*max(abs(uniPlanes[t].pos.z/cameraZ),1)}}function keyPressed(){if(\"s\"==key\u0026\u0026(canv.get().save(fileName,\"png\"),noLoop()),isNumeric(key)){switch(Number(key)){case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:resolutionScale=map(Number(key),1,9,.08,.23);break;default:resolutionScale=.06125}windowResized()}}class C_Cube_1{constructor(t,s,i,e,o,r,a,h,n,c,l,p,d,m,u,x,v,H,T,I,y,g,b,C,W,f,z){this.loopCount=m,this.universe=0,this.direction=1,this.pos=t,this.center=s,this.s=i,this.v=e,this.a=o,this.j=r,this.brake=a,this.texture1=h,this.texture2=n,this.shader1=l,this.shader2=p,this.rotationV=d,this.maxLoops=x,this.minLoops=u,this.energyLoops=v,this.colorStart1=H,this.sphere1=T,this.colorStart2=I,this.sphere2=y,this.colorStart3=g,this.taurus3=b,this.hColor=C,this.backgroundColor=c,this.type=W,this.index=z,this.universeCounter=0,this.lastUpdate=0,this.collision=[!1,null],this.debugText=[],this.smoothMode=f}getTrueCenter(){return p5.Vector.add(this.pos,createVector(this.s/2\u003e\u003e0,this.s/2\u003e\u003e0,this.s/2\u003e\u003e0))}getCollVector(t,s){return p5.Vector.sub(s[t].getTrueCenter(),this.getTrueCenter()).normalize().mult(-1)}checkCollision(t){for(let s=0;s\u003ct.length;s++)if(s!=this.index\u0026\u0026this.lastUpdate!=loopCount\u0026\u0026this.getTrueCenter().dist(t[s].getTrueCenter())\u003c1.5*this.s+this.s*this.openState+t[s].s*t[s].openState)return t[s].lastUpdate=loopCount,t[s].collision=[!0,this.index],void(this.collision=[!0,s]);this.collision=[!1,null]}animateShaders(){this.texture1.rect(0,0,this.s,this.s),this.shader1.setUniform(\"resolution\",[this.s,this.s]),this.shader1.setUniform(\"time\",millis()/1e3),this.texture1.shader(this.shader1),this.texture2.rect(0,0,this.s,this.s),this.shader2.setUniform(\"resolution\",[this.s,this.s]),this.shader2.setUniform(\"time\",millis()/1e3),this.texture2.shader(this.shader2)}animateCube(t,s){this.checkCollision(s);let i=[];for(let t=0;t\u003c2;t++)sin((this.index+23)*round(this.loops/24)+12*t)\u003e.5?i[t]=1:i[t]=-1;if(this.rotationV.x+=abs(.01*sin(this.loopCount+loopCount*(1+this.index)))*i[0],this.rotationV.y+=abs(.01*cos(this.loopCount+loopCount*(1+this.index)))*i[1],this.rotationV.x=this.rotationV.x%(8*PI),this.rotationV.y=this.rotationV.y%(8*PI),-1==this.direction?\"main\"==this.type?(this.center.x\u003c=-WIDTH/3\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.center.y\u003c=-WIDTH/3\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.center.z\u003c=.05*cameraZ\u0026\u0026(this.v.z=Math.abs(this.v.z)),this.center.x\u003e=WIDTH/3\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.center.y\u003e=WIDTH/3\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.center.z\u003e=.9*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))):(this.center.x\u003c=-WIDTH/3\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.center.y\u003c=-WIDTH/3\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.center.z\u003c=.8*planeZ\u0026\u0026(this.v.z=Math.abs(this.v.z)),this.center.x\u003e=WIDTH/3\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.center.y\u003e=WIDTH/3\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.center.z\u003e=.9*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))):\"main\"==this.type?(this.pos.x\u003c=-WIDTH\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.pos.y\u003c=-WIDTH\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.pos.z\u003c=.8*planeZ\u0026\u0026(this.v.z=max(Math.abs(this.v.z),4)),this.pos.x\u003e=WIDTH\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.pos.y\u003e=WIDTH\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.pos.z\u003e=.9*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))):(this.pos.x\u003c=this.center.x-WIDTH/5\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.pos.y\u003c=this.center.y-WIDTH/5\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.pos.z\u003c=this.center.z+1.2*planeZ\u0026\u0026(this.v.z=Math.abs(this.v.z)),this.pos.x\u003e=this.center.x+WIDTH/5\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.pos.y\u003e=this.center.y+WIDTH/5\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.pos.z\u003e=this.center.z+2*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))),this.loopCount+=this.direction,this.loopCount\u003cthis.maxLoops-15)if(1==this.direction){if(this.pos.add(this.v),this.v.add(this.a),1==this.collision[0]){let t=this.getCollVector(this.collision[1],s).mult(random(20,30));this.v.add(t),this.a.add(t.mult(.4))}this.a.add(this.j)}else this.v.mag()\u003e3?this.pos.add(this.v.mult(this.brake*lerp(1,0,(this.maxLoops-this.loopCount)/this.maxLoops))):(this.v=createVector(minSpeed*random(-1,1),minSpeed*random(-1,1),minSpeed*random(-1,1)),this.pos.add(this.v)),p5.Vector.mag(this.a)\u003e2\u0026\u0026(this.a=createVector(random(-1,1),random(-1,1),random(-1,1))),p5.Vector.mag(this.j)\u003e2\u0026\u0026(this.j=createVector(random(-1,1),random(-1,1),random(-1,1)));if(this.loopCount\u003e=this.energyLoops\u0026\u00260!=this.universe\u0026\u00261==this.direction\u0026\u0026(this.universe=0),this.loopCount\u003ethis.maxLoops\u0026\u0026(this.direction=-1,Math.abs(this.rotationV.x)\u003c3\u0026\u0026(this.rotationV.x=random(1,1.5)*random([-3,3])),this.center.x=random(-WIDTH/2,WIDTH/2)\u003e\u003e0,this.center.y=random(-HEIGHT/2,HEIGHT/2)\u003e\u003e0,this.pos.x=this.center.x,this.pos.y=this.center.y,0==this.universe\u0026\u0026(this.universeCounter++,this.universeCounter=this.universeCounter%5,0==this.universeCounter\u0026\u0026this.universeCounter++,this.universe=this.universeCounter)),this.loopCount\u003cthis.minLoops\u0026\u0026(this.direction=1,this.loopCount=0),\"main\"==this.type){if(-1==this.direction\u0026\u0026(Math.abs(this.pos.x)\u003eWIDTH||Math.abs(this.pos.y)\u003eHEIGHT||this.pos.z\u003ecameraZ/3||this.pos.z\u003cplaneZ/3)){this.pos.x=random(-WIDTH/5\u003e\u003e0,WIDTH/5\u003e\u003e0),this.pos.y=random(-HEIGHT/5\u003e\u003e0,HEIGHT/5\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0),this.checkCollision(s);let t=0,i=10;for(;t\u003ci\u0026\u0026this.collision[0];)this.pos.x=random(-WIDTH/5\u003e\u003e0,WIDTH/5\u003e\u003e0),this.pos.y=random(-HEIGHT/5\u003e\u003e0,HEIGHT/5\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0),this.checkCollision(s),t++}}else{-1==this.direction\u0026\u0026(Math.abs(this.pos.x-this.center.x)\u003eWIDTH||Math.abs(this.pos.y-this.center.y)\u003eHEIGHT||this.pos.z\u003ecameraZ/2||this.pos.z\u003cplaneZ/2)\u0026\u0026(this.pos.x=random(-WIDTH/3\u003e\u003e0,WIDTH/3\u003e\u003e0),this.pos.y=random(-HEIGHT/3\u003e\u003e0,HEIGHT/3\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0)),this.checkCollision(s);let t=0,i=10;for(;t\u003ci\u0026\u0026this.collision[0];)this.pos.x=random(-WIDTH/3\u003e\u003e0,WIDTH/3\u003e\u003e0),this.pos.y=random(-HEIGHT/3\u003e\u003e0,HEIGHT/3\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0),this.checkCollision(s),t++}}draw(t,s,i){let e;if(this.loopCount\u003cthis.maxLoops-15\u0026\u0026t==this.universe\u0026\u0026(e=normalizeRadians(2.2*this.rotationV.x+3.3*this.v.x),i.texture(this.texture1),i.push(),i.translate(this.pos.x\u003e\u003e0,this.pos.y\u003e\u003e0,this.pos.z\u003e\u003e0),i.rotateX(this.rotationV.x),i.rotateY(this.rotationV.y),i.rotateZ(this.rotationV.z),i.noStroke(),-1==this.direction\u0026\u0026this.loopCount\u003e-200?(i.box(this.s,this.s,this.s/2\u003e\u003e0),i.push(),i.translate(0,0,this.s/2\u003e\u003e0),i.rotateZ(8*this.rotationV.x+10*this.a.x),i.texture(this.texture2),i.rotateZ(.2*this.rotationV.x+5*this.a.x),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop()):1==this.direction||this.loopCount\u003c-200\u0026\u0026Math.abs(e)\u003cPI/100?i.box(this.s,this.s,this.s):(-1==this.direction\u0026\u0026this.loopCount\u003c-200\u0026\u0026(Math.abs(e),PI),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.push(),i.translate(0,0,this.s/2\u003e\u003e0),i.rotateZ(8*this.rotationV.x+10*this.a.x),i.texture(this.texture2),i.push(),i.rotateZ(.2*this.rotationV.x+5*this.a.x),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop(),i.pop()),i.pop()),this.loopCount\u003e=this.energyLoops\u0026\u0026(t==this.universe||t==this.universe-1)){let t=this.loopCount/this.maxLoops;i.push(),i.translate(this.pos.x\u003e\u003e0,this.pos.y\u003e\u003e0,this.pos.z\u003e\u003e0),i.rotateY(PI/2),i.noStroke(),\"main\"==this.type\u0026\u0026i.background(this.hColor),i.ambientLight(0),i.emissiveMaterial(lerp(red(this.colorStart1),this.maxLoops,t),lerp(green(this.colorStart1),this.maxLoops,t),lerp(blue(this.colorStart1),this.maxLoops,t)),i.sphere(this.sphere1),i.emissiveMaterial(lerp(red(this.colorStart2),this.maxLoops,t),lerp(green(this.colorStart2),this.maxLoops,t),lerp(blue(this.colorStart2),this.maxLoops,t)),i.sphere(this.sphere2),i.emissiveMaterial(lerp(red(this.colorStart3),maxLoops,t),lerp(green(this.colorStart3),maxLoops,t),lerp(blue(this.colorStart3),maxLoops,t)),i.torus(this.taurus3),i.pop(),this.loopCount==this.maxLoops\u0026\u0026(\"main\"==this.type\u0026\u0026(backgroundColor=color(random(255)\u003e\u003e0,random(255)\u003e\u003e0,random(255)\u003e\u003e0),i.background(backgroundColor),this.universe\u003e0\u0026\u0026uniPlanes[this.universe].draw(s,i)),this.center=createVector(random(-WIDTH,WIDTH)\u003e\u003e0,random(-HEIGHT,HEIGHT)\u003e\u003e0,random(-12*this.index,-25*this.index)\u003e\u003e0),this.pos.x=random(this.center.x-WIDTH/20\u003e\u003e0,this.center.x+WIDTH/20\u003e\u003e0),this.pos.y=random(this.center.y-HEIGHT/20\u003e\u003e0,this.center.y+HEIGHT/20\u003e\u003e0),this.pos.z=random(this.center.z-WIDTH/30\u003e\u003e0,this.center.z+WIDTH/30\u003e\u003e0))}}}class UniPlane{constructor(t,s,i,e,o,r){this.pos=t,this.texture=s,this.shader=i,this.width=e,this.height=o,this.index=r,this.rescaledWidth=this.width*max(abs(this.pos.z/WIDTH/2\u003e\u003e0),1),this.rescaledHeight=this.height*max(abs(this.pos.z/WIDTH/2\u003e\u003e0),1)}draw(t,s){this.texture.shader(this.shader),this.shader.setUniform(\"resolution\",[this.width,this.height]),this.shader.setUniform(\"time\",millis()/1e3),this.texture.rect(0,0,this.rescaledWidth,3.25*this.rescaledHeight),s.texture(this.texture),s.noStroke(),s.push(),s.translate(this.pos.x,this.pos.y,this.pos.z\u003e\u003e0),s.plane(this.rescaledWidth,3.25*this.rescaledHeight),s.pop()}}class C_Cube_Node_1 extends C_Cube_1{constructor(t,s,i,e,o,r,a,h,n,c,l,p,d,m,u,x,v,H,T,I,y,g,b,C,W,f,z,D,S,L,M,V){super(t,s,i,e,o,r,a,h,n,c,l,p,d,m,u,x,v,H,T,I,y,g,b,C,W,f,z),this.eSphere=D,this.uniPlanes=S,this.maxOpen=L,this.openState=0,this.chargeLoops=M,this.universeCounter=V,this.universe=V}animateShaders(){if(this.texture1.rect(0,0,this.s,this.s),this.shader1.setUniform(\"resolution\",[this.s,this.s]),this.shader1.setUniform(\"time\",millis()/1e3),this.texture1.shader(this.shader1),this.texture2.rect(0,0,this.s,this.s),this.shader2.setUniform(\"resolution\",[this.s,this.s]),this.shader2.setUniform(\"time\",millis()/1e3),this.texture2.shader(this.shader2),1==this.direction){let t=(this.universe+1)%5;0==t\u0026\u0026t++,this.uniPlanes[t].texture.shader(this.uniPlanes[t].shader),this.uniPlanes[t].texture.rect(0,0,this.uniPlanes[1].rescaledWidth,this.uniPlanes[1].rescaledHeight),this.uniPlanes[t].shader.setUniform(\"resolution\",[this.uniPlanes[1].rescaledWidth,this.uniPlanes[1].rescaledHeight]),this.uniPlanes[t].shader.setUniform(\"time\",millis()/1e3)}else{let t=(this.universe-1)%5;0==t\u0026\u0026(t=t+this.uniPlanes.length-1),this.uniPlanes[t].texture.shader(this.uniPlanes[t].shader),this.uniPlanes[t].texture.rect(0,0,this.uniPlanes[1].rescaledWidth,this.uniPlanes[1].rescaledHeight),this.uniPlanes[t].shader.setUniform(\"resolution\",[this.uniPlanes[1].rescaledWidth,this.uniPlanes[1].rescaledHeight]),this.uniPlanes[t].shader.setUniform(\"time\",millis()/1e3)}}animateCube(t,s){this.checkCollision(s);let i=[];for(let t=0;t\u003c2;t++)sin((this.index+23)*round(this.loops/24)+12*t)\u003e.5?i[t]=1:i[t]=-1;if(this.rotationV.x+=abs(.01*sin(this.loopCount+loopCount*(1+this.index)))*i[0],this.rotationV.y+=abs(.01*cos(this.loopCount+loopCount*(1+this.index)))*i[1],this.rotationV.x=this.rotationV.x%(8*PI),this.rotationV.y=this.rotationV.y%(8*PI),-1==this.direction?\"main\"==this.type?(this.center.x\u003c=-WIDTH/3\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.center.y\u003c=-WIDTH/3\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.center.z\u003c=.05*cameraZ\u0026\u0026(this.v.z=Math.abs(this.v.z)),this.center.x\u003e=WIDTH/3\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.center.y\u003e=WIDTH/3\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.center.z\u003e=.9*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))):(this.center.x\u003c=-WIDTH/3\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.center.y\u003c=-WIDTH/3\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.center.z\u003c=.8*planeZ\u0026\u0026(this.v.z=Math.abs(this.v.z)),this.center.x\u003e=WIDTH/3\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.center.y\u003e=WIDTH/3\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.center.z\u003e=.9*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))):\"main\"==this.type?(this.pos.x\u003c=-WIDTH\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.pos.y\u003c=-WIDTH\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.pos.z\u003c=.8*planeZ\u0026\u0026(this.v.z=max(Math.abs(this.v.z),4)),this.pos.x\u003e=WIDTH\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.pos.y\u003e=WIDTH\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.pos.z\u003e=.9*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))):(this.pos.x\u003c=this.center.x-WIDTH/5\u0026\u0026(this.v.x=Math.abs(this.v.x)),this.pos.y\u003c=this.center.y-WIDTH/5\u0026\u0026(this.v.y=Math.abs(this.v.y)),this.pos.z\u003c=this.center.z+1.2*planeZ\u0026\u0026(this.v.z=Math.abs(this.v.z)),this.pos.x\u003e=this.center.x+WIDTH/5\u0026\u0026(this.v.x=-Math.abs(this.v.x)),this.pos.y\u003e=this.center.y+WIDTH/5\u0026\u0026(this.v.y=-Math.abs(this.v.y)),this.pos.z\u003e=this.center.z+2*cameraZ\u0026\u0026(this.v.z=-Math.abs(this.v.z))),this.loopCount+=this.direction,this.loopCount\u003cthis.maxLoops-15){let t=(this.energyLoops+this.chargeLoops)/2;if(1==this.direction)if(this.loopCount\u003et){if(this.pos.add(this.v),this.v.add(this.a),1==this.collision[0]){let t=this.getCollVector(this.collision[1],s).mult(random(20,30));this.v.add(t),this.a.add(t.mult(.4))}this.a.add(this.j)}else this.v.mag()\u003e3?this.pos.add(this.v.mult(this.brake*lerp(1,0,(this.maxLoops-this.loopCount)/this.maxLoops))):(this.v=createVector(minSpeed*random(-1,1),minSpeed*random(-1,1),minSpeed*random(-1,1)),this.pos.add(this.v)),p5.Vector.mag(this.a)\u003e2\u0026\u0026(this.a=createVector(random(-1,1),random(-1,1),random(-1,1))),p5.Vector.mag(this.j)\u003e2\u0026\u0026(this.j=createVector(random(-1,1),random(-1,1),random(-1,1)));else this.v.mag()\u003e3?this.pos.add(this.v.mult(this.brake*lerp(1,0,(this.maxLoops-this.loopCount)/this.maxLoops))):(this.v=createVector(minSpeed*random(-1,1),minSpeed*random(-1,1),minSpeed*random(-1,1)),this.pos.add(this.v)),p5.Vector.mag(this.a)\u003e2\u0026\u0026(this.a=createVector(random(-1,1),random(-1,1),random(-1,1))),p5.Vector.mag(this.j)\u003e2\u0026\u0026(this.j=createVector(random(-1,1),random(-1,1),random(-1,1)))}if(this.loopCount\u003e=this.chargeLoops\u0026\u0026(1==this.direction?this.openState=lerp(this.openState,this.maxOpen,1/(this.energyLoops-this.chargeLoops)):this.openState=lerp(this.openState,0,1/(this.energyLoops-this.chargeLoops))),this.loopCount\u003e=this.energyLoops\u0026\u00260!=this.universe\u0026\u00261==this.direction\u0026\u0026(this.universe=0),this.loopCount\u003ethis.maxLoops\u0026\u0026(this.direction=-1,Math.abs(this.rotationV.x)\u003c3\u0026\u0026(this.rotationV.x=random(1,1.5)*random([-3,3])),this.center.x=random(-WIDTH/2,WIDTH/2)\u003e\u003e0,this.center.y=random(-HEIGHT/2,HEIGHT/2)\u003e\u003e0,this.pos.x=this.center.x,this.pos.y=this.center.y,0==this.universe\u0026\u0026(this.universeCounter++,this.universeCounter=this.universeCounter%5,0==this.universeCounter\u0026\u0026this.universeCounter++,this.universe=this.universeCounter)),this.loopCount\u003cthis.minLoops\u0026\u0026(this.direction=1,this.loopCount=0),\"main\"==this.type){if(-1==this.direction\u0026\u0026(Math.abs(this.pos.x)\u003eWIDTH||Math.abs(this.pos.y)\u003eHEIGHT||this.pos.z\u003ecameraZ/3||this.pos.z\u003cplaneZ/3)){this.pos.x=random(-WIDTH/5\u003e\u003e0,WIDTH/5\u003e\u003e0),this.pos.y=random(-HEIGHT/5\u003e\u003e0,HEIGHT/5\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0),this.checkCollision(s);let t=0,i=10;for(;t\u003ci\u0026\u0026this.collision[0];)this.pos.x=random(-WIDTH/5\u003e\u003e0,WIDTH/5\u003e\u003e0),this.pos.y=random(-HEIGHT/5\u003e\u003e0,HEIGHT/5\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0),this.checkCollision(s),t++}}else{-1==this.direction\u0026\u0026(Math.abs(this.pos.x-this.center.x)\u003eWIDTH||Math.abs(this.pos.y-this.center.y)\u003eHEIGHT||this.pos.z\u003ecameraZ/2||this.pos.z\u003cplaneZ/2)\u0026\u0026(this.pos.x=random(-WIDTH/3\u003e\u003e0,WIDTH/3\u003e\u003e0),this.pos.y=random(-HEIGHT/3\u003e\u003e0,HEIGHT/3\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0)),this.checkCollision(s);let t=0,i=10;for(;t\u003ci\u0026\u0026this.collision[0];)this.pos.x=random(-WIDTH/3\u003e\u003e0,WIDTH/3\u003e\u003e0),this.pos.y=random(-HEIGHT/3\u003e\u003e0,HEIGHT/3\u003e\u003e0),this.pos.z=random(.5*planeZ\u003e\u003e0,.75*cameraZ\u003e\u003e0),this.checkCollision(s),t++}}draw(t,s,i){let e;if(this.loopCount\u003cthis.maxLoops-15\u0026\u0026t==this.universe){if(e=normalizeRadians(8.2*this.rotationV.x+15*this.v.x),i.texture(this.texture1),i.push(),i.translate(this.pos.x\u003e\u003e0,this.pos.y\u003e\u003e0,this.pos.z\u003e\u003e0),i.rotateX(this.rotationV.x),i.rotateY(this.rotationV.y),i.rotateZ(this.rotationV.z),i.noStroke(),-1==this.direction\u0026\u0026this.loopCount\u003e-200)if(this.loopCount\u003e=this.chargeLoops\u0026\u0026(t==this.universe||t==this.universe-1)){let s=(t-1)%5;0==s\u0026\u0026(s=s+this.uniPlanes.length-1),i.push(),i.translate(0,0,-this.s/2-this.s*this.openState\u003e\u003e0),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop(),i.push(),i.translate(0,0,this.s/2+this.s*this.openState\u003e\u003e0),i.rotateZ(8*this.rotationV.x+10*this.a.x),i.texture(this.texture2),i.push(),i.rotateZ(.2*this.rotationV.x+5*this.a.x),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop(),i.pop(),i.push(),i.texture(this.uniPlanes[s].texture),i.rotateZ(this.rotationV.x+this.rotationV.y),i.rotateY(Math.pow(this.rotationV.x,2)),i.sphere(this.eSphere*this.openState),i.pop()}else i.box(this.s,this.s,this.s/2\u003e\u003e0),i.push(),i.translate(0,0,this.s/2\u003e\u003e0),i.rotateZ(8*this.rotationV.x+10*this.a.x),i.texture(this.texture2),i.rotateZ(.2*this.rotationV.x+5*this.a.x),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop();else if(1==this.direction||this.loopCount\u003c-200\u0026\u0026Math.abs(e)\u003cPI/100)if(this.loopCount\u003e=this.chargeLoops\u0026\u0026(t==this.universe||t==this.universe-1)){let s=(t+1)%5;0==s\u0026\u0026s++,i.push(),i.translate(0,0,-this.s/2-this.s*this.openState\u003e\u003e0),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop(),i.push(),i.translate(0,0,this.s/2+this.s*this.openState\u003e\u003e0),i.rotateZ(8*this.rotationV.x+10*this.a.x),i.texture(this.texture2),i.push(),i.rotateZ(.2*this.rotationV.x+5*this.a.x),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop(),i.pop(),i.push(),i.texture(this.uniPlanes[s].texture),i.rotateZ(this.rotationV.x+this.rotationV.y),i.rotateY(Math.pow(this.rotationV.x,2)),i.sphere(this.eSphere*this.openState),i.pop()}else i.box(this.s,this.s,this.s);else-1==this.direction\u0026\u0026this.loopCount\u003c-200\u0026\u0026(Math.abs(e),PI),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.push(),i.translate(0,0,this.s/2\u003e\u003e0),i.rotateZ(8*this.rotationV.x+10*this.a.x),i.texture(this.texture2),i.push(),i.rotateZ(.2*this.rotationV.x+5*this.a.x),i.box(this.s,this.s,this.s/2\u003e\u003e0),i.pop(),i.pop();i.pop()}if(this.loopCount\u003e=this.energyLoops\u0026\u0026(t==this.universe||t==this.universe-1)){let t=this.loopCount/this.maxLoops;i.push(),i.translate(this.pos.x\u003e\u003e0,this.pos.y\u003e\u003e0,this.pos.z\u003e\u003e0),i.rotateY(PI/2),i.noStroke(),\"main\"==this.type\u0026\u0026i.background(this.hColor),i.ambientLight(0),i.emissiveMaterial(lerp(red(this.colorStart1),this.maxLoops,t),lerp(green(this.colorStart1),this.maxLoops,t),lerp(blue(this.colorStart1),this.maxLoops,t)),i.sphere(this.sphere1),i.emissiveMaterial(lerp(red(this.colorStart2),this.maxLoops,t),lerp(green(this.colorStart2),this.maxLoops,t),lerp(blue(this.colorStart2),this.maxLoops,t)),i.sphere(this.sphere2),i.emissiveMaterial(lerp(red(this.colorStart3),maxLoops,t),lerp(green(this.colorStart3),maxLoops,t),lerp(blue(this.colorStart3),maxLoops,t)),i.torus(this.taurus3),i.pop(),this.loopCount==this.maxLoops\u0026\u0026(\"main\"==this.type\u0026\u0026(backgroundColor=color(random(255)\u003e\u003e0,random(255)\u003e\u003e0,random(255)\u003e\u003e0),i.background(backgroundColor),this.universe\u003e0\u0026\u0026uniPlanes[this.universe].draw(s,i)),this.center=createVector(random(-WIDTH,WIDTH)\u003e\u003e0,random(-HEIGHT,HEIGHT)\u003e\u003e0,random(-12*this.index,-25*this.index)\u003e\u003e0),this.pos.x=random(this.center.x-WIDTH/20\u003e\u003e0,this.center.x+WIDTH/20\u003e\u003e0),this.pos.y=random(this.center.y-HEIGHT/20\u003e\u003e0,this.center.y+HEIGHT/20\u003e\u003e0),this.pos.z=random(this.center.z-WIDTH/30\u003e\u003e0,this.center.z+WIDTH/30\u003e\u003e0))}}}function randomHash(){let t=\"0x\";for(var s=0;s\u003c64;s++)t+=Math.floor(16*Math.random()).toString(16);return t}function getSeed(){return parseInt(hash.slice(0,16),16)}\r\n","artId":"chatpq4n70rkl4ca5acg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"]}],"like":0,"thumbFileName":"chatpq4n70rkl4ca5acg.png","selectedThumbFileName":"chatpq4n70rkl4ca5acg.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmPVyShSjhatSDn8a94paMLH5dfyfAkpTvyivt7M4aGZRo","resourceFileName":"chatpq4n70rkl4ca5acg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmeauDBzuCFsVBfeS8v6cbVqFd5kXrJAhLmWb5We5eynRJ","resourceType":1,"metadataUrl":"https://neort.mypinata.cloud/ipfs/Qmcu9mKFRUxpd3mTKer4UnG8PbQUwZoPvxaC8FUXD6HV99","tags":[{"id":"bmjbjcc3p9f7m1g018u0","name":"glsl"},{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.05,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"chb2gusn70rkl4ca5bdg","title":"ColorfulSpinners(Movie)","description":"ColorfulSpinners の動画版\n\nhttps://neort.io/art/chah04kn70rkl4ca54g0","createdAt":1683368115,"updatedAt":1683381161,"user":{"id":"AxrhxjsMdchT3MgZyMsscrSyXGa2","customId":"AxrhxjsMdchT3MgZyMsscrSyXGa2","name":"独楽回しeddy","biography":"twitter : https://twitter.com/EKey2210\ntumblr : https://www.tumblr.com/blog/spinner22exhibition\nopenprocessing : https://openprocessing.org/user/58956?view=activity","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/AxrhxjsMdchT3MgZyMsscrSyXGa2.png","createdAt":1550901251000,"updatedAt":1734846488687},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"chb2gusn70rkl4ca5bdg.png","thumbnailFileUrl":"","resourceFileName":"chb2gusn70rkl4ca5bdg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmS4LQ49XkC2FMu2py6A5zxKkJU5FbBUhr3R8WbT5FUciN","resourceType":2,"metadataUrl":"","tags":[{"id":"bmj9c1c3p9fdr6916krg","name":"GLSL"},{"id":"cdtm0hcn70rqdtr2kch0","name":"day2"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cha7fgcn70rkl4ca4qvg","title":"Burst into Flame like Me / Holy Grail","description":"One of the promo videos for my newest release BURST INTO FLAME LIKE ME.\n\nday2","createdAt":1683257329,"updatedAt":1683257702,"user":{"id":"RIjrKm235SPlpijgQQB7RTO85Tl1","customId":"RIjrKm235SPlpijgQQB7RTO85Tl1","name":"Kinnara : Desi La","biography":"","image":"","createdAt":1683255742786,"updatedAt":1683458642685},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"cha7fgcn70rkl4ca4qvg.png","thumbnailFileUrl":"","resourceFileName":"cha7fgcn70rkl4ca4qvg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmeio2sNHGmtBpZunDTY7ymR7hkCayCD8kBUSkQEZ9dq1Y","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chab844n70rkl4ca4uvg","title":"Flux++","description":"\"Flux++\" is a generative approach to the artist's exploration of light as the essence of photography – a crucial factor in image creation. Vibrant lights react to each other's presence and create a visual play of abstract murmuration. Based on deterministic values behaviors change and can be observed in the process. The constant, infinite motion resembles structures inspired by natural phenomena.\n\n","createdAt":1683272728,"updatedAt":1683272830,"user":{"id":"dTnPCWJT60TCCbZCFYZPwqELSai1","customId":"dTnPCWJT60TCCbZCFYZPwqELSai1","name":"Pawel Dudko","biography":"Digital \u0026 generative artist. Virtual and physical space explorer. 3D printing enthusiast. Art Ph.D.\nhttps://www.pdudko.com","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/dTnPCWJT60TCCbZCFYZPwqELSai1.jpg","createdAt":1683272414422,"updatedAt":1698045356855},"codes":[{"id":"chab864n70rkl4ca4v0g","type":0,"text":"\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"en\"\u003e\r\n\u003chead\u003e\r\n \u003cmeta charset=\"UTF-8\"\u003e\r\n \u003ctitle\u003e\"Flux++\" by Paweł Dudko | pdudko.com\u003c/title\u003e\r\n \u003cscript id=\"snippet-random-code\" type=\"text/javascript\"\u003e\r\nconst seed=\"ymqjjgvft98njulhyudayai30vlekl4vrekwctak5kui1cdtgs8avsgjvrfvr6oki0\";function cyrb128(t){let u=1779033703,l=3144134277,e=1013904242,n=2773480762;for(let h,i=0;i\u003ct.length;i++)u=l^Math.imul(u^(h=t.charCodeAt(i)),597399067),l=e^Math.imul(l^h,2869860233),e=n^Math.imul(e^h,951274213),n=u^Math.imul(n^h,2716044179);return u=Math.imul(e^u\u003e\u003e\u003e18,597399067),l=Math.imul(n^l\u003e\u003e\u003e22,2869860233),e=Math.imul(u^e\u003e\u003e\u003e17,951274213),n=Math.imul(l^n\u003e\u003e\u003e19,2716044179),[(u^l^e^n)\u003e\u003e\u003e0,(l^u)\u003e\u003e\u003e0,(e^u)\u003e\u003e\u003e0,(n^u)\u003e\u003e\u003e0]}function sfc32(t,u,l,e){return function(){var n=(t\u003e\u003e\u003e=0)+(u\u003e\u003e\u003e=0)|0;return t=u^u\u003e\u003e\u003e9,u=(l\u003e\u003e\u003e=0)+(l\u003c\u003c3)|0,l=(l=l\u003c\u003c21|l\u003e\u003e\u003e11)+(n=n+(e=(e\u003e\u003e\u003e=0)+1|0)|0)|0,(n\u003e\u003e\u003e0)/4294967296}}let fR=sfc32(...cyrb128(seed));\r\n \u003c/script\u003e\r\n \u003cstyle\u003ebody {margin: 0;padding: 0;overflow: hidden;background-color: black;}\r\n \u003c/style\u003e\r\n\u003c/head\u003e\r\n\u003cbody\u003e\r\n\u003ccanvas id=\"canvas\"\u003e\u003c/canvas\u003e\r\n\u003cscript type=\"text/javascript\"\u003e\r\nconst t=window.innerWidth,e=window.innerHeight,r=Math.min(t,e);function o(t=[],i){let e=Math.hypot(...t);t.forEach(((r,o)=\u003et[o]=r/e*i))}function a(t,i,e){return n.rB(e)?t:i}class s{rD(){return fR()}rN(t,i){return t+(i-t)*this.rD()}rI(t,i){return 0|this.rN(t,i+1)}rB(t){return this.rD()\u003ct}}const n=new s;class c{constructor(i,r,o,a,s,c,h,l,f,v){this.position=[n.rD()*t,n.rD()*e],this.velocity=[n.rN(-1,1),n.rN(-1,1)],this.acceleration=[0,0],this.maxSpeed=insaneRadius?i/2:i,this.maxSpeedStored=this.maxSpeed,this.maxForce=r,this.bs=o,this.bc=a,this.ba=s,this.perceptionS=c,this.perceptionC=h,this.perceptionA=l,this.color=f,this.radius=v,this.visibility=0}edges(){this.position[0]=(this.position[0]+t)%t,this.position[1]=(this.position[1]+e)%e}align(t){let i=this.perceptionS,e=[0,0],r=0;for(let o of t){let[t,a]=o.position,[s,n]=this.position;if(Math.abs(t-s)\u003c=i\u0026\u0026Math.abs(a-n)\u003c=i){Math.hypot(s-t,n-a)\u003c=i\u0026\u0026o!=this\u0026\u0026(e.forEach(((t,i,e)=\u003ee[i]+=o.velocity[i])),r++)}}return r\u003e0\u0026\u0026(e.forEach(((t,i,e)=\u003ee[i]=e[i]/r*this.maxSpeed-this.velocity[i])),o(e,this.maxForce)),e}cohesion(t){let i=this.perceptionC,e=[0,0],r=0;for(let o of t){let[t,a]=o.position,[s,n]=this.position;if(Math.abs(t-s)\u003c=i\u0026\u0026Math.abs(a-n)\u003c=i){Math.hypot(s-t,n-a)\u003c=i\u0026\u0026o!=this\u0026\u0026(e.forEach(((t,i,e)=\u003ee[i]+=o.position[i])),r++)}}return r\u003e0\u0026\u0026(e=e.map(((t,i,e)=\u003e(t/r-this.position[i])*this.maxSpeed-this.velocity[i])),o(e,this.maxForce)),e}separation(t){let i=this.perceptionA,e=[0,0],r=0;for(let o of t){let[t,a]=o.position,[s,n]=this.position;if(Math.abs(t-s)\u003c=i\u0026\u0026Math.abs(a-n)\u003c=i){const c=Math.hypot(s-t,n-a);if(c\u003ci\u0026\u0026o!==this){const[i,o]=[(s-t)/c,(n-a)/c];e=e.map(((t,e)=\u003et+[i,o][e])),r++}}}return r\u003e0\u0026\u0026(e.forEach(((t,i,e)=\u003ee[i]=e[i]/r*this.maxSpeed-this.velocity[i])),o(e,this.maxForce)),e}flock(t){let i=this.align(t),e=this.cohesion(t),r=this.separation(t);this.acceleration=[0,0],this.acceleration.forEach(((t,o,a)=\u003ea[o]=this.bs*r[o]+this.bc*e[o]+this.ba*i[o]))}update(){this.position[0]+=this.velocity[0],this.position[1]+=this.velocity[1],this.velocity[0]+=this.acceleration[0],this.velocity[1]+=this.acceleration[1],o(this.velocity,this.maxSpeed)}show(){let i=this.radius,o=insaneRadius?r/9:R?r/20:r/100,[a,s]=this.position;i*=Math.min(a\u003c=o?a/o:1,a\u003e=t-o?(t-a)/o:1,s\u003c=o?s/o:1,s\u003e=e-o?(e-s)/o:1),x.beginPath(),x.arc(a,s,Math.abs(i),0,2*Math.PI),x.fillStyle=this.color,x.globalAlpha=this.visibility,x.fill(),x.globalAlpha=1,this.visibility+=.01}}let h=[\"#050409\",\"#091425\",\"#764e37\",\"#df8d78\",\"#f0d3ae\",\"#c4dfdb\"],l=655,f=[],v=[],u=[-148.29,233.13],d=7.01,p=[0,0],m=60,E=!1,R=insaneRadius=tinyRadius=midRadius=!1;var g,A,b=document.createElement(\"canvas\"),x=b.getContext(\"2d\"),N=0,T=25;b.width=t,b.height=e;const _=\"attribute vec2 a_position;attribute vec2 a_texCoord;varying vec2 vUv;uniform vec2 u_resolution;void main(){vUv=a_texCoord;vec2 clipSpace=a_position/u_resolution*2.-1.;gl_Position=vec4(clipSpace*vec2(1,-1),0,1);}\",S=`precision mediump float;varying vec2 vUv;uniform vec2 dl;uniform sampler2D uI;uniform float t;vec2 r(vec2 x){vec2 v=vec2(97.13*${n.rD()},91.11*${n.rD()})*fract(x*9.31830986);return vec2(fract(19.07*fract(v.x*v.y*(v.x+v.y))));}vec2 sn(vec2 x){vec2 i=floor(x),l=fract(x),u=l*l*(3.-2.*l),a=r(i),b=r(i+vec2(1,0)),c=r(i+vec2(0,1)),d=r(i+vec2(1,1)),e=mix(a,b,u.x),f=mix(c,d,u.x);return mix(e,f,u.y);}void main(){float N=.4;mat2 M=mat2(.96,.28,-.28,.96);for (float i=1.;i\u003c4.;i++)M*=M,N+=1./pow(2.,i)*sn(pow(2.,i)*M*vUv*${d}+10.+t/${n.rN(50,200)}).x;vec2 uv=vUv,d=normalize(dl)*2.;for (float i= 1.;i\u003c7.5;i+=2.)uv.x ${a(\"-\",\"+\",.5)}=.05/(i*i)*${a(\"sin\",\"cos\",.5)}(i*${n.rN(8,n.rN(12,15))}*uv.y*d.x+${n.rN(0,1e4)}+t/${n.rN(100,1e3)}),uv.y ${a(\"-\",\"+\",.5)}=.05/(i*i)*${a(\"sin\",\"cos\",.5)}(i*${n.rN(8,n.rN(12,15))}*uv.x*d.y+${n.rN(0,1e4)}+t/${n.rN(100,1e3)});vec4 c=vec4(0);float tt=0.,off=r(vUv).y+r(vUv).x;for(float t=-30.;t\u003c=30.;t++){float pc=(t+off-.5)/30.,w=1.-abs(pc);vec2 S=smoothstep(0.,2.,(vUv+.25)*.75+uv );vec4 spl=texture2D(uI,S+dl*pc*N);c+=spl*w;tt+=w;}c/=tt;float l=length(c),m=smoothstep(1.15,1.731,l)*l*2.9,v=length(vUv-.5)/.8;vec4 L=c/l*m;v=smoothstep(1., 0., v);gl_FragColor=vec4((c.rgb + L.rgb)*v,1.);}`;function y(t){let i=r/n.rN(4,n.rN(4,24)),e=r/n.rN(2,8),o=r/n.rN(10,40);for(let a=0;a\u003ct;a++){let t=n.rN(2,7),a=n.rN(.1,.5),s=n.rN(1,n.rN(1,n.rN(5,25))),l=n.rN(.5,n.rN(.5,n.rN(.5,2))),f=n.rN(1,n.rN(1,n.rN(1,17))),u=h[n.rI(0,h.length-1)],d=n.rI(r/200,n.rI(r/200,n.rI(r/200,r/20)));E\u0026\u0026(i=r/n.rN(4,n.rN(4,24)),e=r/n.rN(2,8),o=r/n.rN(10,40)),v.push(new c(t,a,s,l,f,i,e,o,u,d))}}function w(){let t=h.length-1;for(ii=0;ii\u003c3;ii++)for(i=t-1;i\u003c=t;i++)h.push(h[i]);y(l)}function U(){if((A=Date.now())-N\u003eT){g=A-N,N=A-N%T,x.beginPath(),x.rect(0,0,b.width,b.height),x.globalAlpha=m\u003e50?1:.05,x.fillStyle=\"#000\",x.fill();let t=[0,0];for(let i of v)i.edges(),i.flock(v),i.update(),i.show(),t.forEach(((t,e,r)=\u003er[e]+=i.velocity[e]));t.forEach(((t,i,e)=\u003ee[i]/=v.length)),o(t,1),p.forEach(((i,e,r)=\u003er[e]+=.01*t[e])),o(p,midRadius||R||insaneRadius?.4:.17),f=p,O(),m--}window.requestAnimationFrame(U)}function D(t,i,e){var r=t.createShader(i);return t.shaderSource(r,e),t.compileShader(r),t.getShaderParameter(r,t.COMPILE_STATUS)?r:t.deleteShader(r)}function M(t,i,e){var r=t.createProgram();return t.attachShader(r,i),t.attachShader(r,e),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)?r:t.deleteProgram(r)}function F(t,i,e,r,o){t.bufferData(t.ARRAY_BUFFER,new Float32Array([i,e,i+r,e,i,e+o,i,e+o,i+r,e,i+r,e+o]),t.STATIC_DRAW)}const P=document.getElementById(\"canvas\").getContext(\"webgl\");canvas.width=t,canvas.height=e,window.devicePixelRatio=.5;const I=M(P,D(P,P.VERTEX_SHADER,_),D(P,P.FRAGMENT_SHADER,S)),B=P.getAttribLocation(I,\"a_position\"),L=P.getAttribLocation(I,\"a_texCoord\"),$=P.createBuffer(),C=P.createBuffer(),X=P.createTexture(),G=P.getUniformLocation(I,\"u_resolution\"),W=P.getUniformLocation(I,\"dl\"),Y=P.getUniformLocation(I,\"t\");function O(){if(!P)return console.log(\"WebGL is not available\");P.texImage2D(P.TEXTURE_2D,0,P.RGBA,P.RGBA,P.UNSIGNED_BYTE,x.canvas),P.useProgram(I),[B,L].forEach(((t,i)=\u003e{P.enableVertexAttribArray(t),P.bindBuffer(P.ARRAY_BUFFER,[$,C][i]),P.vertexAttribPointer(t,2,P.FLOAT,!1,0,0)})),P.uniform2fv(G,[P.canvas.width,P.canvas.height]),P.uniform2fv(W,f),P.uniform1f(Y,Math.abs(m-60)),P.drawArrays(P.TRIANGLES,0,6)}P.bindBuffer(P.ARRAY_BUFFER,$),F(P,0,0,b.width,b.height),P.bindBuffer(P.ARRAY_BUFFER,C),P.bufferData(P.ARRAY_BUFFER,new Float32Array([0,0,1,0,0,1,0,1,1,0,1,1]),P.STATIC_DRAW),P.bindTexture(P.TEXTURE_2D,X),P.texParameteri(P.TEXTURE_2D,P.TEXTURE_WRAP_S,P.CLAMP_TO_EDGE),P.texParameteri(P.TEXTURE_2D,P.TEXTURE_WRAP_T,P.CLAMP_TO_EDGE),P.texParameteri(P.TEXTURE_2D,P.TEXTURE_MIN_FILTER,P.NEAREST),P.texParameteri(P.TEXTURE_2D,P.TEXTURE_MAG_FILTER,P.NEAREST),P.viewport(0,0,P.canvas.width,P.canvas.height),w(),window.requestAnimationFrame(U);\r\n\u003c/script\u003e\r\n\u003c/body\u003e\r\n\u003c/html\u003e\r\n","artId":"chab844n70rkl4ca4uvg","libraries":[]},{"id":"chab864n70rkl4ca4v10","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"chab844n70rkl4ca4uvg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chab864n70rkl4ca4v1g","type":2,"text":"","artId":"chab844n70rkl4ca4uvg","libraries":[]}],"like":1,"thumbFileName":"chab844n70rkl4ca4uvg.png","selectedThumbFileName":"chab844n70rkl4ca4uvg.png","thumbnailFileUrl":"","resourceFileName":"chab844n70rkl4ca4uvg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmd8yMrA3J6QHGkKsiphsK2xZQRoC82J85X2k4W9P6dQCn","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"chb8vpcn70rqrj9bq8l0.jpg","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1683394533,"updatedAt":1683394534},{"id":"chb8t7cn70rqrj9bq84g","title":"CURATION FREE #2 Day 1","description":"Artworks displayed at open exhibition \"CURATION FREE\" at NEORT++. Check the page below for the detail. https://neort.io/challenge/ch4hvjsn70rhlpf0n460","user":{"id":"9Bqy2IWae5gAXfMSM4cHStP2dxP2","customId":"r21nomi","name":"NIINOMI","biography":"Creative Coder.\nI mainly use GLSL, WebGL.\nRecently, TouchDesigner, Houdini and Unity.\n\nhttps://niinomi.art","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/9Bqy2IWae5gAXfMSM4cHStP2dxP2.jpg","createdAt":1548912457000,"updatedAt":1735357681608},"arts":[{"id":"ch4k4b4n70rhlpf0n74g","title":"Push/Pull/Spin","description":"An experiment with a Mondrian-like pattern + some additional extrusion animation + spinning. \n\nThings are drawn to a partially cleared FBO to create a trail effect. \n\nYou can find the source at\nhttps://gitlab.com/sortofsleepy/bite-sized/-/tree/web/webgl-recurse\n\n","createdAt":1682522676,"updatedAt":1682725307,"user":{"id":"xRmBysk6W5PkiQ0TDiDuE8QNxrJ3","customId":"sortofsleepy","name":"sortofsleepy","biography":"Sometimes creative coder. \n\nA little more about me can be found @ lnnks.co/30da","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/xRmBysk6W5PkiQ0TDiDuE8QNxrJ3.jpg","createdAt":1640582202822,"updatedAt":1730682449035},"codes":[{"id":"ch4k4d4n70rhlpf0n75g","type":0,"text":"","artId":"ch4k4b4n70rhlpf0n74g","libraries":[]},{"id":"ch4k4d4n70rhlpf0n760","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ch4k4b4n70rhlpf0n74g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch4k4d4n70rhlpf0n76g","type":2,"text":"var Nt=Object.defineProperty;var Bt=(t,e,i)=\u003ee in t?Nt(t,e,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[e]=i;var p=(t,e,i)=\u003e(Bt(t,typeof e!=\"symbol\"?e+\"\":e,i),i);(function(){const e=document.createElement(\"link\").relList;if(e\u0026\u0026e.supports\u0026\u0026e.supports(\"modulepreload\"))return;for(const s of document.querySelectorAll('link[rel=\"modulepreload\"]'))r(s);new MutationObserver(s=\u003e{for(const n of s)if(n.type===\"childList\")for(const a of n.addedNodes)a.tagName===\"LINK\"\u0026\u0026a.rel===\"modulepreload\"\u0026\u0026r(a)}).observe(document,{childList:!0,subtree:!0});function i(s){const n={};return s.integrity\u0026\u0026(n.integrity=s.integrity),s.referrerpolicy\u0026\u0026(n.referrerPolicy=s.referrerpolicy),s.crossorigin===\"use-credentials\"?n.credentials=\"include\":s.crossorigin===\"anonymous\"?n.credentials=\"omit\":n.credentials=\"same-origin\",n}function r(s){if(s.ep)return;s.ep=!0;const n=i(s);fetch(s.href,n)}})();function Ct(t=document.createElement(\"canvas\"),e={width:window.innerWidth,height:window.innerHeight,glOptions:{alpha:!0,antialias:!0,depth:!0}}){let i=t.getContext(\"webgl2\",e.glOptions);t.width=e.width,t.height=e.height;for(let r in J.prototype)i[r]=J.prototype[r];return Object.assign(i,new J(e.width,e.height)),i}function J(t=this.canvas.width,e=this.canvas.height){this.viewportX=0,this.viewportY=0,this.width=t,this.height=e}J.prototype={setViewport(t=0,e=0,i=this.width,r=this.height){return this.viewportX=t,this.viewportY=e,this.width=i,this.height=r,this.canvas.width=i,this.canvas.height=r,this.viewport(t,e,i,r),this},clearColorBit(){return this.clear(this.COLOR_BUFFER_BIT),this},clearDepthBit(){return this.clear(this.DEPTH_BUFFER_BIT),this},clearScreen(t=0,e=0,i=0,r=1){return this.clearColor(t,e,i,r),this.viewport(this.viewportX,this.viewportY,this.canvas.width,this.canvas.height),this.clear(this.COLOR_BUFFER_BIT|this.DEPTH_BUFFER_BIT),this},clearScreenArrayColor(t){return this.clearColor(t[0],t[1],t[2],t[3]),this.viewport(this.viewportX,this.viewportY,this.canvas.width,this.canvas.height),this.clear(this.COLOR_BUFFER_BIT|this.DEPTH_BUFFER_BIT),this},enableAlphaBlending(){this.enable(this.BLEND),this.blendFunc(this.SRC_ALPHA,this.ONE_MINUS_SRC_ALPHA)},enableAdditiveBlending(){this.enable(this.BLEND),this.blendFunc(this.ONE,this.ONE)},setSize(t=window.innerWidth,e=window.innerHeight){return this.canvas.width=t,this.canvas.height=e,this.width=t,this.height=e,this},unbindTexture(){return this.bindTexture(this.TEXTURE_2D,null),this},unbindTextures(){return this.bindTexture(this.TEXTURE_2D,null),this},setFullscreen(t=null){return this.canvas.parentElement,this.canvas.width=window.innerWidth,this.canvas.height=window.innerHeight,this.setViewport(),t?window.addEventListener(\"resize\",t):window.addEventListener(\"resize\",()=\u003e{this.canvas.width=window.innerWidth,this.canvas.height=window.innerHeight,this.setViewport(0,0,this.canvas.width,this.canvas.height)}),this}};var y={};y.EPSILON=1e-6;y.ARRAY_TYPE=typeof Float32Array\u003c\"u\"?Float32Array:Array;y.RANDOM=Math.random;y.ENABLE_SIMD=!1;y.SIMD_AVAILABLE=y.ARRAY_TYPE===Float32Array\u0026\u0026\"SIMD\"in window;y.USE_SIMD=y.ENABLE_SIMD\u0026\u0026y.SIMD_AVAILABLE;y.setMatrixArrayType=function(t){y.ARRAY_TYPE=t};var kt=Math.PI/180;y.toRadian=function(t){return t*kt};y.equals=function(t,e){return Math.abs(t-e)\u003c=y.EPSILON*Math.max(1,Math.abs(t),Math.abs(e))};var l=window.SIMD!==void 0?window.SIMD:{},m={scalar:{},SIMD:{}};m.create=function(){var t=new y.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};m.clone=function(t){var e=new y.ARRAY_TYPE(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e};m.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t};m.fromValues=function(t,e,i,r,s,n,a,h,f,d,o,c,x,u,b,F){var g=new y.ARRAY_TYPE(16);return g[0]=t,g[1]=e,g[2]=i,g[3]=r,g[4]=s,g[5]=n,g[6]=a,g[7]=h,g[8]=f,g[9]=d,g[10]=o,g[11]=c,g[12]=x,g[13]=u,g[14]=b,g[15]=F,g};m.set=function(t,e,i,r,s,n,a,h,f,d,o,c,x,u,b,F,g){return t[0]=e,t[1]=i,t[2]=r,t[3]=s,t[4]=n,t[5]=a,t[6]=h,t[7]=f,t[8]=d,t[9]=o,t[10]=c,t[11]=x,t[12]=u,t[13]=b,t[14]=F,t[15]=g,t};m.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};m.scalar.transpose=function(t,e){if(t===e){var i=e[1],r=e[2],s=e[3],n=e[6],a=e[7],h=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=i,t[6]=e[9],t[7]=e[13],t[8]=r,t[9]=n,t[11]=e[14],t[12]=s,t[13]=a,t[14]=h}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t};m.SIMD.transpose=function(t,e){var i=window.SIMD,r,s,n,a,h,f,d,o,c,x;return r=i.Float32x4.load(e,0),s=i.Float32x4.load(e,4),n=i.Float32x4.load(e,8),a=i.Float32x4.load(e,12),h=i.Float32x4.shuffle(r,s,0,1,4,5),f=i.Float32x4.shuffle(n,a,0,1,4,5),d=i.Float32x4.shuffle(h,f,0,2,4,6),o=i.Float32x4.shuffle(h,f,1,3,5,7),i.Float32x4.store(t,0,d),i.Float32x4.store(t,4,o),h=i.Float32x4.shuffle(r,s,2,3,6,7),f=i.Float32x4.shuffle(n,a,2,3,6,7),c=i.Float32x4.shuffle(h,f,0,2,4,6),x=i.Float32x4.shuffle(h,f,1,3,5,7),i.Float32x4.store(t,8,c),i.Float32x4.store(t,12,x),t};m.transpose=y.USE_SIMD?m.SIMD.transpose:m.scalar.transpose;m.scalar.invert=function(t,e){var i=e[0],r=e[1],s=e[2],n=e[3],a=e[4],h=e[5],f=e[6],d=e[7],o=e[8],c=e[9],x=e[10],u=e[11],b=e[12],F=e[13],g=e[14],v=e[15],_=i*h-r*a,A=i*f-s*a,T=i*d-n*a,M=r*f-s*h,E=r*d-n*h,z=s*d-n*f,I=o*F-c*b,D=o*g-x*b,P=o*v-u*b,O=c*g-x*F,R=c*v-u*F,L=x*v-u*g,S=_*L-A*R+T*O+M*P-E*D+z*I;return S?(S=1/S,t[0]=(h*L-f*R+d*O)*S,t[1]=(s*R-r*L-n*O)*S,t[2]=(F*z-g*E+v*M)*S,t[3]=(x*E-c*z-u*M)*S,t[4]=(f*P-a*L-d*D)*S,t[5]=(i*L-s*P+n*D)*S,t[6]=(g*T-b*z-v*A)*S,t[7]=(o*z-x*T+u*A)*S,t[8]=(a*R-h*P+d*I)*S,t[9]=(r*P-i*R-n*I)*S,t[10]=(b*E-F*T+v*_)*S,t[11]=(c*T-o*E-u*_)*S,t[12]=(h*D-a*O-f*I)*S,t[13]=(i*O-r*D+s*I)*S,t[14]=(F*A-b*M-g*_)*S,t[15]=(o*M-c*A+x*_)*S,t):null};m.SIMD.invert=function(t,e){var i,r,s,n,a,h,f,d,o,c,x=l.Float32x4.load(e,0),u=l.Float32x4.load(e,4),b=l.Float32x4.load(e,8),F=l.Float32x4.load(e,12);return a=l.Float32x4.shuffle(x,u,0,1,4,5),r=l.Float32x4.shuffle(b,F,0,1,4,5),i=l.Float32x4.shuffle(a,r,0,2,4,6),r=l.Float32x4.shuffle(r,a,1,3,5,7),a=l.Float32x4.shuffle(x,u,2,3,6,7),n=l.Float32x4.shuffle(b,F,2,3,6,7),s=l.Float32x4.shuffle(a,n,0,2,4,6),n=l.Float32x4.shuffle(n,a,1,3,5,7),a=l.Float32x4.mul(s,n),a=l.Float32x4.swizzle(a,1,0,3,2),h=l.Float32x4.mul(r,a),f=l.Float32x4.mul(i,a),a=l.Float32x4.swizzle(a,2,3,0,1),h=l.Float32x4.sub(l.Float32x4.mul(r,a),h),f=l.Float32x4.sub(l.Float32x4.mul(i,a),f),f=l.Float32x4.swizzle(f,2,3,0,1),a=l.Float32x4.mul(r,s),a=l.Float32x4.swizzle(a,1,0,3,2),h=l.Float32x4.add(l.Float32x4.mul(n,a),h),o=l.Float32x4.mul(i,a),a=l.Float32x4.swizzle(a,2,3,0,1),h=l.Float32x4.sub(h,l.Float32x4.mul(n,a)),o=l.Float32x4.sub(l.Float32x4.mul(i,a),o),o=l.Float32x4.swizzle(o,2,3,0,1),a=l.Float32x4.mul(l.Float32x4.swizzle(r,2,3,0,1),n),a=l.Float32x4.swizzle(a,1,0,3,2),s=l.Float32x4.swizzle(s,2,3,0,1),h=l.Float32x4.add(l.Float32x4.mul(s,a),h),d=l.Float32x4.mul(i,a),a=l.Float32x4.swizzle(a,2,3,0,1),h=l.Float32x4.sub(h,l.Float32x4.mul(s,a)),d=l.Float32x4.sub(l.Float32x4.mul(i,a),d),d=l.Float32x4.swizzle(d,2,3,0,1),a=l.Float32x4.mul(i,r),a=l.Float32x4.swizzle(a,1,0,3,2),d=l.Float32x4.add(l.Float32x4.mul(n,a),d),o=l.Float32x4.sub(l.Float32x4.mul(s,a),o),a=l.Float32x4.swizzle(a,2,3,0,1),d=l.Float32x4.sub(l.Float32x4.mul(n,a),d),o=l.Float32x4.sub(o,l.Float32x4.mul(s,a)),a=l.Float32x4.mul(i,n),a=l.Float32x4.swizzle(a,1,0,3,2),f=l.Float32x4.sub(f,l.Float32x4.mul(s,a)),d=l.Float32x4.add(l.Float32x4.mul(r,a),d),a=l.Float32x4.swizzle(a,2,3,0,1),f=l.Float32x4.add(l.Float32x4.mul(s,a),f),d=l.Float32x4.sub(d,l.Float32x4.mul(r,a)),a=l.Float32x4.mul(i,s),a=l.Float32x4.swizzle(a,1,0,3,2),f=l.Float32x4.add(l.Float32x4.mul(n,a),f),o=l.Float32x4.sub(o,l.Float32x4.mul(r,a)),a=l.Float32x4.swizzle(a,2,3,0,1),f=l.Float32x4.sub(f,l.Float32x4.mul(n,a)),o=l.Float32x4.add(l.Float32x4.mul(r,a),o),c=l.Float32x4.mul(i,h),c=l.Float32x4.add(l.Float32x4.swizzle(c,2,3,0,1),c),c=l.Float32x4.add(l.Float32x4.swizzle(c,1,0,3,2),c),a=l.Float32x4.reciprocalApproximation(c),c=l.Float32x4.sub(l.Float32x4.add(a,a),l.Float32x4.mul(c,l.Float32x4.mul(a,a))),c=l.Float32x4.swizzle(c,0,0,0,0),c?(l.Float32x4.store(t,0,l.Float32x4.mul(c,h)),l.Float32x4.store(t,4,l.Float32x4.mul(c,f)),l.Float32x4.store(t,8,l.Float32x4.mul(c,d)),l.Float32x4.store(t,12,l.Float32x4.mul(c,o)),t):null};m.invert=y.USE_SIMD?m.SIMD.invert:m.scalar.invert;m.scalar.adjoint=function(t,e){var i=e[0],r=e[1],s=e[2],n=e[3],a=e[4],h=e[5],f=e[6],d=e[7],o=e[8],c=e[9],x=e[10],u=e[11],b=e[12],F=e[13],g=e[14],v=e[15];return t[0]=h*(x*v-u*g)-c*(f*v-d*g)+F*(f*u-d*x),t[1]=-(r*(x*v-u*g)-c*(s*v-n*g)+F*(s*u-n*x)),t[2]=r*(f*v-d*g)-h*(s*v-n*g)+F*(s*d-n*f),t[3]=-(r*(f*u-d*x)-h*(s*u-n*x)+c*(s*d-n*f)),t[4]=-(a*(x*v-u*g)-o*(f*v-d*g)+b*(f*u-d*x)),t[5]=i*(x*v-u*g)-o*(s*v-n*g)+b*(s*u-n*x),t[6]=-(i*(f*v-d*g)-a*(s*v-n*g)+b*(s*d-n*f)),t[7]=i*(f*u-d*x)-a*(s*u-n*x)+o*(s*d-n*f),t[8]=a*(c*v-u*F)-o*(h*v-d*F)+b*(h*u-d*c),t[9]=-(i*(c*v-u*F)-o*(r*v-n*F)+b*(r*u-n*c)),t[10]=i*(h*v-d*F)-a*(r*v-n*F)+b*(r*d-n*h),t[11]=-(i*(h*u-d*c)-a*(r*u-n*c)+o*(r*d-n*h)),t[12]=-(a*(c*g-x*F)-o*(h*g-f*F)+b*(h*x-f*c)),t[13]=i*(c*g-x*F)-o*(r*g-s*F)+b*(r*x-s*c),t[14]=-(i*(h*g-f*F)-a*(r*g-s*F)+b*(r*f-s*h)),t[15]=i*(h*x-f*c)-a*(r*x-s*c)+o*(r*f-s*h),t};m.SIMD.adjoint=function(t,e){var i,r,s,n,a,h,f,d,o,c,x,u,b;return i=l.Float32x4.load(e,0),r=l.Float32x4.load(e,4),s=l.Float32x4.load(e,8),n=l.Float32x4.load(e,12),o=l.Float32x4.shuffle(i,r,0,1,4,5),h=l.Float32x4.shuffle(s,n,0,1,4,5),a=l.Float32x4.shuffle(o,h,0,2,4,6),h=l.Float32x4.shuffle(h,o,1,3,5,7),o=l.Float32x4.shuffle(i,r,2,3,6,7),d=l.Float32x4.shuffle(s,n,2,3,6,7),f=l.Float32x4.shuffle(o,d,0,2,4,6),d=l.Float32x4.shuffle(d,o,1,3,5,7),o=l.Float32x4.mul(f,d),o=l.Float32x4.swizzle(o,1,0,3,2),c=l.Float32x4.mul(h,o),x=l.Float32x4.mul(a,o),o=l.Float32x4.swizzle(o,2,3,0,1),c=l.Float32x4.sub(l.Float32x4.mul(h,o),c),x=l.Float32x4.sub(l.Float32x4.mul(a,o),x),x=l.Float32x4.swizzle(x,2,3,0,1),o=l.Float32x4.mul(h,f),o=l.Float32x4.swizzle(o,1,0,3,2),c=l.Float32x4.add(l.Float32x4.mul(d,o),c),b=l.Float32x4.mul(a,o),o=l.Float32x4.swizzle(o,2,3,0,1),c=l.Float32x4.sub(c,l.Float32x4.mul(d,o)),b=l.Float32x4.sub(l.Float32x4.mul(a,o),b),b=l.Float32x4.swizzle(b,2,3,0,1),o=l.Float32x4.mul(l.Float32x4.swizzle(h,2,3,0,1),d),o=l.Float32x4.swizzle(o,1,0,3,2),f=l.Float32x4.swizzle(f,2,3,0,1),c=l.Float32x4.add(l.Float32x4.mul(f,o),c),u=l.Float32x4.mul(a,o),o=l.Float32x4.swizzle(o,2,3,0,1),c=l.Float32x4.sub(c,l.Float32x4.mul(f,o)),u=l.Float32x4.sub(l.Float32x4.mul(a,o),u),u=l.Float32x4.swizzle(u,2,3,0,1),o=l.Float32x4.mul(a,h),o=l.Float32x4.swizzle(o,1,0,3,2),u=l.Float32x4.add(l.Float32x4.mul(d,o),u),b=l.Float32x4.sub(l.Float32x4.mul(f,o),b),o=l.Float32x4.swizzle(o,2,3,0,1),u=l.Float32x4.sub(l.Float32x4.mul(d,o),u),b=l.Float32x4.sub(b,l.Float32x4.mul(f,o)),o=l.Float32x4.mul(a,d),o=l.Float32x4.swizzle(o,1,0,3,2),x=l.Float32x4.sub(x,l.Float32x4.mul(f,o)),u=l.Float32x4.add(l.Float32x4.mul(h,o),u),o=l.Float32x4.swizzle(o,2,3,0,1),x=l.Float32x4.add(l.Float32x4.mul(f,o),x),u=l.Float32x4.sub(u,l.Float32x4.mul(h,o)),o=l.Float32x4.mul(a,f),o=l.Float32x4.swizzle(o,1,0,3,2),x=l.Float32x4.add(l.Float32x4.mul(d,o),x),b=l.Float32x4.sub(b,l.Float32x4.mul(h,o)),o=l.Float32x4.swizzle(o,2,3,0,1),x=l.Float32x4.sub(x,l.Float32x4.mul(d,o)),b=l.Float32x4.add(l.Float32x4.mul(h,o),b),l.Float32x4.store(t,0,c),l.Float32x4.store(t,4,x),l.Float32x4.store(t,8,u),l.Float32x4.store(t,12,b),t};m.adjoint=y.USE_SIMD?m.SIMD.adjoint:m.scalar.adjoint;m.determinant=function(t){var e=t[0],i=t[1],r=t[2],s=t[3],n=t[4],a=t[5],h=t[6],f=t[7],d=t[8],o=t[9],c=t[10],x=t[11],u=t[12],b=t[13],F=t[14],g=t[15],v=e*a-i*n,_=e*h-r*n,A=e*f-s*n,T=i*h-r*a,M=i*f-s*a,E=r*f-s*h,z=d*b-o*u,I=d*F-c*u,D=d*g-x*u,P=o*F-c*b,O=o*g-x*b,R=c*g-x*F;return v*R-_*O+A*P+T*D-M*I+E*z};m.SIMD.multiply=function(t,e,i){var r=l.Float32x4.load(e,0),s=l.Float32x4.load(e,4),n=l.Float32x4.load(e,8),a=l.Float32x4.load(e,12),h=l.Float32x4.load(i,0),f=l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(h,0,0,0,0),r),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(h,1,1,1,1),s),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(h,2,2,2,2),n),l.Float32x4.mul(l.Float32x4.swizzle(h,3,3,3,3),a))));l.Float32x4.store(t,0,f);var d=l.Float32x4.load(i,4),o=l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(d,0,0,0,0),r),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(d,1,1,1,1),s),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(d,2,2,2,2),n),l.Float32x4.mul(l.Float32x4.swizzle(d,3,3,3,3),a))));l.Float32x4.store(t,4,o);var c=l.Float32x4.load(i,8),x=l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(c,0,0,0,0),r),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(c,1,1,1,1),s),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(c,2,2,2,2),n),l.Float32x4.mul(l.Float32x4.swizzle(c,3,3,3,3),a))));l.Float32x4.store(t,8,x);var u=l.Float32x4.load(i,12),b=l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(u,0,0,0,0),r),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(u,1,1,1,1),s),l.Float32x4.add(l.Float32x4.mul(l.Float32x4.swizzle(u,2,2,2,2),n),l.Float32x4.mul(l.Float32x4.swizzle(u,3,3,3,3),a))));return l.Float32x4.store(t,12,b),t};m.scalar.multiply=function(t,e,i){var r=e[0],s=e[1],n=e[2],a=e[3],h=e[4],f=e[5],d=e[6],o=e[7],c=e[8],x=e[9],u=e[10],b=e[11],F=e[12],g=e[13],v=e[14],_=e[15],A=i[0],T=i[1],M=i[2],E=i[3];return t[0]=A*r+T*h+M*c+E*F,t[1]=A*s+T*f+M*x+E*g,t[2]=A*n+T*d+M*u+E*v,t[3]=A*a+T*o+M*b+E*_,A=i[4],T=i[5],M=i[6],E=i[7],t[4]=A*r+T*h+M*c+E*F,t[5]=A*s+T*f+M*x+E*g,t[6]=A*n+T*d+M*u+E*v,t[7]=A*a+T*o+M*b+E*_,A=i[8],T=i[9],M=i[10],E=i[11],t[8]=A*r+T*h+M*c+E*F,t[9]=A*s+T*f+M*x+E*g,t[10]=A*n+T*d+M*u+E*v,t[11]=A*a+T*o+M*b+E*_,A=i[12],T=i[13],M=i[14],E=i[15],t[12]=A*r+T*h+M*c+E*F,t[13]=A*s+T*f+M*x+E*g,t[14]=A*n+T*d+M*u+E*v,t[15]=A*a+T*o+M*b+E*_,t};m.multiply=y.USE_SIMD?m.SIMD.multiply:m.scalar.multiply;m.mul=m.multiply;m.scalar.translate=function(t,e,i){var r=i[0],s=i[1],n=i[2],a,h,f,d,o,c,x,u,b,F,g,v;return e===t?(t[12]=e[0]*r+e[4]*s+e[8]*n+e[12],t[13]=e[1]*r+e[5]*s+e[9]*n+e[13],t[14]=e[2]*r+e[6]*s+e[10]*n+e[14],t[15]=e[3]*r+e[7]*s+e[11]*n+e[15]):(a=e[0],h=e[1],f=e[2],d=e[3],o=e[4],c=e[5],x=e[6],u=e[7],b=e[8],F=e[9],g=e[10],v=e[11],t[0]=a,t[1]=h,t[2]=f,t[3]=d,t[4]=o,t[5]=c,t[6]=x,t[7]=u,t[8]=b,t[9]=F,t[10]=g,t[11]=v,t[12]=a*r+o*s+b*n+e[12],t[13]=h*r+c*s+F*n+e[13],t[14]=f*r+x*s+g*n+e[14],t[15]=d*r+u*s+v*n+e[15]),t};m.SIMD.translate=function(t,e,i){var r=l.Float32x4.load(e,0),s=l.Float32x4.load(e,4),n=l.Float32x4.load(e,8),a=l.Float32x4.load(e,12),h=l.Float32x4(i[0],i[1],i[2],0);e!==t\u0026\u0026(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11]),r=l.Float32x4.mul(r,l.Float32x4.swizzle(h,0,0,0,0)),s=l.Float32x4.mul(s,l.Float32x4.swizzle(h,1,1,1,1)),n=l.Float32x4.mul(n,l.Float32x4.swizzle(h,2,2,2,2));var f=l.Float32x4.add(r,l.Float32x4.add(s,l.Float32x4.add(n,a)));return l.Float32x4.store(t,12,f),t};m.translate=y.USE_SIMD?m.SIMD.translate:m.scalar.translate;m.scalar.scale=function(t,e,i){var r=i[0],s=i[1],n=i[2];return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*s,t[5]=e[5]*s,t[6]=e[6]*s,t[7]=e[7]*s,t[8]=e[8]*n,t[9]=e[9]*n,t[10]=e[10]*n,t[11]=e[11]*n,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t};m.SIMD.scale=function(t,e,i){var r=window.SIMD,s,n,a,h=r.Float32x4(i[0],i[1],i[2],0);return s=r.Float32x4.load(e,0),r.Float32x4.store(t,0,r.Float32x4.mul(s,r.Float32x4.swizzle(h,0,0,0,0))),n=r.Float32x4.load(e,4),r.Float32x4.store(t,4,r.Float32x4.mul(n,r.Float32x4.swizzle(h,1,1,1,1))),a=r.Float32x4.load(e,8),r.Float32x4.store(t,8,r.Float32x4.mul(a,r.Float32x4.swizzle(h,2,2,2,2))),t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t};m.scale=y.USE_SIMD?m.SIMD.scale:m.scalar.scale;m.rotate=function(t,e,i,r){var s=r[0],n=r[1],a=r[2],h=Math.sqrt(s*s+n*n+a*a),f,d,o,c,x,u,b,F,g,v,_,A,T,M,E,z,I,D,P,O,R,L,S,B;return Math.abs(h)\u003cy.EPSILON?null:(h=1/h,s*=h,n*=h,a*=h,f=Math.sin(i),d=Math.cos(i),o=1-d,c=e[0],x=e[1],u=e[2],b=e[3],F=e[4],g=e[5],v=e[6],_=e[7],A=e[8],T=e[9],M=e[10],E=e[11],z=s*s*o+d,I=n*s*o+a*f,D=a*s*o-n*f,P=s*n*o-a*f,O=n*n*o+d,R=a*n*o+s*f,L=s*a*o+n*f,S=n*a*o-s*f,B=a*a*o+d,t[0]=c*z+F*I+A*D,t[1]=x*z+g*I+T*D,t[2]=u*z+v*I+M*D,t[3]=b*z+_*I+E*D,t[4]=c*P+F*O+A*R,t[5]=x*P+g*O+T*R,t[6]=u*P+v*O+M*R,t[7]=b*P+_*O+E*R,t[8]=c*L+F*S+A*B,t[9]=x*L+g*S+T*B,t[10]=u*L+v*S+M*B,t[11]=b*L+_*S+E*B,e!==t\u0026\u0026(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)};m.scalar.rotateX=function(t,e,i){var r=Math.sin(i),s=Math.cos(i),n=e[4],a=e[5],h=e[6],f=e[7],d=e[8],o=e[9],c=e[10],x=e[11];return e!==t\u0026\u0026(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=n*s+d*r,t[5]=a*s+o*r,t[6]=h*s+c*r,t[7]=f*s+x*r,t[8]=d*s-n*r,t[9]=o*s-a*r,t[10]=c*s-h*r,t[11]=x*s-f*r,t};m.SIMD.rotateX=function(t,e,i){var r=window.SIMD,s=r.Float32x4.splat(Math.sin(i)),n=r.Float32x4.splat(Math.cos(i));e!==t\u0026\u0026(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);var a=r.Float32x4.load(e,4),h=r.Float32x4.load(e,8);return r.Float32x4.store(t,4,r.Float32x4.add(r.Float32x4.mul(a,n),r.Float32x4.mul(h,s))),r.Float32x4.store(t,8,r.Float32x4.sub(r.Float32x4.mul(h,n),r.Float32x4.mul(a,s))),t};m.rotateX=y.USE_SIMD?m.SIMD.rotateX:m.scalar.rotateX;m.scalar.rotateY=function(t,e,i){var r=Math.sin(i),s=Math.cos(i),n=e[0],a=e[1],h=e[2],f=e[3],d=e[8],o=e[9],c=e[10],x=e[11];return e!==t\u0026\u0026(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=n*s-d*r,t[1]=a*s-o*r,t[2]=h*s-c*r,t[3]=f*s-x*r,t[8]=n*r+d*s,t[9]=a*r+o*s,t[10]=h*r+c*s,t[11]=f*r+x*s,t};m.SIMD.rotateY=function(t,e,i){var r=window.SIMD,s=r.Float32x4.splat(Math.sin(i)),n=r.Float32x4.splat(Math.cos(i));e!==t\u0026\u0026(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);var a=r.Float32x4.load(e,0),h=r.Float32x4.load(e,8);return r.Float32x4.store(t,0,r.Float32x4.sub(r.Float32x4.mul(a,n),r.Float32x4.mul(h,s))),r.Float32x4.store(t,8,r.Float32x4.add(r.Float32x4.mul(a,s),r.Float32x4.mul(h,n))),t};m.rotateY=y.USE_SIMD?m.SIMD.rotateY:m.scalar.rotateY;m.scalar.rotateZ=function(t,e,i){var r=Math.sin(i),s=Math.cos(i),n=e[0],a=e[1],h=e[2],f=e[3],d=e[4],o=e[5],c=e[6],x=e[7];return e!==t\u0026\u0026(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=n*s+d*r,t[1]=a*s+o*r,t[2]=h*s+c*r,t[3]=f*s+x*r,t[4]=d*s-n*r,t[5]=o*s-a*r,t[6]=c*s-h*r,t[7]=x*s-f*r,t};m.SIMD.rotateZ=function(t,e,i){var r=window.SIMD,s=r.Float32x4.splat(Math.sin(i)),n=r.Float32x4.splat(Math.cos(i));e!==t\u0026\u0026(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);var a=r.Float32x4.load(e,0),h=r.Float32x4.load(e,4);return r.Float32x4.store(t,0,r.Float32x4.add(r.Float32x4.mul(a,n),r.Float32x4.mul(h,s))),r.Float32x4.store(t,4,r.Float32x4.sub(r.Float32x4.mul(h,n),r.Float32x4.mul(a,s))),t};m.rotateZ=y.USE_SIMD?m.SIMD.rotateZ:m.scalar.rotateZ;m.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t};m.fromScaling=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};m.fromRotation=function(t,e,i){var r=i[0],s=i[1],n=i[2],a=Math.sqrt(r*r+s*s+n*n),h,f,d;return Math.abs(a)\u003cy.EPSILON?null:(a=1/a,r*=a,s*=a,n*=a,h=Math.sin(e),f=Math.cos(e),d=1-f,t[0]=r*r*d+f,t[1]=s*r*d+n*h,t[2]=n*r*d-s*h,t[3]=0,t[4]=r*s*d-n*h,t[5]=s*s*d+f,t[6]=n*s*d+r*h,t[7]=0,t[8]=r*n*d+s*h,t[9]=s*n*d-r*h,t[10]=n*n*d+f,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)};m.fromXRotation=function(t,e){var i=Math.sin(e),r=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=r,t[6]=i,t[7]=0,t[8]=0,t[9]=-i,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};m.fromYRotation=function(t,e){var i=Math.sin(e),r=Math.cos(e);return t[0]=r,t[1]=0,t[2]=-i,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=i,t[9]=0,t[10]=r,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};m.fromZRotation=function(t,e){var i=Math.sin(e),r=Math.cos(e);return t[0]=r,t[1]=i,t[2]=0,t[3]=0,t[4]=-i,t[5]=r,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};m.fromRotationTranslation=function(t,e,i){var r=e[0],s=e[1],n=e[2],a=e[3],h=r+r,f=s+s,d=n+n,o=r*h,c=r*f,x=r*d,u=s*f,b=s*d,F=n*d,g=a*h,v=a*f,_=a*d;return t[0]=1-(u+F),t[1]=c+_,t[2]=x-v,t[3]=0,t[4]=c-_,t[5]=1-(o+F),t[6]=b+g,t[7]=0,t[8]=x+v,t[9]=b-g,t[10]=1-(o+u),t[11]=0,t[12]=i[0],t[13]=i[1],t[14]=i[2],t[15]=1,t};m.getTranslation=function(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t};m.getRotation=function(t,e){var i=e[0]+e[5]+e[10],r=0;return i\u003e0?(r=Math.sqrt(i+1)*2,t[3]=.25*r,t[0]=(e[6]-e[9])/r,t[1]=(e[8]-e[2])/r,t[2]=(e[1]-e[4])/r):e[0]\u003ee[5]\u0026\u0026e[0]\u003ee[10]?(r=Math.sqrt(1+e[0]-e[5]-e[10])*2,t[3]=(e[6]-e[9])/r,t[0]=.25*r,t[1]=(e[1]+e[4])/r,t[2]=(e[8]+e[2])/r):e[5]\u003ee[10]?(r=Math.sqrt(1+e[5]-e[0]-e[10])*2,t[3]=(e[8]-e[2])/r,t[0]=(e[1]+e[4])/r,t[1]=.25*r,t[2]=(e[6]+e[9])/r):(r=Math.sqrt(1+e[10]-e[0]-e[5])*2,t[3]=(e[1]-e[4])/r,t[0]=(e[8]+e[2])/r,t[1]=(e[6]+e[9])/r,t[2]=.25*r),t};m.fromRotationTranslationScale=function(t,e,i,r){var s=e[0],n=e[1],a=e[2],h=e[3],f=s+s,d=n+n,o=a+a,c=s*f,x=s*d,u=s*o,b=n*d,F=n*o,g=a*o,v=h*f,_=h*d,A=h*o,T=r[0],M=r[1],E=r[2];return t[0]=(1-(b+g))*T,t[1]=(x+A)*T,t[2]=(u-_)*T,t[3]=0,t[4]=(x-A)*M,t[5]=(1-(c+g))*M,t[6]=(F+v)*M,t[7]=0,t[8]=(u+_)*E,t[9]=(F-v)*E,t[10]=(1-(c+b))*E,t[11]=0,t[12]=i[0],t[13]=i[1],t[14]=i[2],t[15]=1,t};m.fromRotationTranslationScaleOrigin=function(t,e,i,r,s){var n=e[0],a=e[1],h=e[2],f=e[3],d=n+n,o=a+a,c=h+h,x=n*d,u=n*o,b=n*c,F=a*o,g=a*c,v=h*c,_=f*d,A=f*o,T=f*c,M=r[0],E=r[1],z=r[2],I=s[0],D=s[1],P=s[2];return t[0]=(1-(F+v))*M,t[1]=(u+T)*M,t[2]=(b-A)*M,t[3]=0,t[4]=(u-T)*E,t[5]=(1-(x+v))*E,t[6]=(g+_)*E,t[7]=0,t[8]=(b+A)*z,t[9]=(g-_)*z,t[10]=(1-(x+F))*z,t[11]=0,t[12]=i[0]+I-(t[0]*I+t[4]*D+t[8]*P),t[13]=i[1]+D-(t[1]*I+t[5]*D+t[9]*P),t[14]=i[2]+P-(t[2]*I+t[6]*D+t[10]*P),t[15]=1,t};m.fromQuat=function(t,e){var i=e[0],r=e[1],s=e[2],n=e[3],a=i+i,h=r+r,f=s+s,d=i*a,o=r*a,c=r*h,x=s*a,u=s*h,b=s*f,F=n*a,g=n*h,v=n*f;return t[0]=1-c-b,t[1]=o+v,t[2]=x-g,t[3]=0,t[4]=o-v,t[5]=1-d-b,t[6]=u+F,t[7]=0,t[8]=x+g,t[9]=u-F,t[10]=1-d-c,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t};m.frustum=function(t,e,i,r,s,n,a){var h=1/(i-e),f=1/(s-r),d=1/(n-a);return t[0]=n*2*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n*2*f,t[6]=0,t[7]=0,t[8]=(i+e)*h,t[9]=(s+r)*f,t[10]=(a+n)*d,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*n*2*d,t[15]=0,t};m.perspective=function(t,e,i,r,s){var n=1/Math.tan(e/2),a=1/(r-s);return t[0]=n/i,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(s+r)*a,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*s*r*a,t[15]=0,t};m.perspectiveFromFieldOfView=function(t,e,i,r){var s=Math.tan(e.upDegrees*Math.PI/180),n=Math.tan(e.downDegrees*Math.PI/180),a=Math.tan(e.leftDegrees*Math.PI/180),h=Math.tan(e.rightDegrees*Math.PI/180),f=2/(a+h),d=2/(s+n);return t[0]=f,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=d,t[6]=0,t[7]=0,t[8]=-((a-h)*f*.5),t[9]=(s-n)*d*.5,t[10]=r/(i-r),t[11]=-1,t[12]=0,t[13]=0,t[14]=r*i/(i-r),t[15]=0,t};m.ortho=function(t,e,i,r,s,n,a){var h=1/(e-i),f=1/(r-s),d=1/(n-a);return t[0]=-2*h,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*f,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*d,t[11]=0,t[12]=(e+i)*h,t[13]=(s+r)*f,t[14]=(a+n)*d,t[15]=1,t};m.lookAt=function(t,e,i,r){var s,n,a,h,f,d,o,c,x,u,b=e[0],F=e[1],g=e[2],v=r[0],_=r[1],A=r[2],T=i[0],M=i[1],E=i[2];return Math.abs(b-T)\u003cy.EPSILON\u0026\u0026Math.abs(F-M)\u003cy.EPSILON\u0026\u0026Math.abs(g-E)\u003cy.EPSILON?m.identity(t):(o=b-T,c=F-M,x=g-E,u=1/Math.sqrt(o*o+c*c+x*x),o*=u,c*=u,x*=u,s=_*x-A*c,n=A*o-v*x,a=v*c-_*o,u=Math.sqrt(s*s+n*n+a*a),u?(u=1/u,s*=u,n*=u,a*=u):(s=0,n=0,a=0),h=c*a-x*n,f=x*s-o*a,d=o*n-c*s,u=Math.sqrt(h*h+f*f+d*d),u?(u=1/u,h*=u,f*=u,d*=u):(h=0,f=0,d=0),t[0]=s,t[1]=h,t[2]=o,t[3]=0,t[4]=n,t[5]=f,t[6]=c,t[7]=0,t[8]=a,t[9]=d,t[10]=x,t[11]=0,t[12]=-(s*b+n*F+a*g),t[13]=-(h*b+f*F+d*g),t[14]=-(o*b+c*F+x*g),t[15]=1,t)};m.str=function(t){return\"mat4(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\", \"+t[3]+\", \"+t[4]+\", \"+t[5]+\", \"+t[6]+\", \"+t[7]+\", \"+t[8]+\", \"+t[9]+\", \"+t[10]+\", \"+t[11]+\", \"+t[12]+\", \"+t[13]+\", \"+t[14]+\", \"+t[15]+\")\"};m.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2)+Math.pow(t[9],2)+Math.pow(t[10],2)+Math.pow(t[11],2)+Math.pow(t[12],2)+Math.pow(t[13],2)+Math.pow(t[14],2)+Math.pow(t[15],2))};m.add=function(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t[3]=e[3]+i[3],t[4]=e[4]+i[4],t[5]=e[5]+i[5],t[6]=e[6]+i[6],t[7]=e[7]+i[7],t[8]=e[8]+i[8],t[9]=e[9]+i[9],t[10]=e[10]+i[10],t[11]=e[11]+i[11],t[12]=e[12]+i[12],t[13]=e[13]+i[13],t[14]=e[14]+i[14],t[15]=e[15]+i[15],t};m.subtract=function(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t[3]=e[3]-i[3],t[4]=e[4]-i[4],t[5]=e[5]-i[5],t[6]=e[6]-i[6],t[7]=e[7]-i[7],t[8]=e[8]-i[8],t[9]=e[9]-i[9],t[10]=e[10]-i[10],t[11]=e[11]-i[11],t[12]=e[12]-i[12],t[13]=e[13]-i[13],t[14]=e[14]-i[14],t[15]=e[15]-i[15],t};m.sub=m.subtract;m.multiplyScalar=function(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t[3]=e[3]*i,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*i,t[9]=e[9]*i,t[10]=e[10]*i,t[11]=e[11]*i,t[12]=e[12]*i,t[13]=e[13]*i,t[14]=e[14]*i,t[15]=e[15]*i,t};m.multiplyScalarAndAdd=function(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t[3]=e[3]+i[3]*r,t[4]=e[4]+i[4]*r,t[5]=e[5]+i[5]*r,t[6]=e[6]+i[6]*r,t[7]=e[7]+i[7]*r,t[8]=e[8]+i[8]*r,t[9]=e[9]+i[9]*r,t[10]=e[10]+i[10]*r,t[11]=e[11]+i[11]*r,t[12]=e[12]+i[12]*r,t[13]=e[13]+i[13]*r,t[14]=e[14]+i[14]*r,t[15]=e[15]+i[15]*r,t};m.exactEquals=function(t,e){return t[0]===e[0]\u0026\u0026t[1]===e[1]\u0026\u0026t[2]===e[2]\u0026\u0026t[3]===e[3]\u0026\u0026t[4]===e[4]\u0026\u0026t[5]===e[5]\u0026\u0026t[6]===e[6]\u0026\u0026t[7]===e[7]\u0026\u0026t[8]===e[8]\u0026\u0026t[9]===e[9]\u0026\u0026t[10]===e[10]\u0026\u0026t[11]===e[11]\u0026\u0026t[12]===e[12]\u0026\u0026t[13]===e[13]\u0026\u0026t[14]===e[14]\u0026\u0026t[15]===e[15]};m.equals=function(t,e){var i=t[0],r=t[1],s=t[2],n=t[3],a=t[4],h=t[5],f=t[6],d=t[7],o=t[8],c=t[9],x=t[10],u=t[11],b=t[12],F=t[13],g=t[14],v=t[15],_=e[0],A=e[1],T=e[2],M=e[3],E=e[4],z=e[5],I=e[6],D=e[7],P=e[8],O=e[9],R=e[10],L=e[11],S=e[12],B=e[13],Et=e[14],yt=e[15];return Math.abs(i-_)\u003c=y.EPSILON*Math.max(1,Math.abs(i),Math.abs(_))\u0026\u0026Math.abs(r-A)\u003c=y.EPSILON*Math.max(1,Math.abs(r),Math.abs(A))\u0026\u0026Math.abs(s-T)\u003c=y.EPSILON*Math.max(1,Math.abs(s),Math.abs(T))\u0026\u0026Math.abs(n-M)\u003c=y.EPSILON*Math.max(1,Math.abs(n),Math.abs(M))\u0026\u0026Math.abs(a-E)\u003c=y.EPSILON*Math.max(1,Math.abs(a),Math.abs(E))\u0026\u0026Math.abs(h-z)\u003c=y.EPSILON*Math.max(1,Math.abs(h),Math.abs(z))\u0026\u0026Math.abs(f-I)\u003c=y.EPSILON*Math.max(1,Math.abs(f),Math.abs(I))\u0026\u0026Math.abs(d-D)\u003c=y.EPSILON*Math.max(1,Math.abs(d),Math.abs(D))\u0026\u0026Math.abs(o-P)\u003c=y.EPSILON*Math.max(1,Math.abs(o),Math.abs(P))\u0026\u0026Math.abs(c-O)\u003c=y.EPSILON*Math.max(1,Math.abs(c),Math.abs(O))\u0026\u0026Math.abs(x-R)\u003c=y.EPSILON*Math.max(1,Math.abs(x),Math.abs(R))\u0026\u0026Math.abs(u-L)\u003c=y.EPSILON*Math.max(1,Math.abs(u),Math.abs(L))\u0026\u0026Math.abs(b-S)\u003c=y.EPSILON*Math.max(1,Math.abs(b),Math.abs(S))\u0026\u0026Math.abs(F-B)\u003c=y.EPSILON*Math.max(1,Math.abs(F),Math.abs(B))\u0026\u0026Math.abs(g-Et)\u003c=y.EPSILON*Math.max(1,Math.abs(g),Math.abs(Et))\u0026\u0026Math.abs(v-yt)\u003c=y.EPSILON*Math.max(1,Math.abs(v),Math.abs(yt))};var w={};w.create=function(){var t=new y.ARRAY_TYPE(3);return t[0]=0,t[1]=0,t[2]=0,t};w.clone=function(t){var e=new y.ARRAY_TYPE(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e};w.fromValues=function(t,e,i){var r=new y.ARRAY_TYPE(3);return r[0]=t,r[1]=e,r[2]=i,r};w.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t};w.set=function(t,e,i,r){return t[0]=e,t[1]=i,t[2]=r,t};w.add=function(t,e,i){return t[0]=e[0]+i[0],t[1]=e[1]+i[1],t[2]=e[2]+i[2],t};w.subtract=function(t,e,i){return t[0]=e[0]-i[0],t[1]=e[1]-i[1],t[2]=e[2]-i[2],t};w.sub=w.subtract;w.multiply=function(t,e,i){return t[0]=e[0]*i[0],t[1]=e[1]*i[1],t[2]=e[2]*i[2],t};w.mul=w.multiply;w.divide=function(t,e,i){return t[0]=e[0]/i[0],t[1]=e[1]/i[1],t[2]=e[2]/i[2],t};w.div=w.divide;w.ceil=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t};w.floor=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t};w.min=function(t,e,i){return t[0]=Math.min(e[0],i[0]),t[1]=Math.min(e[1],i[1]),t[2]=Math.min(e[2],i[2]),t};w.max=function(t,e,i){return t[0]=Math.max(e[0],i[0]),t[1]=Math.max(e[1],i[1]),t[2]=Math.max(e[2],i[2]),t};w.round=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t};w.scale=function(t,e,i){return t[0]=e[0]*i,t[1]=e[1]*i,t[2]=e[2]*i,t};w.scaleAndAdd=function(t,e,i,r){return t[0]=e[0]+i[0]*r,t[1]=e[1]+i[1]*r,t[2]=e[2]+i[2]*r,t};w.distance=function(t,e){var i=e[0]-t[0],r=e[1]-t[1],s=e[2]-t[2];return Math.sqrt(i*i+r*r+s*s)};w.dist=w.distance;w.squaredDistance=function(t,e){var i=e[0]-t[0],r=e[1]-t[1],s=e[2]-t[2];return i*i+r*r+s*s};w.sqrDist=w.squaredDistance;w.length=function(t){var e=t[0],i=t[1],r=t[2];return Math.sqrt(e*e+i*i+r*r)};w.len=w.length;w.squaredLength=function(t){var e=t[0],i=t[1],r=t[2];return e*e+i*i+r*r};w.sqrLen=w.squaredLength;w.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t};w.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t};w.normalize=function(t,e){var i=e[0],r=e[1],s=e[2],n=i*i+r*r+s*s;return n\u003e0\u0026\u0026(n=1/Math.sqrt(n),t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n),t};w.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]};w.cross=function(t,e,i){var r=e[0],s=e[1],n=e[2],a=i[0],h=i[1],f=i[2];return t[0]=s*f-n*h,t[1]=n*a-r*f,t[2]=r*h-s*a,t};w.lerp=function(t,e,i,r){var s=e[0],n=e[1],a=e[2];return t[0]=s+r*(i[0]-s),t[1]=n+r*(i[1]-n),t[2]=a+r*(i[2]-a),t};w.hermite=function(t,e,i,r,s,n){var a=n*n,h=a*(2*n-3)+1,f=a*(n-2)+n,d=a*(n-1),o=a*(3-2*n);return t[0]=e[0]*h+i[0]*f+r[0]*d+s[0]*o,t[1]=e[1]*h+i[1]*f+r[1]*d+s[1]*o,t[2]=e[2]*h+i[2]*f+r[2]*d+s[2]*o,t};w.bezier=function(t,e,i,r,s,n){var a=1-n,h=a*a,f=n*n,d=h*a,o=3*n*h,c=3*f*a,x=f*n;return t[0]=e[0]*d+i[0]*o+r[0]*c+s[0]*x,t[1]=e[1]*d+i[1]*o+r[1]*c+s[1]*x,t[2]=e[2]*d+i[2]*o+r[2]*c+s[2]*x,t};w.random=function(t,e){e=e||1;var i=y.RANDOM()*2*Math.PI,r=y.RANDOM()*2-1,s=Math.sqrt(1-r*r)*e;return t[0]=Math.cos(i)*s,t[1]=Math.sin(i)*s,t[2]=r*e,t};w.transformMat4=function(t,e,i){var r=e[0],s=e[1],n=e[2],a=i[3]*r+i[7]*s+i[11]*n+i[15];return a=a||1,t[0]=(i[0]*r+i[4]*s+i[8]*n+i[12])/a,t[1]=(i[1]*r+i[5]*s+i[9]*n+i[13])/a,t[2]=(i[2]*r+i[6]*s+i[10]*n+i[14])/a,t};w.transformMat3=function(t,e,i){var r=e[0],s=e[1],n=e[2];return t[0]=r*i[0]+s*i[3]+n*i[6],t[1]=r*i[1]+s*i[4]+n*i[7],t[2]=r*i[2]+s*i[5]+n*i[8],t};w.transformQuat=function(t,e,i){var r=e[0],s=e[1],n=e[2],a=i[0],h=i[1],f=i[2],d=i[3],o=d*r+h*n-f*s,c=d*s+f*r-a*n,x=d*n+a*s-h*r,u=-a*r-h*s-f*n;return t[0]=o*d+u*-a+c*-f-x*-h,t[1]=c*d+u*-h+x*-a-o*-f,t[2]=x*d+u*-f+o*-h-c*-a,t};w.rotateX=function(t,e,i,r){var s=[],n=[];return s[0]=e[0]-i[0],s[1]=e[1]-i[1],s[2]=e[2]-i[2],n[0]=s[0],n[1]=s[1]*Math.cos(r)-s[2]*Math.sin(r),n[2]=s[1]*Math.sin(r)+s[2]*Math.cos(r),t[0]=n[0]+i[0],t[1]=n[1]+i[1],t[2]=n[2]+i[2],t};w.rotateY=function(t,e,i,r){var s=[],n=[];return s[0]=e[0]-i[0],s[1]=e[1]-i[1],s[2]=e[2]-i[2],n[0]=s[2]*Math.sin(r)+s[0]*Math.cos(r),n[1]=s[1],n[2]=s[2]*Math.cos(r)-s[0]*Math.sin(r),t[0]=n[0]+i[0],t[1]=n[1]+i[1],t[2]=n[2]+i[2],t};w.rotateZ=function(t,e,i,r){var s=[],n=[];return s[0]=e[0]-i[0],s[1]=e[1]-i[1],s[2]=e[2]-i[2],n[0]=s[0]*Math.cos(r)-s[1]*Math.sin(r),n[1]=s[0]*Math.sin(r)+s[1]*Math.cos(r),n[2]=s[2],t[0]=n[0]+i[0],t[1]=n[1]+i[1],t[2]=n[2]+i[2],t};w.forEach=function(){var t=w.create();return function(e,i,r,s,n,a){var h,f;for(i||(i=3),r||(r=0),s?f=Math.min(s*i+r,e.length):f=e.length,h=r;h\u003cf;h+=i)t[0]=e[h],t[1]=e[h+1],t[2]=e[h+2],n(t,t,a),e[h]=t[0],e[h+1]=t[1],e[h+2]=t[2];return e}}();w.angle=function(t,e){var i=w.fromValues(t[0],t[1],t[2]),r=w.fromValues(e[0],e[1],e[2]);w.normalize(i,i),w.normalize(r,r);var s=w.dot(i,r);return s\u003e1?0:Math.acos(s)};w.str=function(t){return\"vec3(\"+t[0]+\", \"+t[1]+\", \"+t[2]+\")\"};w.exactEquals=function(t,e){return t[0]===e[0]\u0026\u0026t[1]===e[1]\u0026\u0026t[2]===e[2]};w.equals=function(t,e){var i=t[0],r=t[1],s=t[2],n=e[0],a=e[1],h=e[2];return Math.abs(i-n)\u003c=y.EPSILON*Math.max(1,Math.abs(i),Math.abs(n))\u0026\u0026Math.abs(r-a)\u003c=y.EPSILON*Math.max(1,Math.abs(r),Math.abs(a))\u0026\u0026Math.abs(s-h)\u003c=y.EPSILON*Math.max(1,Math.abs(s),Math.abs(h))};function V(t){return t*Math.PI/180}function xt(t,e=0,i=1){return e+(i-e)*t}function j(t=0,e=1){return t+Math.random()*(e-t)}function Tt(t,e,i){return e\u003ci?t\u003ce?e:t\u003ei?i:t:t\u003ci?i:t\u003ee?e:t}class Ht{constructor(){p(this,\"projectionMatrix\",m.create());p(this,\"viewMatrix\",m.create());p(this,\"near\");p(this,\"far\");p(this,\"fov\");p(this,\"aspect\");p(this,\"eye\",w.create());p(this,\"target\",w.create());p(this,\"center\",w.create());p(this,\"position\",w.create());p(this,\"up\",w.create());p(this,\"zoom\");p(this,\"frustumTop\");p(this,\"frustumBottom\");p(this,\"frustumRight\");p(this,\"frustumLeft\");this.up[1]=1,m.identity(this.viewMatrix),m.identity(this.projectionMatrix),this.setZoom(1)}translate(e){this.eye[0]=e[0],this.eye[1]=e[1],this.eye[2]=e[2]!==0?e[2]:this.eye[2],m.identity(this.viewMatrix),m.lookAt(this.viewMatrix,this.eye,this.center,this.up)}cameraLookAt(){m.lookAt(this.viewMatrix,this.eye,this.center,this.up)}calcFrustum(){this.frustumTop=this.near*Math.tan(3.14149/180*this.fov*.5),this.frustumBottom=-this.frustumTop,this.frustumRight=this.frustumTop*this.aspect,this.frustumLeft=-this.frustumRight}createPickingProjection(e,i,r){this.calcFrustum();const s=this.aspect,n=Math.tan(this.fov*.5)*this.near,a=-n,h=s*a,f=s*n,d=Math.abs(f-h),o=Math.abs(n-a),c=h+e*d/r.canvas.width,x=a+i*o/r.canvas.height,u=1/r.canvas.width,b=1/r.canvas.height;return m.frustum(m.create(),c,c+u,x,x+b,this.near,this.far)}calcRay(e,i,r){r/Math.abs(this.frustumRight-this.frustumLeft)*this.near}getInverseProjectionView(){let e=m.create();return m.multiply(e,this.projectionMatrix,this.viewMatrix),m.invert(e,e),e}getInverseProjection(){let e=m.create();return m.invert(e,this.projectionMatrix),e}getInverseView(){let e=m.create();return m.invert(e,this.viewMatrix),e}getX(){return this.eye[0]}getY(){return this.eye[1]}getZ(){return this.eye[2]}setZoom(e){this.eye[2]=e,m.lookAt(this.viewMatrix,this.eye,this.center,this.up)}}class Vt extends Ht{constructor({fov:e=Math.PI/4,aspect:i=window.innerWidth/window.innerHeight,near:r=.1,far:s=1e3}={}){return super(),this.projectionMatrix=m.create(),this.viewMatrix=m.create(),this.fov=V(e),this.aspect=i,this.near=r,this.far=s,m.perspective(this.projectionMatrix,this.fov,i,r,s),this}translate(e){this.eye[0]=e[0],this.eye[1]=e[1],this.center[0]=this.eye[0],this.eye[2]=e[2]!==0?e[2]:this.eye[2],m.identity(this.viewMatrix),m.lookAt(this.viewMatrix,this.eye,this.center,this.up),m.invert(this.viewMatrix,this.viewMatrix)}updateProjectionMatrix(e){return this.resize(e),this}resize(e){return this.aspect=e,m.perspective(this.projectionMatrix,this.fov,this.aspect,this.near,this.far),this}}const Yt=3.14149,jt=Yt*2;class ot{constructor(e=[]){p(this,\"nestLevel\");p(this,\"children\",[]);p(this,\"splitDir\",0);p(this,\"splitPct\",.5);p(this,\"w\",1);p(this,\"width\",1);p(this,\"h\",1);p(this,\"d\",1);p(this,\"height\",1);p(this,\"depth\",j(.1,.9));p(this,\"phase\",j(0,jt));p(this,\"speed\",j(.9,1.1));p(this,\"parent\");p(this,\"x\",0);p(this,\"y\",0);p(this,\"z\",0);p(this,\"zOffset\",0);p(this,\"transform\",m.create());p(this,\"ds\");this.children=[],this.nestLevel=0,this.splitDir=0,this.splitPct=.5,this.width=1,this.height=1,this.w=1,this.h=1,e.push(this)}setLevel(e,i,r,s){this.nestLevel=e;const n=Math.max(Math.random(),1-this.nestLevel/s);this.nestLevel\u003cs\u0026\u0026n\u003e=r\u0026\u0026i.length\u003c2e3\u0026\u0026this.subdivide(i,r,s)}get level(){return this.nestLevel}set split(e){this.splitPct=e,this.resize()}subdivide(e,i,r){this.splitDir=Math.random()\u003e.5?1:0,this.splitPct=.5;const s=new ot(e),n=new ot(e);this.children.push(s,n),s.parent=this,n.parent=this,s.setLevel(this.level+1,e,i,r),n.setLevel(this.level+1,e,i,r),this.resize()}resize(){if(!this.children.length)return;const e=this.children[0],i=this.children[1];this.splitDir===0?(e.width=this.splitPct,e.height=1,i.width=1-this.splitPct,i.height=1):(e.width=1,e.height=this.splitPct,i.width=1,i.height=1-this.splitPct)}update(e,i,r,s,n=0){if(this.w=r*this.width,this.h=s*this.height,this.x=e,this.y=i,this.d=n+this.depth,this.zOffset+=.1*n*.2,this.z=Math.sin(this.zOffset)*90,this.z*=.05,this.children.length){const a=this.children[0],h=this.children[1],f=this.w*this.splitPct,d=this.h*this.splitPct;this.splitDir===0?(a.update(this.x,this.y,this.w,this.h,this.d),h.update(this.x+f,this.y,this.w,this.h,this.d)):(a.update(this.x,this.y,this.w,this.h,this.d),h.update(this.x,this.y+d,this.w,this.h,this.d))}}}window.jraDebug=!1;window.toggleDebug=function(){window.jraDebug=!window.jraDebug};function W(t,e=!1){let i=\"background:red;color:white; padding-left:2px; padding-right:2px;\";(window.jraDebug||e)\u0026\u0026console.log(`%c ${t}`,i)}function At(t,e=!1){let i=\"background:#46A6B2;padding:4px; color:white;\";(window.jraDebug||e)\u0026\u0026console.log(`%c ${t}`,i)}function ft(t,e=null){if(e===null)return;let i=t.createProgram();for(let s in tt.prototype)i[s]=tt.prototype[s];let r=new tt(t,e);return Object.assign(i,r),i.loadShader(),i}function tt(t,e){this.gl=t,this.uniforms=e.uniforms!==void 0?e.uniforms:{},this.attributes=e.attributes!==void 0?e.attributes:{},this.version=`#version ${e.version} \r\n`,this.precision=\"highp float\",this.spec=e,this.name=e.name}tt.prototype={loadShader(t=this.spec.vertex,e=this.spec.fragment){let i=this.gl;t=t.search(\"#version\")===-1?this.version+t:t,e=e.search(\"#version\")===-1?this.version+e:e;let r=this._compileShader(i.VERTEX_SHADER,t),s=this._compileShader(i.FRAGMENT_SHADER,e);if(i.attachShader(this,r),i.attachShader(this,s),this._parseTransformFeedback(),i.linkProgram(this),i.deleteShader(r),i.deleteShader(s),i.getProgramParameter(this,i.LINK_STATUS))return window.jraDebug\u0026\u0026(this.name!==\"\"?At(`Shader \"${this.name}\" compiled successfully`):At(\"Shader compiled successfully\")),this._parseActiveAttributes(),this._parseActiveUniforms(),this;throw W(`Could not initialize WebGLProgram ${this.name}`),\"Couldn't link shader program - \"+i.getProgramInfoLog(this)},bind(){this.gl.useProgram(this)},delete(){this.gl.deleteProgram(this)},_parseActiveUniforms(){let t=this.gl,e=t.getProgramParameter(this,t.ACTIVE_UNIFORMS);for(let i=0;i\u003ce;++i){let r=t.getActiveUniform(this,i),s=t.getUniformLocation(this,r.name);this.uniforms[r.name]={location:s,name:r.name}}},_parseTransformFeedback(){this.spec.varyings.length\u003e0\u0026\u0026this.spec.feedbackMode!==null\u0026\u0026this.setVaryings(this.spec.varyings,this.spec.feedbackMode)},_parseActiveAttributes(){let t=this.gl,e=t.getProgramParameter(this,t.ACTIVE_ATTRIBUTES);for(let i=0;i\u003ce;++i){let r=t.getActiveAttrib(this,i),s=t.getAttribLocation(this,r.name);s!==null\u0026\u0026(this.attributes[r.name]={size:r.size,name:r.name,type:r.type,location:s})}},_compileShader(t,e){let i=this.gl,r=i.createShader(t),s=\"\";if(t===i.FRAGMENT_SHADER?s=\"FRAGMENT\":s=\"VERTEX\",i.shaderSource(r,e),i.compileShader(r),i.getShaderParameter(r,i.COMPILE_STATUS))return r;throw this.name?W(`Error in ${s} shader compilation with \"${this.name}\" - `+i.getShaderInfoLog(r)+`\r\n source was :\r\n ${e}`,!0):(W(`Error in ${s} shader compilation with ${this.name} - `+i.getShaderInfoLog(r),!0),console.log(e)),new Error(\"Shader error - see message\")},setVaryings(t,e){this.gl.transformFeedbackVaryings(this,t,e)},uniform(t,e){if(e instanceof Array||Object.prototype.toString.call(e.buffer)===\"[object ArrayBuffer]\")switch(e.length){case 2:this.vec2(t,e);break;case 3:this.vec3(t,e);break;case 9:this.mat3(t,e);break;case 16:this.mat4(t,e);break}else e.toString().search(\".\")?this.float(t,e):this.int(t,e);return this},vec2(t,e){return this.uniforms[t]!==void 0\u0026\u0026this.gl.uniform2fv(this.uniforms[t].location,e),this},vec3(t,e){return this.uniforms[t]!==void 0\u0026\u0026this.gl.uniform3fv(this.uniforms[t].location,e),this},vec4(t,e){return this.uniforms[t]!==void 0\u0026\u0026this.gl.uniform4fv(this.uniforms[t].location,e),this},int(t,e){return this.uniforms[t]!==void 0\u0026\u0026this.gl.uniform1i(this.uniforms[t].location,e),this},float(t,e){return this.uniforms[t]!==void 0\u0026\u0026this.gl.uniform1f(this.uniforms[t].location,e),this},mat4(t,e){return this.uniforms[t]!==void 0\u0026\u0026this.gl.uniformMatrix4fv(this.uniforms[t].location,!1,e),this},mat3(t,e){return this.uniforms[t]!==void 0\u0026\u0026this.gl.uniformMatrix3fv(this.uniforms[t].location,!1,e),this}};function Gt(t,e,i,r,s,n){t===void 0\u0026\u0026(t=1),e===void 0\u0026\u0026(e=t),i===void 0\u0026\u0026(i=t),r===void 0\u0026\u0026(r=1),s===void 0\u0026\u0026(s=r),n===void 0\u0026\u0026(n=r);let a=0,h=[],f=[],d=[],o=[];function c(g,v,_,A,T,M,E,z,I,D){let P=a;for(let R=0;R\u003c=E;R++)for(let L=0;L\u003c=M;L++){var O=h[a]=[0,0,0];O[g]=(-A/2+L*A/M)*I,O[v]=(-T/2+R*T/E)*D,O[_]=z;let S=f[a]=[0,0,0];S[g]=0,S[v]=0,S[_]=z/Math.abs(z);let B=d[a]=[0,0];B[0]=L/M,B[1]=1-R/E,++a}for(let R=0;R\u003cE;R++)for(let L=0;L\u003cM;L++){let S=P+R*(M+1)+L;o.push([S,S+M+1,S+M+2]),o.push([S,S+M+2,S+1])}}c(0,1,2,t,e,r,s,i/2,1,-1),c(0,1,2,t,e,r,s,-i/2,-1,-1),c(2,1,0,i,e,n,s,-t/2,1,-1),c(2,1,0,i,e,n,s,t/2,-1,-1),c(0,2,1,t,i,r,n,e/2,1,1),c(0,2,1,t,i,r,n,-e/2,1,-1);let x=[],u=[],b=[],F=[];return h.forEach(g=\u003e{x.push(g[0],g[1],g[2])}),f.forEach(g=\u003e{u.push(g[0],g[1],g[2])}),o.forEach(g=\u003e{g.forEach(v=\u003e{b.push(v)})}),d.forEach(g=\u003e{F.push(g[0],g[1],g[2])}),{positions:x,normals:u,uvs:d,cells:b,numVertices:h.length,numIndices:b.length}}function N(t,e,i){this.x=t,this.y=e,this.z=i}N.prototype.dot2=function(t,e){return this.x*t+this.y*e};N.prototype.dot3=function(t,e,i){return this.x*t+this.y*e+this.z*i};var qt=[new N(1,1,0),new N(-1,1,0),new N(1,-1,0),new N(-1,-1,0),new N(1,0,1),new N(-1,0,1),new N(1,0,-1),new N(-1,0,-1),new N(0,1,1),new N(0,-1,1),new N(0,1,-1),new N(0,-1,-1)],St=[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,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,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,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,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,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,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,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,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,93,222,114,67,29,24,72,243,141,128,195,78,66,215,61,156,180],G=new Array(512),q=new Array(512);function Xt(t){t\u003e0\u0026\u0026t\u003c1\u0026\u0026(t*=65536),t=Math.floor(t),t\u003c256\u0026\u0026(t|=t\u003c\u003c8);for(var e=0;e\u003c256;e++){var i;e\u00261?i=St[e]^t\u0026255:i=St[e]^t\u003e\u003e8\u0026255,G[e]=G[e+256]=i,q[e]=q[e+256]=qt[i%12]}}Xt(0);function _t(t){return t*t*t*(t*(t*6-15)+10)}function ut(t,e,i){return(1-i)*t+i*e}function Wt(t,e){var i=Math.floor(t),r=Math.floor(e);t=t-i,e=e-r,i=i\u0026255,r=r\u0026255;var s=q[i+G[r]].dot2(t,e),n=q[i+G[r+1]].dot2(t,e-1),a=q[i+1+G[r]].dot2(t-1,e),h=q[i+1+G[r+1]].dot2(t-1,e-1),f=_t(t);return ut(ut(s,a,f),ut(n,h,f),_t(e))}function $t(t,e){return(t%e+e)%e}function gt(t){return t\u003c.04045?t*.0773993808:Math.pow(t*.9478672986+.0521327014,2.4)}const C={h:0,s:0,l:0},Z={h:0,s:0,l:0};function pt(t,e,i){return i\u003c0\u0026\u0026(i+=1),i\u003e1\u0026\u0026(i-=1),i\u003c1/6?t+(e-t)*6*i:i\u003c1/2?e:i\u003c2/3?t+(e-t)*6*(2/3-i):t}function bt(t){return t\u003c.0031308?t*12.92:1.055*Math.pow(t,.41666)-.055}const Zt={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};class dt{constructor(e,i,r){p(this,\"r\");p(this,\"g\");p(this,\"b\");return i===void 0\u0026\u0026r===void 0?this.set(e):this.setRGB(e,i,r)}set(e){return e\u0026\u0026e.isColor?this.copy(e):typeof e==\"number\"?this.setHex(e):typeof e==\"string\"\u0026\u0026this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e){return e=Math.floor(e),this.r=(e\u003e\u003e16\u0026255)/255,this.g=(e\u003e\u003e8\u0026255)/255,this.b=(e\u0026255)/255,this}setRGB(e,i,r){return this.r=e,this.g=i,this.b=r,this}setHSL(e,i,r){if(e=$t(e,1),i=Tt(i,0,1),r=Tt(r,0,1),i===0)this.r=this.g=this.b=r;else{const s=r\u003c=.5?r*(1+i):r+i-r*i,n=2*r-s;this.r=pt(n,s,e+1/3),this.g=pt(n,s,e),this.b=pt(n,s,e-1/3)}return this}setStyle(e){function i(s){s!==void 0\u0026\u0026parseFloat(s)\u003c1\u0026\u0026console.warn(\"THREE.Color: Alpha component of \"+e+\" will be ignored.\")}let r;if(r=/^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec(e)){let s;const n=r[1],a=r[2];switch(n){case\"rgb\":case\"rgba\":if(s=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(s[1],10))/255,this.g=Math.min(255,parseInt(s[2],10))/255,this.b=Math.min(255,parseInt(s[3],10))/255,i(s[4]),this;if(s=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(s[1],10))/100,this.g=Math.min(100,parseInt(s[2],10))/100,this.b=Math.min(100,parseInt(s[3],10))/100,i(s[4]),this;break;case\"hsl\":case\"hsla\":if(s=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a)){const h=parseFloat(s[1])/360,f=parseInt(s[2],10)/100,d=parseInt(s[3],10)/100;return i(s[4]),this.setHSL(h,f,d)}break}}else if(r=/^\\#([A-Fa-f\\d]+)$/.exec(e)){const s=r[1],n=s.length;if(n===3)return this.r=parseInt(s.charAt(0)+s.charAt(0),16)/255,this.g=parseInt(s.charAt(1)+s.charAt(1),16)/255,this.b=parseInt(s.charAt(2)+s.charAt(2),16)/255,this;if(n===6)return this.r=parseInt(s.charAt(0)+s.charAt(1),16)/255,this.g=parseInt(s.charAt(2)+s.charAt(3),16)/255,this.b=parseInt(s.charAt(4)+s.charAt(5),16)/255,this}return e\u0026\u0026e.length\u003e0?this.setColorName(e):this}setColorName(e){const i=Zt[e.toLowerCase()];return i!==void 0?this.setHex(i):console.warn(\"THREE.Color: Unknown color \"+e),this}clone(){return new dt(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copyGammaToLinear(e,i=2){return this.r=Math.pow(e.r,i),this.g=Math.pow(e.g,i),this.b=Math.pow(e.b,i),this}copyLinearToGamma(e,i=2){const r=i\u003e0?1/i:1;return this.r=Math.pow(e.r,r),this.g=Math.pow(e.g,r),this.b=Math.pow(e.b,r),this}convertGammaToLinear(e){return this.copyGammaToLinear(this,e),this}convertLinearToGamma(e){return this.copyLinearToGamma(this,e),this}copySRGBToLinear(e){return this.r=gt(e.r),this.g=gt(e.g),this.b=gt(e.b),this}copyLinearToSRGB(e){return this.r=bt(e.r),this.g=bt(e.g),this.b=bt(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return this.r*255\u003c\u003c16^this.g*255\u003c\u003c8^this.b*255\u003c\u003c0}getHexString(){return(\"000000\"+this.getHex().toString(16)).slice(-6)}getHSL(e){const i=this.r,r=this.g,s=this.b,n=Math.max(i,r,s),a=Math.min(i,r,s);let h,f;const d=(a+n)/2;if(a===n)h=0,f=0;else{const o=n-a;switch(f=d\u003c=.5?o/(n+a):o/(2-n-a),n){case i:h=(r-s)/o+(r\u003cs?6:0);break;case r:h=(s-i)/o+2;break;case s:h=(i-r)/o+4;break}h/=6}return e.h=h,e.s=f,e.l=d,e}getStyle(){return\"rgb(\"+(this.r*255|0)+\",\"+(this.g*255|0)+\",\"+(this.b*255|0)+\")\"}offsetHSL(e,i,r){return this.getHSL(C),C.h+=e,C.s+=i,C.l+=r,this.setHSL(C.h,C.s,C.l),this}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,i){return this.r=e.r+i.r,this.g=e.g+i.g,this.b=e.b+i.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,i){return this.r+=(e.r-this.r)*i,this.g+=(e.g-this.g)*i,this.b+=(e.b-this.b)*i,this}lerpColors(e,i,r){return this.r=e.r+(i.r-e.r)*r,this.g=e.g+(i.g-e.g)*r,this.b=e.b+(i.b-e.b)*r,this}lerpHSL(e,i){this.getHSL(C),e.getHSL(Z);const r=xt(C.h,Z.h,i),s=xt(C.s,Z.s,i),n=xt(C.l,Z.l,i);return this.setHSL(r,s,n),this}equals(e){return e.r===this.r\u0026\u0026e.g===this.g\u0026\u0026e.b===this.b}fromArray(e,i=0){return this.r=e[i],this.g=e[i+1],this.b=e[i+2],this}toArray(e=[],i=0){return e[i]=this.r,e[i+1]=this.g,e[i+2]=this.b,e}fromBufferAttribute(e,i){return this.r=e.getX(i),this.g=e.getY(i),this.b=e.getZ(i),e.normalized===!0\u0026\u0026(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}class ${constructor(e=null,{data:i=null,isdepth:r=!1,internalFormat:s=null,format:n=null,texelType:a=null,width:h=512,height:f=512}={}){p(this,\"wrapS\");p(this,\"wrapT\");p(this,\"width\",512);p(this,\"height\",512);p(this,\"minFilter\");p(this,\"magFilter\");p(this,\"depthType\");p(this,\"data\");p(this,\"attachments\");p(this,\"target\");p(this,\"internalFormat\");p(this,\"texelType\");p(this,\"level\");p(this,\"format\");p(this,\"flipY\");p(this,\"name\",\" \");if(e===null){W(\"Unable to init TextureFormat - no WebGL context\");return}return this.wrapS=e.CLAMP_TO_EDGE,this.wrapT=e.CLAMP_TO_EDGE,this.width=h,this.height=f,this.minFilter=e.NEAREST,this.magFilter=e.NEAREST,this.internalFormat=s!==null?s:e.RGB,this.format=n!==null?n:this.internalFormat,this.texelType=a!==null?a:e.UNSIGNED_BYTE,this.level=0,this.flipY=!0,this.attachments=[],this.data=null,i!==null\u0026\u0026(this.data=i),r||(this.target=e.TEXTURE_2D),this}setWidth(e){return this.width=e,this}setHeight(e){return this.height=e,this}setInternalFormat(e){return this.internalFormat=e,this}toggleFlipY(){return this.flipY=!this.flipY,this}}class ct{constructor(e=null,i=null){p(this,\"vertex\");p(this,\"fragment\");p(this,\"uniforms\");p(this,\"attributes\");p(this,\"name\",\"\");p(this,\"version\",\"300 es\");p(this,\"varyings\",[]);p(this,\"feedbackMode\",null);return e instanceof Array?this.vertexSources(e):this.vertex=e!==null?e:\"\",i instanceof Array?this.fragmentSources(i):this.fragment=i!==null?i:`precision highp float; out vec4 glFragColor;\r\n void main(){glFragColor = vec4(1.);}`,this.uniforms=[],this.attributes=[],this}setVaryings(e){return this.varyings=e,this}setFeedbackMode(e){return this.feedbackMode=e,this}vertexSource(e){return this.vertex=e,this}vertexSources(e){let i=\"\",r=\"\";e.forEach(a=\u003e{a.search(\"void main\")!==-1?i=a:r+=a+`\r\n`});let s=i.split(`\r\n`),n=0;for(let a=0;a\u003cs.length;++a)if(s[a].search(\"#version\")===-1){n=a;break}return s.splice(n,0,r),this.vertex=s.join(`\r\n`),this}fragmentSource(e){return this.fragment=e,this}fragmentSources(e){let i=\"\",r=\"\";e.forEach(a=\u003e{a.search(\"void main\")!==-1?i=a:r+=a+`\r\n`});let s=i.split(`\r\n`),n=0;for(let a=0;a\u003cs.length;++a)if(s[a].search(\"precision\")===-1){n=a;break}return s.splice(n,0,r),this.fragment=s.join(`\r\n`),this}uniform(e){return this.uniforms.push(e),this}setVersion(e){return this.version=e,this}}function zt(t,e=!1,i,r){let s=t.createBuffer();if(e){for(let n in it.prototype)s[n]=it.prototype[n];Object.assign(s,new it(t))}else{for(let n in et.prototype)s[n]=et.prototype[n];Object.assign(s,new et(t))}return i!==void 0\u0026\u0026(r!==null||r!==void 0?s.bufferData(i,r):s.bufferData(i)),s}function et(t){this.gl=t}et.prototype={bind(){this.gl.bindBuffer(this.gl.ARRAY_BUFFER,this)},unbind(){this.gl.bindBuffer(this.gl.ARRAY_BUFFER,null)},bufferData(t,e=this.gl.STATIC_DRAW){return this.bind(),this.gl.bufferData(this.gl.ARRAY_BUFFER,t,e),this.unbind(),this},updateBuffer(t,e=0){return this.bind(),this.gl.bufferSubData(this.gl.ARRAY_BUFFER,e,t),this.unbind(),this}};function it(t){this.gl=t}it.prototype={bind(){this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,this)},unbind(){this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER,null)},bufferData(t,e=this.gl.STATIC_DRAW){return this.bind(),this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER,t,e),this.unbind(),this},updateBuffer(t,e=0){return this.gl.bufferSubData(this.gl.ELEMENT_ARRAY_BUFFER,e,t),this}};function Kt(t){let e=t.createVertexArray===void 0,i;e?(i=t.getExtension(\"OES_vertex_array_object\").createVertexArrayOES(),i.ext=t.getExtension(\"OES_vertex_array_object\"),i.webgl1=!0):i=t.createVertexArray();for(let r in rt.prototype)i[r]=rt.prototype[r];return Object.assign(i,new rt(t)),i}function rt(t){this.gl=t}rt.prototype={bind(){this.webgl1?this.ext.bindVertexArrayOES(this):this.gl.bindVertexArray(this)},unbind(){this.webgl1?this.ext.bindVertexArrayOES(null):this.gl.bindVertexArray(null)},makeInstancedAttribute(t,e=1){return this.gl.vertexAttribDivisor(t,e),this},enableAttrib(t=0){return this.gl.enableVertexAttribArray(t),this},disableAttrib(t=0){return this.gl.disableVertexAttribArray(t),this},enable(t=0){return this.enableAttrib(t),this},disable(t){return this.disableAttrib(t),this},assignData(t=0,e=3,i=this.gl.FLOAT,r=this.gl.FALSE,s=0,n=0){return this.gl.vertexAttribPointer(t,e,i,r,s,n),this}};class mt{constructor(e,i){p(this,\"gl\");p(this,\"vao\");p(this,\"attributes\");p(this,\"attribData\");p(this,\"shader\");p(this,\"primMode\");p(this,\"numItems\");p(this,\"framebuffer\",null);p(this,\"numVertices\");p(this,\"isIndexed\",!1);p(this,\"indexVbo\");p(this,\"isInstanced\",!1);p(this,\"modelMatrix\",m.create());p(this,\"position\",w.create());let r=e.gl;this.gl=e.gl,this.shader=e,this.vao=Kt(r),this.attributes=e.attributes,this.attribData=[],this.numVertices=0,this.primMode=r.TRIANGLES,i!==void 0\u0026\u0026this._processGeometry(i)}setPrimitiveMode(e){return this.primMode=e,this}translate(e){return this.position=e!==void 0?e:this.position,this.modelMatrix[12]=this.position[0],this.modelMatrix[13]=this.position[1],this.modelMatrix[14]=this.position[2],this}getPosition(){return this.position}getX(){return this.modelMatrix[12]}getY(){return this.modelMatrix[13]}getZ(){return this.modelMatrix[14]}additiveTranslate(e){return m.translate(this.modelMatrix,this.modelMatrix,e),this}drawMesh(e){this.draw(null,e)}drawWithShader(e,i=null,r=null){let s=this.gl;this.framebuffer\u0026\u0026this.framebuffer.bind(),e.bind(),this.vao.bind(),i!==null\u0026\u0026(e.uniform(\"projectionMatrix\",i.projectionMatrix),e.uniform(\"viewMatrix\",i.viewMatrix),e.uniform(\"modelMatrix\",this.modelMatrix)),e.uniform(\"resolution\",[this.gl.canvas.width,this.gl.canvas.height]),e.float(\"time\",performance.now()*5e-4),r\u0026\u0026r(e),this._enableAttributes(),this.isInstanced?this.isIndexed?(this.indexVbo.bind(),s.drawElementsInstanced(this.primMode,this.numVertices,s.UNSIGNED_SHORT,0,this.numItems),this.indexVbo.unbind()):s.drawArraysInstanced(this.primMode,0,this.numVertices,this.numItems):this.isIndexed?(this.indexVbo.bind(),s.drawElements(this.primMode,this.numVertices,s.UNSIGNED_SHORT,0),this.indexVbo.unbind()):s.drawArrays(this.primMode,0,this.numVertices),this._disableAttributes(),this.vao.unbind(),this.framebuffer\u0026\u0026this.framebuffer.unbind()}draw(e=null,i=null){let r=this.gl;this.framebuffer\u0026\u0026this.framebuffer.bind(),this.shader.bind(),this.vao.bind(),e!==null\u0026\u0026(this.shader.uniform(\"projectionMatrix\",e.projectionMatrix),this.shader.uniform(\"viewMatrix\",e.viewMatrix),this.shader.uniform(\"modelMatrix\",this.modelMatrix)),this.shader.uniform(\"resolution\",[this.gl.canvas.width,this.gl.canvas.height]),this.shader.float(\"time\",performance.now()*5e-4),i\u0026\u0026i(this.shader),this._enableAttributes(),this.isInstanced?this.isIndexed?(this.indexVbo.bind(),r.drawElementsInstanced(this.primMode,this.numVertices,r.UNSIGNED_SHORT,0,this.numItems),this.indexVbo.unbind()):r.drawArraysInstanced(this.primMode,0,this.numVertices,this.numItems):this.isIndexed?(this.indexVbo.bind(),r.drawElements(this.primMode,this.numVertices,r.UNSIGNED_SHORT,0),this.indexVbo.unbind()):r.drawArrays(this.primMode,0,this.numVertices),this._disableAttributes(),this.vao.unbind(),this.framebuffer\u0026\u0026this.framebuffer.unbind()}uniform(e,i){return this.shader.uniform(e,i),this}_processGeometry(e){this.addAttribute(\"position\",e.vertices,{size:e.customSize}),e.uvs.length\u003e0\u0026\u0026this.addAttribute(\"uv\",e.uvs,{size:2}),e.normals.length\u003e0\u0026\u0026this.addAttribute(\"normal\",e.normals,{size:3}),e.indices.length\u003e0\u0026\u0026this.addIndexBuffer(e.indices)}_enableAttributes(){for(let e in this.attribData){let i=this.attribData[e];this.vao.enable(i.location)}}_disableAttributes(){for(let e in this.attribData){let i=this.attribData[e];this.vao.disable(i.location)}}scale(e){return this.modelMatrix=m.scale(this.modelMatrix,this.modelMatrix,e),this}setFbo(e){return this.framebuffer=e,this}getRenderedMesh(){return this.framebuffer?this.framebuffer.getColorTexture():(console.warn(\"Mesh::getRenderedMesh called with no FBO assigned. Returning mesh object\"),this)}addIndexBuffer(e){let i=this.gl;this.vao.bind();let r=new Uint16Array(e);return this.indexVbo=zt(i,!0,r),this.vao.unbind(),this.isIndexed=!0,this.numVertices=e.length,this}addInstancedAttribute(e,i,{size:r=3,divisor:s=1,normalized:n=this.gl.FALSE,format:a=this.gl.FLOAT,stride:h=0,offset:f=0}={}){this.addAttribute(e,i,{size:r,normalized:n,format:a,stride:h,offset:f});let d=this.attribData.filter(o=\u003e{if(e===o.name)return o})[0];if(d==null){console.log(\"unable to find attribute\",e,\" Check addAttribute function in DisplayObject to make sure it was added correctly.\");return}this.vao.bind(),d.buffer.bind(),this.vao.makeInstancedAttribute(d.location,s),d.buffer.unbind(),this.vao.unbind(),this.isInstanced=!0}addAttributeBuffer(e,i,{size:r=3,normalized:s=this.gl.FALSE,format:n=this.gl.FLOAT,stride:a=0,offset:h=0}={}){if(this.vao.bind(),i.bind(),this.attributes.hasOwnProperty(e)){let f=this.attributes[e];this.vao.enable(f.location),this.vao.assignData(f.location,r,n,s,a,h),f.data=null,f.buffer=i,this.vao.disable(f.location),this.attribData.push(f)}else{let f=this.attribData.length,d={location:f,name:e,data:null,buffer:i};this.gl.bindAttribLocation(this.shader,d.location,e),this.vao.enable(f),this.vao.assignData(f,r,n,s,a,h),this.vao.disable(d.location),this.attribData.push(d)}i.unbind(),this.vao.unbind()}addInstancedAttributeBuffer(e,i,{size:r=3,normalized:s=this.gl.FALSE,format:n=this.gl.FLOAT,stride:a=0,offset:h=0,divisor:f=1,numItems:d=100}={}){if(this.vao.bind(),i.bind(),this.attributes.hasOwnProperty(e)){let o=this.attributes[e];this.vao.enable(o.location),this.vao.assignData(o.location,r,n,s,a,h),o.data=null,o.buffer=i,this.vao.makeInstancedAttribute(o.location,f),this.vao.disable(o.location),this.attribData.push(o)}else{let o=this.attribData.length,c={location:o,name:e,data:null,buffer:i};this.gl.bindAttribLocation(this.shader,c.location,e),this.vao.enable(o),this.vao.assignData(o,r,n,s,a,h),this.vao.makeInstancedAttribute(o,f),this.vao.disable(c.location),this.attribData.push(c)}return i.unbind(),this.vao.unbind(),this.isInstanced=!0,this.numItems=d,this}updateAttribute(e,i){let r=this.attribData.filter(s=\u003e{if(s.name===e)return s})[0];if(r===void 0){console.log(\"Can't update attribute with the name of \",e,\"; does it exist? \");return}r.buffer.bufferData(i,this.gl.DYNAMIC_DRAW),this.attribData.push(r)}addAttribute(e,i,{size:r=3,normalized:s=this.gl.FALSE,format:n=this.gl.FLOAT,stride:a=0,offset:h=0}={}){let f=null;n==this.gl.FLOAT?f=new Float32Array(i):f=new Uint16Array(i),this.vao.bind();let d=zt(this.gl,!1,f);if(d.bind(),this.attributes.hasOwnProperty(e)){let o=this.attributes[e];this.vao.enable(o.location),this.vao.assignData(o.location,r,n,s,a,h),o.data=f,o.size=r,o.buffer=d,this.vao.disable(o.location),this.attribData.push(o)}else{let o=this.attribData.length,c={location:o,name:e,data:f,size:r,buffer:d};this.gl.bindAttribLocation(this.shader,c.location,e),this.vao.enable(o),this.vao.assignData(o,r,n,s,a,h),this.vao.disable(c.location),this.attribData.push(c)}return(e===\"position\"||e===\"Position\")\u0026\u0026(this.numVertices=i.length/r),d.unbind(),this.vao.unbind(),this}rotate(e,i){return m.rotate(this.modelMatrix,this.modelMatrix,e,i),this}setNumItems(e=1){return this.numItems=e,this}computeBoundingBox(){}setNumVertices(e){return this.numVertices=e,this}getAttributeData(e){}}const Rt=[\"#FEB019\",\"#F46002\",\"#E1E7F1\",\"#0A1D69\",\"#138FE2\",\"#0652C4\",\"#D23401\",\"#B0A12F\"].map(t=\u003enew dt(t));class Qt{constructor(e){p(this,\"padding\",0);p(this,\"scale\",j(1,3));p(this,\"depth\",j(1,6));p(this,\"maxDepth\",Math.round(j(10,15)));p(this,\"probability\",j(.5,.9));p(this,\"transform_tmp\",m.create());p(this,\"final_transform\",m.create());p(this,\"transform_data\");p(this,\"transform_data_location\",0);p(this,\"leafSquares\",[]);p(this,\"square\");p(this,\"shader\");p(this,\"squares\",[]);p(this,\"gl\");p(this,\"geometry\");p(this,\"globalTransform\");p(this,\"global_position\",[0,0,0]);this.gl=e,this.square=new ot(this.squares),this.square.split=.5,this.square.setLevel(0,this.squares,this.probability,this.maxDepth),this.square.update(0,0,1,1),this.leafSquares=this.squares.filter(i=\u003ei.children.length===0),this._loadShader(),this._buildGeometry(),this._initTransformData(),this.transform_data_location=this.shader.uniforms[\"transforms[0]\"].location}draw(e,i){this.update_system(),this.geometry.draw(e,r=\u003e{this.gl.uniformMatrix4fv(this.transform_data_location,!1,this.transform_data),r.uniform(\"globalTransform\",this.globalTransform),r.uniform(\"cubeTransform\",i)})}update_system(){const e=performance.now()/5e3;for(const s of this.squares)s.split=.5+.4*Wt(e*s.speed+s.phase,s.y);const i=2;this.square.update(0,0,i,i);let r=0;for(const s of this.leafSquares){let n=s.z,a=s.transform,h={x:s.w-.2*this.padding,y:s.h-.2*this.padding,z:this.depth*s.depth*n},f={x:s.x-.5*i,y:s.y-.5*i,z:0};this.build_transform(f,h,this.transform_tmp),m.multiply(this.final_transform,this.transform_tmp,a),this.transform_data.set(this.final_transform,r),r+=16}}_initTransformData(){let e=this.leafSquares.length;this.transform_data=new Float32Array(this.leafSquares.length*16);for(let r=0;r\u003ce;r++){let s=m.create();m.translate(s,s,[.5,.5,.05]),this.leafSquares[r].transform=s}let i=[];this.leafSquares.forEach(r=\u003e{let s=r.transform;for(let n=0;n\u003c16;++n)i.push(s[n])}),this.transform_data.set(i),this.globalTransform=m.create()}setPositionAndRotation(e,i,r){this.global_position=e,m.translate(this.globalTransform,this.globalTransform,this.global_position),m.rotate(this.globalTransform,this.globalTransform,r,i);let s=w.scale(w.create(),this.global_position,-1);m.translate(this.globalTransform,this.globalTransform,s)}build_transform(e,i,r){let s={_x:0,_y:0,_z:0,_w:1};const n=s._x,a=s._y,h=s._z,f=s._w,d=n+n,o=a+a,c=h+h,x=n*d,u=n*o,b=n*c,F=a*o,g=a*c,v=h*c,_=f*d,A=f*o,T=f*c,M=i.x,E=i.y,z=i.z;r[0]=(1-(F+v))*M,r[1]=(u+T)*M,r[2]=(b-A)*M,r[3]=0,r[4]=(u-T)*E,r[5]=(1-(x+v))*E,r[6]=(g+_)*E,r[7]=0,r[8]=(b+A)*z,r[9]=(g-_)*z,r[10]=(1-(x+F))*z,r[11]=0,r[12]=e.x,r[13]=e.y,r[14]=e.z,r[15]=1}_buildGeometry(){const e=Gt(1,1,.1,1,1,1);let i=new mt(this.shader);i.addAttribute(\"position\",e.positions);let r=[];for(let s=0;s\u003cthis.leafSquares.length*3;++s){let n=Rt[Math.floor(Math.random()*Rt.length)];r.push(n.r,n.g,n.b)}i.addInstancedAttribute(\"color\",r),i.addIndexBuffer(e.cells),i.setNumItems(this.leafSquares.length),this.geometry=i}_loadShader(){const e=`#version 300 es\r\n \r\n uniform mat4 projectionMatrix;\r\n uniform mat4 viewMatrix;\r\n \r\n uniform mat4 globalTransform;\r\n uniform mat4 transforms[${this.leafSquares.length}];\r\n uniform mat4 cubeTransform;\r\n \r\n in vec3 position;\r\n in vec3 color;\r\n \r\n out vec3 vColor;\r\n void main() {\r\n \r\n \r\n vColor = color;\r\n gl_Position = projectionMatrix * viewMatrix * cubeTransform * globalTransform * transforms[gl_InstanceID] * vec4(position,1.);\r\n }\r\n `,i=`#version 300 es\r\n precision highp float;\r\n \r\n in vec3 vColor;\r\n out vec4 glFragColor;\r\n void main(){\r\n glFragColor = vec4(vColor,0.3);\r\n }\r\n \r\n `;this.shader=ft(this.gl,new ct(e,i))}}function Ot(t,e=new $(t)){let i=t.createTexture();for(let s in st.prototype)i[s]=st.prototype[s];let r=new st(t,e);return Object.assign(i,r),i._checkData(),i}function st(t,e){this.gl=t,this.format=e,this.data=null,(this.format.type===void 0||this.format.type===null)\u0026\u0026(this.format.type=t.TEXTURE_2D)}st.prototype={_checkData(){this.format.data!==null\u0026\u0026this.format.data!==void 0?this.format.data instanceof Image?this.loadImage(this.format.data):this.loadData(this.format.data):this.loadBlankTexture()},bind(t=0){let e=this.gl;return e.activeTexture(e[`TEXTURE${t}`]),e.bindTexture(this.format.type,this),this},unbind(){return this.gl.bindTexture(this.format.type,null),this},createDepthTexture(t){let e=this.gl;return e.bindTexture(this.format.type,this),e.texParameteri(this.format.type,e.TEXTURE_MAG_FILTER,t.magFilter),e.texParameteri(this.format.type,e.TEXTURE_MIN_FILTER,t.minFilter),e.texParameteri(this.format.type,e.TEXTURE_WRAP_S,t.wrapS),e.texParameteri(this.format.type,e.TEXTURE_WRAP_T,t.wrapT),e instanceof WebGLRenderingContext?e.texImage2D(this.format.type,0,t.depthType,t.width,t.height,0,t.depthType,e.UNSIGNED_SHORT,null):e.texImage2D(this.format.type,0,t.depthType,t.width,t.height,0,e.DEPTH_COMPONENT,e.UNSIGNED_SHORT,null),e.bindTexture(this.format.type,null),this},loadBlankTexture(){return this.loadData(null),this},loadData(t){let e=this.gl,i=this.format;return e.bindTexture(this.format.type,this),e.texImage2D(this.format.type,0,i.internalFormat,i.width,i.height,0,i.format,i.texelType,t),e.texParameteri(this.format.type,e.TEXTURE_MAG_FILTER,i.magFilter),e.texParameteri(this.format.type,e.TEXTURE_MIN_FILTER,i.minFilter),e.texParameteri(this.format.type,e.TEXTURE_WRAP_S,i.wrapS),e.texParameteri(this.format.type,e.TEXTURE_WRAP_T,i.wrapT),i.generateMipMaps\u0026\u0026e.generateMipmap(this.format.type),e.bindTexture(this.format.type,null),this},loadImage(t){let e=this.gl,i=this.format;return this.format.width=t.width,this.format.height=t.height,this.data=t,e.bindTexture(this.format.type,this),this.format.flipY\u0026\u0026e.pixelStorei(e.UNPACK_FLIP_Y_WEBGL,i.flipY),e.texImage2D(this.format.target,this.format.level,this.format.internalFormat,t.width,t.height,0,this.format.format,this.format.texelType,t),e.texParameteri(this.format.type,e.TEXTURE_MAG_FILTER,i.magFilter),e.texParameteri(this.format.type,e.TEXTURE_MIN_FILTER,i.minFilter),e.texParameteri(this.format.type,e.TEXTURE_WRAP_S,i.wrapS),e.texParameteri(this.format.type,e.TEXTURE_WRAP_T,i.wrapT),i.generateMipMaps\u0026\u0026e.generateMipmap(this.format.type),e.bindTexture(this.format.type,null),this},resize(t,e){let i=this.gl,r=this.format;return this.format.width=t,this.format.height=e,this.width=t,this.height=e,this.bind(),i.texImage2D(this.format.type,0,r.internalFormat,t,e,0,r.format,r.texelType,this.format.data),i.bindTexture(this.format.type,null),this}};function Ft(t,e=new $(t)){let i=t.createFramebuffer();for(let r in nt.prototype)i[r]=nt.prototype[r];return Object.assign(i,new nt(t,e)),i.build(),i}function nt(t,e){if(this.gl=t,this.format=e,this.depthTexture=null,this.depthBuffer=null,this.depthComponent=t.DEPTH_COMPONENT16,this.format.attachments.length\u003c1){let i=Ot(t,e);this.format.attachments.push(i)}}nt.prototype={buildDepthRenderbuffer(t=this.gl.DEPTH_COMPONENT16){let e=this.gl;this.depthComponent=t,this.depthBuffer=e.createRenderbuffer(),e.bindRenderbuffer(e.RENDERBUFFER,this.depthBuffer),e.renderbufferStorage(e.RENDERBUFFER,e.DEPTH_COMPONENT16,this.format.attachments[0].width,this.format.attachments[0].height)},build(){let t=this.gl,e=this.format;this.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,t.COLOR_ATTACHMENT0,t.TEXTURE_2D,e.attachments[0],0),e.attachments.length\u003e1\u0026\u0026e.attachments.forEach((r,s)=\u003e{let n=t.COLOR_ATTACHMENT0+(s+1);t.framebufferTexture2D(t.FRAMEBUFFER,n,t.TEXTURE_2D,r,0)}),this.depthBuffer!==null\u0026\u0026t.framebufferRenderbuffer(t.FRAMEBUFFER,t.DEPTH_ATTACHMENT,t.RENDERBUFFER,this.depthBuffer);let i=t.checkFramebufferStatus(t.FRAMEBUFFER);return this._throwError(i),this.unbind(),this},getColorTexture(){return this.format.attachments[0]},bind(){return this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,this),this},unbind(){return this.gl.bindFramebuffer(this.gl.FRAMEBUFFER,null),this},clear(t=0,e=0,i=0,r=0){return this.bind(),this.gl.clearColor(t,e,i,r),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.unbind(),this},resize(t,e,i=0){let r=this.gl;if(i\u003ethis.format.attachments.length){W(`Attempt to resize FBO ${this.format.name} failed - selected an index greater than the number of attachments on this FBO`);return}return this.format.width=t,this.format.height=e,this.format.attachments[i].resize(t,e),this.depthBuffer!==null\u0026\u0026(r.bindRenderbuffer(r.RENDERBUFFER,this.depthBuffer),r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_COMPONENT16,this.format.attachments[0].width,this.format.attachments[0].height)),this.build(),this},addAttachment(t,e){let i=t!==void 0?t:this.format,r=Ot(this.gl,i),s=this.gl;return this.bind(),s.framebufferTexture2D(s.FRAMEBUFFER,s.COLOR_ATTACHMENT0,s.TEXTURE_2D,r,0),this.unbind(),this.format.attachments.push(r),this},replaceTexture(t,e=0){let i=this.gl;return this.bind(),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0+e,i.TEXTURE_2D,t,0),this.unbind(),this},_throwError(t){let e=this.gl;switch(t){case e.FRAMEBUFFER_UNSUPPORTED:throw new Error(`FBO ${this.format.name}: Framebuffer unsupported`);case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:throw new Error(`FBO ${this.format.name}: Framebuffer incomplete attachment`);case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:throw new Error(`FBO ${this.format.name}: Framebuffer incomplete dimensions`);case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:throw new Error(`FBO ${this.format.name}: Framebuffer incomplete missing attachment`);case e.FRAMEBUFFER_COMPLETE:return!0;default:return console.error(\"unknown error creating framebuffer\"),!1}}};const wt=`#version 300 es\\r\r\nin vec2 position;\\r\r\nout vec2 vUv;\\r\r\nout vec2 vPosition;\\r\r\nconst vec2 scale = vec2(0.5,0.5);\\r\r\n\\r\r\n\\r\r\n void main(){\\r\r\n vPosition = position;\\r\r\n vUv = position.xy * scale + scale;\\r\r\n gl_Position = vec4(position,0.0,1.0);\\r\r\n }`,Jt=`precision highp float;\\r\r\nuniform sampler2D inputTexture;\\r\r\nin vec2 vUv;\\r\r\nout vec4 glFragColor;\\r\r\n\\r\r\nvoid main(){\\r\r\n\\r\r\n vec4 data = texture(inputTexture,vUv);\\r\r\n glFragColor = data;\\r\r\n}`,te=`#version 300 es\\r\r\nprecision highp float;\\r\r\n\\r\r\nuniform sampler2D\ttex0;\\r\r\nuniform vec2\t\tsample_offset;\\r\r\nuniform float\t\tattenuation;\\r\r\n\\r\r\nin vec2 vUv;\\r\r\nout vec4 oColor;\\r\r\n\\r\r\nvoid main()\\r\r\n{\\r\r\n vec3 sum = vec3( 0.0, 0.0, 0.0 );\\r\r\n sum += texture( tex0, vUv + -10.0 * sample_offset ).rgb * 0.009167927656011385;\\r\r\n sum += texture( tex0, vUv + -9.0 * sample_offset ).rgb * 0.014053461291849008;\\r\r\n sum += texture( tex0, vUv + -8.0 * sample_offset ).rgb * 0.020595286319257878;\\r\r\n sum += texture( tex0, vUv + -7.0 * sample_offset ).rgb * 0.028855245532226279;\\r\r\n sum += texture( tex0, vUv + -6.0 * sample_offset ).rgb * 0.038650411513543079;\\r\r\n sum += texture( tex0, vUv + -5.0 * sample_offset ).rgb * 0.049494378859311142;\\r\r\n sum += texture( tex0, vUv + -4.0 * sample_offset ).rgb * 0.060594058578763078;\\r\r\n sum += texture( tex0, vUv + -3.0 * sample_offset ).rgb * 0.070921288047096992;\\r\r\n sum += texture( tex0, vUv + -2.0 * sample_offset ).rgb * 0.079358891804948081;\\r\r\n sum += texture( tex0, vUv + -1.0 * sample_offset ).rgb * 0.084895951965930902;\\r\r\n sum += texture( tex0, vUv + 0.0 * sample_offset ).rgb * 0.086826196862124602;\\r\r\n sum += texture( tex0, vUv + +1.0 * sample_offset ).rgb * 0.084895951965930902;\\r\r\n sum += texture( tex0, vUv + +2.0 * sample_offset ).rgb * 0.079358891804948081;\\r\r\n sum += texture( tex0, vUv + +3.0 * sample_offset ).rgb * 0.070921288047096992;\\r\r\n sum += texture( tex0, vUv + +4.0 * sample_offset ).rgb * 0.060594058578763078;\\r\r\n sum += texture( tex0, vUv + +5.0 * sample_offset ).rgb * 0.049494378859311142;\\r\r\n sum += texture( tex0, vUv + +6.0 * sample_offset ).rgb * 0.038650411513543079;\\r\r\n sum += texture( tex0, vUv + +7.0 * sample_offset ).rgb * 0.028855245532226279;\\r\r\n sum += texture( tex0, vUv + +8.0 * sample_offset ).rgb * 0.020595286319257878;\\r\r\n sum += texture( tex0, vUv + +9.0 * sample_offset ).rgb * 0.014053461291849008;\\r\r\n sum += texture( tex0, vUv + +10.0 * sample_offset ).rgb * 0.009167927656011385;\\r\r\n\\r\r\n oColor.rgb = attenuation * sum;\\r\r\n oColor.a = 1.0;\\r\r\n}`,ee=`#version 300 es\\r\r\nprecision highp float;\\r\r\nuniform vec3 fadeColor;\\r\r\nuniform float fadeAmt;\\r\r\nout vec4 glFragColor;\\r\r\nvoid main() {\\r\r\n glFragColor = vec4(fadeColor, fadeAmt);\\r\r\n}\\r\r\n`;class vt{constructor(){p(this,\"vertices\",[-1,-1,-1,4,4,-1]);p(this,\"normals\",[]);p(this,\"indices\",[]);p(this,\"uvs\",[]);p(this,\"customSize\",2)}}const ie=6,It=1.2,U=Ct();new dt(\"#0A1D69\");const Dt=[1,.5,.5];document.body.appendChild(U.canvas);const Mt=new Vt({fov:50,aspect:window.innerWidth/window.innerHeight});Mt.setZoom(-7);let at=Ft(U,new $(U,{width:window.innerWidth,height:window.innerHeight})),lt=Ft(U,new $(U,{width:window.innerWidth,height:window.innerHeight})),ht=Ft(U,new $(U,{width:window.innerWidth,height:window.innerHeight})),X=m.create(),K=0,Q=0,re=ft(U,new ct(wt,Jt)),se=ft(U,new ct(wt,te)),ne=ft(U,new ct(wt,ee)),ae=new mt(re,new vt),Pt=new mt(se,new vt),Lt=new mt(ne,new vt),Y=[];for(let t=0;t\u003cie;++t){let e=new Qt(U);Y.push(e)}let k=[0,0,0],H=V(0);Y[0].setPositionAndRotation([0,0,1],k,H);k=[1,0,0];H=V(90);Y[1].setPositionAndRotation([0,-1,0],k,H);k=[1,0,0];H=V(180);Y[2].setPositionAndRotation([0,0,0],k,H);k=[0,1,0];H=V(90);Y[3].setPositionAndRotation([1,0,0],k,H);k=[0,1,0];H=V(-90);Y[4].setPositionAndRotation([-1,0,0],k,H);k=[1,0,0];H=V(-90);Y[5].setPositionAndRotation([0,1,0],k,H);const Ut=()=\u003e{requestAnimationFrame(Ut),K=performance.now()*.2,K+=Math.sin(K),Q+=.001,m.translate(X,X,[-.5,0,0]);let t=m.rotate(m.create(),X,V(K),[Math.sin(Q),Math.cos(Q),Math.tan(Q)]);m.translate(X,X,[.5,-0,0]),at.bind(),U.viewport(0,0,window.innerWidth,window.innerHeight),Y.forEach(e=\u003e{e.draw(Mt,t)}),Lt.draw(null,e=\u003e{e.uniform(\"fadeColor\",Dt),e.float(\"fadeAmt\",.08)}),at.unbind(),lt.bind(),U.viewport(0,0,window.innerWidth,window.innerHeight),Pt.draw(null,e=\u003e{at.getColorTexture().bind(0),e.vec2(\"sample_offset\",[1/window.innerWidth,0]),e.float(\"attenuation\",It),e.int(\"tex0\",0)}),lt.unbind(),ht.bind(),U.viewport(0,0,window.innerWidth,window.innerHeight),U.clearScreen(0,0,0,0),Pt.draw(null,e=\u003e{lt.getColorTexture().bind(0),e.vec2(\"sample_offset\",[0,1/window.innerHeight]),e.float(\"attenuation\",It),e.int(\"tex0\",0)}),Lt.draw(null,e=\u003e{e.uniform(\"fadeColor\",Dt),e.float(\"fadeAmt\",.08)}),ht.unbind(),U.enableAlphaBlending(),ae.draw(null,e=\u003e{ht.getColorTexture().bind(0),e.int(\"inputTexture\",0)})};Ut();window.addEventListener(\"resize\",()=\u003e{at.resize(window.innerWidth,window.innerHeight),lt.resize(window.innerWidth,window.innerHeight),ht.resize(window.innerWidth,window.innerHeight),Mt.resize(window.innerWidth/window.innerHeight),U.canvas.width=window.innerWidth,U.canvas.height=window.innerHeight});\r\n","artId":"ch4k4b4n70rhlpf0n74g","libraries":[]}],"like":0,"thumbFileName":"ch4k4b4n70rhlpf0n74g.png","selectedThumbFileName":"ch4k4b4n70rhlpf0n74g.png","thumbnailFileUrl":"","resourceFileName":"ch4k4b4n70rhlpf0n74g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmdomgVvNndaeWbMKScx9hke5zZ5RWeL7CWmPkLbPDRy5k","resourceType":1,"metadataUrl":"","tags":[{"id":"bmqr67s3p9f7m1g02kr0","name":"creativecoding"},{"id":"bpacvs43p9f4nmb8an50","name":"canvas"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"},{"id":"ch4k4d4n70rhlpf0n770","name":"webgl,"},{"id":"ch4k4d4n70rhlpf0n77g","name":"postprocessing"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch519rsn70rhlpf0n7sg","title":"Spaaaaaace","description":"","createdAt":1682576672,"updatedAt":1682576672,"user":{"id":"4lY7tDequqPTkf18P2iwoUhe24A2","customId":"4lY7tDequqPTkf18P2iwoUhe24A2","name":"masaki nakamura","biography":"Visual Artist ARTGUMI member \"ubisum by ubies\" finalist \nFeatured in MoCDA Digital Trend Ep. 56 76 83 ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/4lY7tDequqPTkf18P2iwoUhe24A2.jpg","createdAt":1668678425566,"updatedAt":1683335310679},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch519rsn70rhlpf0n7sg.png","thumbnailFileUrl":"","resourceFileName":"ch519rsn70rhlpf0n7sg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQ5JhhseaTtYitd49uGbS91m41g4PmoBt2SBEYNEsPGkn","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch524ocn70rhlpf0n800","title":"Spaaaaaace","description":"","createdAt":1682580082,"updatedAt":1682580082,"user":{"id":"4lY7tDequqPTkf18P2iwoUhe24A2","customId":"4lY7tDequqPTkf18P2iwoUhe24A2","name":"masaki nakamura","biography":"Visual Artist ARTGUMI member \"ubisum by ubies\" finalist \nFeatured in MoCDA Digital Trend Ep. 56 76 83 ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/4lY7tDequqPTkf18P2iwoUhe24A2.jpg","createdAt":1668678425566,"updatedAt":1683335310679},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch524ocn70rhlpf0n800.png","thumbnailFileUrl":"","resourceFileName":"ch524ocn70rhlpf0n800.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQduRivmWnDMLAvY6CSPLpKM5bDvU4wD3ZJhU8H4exeVd","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch52n6kn70rhlpf0n820","title":"Spaaaaaace","description":"","createdAt":1682582452,"updatedAt":1682582452,"user":{"id":"4lY7tDequqPTkf18P2iwoUhe24A2","customId":"4lY7tDequqPTkf18P2iwoUhe24A2","name":"masaki nakamura","biography":"Visual Artist ARTGUMI member \"ubisum by ubies\" finalist \nFeatured in MoCDA Digital Trend Ep. 56 76 83 ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/4lY7tDequqPTkf18P2iwoUhe24A2.jpg","createdAt":1668678425566,"updatedAt":1683335310679},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch52n6kn70rhlpf0n820.png","thumbnailFileUrl":"","resourceFileName":"ch52n6kn70rhlpf0n820.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUVRqoacazFND4cLoZC4JxsgjMWoHHJ1ZZHLFWJDiizDD","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch53434n70rhlpf0n830","title":"Spaaaaaace","description":"","createdAt":1682584122,"updatedAt":1682584122,"user":{"id":"4lY7tDequqPTkf18P2iwoUhe24A2","customId":"4lY7tDequqPTkf18P2iwoUhe24A2","name":"masaki nakamura","biography":"Visual Artist ARTGUMI member \"ubisum by ubies\" finalist \nFeatured in MoCDA Digital Trend Ep. 56 76 83 ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/4lY7tDequqPTkf18P2iwoUhe24A2.jpg","createdAt":1668678425566,"updatedAt":1683335310679},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch53434n70rhlpf0n830.png","thumbnailFileUrl":"","resourceFileName":"ch53434n70rhlpf0n830.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZVmt4ha2neTw7X8zZEExo49XMNFVvuoWgF3TABoTwwbm","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch53la4n70rhlpf0n87g","title":"Transmission","description":"","createdAt":1682586282,"updatedAt":1682586455,"user":{"id":"ctdhDGDqQwQSv15IHpAKaOh42hg2","customId":"gin","name":"ギン","biography":"Generative Artist\ntwitter(JP): https://twitter.com/gin_graphic\ntwitter(EN): https://twitter.com/ginzi_o\nlinktree: https://linktr.ee/gin_graphic","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ctdhDGDqQwQSv15IHpAKaOh42hg2.jpg","createdAt":1637141678304,"updatedAt":1702694434431},"codes":[{"id":"ch53lakn70rhlpf0n88g","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"ja\"\u003e\n\u003chead\u003e\n \u003cmeta charset=\"UTF-8\"\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n \u003ctitle\u003eHello p5\u003c/title\u003e\n \u003clink rel=\"stylesheet\" href=\"main.css\"\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js\"\u003e\u003c/script\u003e\n\n\u003c/head\u003e\n\u003cbody\u003e\n \u003cscript src=\"main.js\"\u003e\u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e","artId":"ch53la4n70rhlpf0n87g","libraries":[]},{"id":"ch53lakn70rhlpf0n890","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ch53la4n70rhlpf0n87g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch53lakn70rhlpf0n89g","type":2,"text":"let from, to;\nlet Nx = 200;\nlet Ny = 30;\nlet obj = [];\nlet ofs = [];\n\n\nfunction setup() {\n\tcreateCanvas(w=11012, h=1080);\n\tcolorMode(HSB);\n\tnoStroke();\n\tframeRate(20);\n\tpixelDensity(1);\n\tellipseMode(CORNER)\n\n\tfrom = color(220, 170, 40);\n\tto = color(80, 70, 150);\n\t\n\tfor(let i=0;i\u003cNx+1;i++){\n\t\tobj[i] = [];\n\t\tfor(let j=0;j\u003cNy+1;j++){\n\t\t\tobj[i][j] = {x:w/Nx*i, y:h/Ny*j};\n\t\t}\n\t}\n\n\tss = w/Nx\n\ttau2 = 2.5*TAU\n\n\tofs = [\n\t\trandom(1000),\n\t\trandom(TAU),\n\t\trandom(1000),\n\t\trandom(TAU),\n\t\trandom(1000),\n\t\trandom(TAU),\n\t]\n}\n\nfunction draw() {\n\tbackground(0);\n\n\tlet t = frameCount * 0.01;\n\tlet t0 = t*5.55;\n\tlet t1 = t*0.16;\n\tlet t2 = t*4.6;\n\tlet t3 = t*0.31;\n\tlet t4 = t*1.3;\n\tlet t5 = t*0.093;\n\n\tfor(let i=0;i\u003cNx+1;i++){\n\t\tfor(let j=0;j\u003cNy+1;j++){\n\t\t\tlet cl = abs(sin(t0 - i*0.1 +\n\t\t\t\ttau2*noise(i*0.05, j*0.05, t1+ofs[0]) +ofs[1]));\n\t\t\tfill(lerpColor(from, to, cl));\n\n\t\t\tlet esize = ss * \n\t\t\t\t\tsin(t2 + j*0.1 +\n\t\t\t\t\t\ttau2*noise(i*0.1, j*0.1, t3+ofs[2])+ofs[3]);\n\t\t\t\n\t\t\tlet rot = PI * \n\t\t\t\t\tcos(-t4 + i*0.1 +\n\t\t\t\t\t\t\tTAU*noise(i*0.05, j*0.05, t5+ofs[4])+ofs[5]);\n\t\t\t\n\t\t\tpush();\n\t\t\ttranslate(obj[i][j].x, obj[i][j].y);\n\t\t\trotate(rot);\n\t\t\trect(0, 0, esize);\n\t\t\tpop();\n\t\t}\n\t}\n}","artId":"ch53la4n70rhlpf0n87g","libraries":[]}],"like":1,"thumbFileName":"ch53la4n70rhlpf0n87g.png","selectedThumbFileName":"ch53la4n70rhlpf0n87g.png","thumbnailFileUrl":"","resourceFileName":"ch53la4n70rhlpf0n87g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmafbW8ZibtMthS5wgkHbGFVXe6UPGrCSYhw3ASeNw6jxk","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch6923cn70rkl4ca3q1g","title":"SPACE I-III","description":"\"SPACE I-III\" \ncode by E.C.H (Eiichi Ishii)","createdAt":1682739471,"updatedAt":1682747760,"user":{"id":"jpe3kEu3j3R7kPPVLmQx5L1cLuD2","customId":"ech","name":"えいいち(E.C.H) ","biography":"たぶんアーティスト。美術と音楽と映画と、写真、お酒が好きです。作品制作してます。クリエイティブコーディング #CreativeCoding #Processing #p5js #openFrameworks #SonicPi #PureData #TouchDesigner","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/jpe3kEu3j3R7kPPVLmQx5L1cLuD2.png","createdAt":1573355006000,"updatedAt":1733824346259},"codes":[{"id":"ch6923sn70rkl4ca3q2g","type":0,"text":"","artId":"ch6923cn70rkl4ca3q1g","libraries":[]},{"id":"ch6923sn70rkl4ca3q30","type":1,"text":"html, body {\n background-color: #000000; \n margin: 0;\n padding: 0;\n width: 100vw;\n height: 100vh;\n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"ch6923cn70rkl4ca3q1g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch6923sn70rkl4ca3q3g","type":2,"text":"/**********************************\r\n * NEORT-Work173\r\n * \r\n * for CURATION_FREE_2\r\n * by E.C.H (Eiichi Ishii)\r\n **********************************/\r\n\r\nlet WW = 11012;\r\nlet WH = 1080;\r\nlet w, g, dis, msk;\r\nlet pg = [];\r\nlet mdis = []\r\nlet show = [];\r\nlet pgnum = 20;\r\nlet num = 200;\r\nlet cnum = 16;\r\nlet inum = 3;\r\nlet bg;\r\n\r\nfunction preload(){\r\n bg = createImg(\"https://stat.neort.io/externalResource/ch69vk4n70rkl4ca3qr0.png\");\r\n}\r\n\r\nfunction setup() {\r\n w = WH/1.05;\r\n createCanvas(WW, WH);\r\n imageMode(CENTER);\r\n angleMode(DEGREES);\r\n rectMode(CENTER);\r\n noLoop();\r\n g = w / 2;\r\n setimg();\r\n}\r\n\r\nfunction draw() {\r\n image(bg, WW/2, WH/2, WW, WH);\r\n\r\n push();\r\n translate(2408, WH / 2);\r\n rotate(random(360));\r\n scale(random([-1, 1]), random([-1, 1]))\r\n image(show[0], 0, 0, w, w);\r\n pop();\r\n\r\n\r\n push();\r\n translate(2408 + 3098, WH / 2);\r\n rotate(random(360));\r\n scale(random([-1, 1]), random([-1, 1]))\r\n image(show[1], 0, 0, w, w);\r\n pop();\r\n\r\n push();\r\n translate(2408 + 3098 + 2408, WH / 2);\r\n rotate(random(360));\r\n scale(random([-1, 1]), random([-1, 1]))\r\n image(show[2], 0, 0, w, w);\r\n pop();\r\n}\r\n\r\nfunction setimg() {\r\n for (let i = 0; i \u003c pgnum; i++) {\r\n pg[i] = createGraphics(g, g);\r\n pg[i].colorMode(HSB, 360, 100, 100, 100);\r\n pg[i].angleMode(DEGREES);\r\n pg[i].strokeCap(SQUARE);\r\n pg[i].translate(g / 2, g / 2);\r\n\r\n let v = int(random(3, 10));\r\n let lr = g / v;\r\n pg[i].stroke((int(random(cnum)) * 360) / cnum, 100, 100);\r\n pg[i].strokeWeight(lr);\r\n pg[i].noFill();\r\n pg[i].arc(0, 0, g - lr, g - lr, 0, random(45, 315));\r\n }\r\n\r\n dis = createGraphics(w, w, WEBGL);\r\n dis.colorMode(HSB, 360, 100, 100, 100);\r\n dis.angleMode(DEGREES);\r\n dis.imageMode(CENTER);\r\n for (let j = 0; j \u003c num; j++) {\r\n dis.push();\r\n dis.translate(random(-w, w), random(-w, w), -w);\r\n dis.scale(random(0.2, 1));\r\n dis.rotateX(random(360));\r\n dis.rotateY(random(360));\r\n dis.rotateZ(random(360));\r\n dis.image(pg[int(random(pgnum))], 0, 0, g, g);\r\n\r\n dis.push();\r\n dis.translate(random(-g, g), random(-g, g), random(-g * 2, g * 2));\r\n dis.stroke((int(random(cnum)) * 360) / cnum, 100, random(60, 100));\r\n dis.strokeWeight(2);\r\n dis.noFill();\r\n dis.sphere(random(g / 6, g), int(random(3, 6)), int(random(3, 6)));\r\n dis.pop();\r\n dis.pop();\r\n }\r\n\r\n msk = createGraphics(w, w);\r\n msk.fill(255);\r\n msk.noStroke();\r\n msk.ellipse(w / 2, w / 2, w, w);\r\n\r\n for(let p=0; p\u003cinum; p++){\r\n mdis[p] = createGraphics(w, w);\r\n mdis[p].background(0);\r\n mdis[p].rectMode(CENTER);\r\n for (let k = 0; k \u003c num; k++) {\r\n mdis[p].fill(random(255));\r\n mdis[p].noStroke();\r\n let rr = random(1, g / 4);\r\n mdis[p].rect(random(w), random(w), rr, rr);\r\n }\r\n\r\n mdis[p].image(dis, 0, 0, w, w);\r\n\r\n mdis[p].stroke(255);\r\n mdis[p].noFill();\r\n for (let l = 0; l \u003c 4; l++) {\r\n mdis[p].strokeWeight(random(g / 30, g / 10));\r\n\r\n mdis[p].bezier(\r\n random(w),\r\n random(w),\r\n random(w),\r\n random(w),\r\n random(w),\r\n random(w),\r\n random(w),\r\n random(w)\r\n );\r\n }\r\n (show[p] = mdis[p].get()).mask(msk);\r\n }\r\n}\r\n\r\nfunction windowResized(){\r\n redraw();\r\n}","artId":"ch6923cn70rkl4ca3q1g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"ch6923cn70rkl4ca3q1g.png","selectedThumbFileName":"ch6923cn70rkl4ca3q1g.png","thumbnailFileUrl":"","resourceFileName":"ch6923cn70rkl4ca3q1g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmRnZkLxQywvHLR8h7riTtCK5zEf9qsNyHH7YtQt9vXTeG","resourceType":1,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch77qksn70rkl4ca426g","title":"snake scale","description":"ベースはMV用に作ったshader","createdAt":1682865491,"updatedAt":1682902309,"user":{"id":"Ri1oRapUlGcZHEOFTfbTZGPpgIm1","customId":"mizuamasi_2023","name":"mizuamasi","biography":"kbr","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/Ri1oRapUlGcZHEOFTfbTZGPpgIm1.png","createdAt":1565142236000,"updatedAt":1733382074635},"codes":[{"id":"ch77qksn70rkl4ca427g","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"ch77qksn70rkl4ca426g","libraries":[]},{"id":"ch77qksn70rkl4ca4280","type":4,"text":"precision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n\nmat2 rot(float a){return mat2(cos(a),sin(a),-sin(a),cos(a));}\n\nfloat bo(vec3 p,vec3 s){p = abs(p)-s;return max(p.x,max(p.y,p.z));}\nfloat bar(vec2 p,vec2 s){p = abs(p)-s;return max(p.x,p.y);}\nfloat rbo(vec3 p,vec3 s,float r){p = abs(p)-s;return length(max(p,0.0)) + min(max(p.x,max(p.y,p.z)),0.0) - r;}\nfloat pi = acos(-1.);\nvec2 pmod(vec2 p, float r){float a = atan(p.x,p.y)+pi/r;float n = (pi*2.)/r;return p*rot(-(floor(a/n)*n));}\n\nvec2 smoothpmod(vec2 p, float r,float e)\n{\n float a = atan(p.x,p.y)+pi/r;\n float n = (pi*2.)/r;\n float angle = floor(a/n)*n;\n float x = a/n * n;\n x = a/n;\n angle = floor(x) + pow(fract(x),e);\n vec2 rp = p * rot(-( angle * n ));\n return rp;\n}\n\nfloat rand(vec3 p)\n{\n p = fract( p*0.3183099+.1 );\n\tp *= 17.0;\n return fract( p.x*p.y*p.z*(p.x+p.y+p.z) );\n}\nfloat noise(vec3 p)\n{\n vec3 fp = floor(p);\n\tvec3 fs = fract(p);\n vec3 sf = vec3(1.,0.,0.);\n \n float a = rand(fp);\n float b = rand(fp + sf);\n float c = rand(fp + sf.yxz);\n float d = rand(fp + sf.xxz);\n float e = rand(fp + sf.yyx);\n float f = rand(fp + sf.xyx);\n float g = rand(fp + sf.yxx);\n float h = rand(fp + sf.xxx);\n \n vec3 u = smoothstep(0.,1.,fs);\n // u = pow(fs,vec3(3.));\n \n return mix(mix(\n \t\tmix(a,b,u.x),\n \t\tmix(c,d,u.x),u.y),\n mix(\n mix(e,f,u.x),\n mix(g,h,u.x),u.y),u.z\n );\n}\nfloat fbm(vec3 p)\n{\n float v = 0.;\n float a = .5;\n float f = 0.;\n for(int i=0;i\u003c3;i++)\n {\n v+=a*noise(p);\n p*=2.;\n a*=.5;\n }\n return v;\n}\n\nfloat menger(vec3 p,vec3 offset)\n{\n float scale = 1.65;\n vec4 z = vec4(p,1.);\n for(int i = 0;i \u003c 3;i++)\n {\n //z.yz *= rot(float(i) * 2.);\n z = abs(z); \n if(z.x \u003c z.y)z.xy = z.yx;\n if(z.x \u003c z.z)z.xz = z.zx;\n //if(z.y \u003c z.z)z.yz = z.zy;\n z *= scale; \n z.xyz -= offset * (scale - 1.);\n if(z.z \u003c -.5 * offset.z * (scale - 1.) )\n z.z += offset.z * (scale - 1.);\n }\n \n return (length(max(abs(z.xyz) - vec3(1.0, 1.0, 1.0), 0.0))) / z.w;\n}\n\nvec3 deMengerSponge3(vec3 p, vec3 offset, float scale) {\n vec4 z = vec4(p, 1.0);\n for (int i = 0; i \u003c 2; i++) {\n z = abs(z);\n z.xz *= rot(2.);\n if (z.x \u003c z.y) z.xy = z.yx;\n //if (z.x \u003c z.z) z.xz = z.zx;\n if (z.y \u003c z.z) z.yz = z.zy;\n z *= scale;\n z.xyz -= offset * (scale - 1.0);\n if (z.z \u003c -0.5 * offset.z * (scale - 1.0))\n z.z += offset.z * (scale - 1.0);\n }\n return z.xyz / z.w;\n}\n\nvec3 pp;\n\nmat3 RotMat(vec3 axis, float angle)\n{\n // http://www.neilmendoza.com/glsl-rotation-about-an-arbitrary-axis/\n axis = normalize(axis);\n float s = sin(angle);\n float c = cos(angle);\n float oc = 1.0 - c;\n \n return mat3(oc * axis.x * axis.x + c, oc * axis.x * axis.y - axis.z * s, oc * axis.z * axis.x + axis.y * s, \n oc * axis.x * axis.y + axis.z * s, oc * axis.y * axis.y + c, oc * axis.y * axis.z - axis.x * s, \n oc * axis.z * axis.x - axis.y * s, oc * axis.y * axis.z + axis.x * s, oc * axis.z * axis.z + c );\n}\n\nvec3 random33(vec3 st)\n{\n st = vec3(dot(st, vec3(127.1, 311.7,811.5)),\n dot(st, vec3(269.5, 183.3,211.91)),\n dot(st, vec3(511.3, 631.19,431.81))\n );\n return -1.0 + 2.0 * fract(sin(st) * 43758.5453123);\n}\n\nvec4 celler3D(vec3 i,vec3 sepc)\n{\n vec3 sep = i * sepc;\n vec3 fp = floor(sep);\n vec3 sp = fract(sep);\n float dist = 5.;\n vec3 mp = vec3(0.);\n\n for (int z = -1; z \u003c= 1; z++)\n {\n for (int y = -1; y \u003c= 1; y++)\n {\n for (int x = -1; x \u003c= 1; x++)\n {\n vec3 neighbor = vec3(x, y ,z);\n vec3 pos = vec3(random33(fp+neighbor));\n pos = sin( (pos*6. +time/2.) )* 0.5 + 0.5;\n vec3 pp = neighbor + pos - sp;\n float divs = length(neighbor + pos - sp);\n //divs = max(pp.x,pp.y);\n mp = (dist \u003edivs)?pos:mp;\n dist = (dist \u003e divs)?divs:dist;\n }\n }\n }\n return vec4(mp,dist);\n}\nvec3 gp;\n\n#define TT(x,y) floor(x) + pow(fract(x),y)\nvec2 map(vec3 p) \n{ \n float o = 10.; \n float id = 0.;\n //p.y -= 10.5;\n vec3 op = p;\n //p.x += time * 30.;\n vec3 mp = p;\n p.x += time * 50.;\n //p -= deMengerSponge3(p,vec3(3.),3.); \n p.y += sin(time + p.x/10.) * 10.;\n p.xz = sin(p.xz/20.) * 20.;\n //p = abs(p) - 7.;\n p.xz *= rot(sin(time + op.x/100. + op.z/100.));\n p.yz *= rot(p.x/40.);\n p.xz = smoothpmod(p.xz,2.,5.);\n p.yz = smoothpmod(p.yz,6.,2.);\n \n //p.xz = pmod(p.xz,8.);\n //p.yz = pmod(p.yz,8.);\n\n p.xz *= rot(time/32.);\n //p.xy = smoothpmod(p.xy,3.,.1);\n p.xz = sin(p.xz) * 5.;\n //p.x += pi/3. * step(abs(sin(p.x/2.)),0.);\n p -= clamp(p,-4.,4.);\n o = length(p) - 1.3;\n gp = p;\n \n mp.y += 45.;\n float t2 = TT(time/pi/2.,2.);\n mp.x += t2;\n mp.xy *= rot(t2);\n mp.xz *= rot(time/3.);\n mp.yz *= rot(time/4.);\n float sp = length(mp) - 62.3;\n //sp = menger(mp/13.,vec3(3.))*13.;\n //mp.xz *= rot(pi/4.);\n //mp.yz *= rot(pi/4.);\n mp -= clamp(mp,-36.,36.);\n sp = max(sp,(length(mp) - 3.));\n if(o \u003e sp)\n {\n o = sp;\n id = 1.;\n }\n return vec2(o,id);\n}\nvec2 march(vec3 cp , vec3 rd)\n{\n float depth = 0.;\n for(int i = 0 ; i\u003c 128 ; i++)\n {\n vec3 rp = cp + rd * depth;\n vec2 d = map(rp);\n if(abs(d.x) \u003c 0.01)\n {\n return vec2(depth,d.y);\n }\n if(depth \u003e 500.)break;\n depth += d.x;\n }\n return vec2(-depth , 0.);\n}\nvec2 skymap(vec3 p) \n{ \n float o = 10.; \n float id = 0.;\n //p.y -= 10.5;\n vec3 op = p;\n //p.x += time * 30.;\n vec3 mp = p;\n p.y += sin(time + p.x/10.) * 10.;\n p.xz = sin(p.xz/20.) * 20.;\n //p = abs(p) - 7.;\n p.xz *= rot(sin(time + op.x/100. + op.z/100.));\n p.yz *= rot(p.x/40.);\n p.xz = smoothpmod(p.xz,2.,5.);\n p.yz = smoothpmod(p.yz,6.,2.);\n \n //p.xz = pmod(p.xz,8.);\n //p.yz = pmod(p.yz,8.);\n \n p.xz *= rot(time/32.);\n //p.xy = smoothpmod(p.xy,3.,.1);\n p.xz = sin(p.xz) * 5.;\n //p.x += pi/3. * step(abs(sin(p.x/2.)),0.);\n p -= clamp(p,-4.,4.);\n o = length(p) - 1.3;\n gp = p;\n // mp.y += 20.;\n // float sp = length(mp) - 50.;\n // if(o \u003e sp)\n // {\n // o = sp;\n // id = 1.;\n // }\n return vec2(o,id);\n}\nvec2 skymarch(vec3 cp , vec3 rd)\n{\n float depth = 0.;\n for(int i = 0 ; i\u003c 128 ; i++)\n {\n vec3 rp = cp + rd * depth;\n vec2 d = skymap(rp);\n if(abs(d.x) \u003c 0.01)\n {\n return vec2(depth,d.y);\n }\n if(depth \u003e 200.)break;\n depth += d.x;\n }\n return vec2(-depth , 0.);\n}\n\nvec2 shadowmarch(vec3 cp , vec3 rd)\n{\n float depth = 0.;\n for(int i = 0 ; i\u003c 44 ; i++)\n {\n vec3 rp = cp + rd * depth;\n vec2 d = map(rp);\n if(abs(d.x) \u003c 0.01)\n {\n return vec2(depth,d.y);\n }\n if(depth \u003e 300.)break;\n depth += d.x;\n }\n return vec2(-depth , 0.);\n}\n\n//https://www.shadertoy.com/view/tlXBRl\nfloat calculateObstruction(vec3 pos, vec3 lpos, float lrad)\n{\n // A homemade algorithm to compute obstruction\n // Raymarch to the light source, and\n // record the largest obstruction.\n // We assume that if the ray passes through an object at depth\n // d (negative distance), then the object obstructs light\n // proportional to the relative size of d projected on the light\n // as given by Thales's theorem.\n vec3 toLight = normalize(lpos-pos);\n float distToLight = length(lpos-pos);\n float d, t=lrad*.1;\n float obstruction=0.;\n for(int j=0; j\u003c128; j++)\n {\n d = map(pos + t*toLight).x;\n obstruction = max(.5+(-d)*distToLight/(2.*lrad*t), obstruction);\n if(obstruction \u003e= 1.){break;}\n // If we're stuck, advance by the characteristic \n // size of an obstructing object\n t += max(d, lrad*t/distToLight);\n if(t \u003e= distToLight) break;\n }\n return clamp(obstruction, 0.,1.);\n}\n\nvec3 getStar(vec3 rd)\n{\n rd.xz *= rot(time/10.);\n return vec3(0.,0.5,1.) + sin(rand(rd )*10.);\n}\n\nvec3 getColor(vec3 cp,vec3 rd)\n{\n vec3 col = vec3(0.);\n vec2 d = skymarch(cp,rd);\n if(d.x \u003e 0.)\n {\n vec2 e = vec2(1.0, -1.0) * 0.005;\n vec3 pos = cp + rd * d.x;\n vec3 N = normalize(\n e.xyy * map(pos + e.xyy).x +\n e.yyx * map(pos + e.yyx).x +\n e.yxy * map(pos + e.yxy).x +\n e.xxx * map(pos + e.xxx).x);\n float rim = pow(clamp(1. - dot(N, -rd), 0., 1.), 3.)/6.;\n vec3 mat = vec3(1.);\n pp.y = abs(pp.y)-6.;\n\n vec3 pointlight = normalize(vec3(.1,0.1,0.));\n pointlight.xz *= rot(time);\n vec3 ldir = normalize(pos - pointlight);\n float lrad = 0.2;\n float distToLight = length(pointlight + lrad - pos);\n float lightStrength = 3.1;\n\n float diff = max(0.,dot(ldir,N))/(distToLight*distToLight)*lightStrength;\n float sp = max(0.,dot(reflect(ldir,N) , -rd));\n //diff = mix(diff, 1. , 0.);\n sp = pow(sp , 31.);\n\n diff = pow(diff , 3.);\n\n col = log2(cos(length(gp))*vec3(2.,3.,5.) );\n col = mix(vec3(1.),col ,d.y );\n float obstruction = calculateObstruction(pos,pointlight,lrad);\n float level = diff * (1. - obstruction);\n col = level * col + sp * col;\n col = 1.-exp(-2.*col);\n col += rim * .3;\n }\n \n return col;\n}\n\nvoid main(void) {\n vec2 p = (gl_FragCoord.xy * 2.0 - resolution.xy) / min(resolution.x, resolution.y);\n\t//p.y *= mix(1.,p.y,clamp( (time - timeline[7] + 4.),0.,1.) );\n vec3 f = vec3(time/pi/2.,0.,0.) * 0.;\n vec3 cp = vec3(30.1,-193.,-270.) + f;\n cp.xz *= rot(time/14.);\n cp.yz *= rot(time/10.);\n vec3 target = vec3(0.,-40.,0.) + f;\n \n vec3 col = vec3(0.);\n \n vec3 cd = normalize(vec3(target - cp));\n vec3 cs = normalize(cross(cd , vec3(0.,1.,0.)));\n vec3 cu = normalize(cross(cd,cs));\n \n float fov =3.5-dot(p,p);\n \n vec3 rd = normalize(cd * fov + cs * p.x + cu * p.y);\n //rd = deMengerSponge3(rd,vec3(3.),3.);\n\n vec2 d = march(cp,rd);\n vec3 rd2 = rd;\n rd2.xz *= rot(time/10.);\n vec3 star = vec3(0.,0.5,1.) + sin(rand(rd2 )*10.);\n if( d.x \u003e 0.)\n {\n vec2 e = vec2(1.0, -1.0) * 0.005;\n vec3 pos = cp + rd * d.x;\n vec3 N = normalize(\n e.xyy * map(pos + e.xyy).x +\n e.yyx * map(pos + e.yyx).x +\n e.yxy * map(pos + e.yxy).x +\n e.xxx * map(pos + e.xxx).x);\n vec3 sun = normalize(vec3(0.2,1.,.5));\n float rim = pow(clamp(1. - dot(N, -rd), 0., 1.), 3.)/6.;\n \n vec3 mat = vec3(1.);\n pp.y = abs(pp.y)-6.;\n\n vec3 pointlight = normalize(vec3(0.1,50.1,0.));\n //pointlight.xz *= rot(time);\n vec3 ldir = normalize(pos - pointlight);\n float lrad = 0.9;\n float distToLight = length(pointlight + lrad - pos);\n float lightStrength = 3000.;\n\n float diff = max(0.,dot(ldir,N))/(distToLight*distToLight)*lightStrength;\n float sp = max(0.,dot(reflect(ldir,N) , -rd));\n //diff = mix(diff, 1. , 0.);\n sp = pow(sp , 31.);\n\n diff = pow(diff , 3.);\n \n col = log2(cos(length(gp))*vec3(2.,3.,5.) );\n col = mix(vec3(1.),col ,d.y );\n float obstruction = calculateObstruction(pos,pointlight,lrad);\n float level = diff * (1. - obstruction);\n col = level * col + sp * col;\n col = 1.-exp(-2.*col);\n col += rim * 2.;\n if(d.y \u003e 0.)\n {\n col = getColor(pos - N*0.1 , refract(rd,N,\t0.018));\n col = col + sp * vec3(1.);\n col = 1.-exp(-2.*col);\n col += rim * 2.;\n }\n }\n col *= vec3(1.,1.4,1.2);\n //col *= mix(1.,0.,clamp( (time - length(p) + sin(atan(p.x,p.y) * pi ) * 0.3 ),0.,1.) );\n gl_FragColor = vec4(col, 1.0);\n}","artId":"ch77qksn70rkl4ca426g","libraries":[]}],"like":0,"thumbFileName":"ch77qksn70rkl4ca426g.png","selectedThumbFileName":"ch77qksn70rkl4ca426g.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmaTcR5gRGvisc8a9QSPeSwUU4coHaGZbXidZrDGvB5Eqx","resourceFileName":"ch77qksn70rkl4ca426g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmdSEmE2JG7ZRofC5aeGjM9uK35csLaF9nwoLfUThjcshi","resourceType":3,"metadataUrl":"","tags":[{"id":"bmjbjcc3p9f7m1g018tg","name":"raymarching"},{"id":"bmjbjcc3p9f7m1g018u0","name":"glsl"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8qabsn70rkl4ca4bu0","title":"EIC-230404","description":"","createdAt":1683072312,"updatedAt":1683072312,"user":{"id":"c4K0URETkfWbKzELIJEmzd15bje2","customId":"","name":"seohyo","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/c4K0URETkfWbKzELIJEmzd15bje2.jpg","createdAt":1670159287212,"updatedAt":1715483521757},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch8qabsn70rkl4ca4bu0.png","thumbnailFileUrl":"","resourceFileName":"ch8qabsn70rkl4ca4bu0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmej29rQAzLGwT35Lh4kRX7By2JrWxi9MLSBwmEnQkJPDT","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8qb0kn70rkl4ca4bv0","title":"EIC-230329","description":"","createdAt":1683072404,"updatedAt":1683072404,"user":{"id":"c4K0URETkfWbKzELIJEmzd15bje2","customId":"","name":"seohyo","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/c4K0URETkfWbKzELIJEmzd15bje2.jpg","createdAt":1670159287212,"updatedAt":1715483521757},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch8qb0kn70rkl4ca4bv0.png","thumbnailFileUrl":"","resourceFileName":"ch8qb0kn70rkl4ca4bv0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmY8XaTKgCrjBxCsS61bXFJ4Yrj1ydt6DoQcM67NUNreUU","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8qc2sn70rkl4ca4c1g","title":"EIC-230410","description":"","createdAt":1683072539,"updatedAt":1683072539,"user":{"id":"c4K0URETkfWbKzELIJEmzd15bje2","customId":"","name":"seohyo","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/c4K0URETkfWbKzELIJEmzd15bje2.jpg","createdAt":1670159287212,"updatedAt":1715483521757},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch8qc2sn70rkl4ca4c1g.png","thumbnailFileUrl":"","resourceFileName":"ch8qc2sn70rkl4ca4c1g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPZkpEKyMubN4t5HXxsP2gKFbRCzP3iDGWPfyYVVx9PLQ","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8rqpcn70rkl4ca4c80","title":"FuwafuwaBubble","description":"#つぶやきProcessing で作成した作品を CURATION_FREE #2 用に調整。 元ネタ:https://twitter.com/Hau_kun/status/1597223942355550209","createdAt":1683078508,"updatedAt":1683078572,"user":{"id":"kfIYAXYNGFP8IZM5AlL302SQBXo1","customId":"","name":"はぅ君","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kfIYAXYNGFP8IZM5AlL302SQBXo1.png","createdAt":1579099628000,"updatedAt":1735793667172},"codes":[{"id":"ch8rqr4n70rkl4ca4c90","type":0,"text":"\u003cscript src=\"https://cdn.jsdelivr.net/npm/p5@1.1.9/lib/p5.min.js\"\u003e\u003c/script\u003e\r\n","artId":"ch8rqpcn70rkl4ca4c80","libraries":[]},{"id":"ch8rqr4n70rkl4ca4c9g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ch8rqpcn70rkl4ca4c80","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch8rqr4n70rkl4ca4ca0","type":2,"text":"//--------------------------------------------------\r\n// Fuwafuwa Bubble\r\n//\r\n// author: Haukun\r\n// ref: https://twitter.com/Hau_kun/status/1597223942355550209\r\n//--------------------------------------------------\r\n\r\nt=0\r\nfunction setup(){\r\n createCanvas(11012, 1080)\r\n colorMode(HSB)\r\n noStroke()\r\n}\r\n\r\nfunction draw(){\r\n //scale(1) for checking\r\n \r\n t += 0.01\r\n blendMode(BLEND)\r\n background(0,.2)\r\n blendMode(ADD)\r\n for(y=height;y\u003e0;y-=48){\r\n for(x=y/48%2*-36;x\u003cwidth;x+=72){\r\n var N=noise(x/99,y/99,t)\r\n var T=tan(noise(x/2400,y/2160,t/9)*20+t)\r\n fill(N*720%360,70,100,T)\r\n var O = (30 / T)\r\n circle(x+cos(R=N*9)*O,y+sin(R)*O,25/T)\r\n }\r\n }\r\n}","artId":"ch8rqpcn70rkl4ca4c80","libraries":[]}],"like":0,"thumbFileName":"ch8rqpcn70rkl4ca4c80.png","selectedThumbFileName":"ch8rqpcn70rkl4ca4c80.png","thumbnailFileUrl":"","resourceFileName":"ch8rqpcn70rkl4ca4c80.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmWuwT3FnT37WhL1zZKvx6jCvq6T2phss1cNuCQQdcuBfQ","resourceType":1,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch8shhkn70rkl4ca4cgg","title":"Floating with creatures of the deep sea","description":"光も届かない、深い、深い海の底で波に揺られながら深呼吸する。\n生き物の気配が、だいじょうぶだよ、と言う。","createdAt":1683081423,"updatedAt":1683081538,"user":{"id":"IICO7eleq7RVcrsx14LWP1u8NHj2","customId":"IICO7eleq7RVcrsx14LWP1u8NHj2","name":"センバク","biography":"","image":"https://pbs.twimg.com/profile_images/1300538765/kaojapanesegirl_normal.jpg","createdAt":1590824917000,"updatedAt":1726813373382},"codes":[{"id":"ch8shjsn70rkl4ca4chg","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js\"\u003e\u003c/script\u003e","artId":"ch8shhkn70rkl4ca4cgg","libraries":[]},{"id":"ch8shjsn70rkl4ca4ci0","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"ch8shhkn70rkl4ca4cgg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch8shjsn70rkl4ca4cig","type":2,"text":"// 2023-05-03 @senbaku \"Floating with creatures of the deep sea\"\n\nlet t = 0.0;\nlet vel = 1;\nlet seed = [88,32,80,25,60,18,99]\nlet num;\nlet palette_selected1 =\t['#ff4e50', '#fc913a', '#f9d423', '#ede574', '#e1f5c4'];\nlet palette_selected2 =\t['#fe4365', '#fc9d9a', '#f9cdad', '#c8c8a9', '#83af9b'];\n\nfunction setup() {\n\tcreateCanvas(11012, 1080);\n\tpixelDensity(1)\n\tangleMode(DEGREES);\n\tnum = random(seed);\n\tconsole.log(num)\n}\n\nfunction draw() {\n\trandomSeed(num);\n\tbackground(1, 90)\n\tt += vel;\n\tcirclePacking();\n}\n\nfunction circlePacking() {\n\tnoStroke();\n\tfill(51)\n\tpush();\n\tlet points = [];\n\tlet count = 600;\n\tfor (let i = 0; i \u003c count; i++) {\n\t\tlet s = random(15, 200);\n\t\tlet x = random(width * 0.01, width - (width * 0.01));\n\t\tlet y = random(height * 0.01, height - (height * 0.01));\n\t\tlet add = true;\n\t\tfor (let j = 0; j \u003c points.length; j++) {\n\t\t\tlet p = points[j];\n\t\t\tif (dist(x, y, p.x, p.y) \u003c (s + p.z) * 0.6) {\n\t\t\t\tadd = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tif (add) points.push(createVector(x, y, s));\n\t}\n\tfor (let i = 0; i \u003c points.length; i++) {\n\t\tlet p = points[i];\n\t\tpush();\n\t\ttranslate(p.x, p.y);\n\t\tlet r = p.z - 5;\n\t\tpoly(0, 0, r * 0.5)\n\t\tpop();\n\t}\n}\n\nfunction poly(x, y, r) {\n\tpush();\n\ttranslate(x, y)\n\trotate(random(360))\n\tlet nums = int(random(3, 6))\n\tlet dep = random(0.1, 0.5)\n\tlet strokenum = random(0.1, 0.5)\n\tlet ran = int(random(-1, 1))\n\tcol1 = color(random(palette_selected1));\n\tcol2 = color(random(palette_selected2));\n\tlet rand = random();\n\tif (rand \u003e 0.5) {\n\t\tpush();\n\t\tnoFill();\n\t\tstroke(col1)\n\t\tstrokeCap(ROUND)\n\t\tdrawingContext.setLineDash([height * 0.001, height * 0.01]);\n\t\tfor (let j = r * strokenum; j \u003c r; j += r * strokenum) {\n\t\t\tbeginShape();\n\t\t\tfor (let i = 0; i \u003c 360; i += 3) {\n\t\t\t\tstrokeWeight(random(0.5, 2))\n\t\t\t\tlet radius = j + ((r * dep) * sin(i * nums + r * (dep * 10) * sin(i + ((ran * random(100)) + t))));\n\t\t\t\tlet ex = radius * sin(i + cos(t));\n\t\t\t\tlet ey = radius * cos(i + sin(t));\n\t\t\t\tvertex(ex, ey)\n\t\t\t}\n\t\t\tendShape(CLOSE)\n\t\t}\n\t\tpop();\n\t} else if (rand \u003c 0.2) {\n\n\t\tghost(0, 0, r)\n\n\t} else {\n\t\tnoStroke();\n\n\t\tlet gradientFill = drawingContext.createLinearGradient(\n\t\t\t0,\n\t\t\t-r,\n\t\t\t0,\n\t\t\tr\n\t\t);\n\t\tgradientFill.addColorStop(0, color(col1));\n\t\tgradientFill.addColorStop(1, color(col2));\n\t\tdrawingContext.fillStyle = gradientFill;\n\n\t\tbeginShape();\n\t\tfor (let i = 0; i \u003c 360; i += 3) {\n\n\t\t\tlet radius = r + ((r * dep) * sin(i * nums + r * (dep * 10) * sin(i + ((ran * random(100)) + t))));\n\t\t\tlet ex = radius * sin(i + cos(t));\n\t\t\tlet ey = radius * cos(i + sin(t));\n\t\t\tvertex(ex, ey)\n\t\t}\n\t\tendShape(CLOSE)\n\t}\n\n\tpop();\n}\n\nfunction ghost(x, y, w) {\n\tlet hW = w * 0.8;\n\tlet hH = w;\n\tlet ran = int(random(2));\n\tlet susonum = 3\n\tif (ran === 1) {\n\t\tbodycol = color(\"#ffffff\");\n\t} else {\n\t\tbodycol = random(200, 220)\n\t}\n\n\tnoStroke();\n\tpush();\n\n\ttranslate(x, y+((w*0.5)*sin(t)));\n\tpush();\n\t//ghost_body-----\n\tfill(bodycol);\n\tbeginShape();\n\tvertex(hW, 0);\n\tbezierVertex(hW * 1.1, -hH * 1.35, -hW * 1.1, -hH * 1.35, -hW, 0);\n\tvertex(-hW, hH);\n\n\tfor (let i = -hW; i \u003c hW + 1; i += 1) {\n\t\tlet y = hH + (hH / 10) * sin(i * susonum * 360 / (hW * 2)+t*10);\n\t\tvertex(i, y);\n\t}\n\tvertex(hW, 0);\n\tendShape();\n\tpop();\n\t//eye\n\tlet rannum = random(1) \u003e 0.5 ? 1 : 2\n\tif (ran == 1) {\n\n\t\tfill(51);\n\t\tstrokeCap(ROUND)\n\t\t\n\t\t\tellipse(-hW / 2, -hH / 2, hW / 5);\n\t\t\tellipse(hW / 5, -hH / 2, hW / 5);\n\t\t\n\n\t} else {\n\t\tstroke(51);\n\t\tstrokeWeight(hW / 10)\n\t\tnoFill();\n\t\tif (rannum == 1) {\n\t\t\tarc(-hW / 2, -hH / 2, hW / 5, hW / 5, 360, 180);\n\t\t\tarc(hW / 5, -hH / 2, hW / 5, hW / 5, 360, 180);\n\t\t} else {\n\t\t\tarc(hW / 2, -hH / 2, hW / 5, hW / 5, 360, 180);\n\t\t\tarc(-hW / 5, -hH / 2, hW / 5, hW / 5, 360, 180);\n\t\t}\n\t}\n\tpop();\n}","artId":"ch8shhkn70rkl4ca4cgg","libraries":[]}],"like":1,"thumbFileName":"ch8shhkn70rkl4ca4cgg.png","selectedThumbFileName":"ch8shhkn70rkl4ca4cgg.png","thumbnailFileUrl":"","resourceFileName":"ch8shhkn70rkl4ca4cgg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPMkgLog9j8aBrjJefUiVD5RjwwrCNkx3ynddtEj6pDkJ","resourceType":1,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch97c0kn70rkl4ca4g8g","title":"Theater","description":"*Please make sure to turn on the background sound when displaying. Thank you.\n\nThis animated installation piece, titled “Theater”, was hand-drawn on iPad referencing from an Argentine tango performance from the TV show “So You Think You Can Dance”. By projecting the dance onto the wall, I named the piece “Theater”. It is an exploration of the boundary-like space between the real reality and the fake reality, through these media we have created. ","createdAt":1683125777,"updatedAt":1683164108,"user":{"id":"TObRaoiDL6NY8EC7vcNBANEuvO92","customId":"TObRaoiDL6NY8EC7vcNBANEuvO92","name":"QiuChen Fan","biography":"drawing✍️ + painting👩🏻‍🎨🫧 traditional/digital\n\nhttps://bio.site/QiuchenFan","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/TObRaoiDL6NY8EC7vcNBANEuvO92.jpg","createdAt":1670163905247,"updatedAt":1728324112953},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch97c0kn70rkl4ca4g8g.png","thumbnailFileUrl":"","resourceFileName":"ch97c0kn70rkl4ca4g8g.mov","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmP94CxcDkjxkyjsYeBcNtzKoPbZqiXbJE3HcKk8JfRLK6","resourceType":2,"metadataUrl":"","tags":[{"id":"bqb92vc3p9f6qoqnnffg","name":"sound"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch97ctsn70rkl4ca4g9g","title":"EIC-230317","description":"","createdAt":1683125903,"updatedAt":1683125903,"user":{"id":"c4K0URETkfWbKzELIJEmzd15bje2","customId":"","name":"seohyo","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/c4K0URETkfWbKzELIJEmzd15bje2.jpg","createdAt":1670159287212,"updatedAt":1715483521757},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ch97ctsn70rkl4ca4g9g.png","thumbnailFileUrl":"","resourceFileName":"ch97ctsn70rkl4ca4g9g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQB4LvBrTcBLRbh81sQt7HKRrhWWLvReBkug3EZDFNMiL","resourceType":2,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch97sdkn70rkl4ca4ghg","title":"Haru no niji.","description":"","createdAt":1683127865,"updatedAt":1683527749,"user":{"id":"3h25K7SdTpbluWczNDtqKgpQXUr2","customId":"nasana_x","name":"@nasana_x","biography":"#p5js #glsl #shader #generativeart \nhttps://twitter.com/nasana_x","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/3h25K7SdTpbluWczNDtqKgpQXUr2.png","createdAt":1566882322000,"updatedAt":1722754209712},"codes":[{"id":"ch97secn70rkl4ca4gig","type":0,"text":"","artId":"ch97sdkn70rkl4ca4ghg","libraries":[]},{"id":"ch97secn70rkl4ca4gj0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ch97sdkn70rkl4ca4ghg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch97secn70rkl4ca4gjg","type":2,"text":"// *************\n// Haru no niji.\n// by @nasana_x\n// *************\n\nlet num, num_x, num_y;\nlet cell;\nlet bk;\nlet cols = [\"#D9A0AF\", \"#D9CCD3\", \"#C1D6D9\", \"#D9A79C\", \"#F29494\"];\nlet Patterns = [];\n\nfunction setup() {\n createCanvas(windowWidth, windowHeight);\n // createCanvas(11012, 1080);\n //num_= floor(width * 0.01);\n num_x = floor(width * 0.01);\n num_y = floor(height * 0.01);\n bk = color(255);\n background(bk); \n //rectMode(CENTER);\n angleMode(DEGREES);\n \n cell = width / num_x;\n for(let j = 0; j \u003c num_y; j++){\n Patterns[j] = [];\n for(let i = 0; i \u003c num_x; i++){\n let x = i * cell + cell / 2;\n let y = j * cell + cell / 2;\n Patterns[j][i] = new Pattern(x, y);\n } \n }\n}\n\nfunction draw(){\n //background(bk);\n push();\n fill(bk);\n noStroke();\n let bkgrad = \n drawingContext.createLinearGradient(width / 2, 0, width / 2, height * 2);\n bkgrad.addColorStop(0.0, color(255));\n bkgrad.addColorStop(0.2, color(255));\n bkgrad.addColorStop(1.0, color(255, 255, 240));\n drawingContext.fillStyle = bkgrad;\n rect(0, 0, width, height);\n pop();\n\n \n push();\n for(let j = 0; j \u003c num_y; j++){\n for(let i = 0; i \u003c num_x; i++){\n Patterns[j][i].draw();\n } \n }\n pop();\n}\n\nclass Pattern{\n constructor(x, y){\n this.p = createVector(x, y);\n this.ang = int(random(4));\n this.time = 0;\n this.c1 = color(255, 255, 245);\n this.c2 = color(random(cols));\n\n this.noiseVal;\n this.noiseScale = 0.02;\n \n this.rand1 = random();\n this.rand2 = random();\n this.rand3 = random();\n this.rand4 = random();\n this.rand5 = random();\n this.rand6 = random();\n }\n draw(){\n push();\n translate(this.p.x, this.p.y);\n rotate(this.ang * 90);\n this.time += num_x * 0.05;\n \n noiseDetail(5, 0.5);\n this.noiseVal = noise(this.p.x * this.noiseScale, this.p.y * this.noiseScale);\n let alpha_value = abs(5 + cos(this.time * this.noiseVal) * 250);\n this.c1.setAlpha(alpha_value);\n this.c2.setAlpha(alpha_value);\n \n\n let gradient = \n drawingContext.createLinearGradient(-cell / 2, -cell / 2, cell / 2, cell / 2);\n gradient.addColorStop(0.0, this.c1);\n gradient.addColorStop(1.0, this.c2);\n drawingContext.fillStyle = gradient;\n drawingContext.strokeStyle = gradient;\n\n let weight = int(cell / 4);\n strokeWeight(weight);\n strokeCap(SQUARE);\n \n if(this.rand1 \u003c 0.4){\n push();\n noStroke();\n arc(-cell / 2, -cell / 2, cell + weight, cell + weight, 0, 90);\n //arc(-cell / 2, 0, weight, weight, -90, 90);\n //arc(0, -cell / 2, weight, weight, 0, 180);\n \n stroke(bk);\n strokeWeight(weight * 0.8);\n this.rand2 \u003c 0.5 ? point(-cell / 3, -cell / 3) : point();\n pop();\n }\n else{\n push();\n noFill();\n arc(-cell / 2, -cell / 2, cell, cell, 0, 90);\n pop();\n\n push();\n strokeWeight(weight * 0.8);\n this.rand3 \u003c 0.5 ? point(-cell / 3, -cell / 3) : point();\n pop();\n }\n\n if(this.rand4 \u003c 0.4){\n push();\n noStroke();\n arc(cell / 2, cell / 2, cell + weight, cell + weight, -180, -90);\n //arc(cell / 2, 0, weight, weight, 90, -90);\n //arc(0, cell / 2, weight, weight, -180, 0);\n \n stroke(bk);\n strokeWeight(weight * 0.8);\n this.rand5 \u003c 0.5 ? point(cell / 3, cell / 3) : point();\n pop();\n }\n else{\n noFill();\n arc(cell / 2, cell / 2, cell, cell , -180, -90);\n\n push();\n stroke(bk);\n strokeWeight(weight * 0.8);\n this.rand6 \u003c 0.5 ? point(cell / 3, cell / 3) : point();\n pop();\n }\n pop();\n }\n}","artId":"ch97sdkn70rkl4ca4ghg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":1,"thumbFileName":"ch97sdkn70rkl4ca4ghg.png","selectedThumbFileName":"ch97sdkn70rkl4ca4ghg.png","thumbnailFileUrl":"","resourceFileName":"ch97sdkn70rkl4ca4ghg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmcSeYemtLykXy9X4pmQnAPzZUCMSAvYLDkcZ63DTV7JDS","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9dlncn70rkl4ca4htg","title":"JUICY SQUISH SOUR SNAKE","description":"🐍🐍🐍🐍🐍🐍🐍🐍🐍🐍","createdAt":1683151630,"updatedAt":1683152585,"user":{"id":"2fTdvrX0xghxjbMkLMsUAQZWtjT2","customId":"mattkeff","name":"MATT KEFF","biography":"mattkeff.art","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/2fTdvrX0xghxjbMkLMsUAQZWtjT2.jpg","createdAt":1683140656007,"updatedAt":1683208863740},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch9dlncn70rkl4ca4htg.jpg","thumbnailFileUrl":"","resourceFileName":"ch9dlncn70rkl4ca4htg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYr7dhLro7VwT1XECfPTHv5EqCbM27zoXhVAC2DC21WfT","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"ce3lvncn70rlpj69ccd0","name":"UnrealEngine5"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"},{"id":"ch9dm3kn70rkl4ca4hug","name":"videogame"},{"id":"ch9dm3kn70rkl4ca4hv0","name":"neon"},{"id":"ch9dm3kn70rkl4ca4hvg","name":"squish"},{"id":"ch9doq4n70rkl4ca4i30","name":"DAY 1"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9dpm4n70rkl4ca4i3g","title":"Triangles","description":"Several of my recent pieces play with triangles. Here I share three of them arranged to play distinctly on the four walls of the room.\n\nThe leaves on the main wall are made from \"constant width curves\" that perfectly trace the insides of an equilateral triangle; the three triangles bounce against each other using an extremely simple algorithm that I find strangely hypnotic.\n\nBoth side walls show a recdent piece, \"Impossible\". The nested triangles in the foreground seem 3D but are entirely 2D; they do not actually rotate, just scale back and forth. The background is an Isometric drawing of an \"impossible\" Penrose triangle.\n\nThe back wall shows three Reuleaux triangles tracing out rounded squares. A fixed point near the center naturally traces a four leaf clover which is, in a sense, the inverse of the square.\n\nThe combined piece, 360 frames at 1080p for all four walls, comes in at under 18 megs. All my animations are done using Nodebox, a visual language which codes with wires (nodes and links) instead of text.\n","createdAt":1683152124,"updatedAt":1683153956,"user":{"id":"tOro7liMnhTlhVtxaPZq1AcsP3r2","customId":"tOro7liMnhTlhVtxaPZq1AcsP3r2","name":"John Cartan","biography":"I'm a writer, designer and generative artist who specializes in short, seamless animations. Long career in tech, always coding for beauty.\n\nFull biography: http://www.cartania.com/design.html","image":"","createdAt":1670823558411,"updatedAt":1714107285334},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch9dpm4n70rkl4ca4i3g.png","thumbnailFileUrl":"","resourceFileName":"ch9dpm4n70rkl4ca4i3g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmS3kRBZtteuA6DE77DKvPg4b8XsdqJUX6FsmxngFnvTC1","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9hqv4n70rkl4ca4jlg","title":"Chain Reaction","description":"Seven circles expand. At the points they overlap, new circles are born. As those expand even more circles are born.\n\nChain Reaction seeks to capture the energy of an explosion. This special edition is formatted to fill the NEORT projection room so that viewers can experience what it's like to be inside an explosion.\n\nAll my animations are made using Nodebox, a visual language which codes with wires (nodes and links) instead of text.","createdAt":1683168683,"updatedAt":1683168683,"user":{"id":"tOro7liMnhTlhVtxaPZq1AcsP3r2","customId":"tOro7liMnhTlhVtxaPZq1AcsP3r2","name":"John Cartan","biography":"I'm a writer, designer and generative artist who specializes in short, seamless animations. Long career in tech, always coding for beauty.\n\nFull biography: http://www.cartania.com/design.html","image":"","createdAt":1670823558411,"updatedAt":1714107285334},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch9hqv4n70rkl4ca4jlg.jpg","thumbnailFileUrl":"","resourceFileName":"ch9hqv4n70rkl4ca4jlg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmbFyS25kSpn9aoVHSBXZ2vjZkuGcn1Swuuxv2AzpRx8hV","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9jqf4n70rkl4ca4jp0","title":"Natsu no yoi.","description":"","createdAt":1683176765,"updatedAt":1683178315,"user":{"id":"3h25K7SdTpbluWczNDtqKgpQXUr2","customId":"nasana_x","name":"@nasana_x","biography":"#p5js #glsl #shader #generativeart \nhttps://twitter.com/nasana_x","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/3h25K7SdTpbluWczNDtqKgpQXUr2.png","createdAt":1566882322000,"updatedAt":1722754209712},"codes":[{"id":"ch9jqfcn70rkl4ca4jq0","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"ch9jqf4n70rkl4ca4jp0","libraries":[]},{"id":"ch9jqfcn70rkl4ca4jqg","type":4,"text":"// *************\n// Natsu no yoi.\n// by @nasana_x\n// *************\n\nprecision highp float;\n\nvarying vec2 vertTexCoord;\nuniform vec2 resolution;\nuniform float time;\nuniform sampler2D backbuffer;\n\nvoid main() {\n vec2 uv = (2.0 * gl_FragCoord.xy - resolution) / min(resolution.x, resolution.y);\n \n for(float i = 1.0; i \u003c 8.0; i++){\n uv.y += i *(0.02 + abs(cos(time * 0.2)) * 0.08) / i * \n cos(uv.x * i * i + time) *\n cos(uv.y * i * i + time);\n\n }\n \n vec3 col;\n col.r = uv.y - 0.1;\n col.g = uv.y + abs(cos(time * 0.1 + uv.x * 0.1) * 0.6);\n col.b = uv.y + 0.75;\n\n gl_FragColor = vec4(col, 1.0);\n}\n","artId":"ch9jqf4n70rkl4ca4jp0","libraries":[]}],"like":5,"thumbFileName":"ch9jqf4n70rkl4ca4jp0.png","selectedThumbFileName":"ch9jqf4n70rkl4ca4jp0.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmRbe6Z6K8Pz2GG1EndR8HbjBDYfDra3T2e52wPJKN8DQW","resourceFileName":"ch9jqf4n70rkl4ca4jp0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmeM95gJ3fsGJXuPEX7zjN1CRgy37TVCWixe6qABhnuM15","resourceType":3,"metadataUrl":"","tags":[{"id":"bmj9c1c3p9fdr6916krg","name":"GLSL"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9m3qcn70rkl4ca4khg","title":"Untitled","description":"","createdAt":1683186156,"updatedAt":1683186156,"user":{"id":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","customId":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","name":"Chayapon (Tae)","biography":"Twitter(X) : https://x.com/tayxt50","image":"","createdAt":1669660770663,"updatedAt":1733322529959},"codes":[{"id":"ch9m3r4n70rkl4ca4kig","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js\"\u003e\u003c/script\u003e","artId":"ch9m3qcn70rkl4ca4khg","libraries":[]},{"id":"ch9m3r4n70rkl4ca4kj0","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"ch9m3qcn70rkl4ca4khg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ch9m3r4n70rkl4ca4kjg","type":2,"text":"let gd = 45;\nlet margin = 5;\nlet sym;\nlet c;\n\nfunction setup() {\n createCanvas(11012, 1080);\n colorMode(HSB);\n frameRate(60);\n\n textFont(\"Courier\");\n}\n\nfunction draw() {\n let num_tilesX = floor(width / gd);\n let num_tilesY = floor(height / gd);\n let myCanvas_w = width - 2 * margin;\n let myCanvas_h = height - 2 * margin;\n let scl_w = myCanvas_w / num_tilesX;\n let scl_h = myCanvas_h / num_tilesY;\n\n let c1 = color(356, 76, 94);\n let c2 = color(185, 79, 94);\n\n background(0);\n\n for (let j = 0; j \u003c num_tilesY; j++) {\n for (let i = 0; i \u003c num_tilesX; i++) {\n let posX = margin + i * scl_w + scl_w / 2;\n let posY = margin + j * scl_h + scl_h / 2;\n if (sin(0.025 * frameCount) \u003e 0) {\n sym = \"◆ \";\n c = -(i % 4) + (j % 6) + i;\n } else {\n sym = \" ◆\";\n c = -(i % 4) - (j % 6) + i;\n }\n\n let fx = sin(frameCount + c);\n\n let seed = map(fx, -1, 1, 0, sym.length);\n let k = map(seed, 0, sym.length, 0, 1);\n \n fill(lerpColor(c1,c2,k));\n textAlign(CENTER, CENTER);\n textSize(0.8 * scl_h);\n text(sym.charAt(seed), posX, posY);\n }\n }\n}","artId":"ch9m3qcn70rkl4ca4khg","libraries":[]}],"like":0,"thumbFileName":"ch9m3qcn70rkl4ca4khg.png","selectedThumbFileName":"ch9m3qcn70rkl4ca4khg.png","thumbnailFileUrl":"","resourceFileName":"ch9m3qcn70rkl4ca4khg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmU9RbR8nJ1VbfQDYQJmetx2Zm5KoqVsCncDJpSekSrxQh","resourceType":1,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9of3kn70rkl4ca4ms0","title":"Cube Tunnel","description":"SESSIONS 2023のShader Jamにおいて1時間でライブコーディングした作品に少しアレンジを加えました。\nCubeというシンプルな形状のみで構成されたTunnelです。\n\nhttps://twitter.com/gam0022/status/1652251487836446720","createdAt":1683195790,"updatedAt":1683299170,"user":{"id":"NVlqnemVzqUgPSBOOPTPkVUSXQZ2","customId":"","name":"がむ","biography":"","image":"https://pbs.twimg.com/profile_images/1024640222246535168/D0JhkuoJ_normal.jpg","createdAt":1550901834000,"updatedAt":1712851363371},"codes":[{"id":"ch9of3kn70rkl4ca4mt0","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"ch9of3kn70rkl4ca4ms0","libraries":[]},{"id":"ch9of3kn70rkl4ca4mtg","type":4,"text":"// BEGIN: shadertoy porting template\n// https://gam0022.net/blog/2019/03/04/porting-from-shadertoy-to-glslsandbox/\nprecision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n#define iResolution resolution\n#define iTime time\n#define iMouse (vec4(mouse, 0.5, 0.5) * resolution.xyxy)\n#define iChannel0 backbuffer\n#define texture texture2D\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord);\n\nvoid main(void) {\n vec4 col;\n mainImage(col, gl_FragCoord.xy);\n gl_FragColor = col;\n}\n// END: shadertoy porting template\n\n// Fork of \"Cube Tunnel Variation \" by gam0022. https://shadertoy.com/view/dlc3Rs\n// 2023-05-01 09:23:36\n\nfloat beat, beatTau;\nvec3 target;\n\n#define time iTime\n#define PI acos(-1.)\n#define TAU (PI * 2.)\n#define saturate(x) clamp(x, 0., 1.)\n#define SOL 0.\n#define VOL 1.\n\nfloat phase(float x) { return floor(x) + 0.5 + 0.5 * cos(TAU * 0.5 * exp(-5.0 * fract(x))); }\n\nvoid rot(inout vec2 p, float t) { p = mat2(cos(t), sin(t), -sin(t), cos(t)) * p; }\n\nvec3 pal(float x) { return mix(saturate(sin((vec3(0.333, 0.6666, 0) + x) * TAU)), vec3(1), 0.1); }\n\nfloat sdBox(vec3 p, vec3 b) {\n vec3 q = abs(p) - b;\n return length(max(q, 0.)) + min(0., max(q.x, max(q.y, q.z)));\n}\n\nvoid U(inout vec4 m, float d, float a, float b, float c) { m = d \u003c m.x ? vec4(d, a, b, c) : m; }\n\n\n\nvec4 map(vec3 p) {\n vec3 pos = p;\n // rot(p.xy, 0.2 * pos.z);\n vec4 m = vec4(1, VOL, 0, 0);\n vec3 a = vec3(14, 12, 12);\n p = mod(p, a) - 0.5 * a;\n vec3 of = vec3(3, 1, 1);\n vec3 ro = vec3(0.8 + 0.05 * sin(phase(time) * 0.2 * TAU), 0.4, 0.4);\n p -= of;\n for (int i = 0; i \u003c 5; i++) {\n p = abs(p + of) - of;\n rot(p.zy, TAU * ro.x);\n rot(p.xz, TAU * ro.y);\n rot(p.yx, TAU * ro.z);\n }\n\n U(m, sdBox(p, vec3(1, 1, 1)), SOL, 0.5, 1.);\n float hue = 0.3;\n float emi = saturate(cos(TAU * (pos.z / 8. + time)));\n U(m, sdBox(p, vec3(0.1, 1.1, 1.1)), VOL, hue, emi);\n U(m, sdBox(p, vec3(1.1, 1.1, 0.1)), VOL, hue + 0.5, emi);\n\n vec3 p2 = pos - target;\n of = vec3(0.3, 0.1, 0.1);\n ro = vec3(0.3 + 0.1 * sin(phase(time) * 0.2 * TAU), 0.5, 0.4 + 0.05 * sin(phase(time)));\n p2 -= of;\n for (int i = 0; i \u003c 3; i++) {\n p2 = abs(p2 + of) - of;\n rot(p2.zy, TAU * ro.x);\n rot(p2.xz, TAU * ro.y);\n rot(p2.yx, TAU * ro.z);\n }\n\n // U(m, length(p2 - target) - 1, VOL, 0.3, 1);\n emi = 1.;\n float s = 0.2;\n U(m, sdBox(p2, s * vec3(1)), SOL, 0.5, 1.);\n U(m, sdBox(p2, s * vec3(0.1, 1.1, 1.1)), VOL, 0.3 + beat / 8., emi);\n U(m, sdBox(p2, s * vec3(1.1, 1.1, 0.1)), VOL, 0.8 + beat / 8., emi);\n\n return m;\n}\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord) {\n vec2 uv = vec2(fragCoord.x / iResolution.x, fragCoord.y / iResolution.y);\n uv -= 0.5;\n uv /= vec2(iResolution.y / iResolution.x, 1);\n\n float bpm = 120.;\n beat = time * bpm / 60.;\n beatTau = TAU * beat;\n target = vec3(0, 0, time * 10.);\n\n vec3 col = vec3(0);\n vec3 ro, ray;\n\n if (mod(beat, 32.) \u003c 4.) {\n ro = vec3(0, 0, time * 10. - 5.);\n ray = vec3(uv, 1);\n // rot(ray.xy, time);\n } else {\n ro = target + vec3(5. * cos(beatTau / 32.), 2. * sin(beatTau / 16.), 5. * sin(beatTau / 32.));\n vec3 up = vec3(0, 1, 0);\n vec3 fwd = normalize(target - ro);\n vec3 right = normalize(cross(up, fwd));\n up = normalize(cross(fwd, right));\n ray = normalize(right * uv.x + up * uv.y + fwd);\n }\n\n float t = 0.;\n for (int i = 0; i \u003c 300; i++) {\n vec3 p = ro + t * ray;\n vec4 m = map(p);\n float d = m.x;\n if (m.y == SOL) {\n if (d \u003c 0.001) {\n col += vec3(1) * float(i) * 0.01;\n break;\n }\n t += 0.5 * d;\n } else {\n col += clamp(pal(m.z) * m.w * 0.01 / abs(d), 0.0, 0.3);\n t += 0.25 * abs(d) + 0.01;\n }\n }\n\n col = mix(vec3(0), col, exp(-0.1 * t));\n\n col = saturate(col);\n\n fragColor = vec4(col, 1);\n}","artId":"ch9of3kn70rkl4ca4ms0","libraries":[]}],"like":0,"thumbFileName":"ch9of3kn70rkl4ca4ms0.png","selectedThumbFileName":"ch9of3kn70rkl4ca4ms0.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmcbQ1xB1vC7LeTVHyKKSHfL8hVmBtoFBu5JL1Z6cddPh6","resourceFileName":"ch9of3kn70rkl4ca4ms0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmU2WNPAYzmPPL6c8Vp7s7P2URHN3HX1sbHU1LNU7TAZnc","resourceType":3,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ch9sc6sn70rkl4ca4otg","title":"like sunlight filtering through trees","description":"like sunlight filtering through trees","createdAt":1683211831,"updatedAt":1683211831,"user":{"id":"DDRLhxiTOCfuMQsHmS8LuXJAUDk2","customId":"ajiaji09","name":"aji","biography":"love creative coding, art, illusration, technology...\n\nTwitter : https://twitter.com/ajiaji_09","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/DDRLhxiTOCfuMQsHmS8LuXJAUDk2.jpg","createdAt":1683187072259,"updatedAt":1683463679097},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ch9sc6sn70rkl4ca4otg.png","thumbnailFileUrl":"","resourceFileName":"ch9sc6sn70rkl4ca4otg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQSsoq9mnk7kGnYs8DgDX6V8F2fjQRgFeeS7mK7zvXMbs","resourceType":2,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chactasn70rkl4ca5050","title":"000-638858","description":"","createdAt":1683279539,"updatedAt":1683279539,"user":{"id":"ciLxURq6h1RmSqhPbAlxPvTjx4H3","customId":"jsf","name":"Julio Smitter","biography":"JSF twitter.com/thejaysf","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ciLxURq6h1RmSqhPbAlxPvTjx4H3.png","createdAt":1574404743000,"updatedAt":1734444596488},"codes":[{"id":"chactcsn70rkl4ca5060","type":0,"text":"","artId":"chactasn70rkl4ca5050","libraries":[]},{"id":"chactcsn70rkl4ca506g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"chactasn70rkl4ca5050","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chactcsn70rkl4ca5070","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n rectMode(CENTER);\n colorMode(HSB, 360, 255, 255);\n angleMode(DEGREES);\n noCursor();\n}\n\nfunction draw() {\n background(0);\n randomSeed(638858);\n noFill(0);\n\n for (let i = 0; i \u003c 40; i++) {\n push();\n forma();\n pop();\n }\n}\n\nfunction forma() {\n let s1 = 888;\n let s2 = 400;\n stroke(random(360), 255, 255);\n translate(random(0, width), random(0, height));\n rotate(random(-180, 180));\n rotate(random(-millis() / 200, millis() / 200));\n scale(2);\n\n for (let i = 0; i \u003c 20; i++) {\n strokeWeight(i / 3);\n rect(0, 0, s1 * 1.1, s2 * 1.1, 5000);\n s1 = s1 - 21;\n s2 = s2 - 21;\n }\n}","artId":"chactasn70rkl4ca5050","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"chactasn70rkl4ca5050.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"chactasn70rkl4ca5050.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmezQKZFxzxm2ti2jU4grx8LcEZ23gk8mqByHMXS2maXU1","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ce683hcn70rh3gntrpqg","name":"JSF"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chada9kn70rkl4ca50fg","title":"Early Summer Wind","description":"#CURATION_FREE_2 たのしみですね!","createdAt":1683281197,"updatedAt":1683281272,"user":{"id":"EDAeR4N1gzNvQX1xAKDAHgFopeG3","customId":"EDAeR4N1gzNvQX1xAKDAHgFopeG3","name":"reona396 / レオナ","biography":"Processingとp5.jsが大好き!\nhttps://reona396.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/EDAeR4N1gzNvQX1xAKDAHgFopeG3.png","createdAt":1551929258000,"updatedAt":1735658766923},"codes":[{"id":"chadabcn70rkl4ca50gg","type":0,"text":"","artId":"chada9kn70rkl4ca50fg","libraries":[]},{"id":"chadabcn70rkl4ca50h0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"chada9kn70rkl4ca50fg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chadabcn70rkl4ca50hg","type":2,"text":"let rings = [];\nlet ringsNum = 19;\nlet R;\nconst palette = [\n \"#F501D0\",\n \"#F6AD02\",\n \"#91F608\",\n \"#00F6BC\",\n \"#0480F1\",\n \"#B230F3\",\n];\n\nlet count = -180;\n\nfunction setup() {\n createCanvas(windowWidth, windowHeight, WEBGL);\n angleMode(DEGREES);\n noStroke();\n\n R = min(width, height) * 0.3;\n\n for (let i = 0; i \u003c ringsNum; i++) {\n rings.push(new Ring(i));\n }\n\n background(\"#000\");\n}\n\nfunction draw() {\n translate((width / 2 + R) * sin(count * 0.15), 0);\n\n rotateY(sin(count * 0.6) * 10);\n rotateX(count * 0.7);\n rotateZ(sin(count * 0.8) * 10);\n\n for (let i = 0; i \u003c rings.length; i++) {\n push();\n rotateY((i * 360) / rings.length);\n rings[i].move();\n rings[i].display();\n pop();\n }\n\n count += 3;\n}\n\nclass Ring {\n constructor(tmpIndex) {\n this.index = tmpIndex;\n this.shapes = [];\n this.shapesNum = 20;\n\n for (let i = 0; i \u003c this.shapesNum; i++) {\n this.shapes.push(new Shape(this.index, i, this.shapesNum));\n }\n }\n\n move() {}\n\n display() {\n for (let i = 0; i \u003c this.shapes.length; i++) {\n this.shapes[i].move();\n this.shapes[i].display();\n }\n }\n}\n\nclass Shape {\n constructor(tmpRingIndex, tmpIndex, tmpNum) {\n this.ringIndex = tmpRingIndex;\n this.num = tmpNum;\n this.index = tmpIndex;\n this.t = (this.index * 360) / this.num;\n this.x = R * cos(this.t);\n this.y = R * sin(this.t);\n this.c = color(palette[(this.ringIndex + this.index) % palette.length]);\n this.s = 0;\n }\n\n move() {\n this.s = map(sin(this.ringIndex * 13 + frameCount), -1, 1, 0, R * 0.9);\n }\n\n display() {\n fill(\n lerpColor(\n this.c,\n color(0),\n abs(sin(frameCount * 3 + this.index * 137 + this.ringIndex * 177))\n )\n );\n push();\n translate(\n this.x * sin(frameCount * 0.5),\n this.y * cos(frameCount * 0.55 + 13)\n );\n rotateY(90 + frameCount * 2.1 + this.index * 17);\n rotateX(frameCount * 2 + this.index * 13);\n rotateZ(frameCount * 2.5 + this.index * 11);\n plane(10, this.s);\n pop();\n }\n}\n","artId":"chada9kn70rkl4ca50fg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"chada9kn70rkl4ca50fg.png","selectedThumbFileName":"chada9kn70rkl4ca50fg.png","thumbnailFileUrl":"","resourceFileName":"chada9kn70rkl4ca50fg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmdnjuX3BRBvVk3ZTrdPHXU7K26ZkUinT8Caf8uDntHrJS","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chadekcn70rkl4ca51c0","title":"001-82750","description":"","createdAt":1683281752,"updatedAt":1683281752,"user":{"id":"ciLxURq6h1RmSqhPbAlxPvTjx4H3","customId":"jsf","name":"Julio Smitter","biography":"JSF twitter.com/thejaysf","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ciLxURq6h1RmSqhPbAlxPvTjx4H3.png","createdAt":1574404743000,"updatedAt":1734444596488},"codes":[{"id":"chadem4n70rkl4ca51d0","type":0,"text":"","artId":"chadekcn70rkl4ca51c0","libraries":[]},{"id":"chadem4n70rkl4ca51dg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"chadekcn70rkl4ca51c0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chadem4n70rkl4ca51e0","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n rectMode(CENTER);\n colorMode(HSB, 360, 255, 255);\n angleMode(DEGREES);\n noCursor();\n}\n\nfunction draw() {\n background('#29004F');\n randomSeed(82750);\n noFill(0);\n\n for (let i = 0; i \u003c 40; i++) {\n push();\n forma();\n pop();\n }\n}\n\nfunction forma() {\n let s1 = 888;\n let s2 = 400;\n stroke(random(50), 255, 255);\n translate(random(0, width), random(0, height));\n rotate(random(-180, 180));\n rotate(random(-millis() / 200, millis() / 200));\n scale(2);\n\n for (let i = 0; i \u003c 20; i++) {\n strokeWeight(i / 3);\n rect(0, 0, s1 * 1.1, s2 * 1.1, 5000);\n s1 = s1 - 21;\n s2 = s2 - 21;\n }\n}","artId":"chadekcn70rkl4ca51c0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":0,"thumbFileName":"chadekcn70rkl4ca51c0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"chadekcn70rkl4ca51c0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQWbxV3ar83pvzX5t8n86NsJj1QhYHGZgzkosfkqPGagt","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ce683hcn70rh3gntrpqg","name":"JSF"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chae1pcn70rkl4ca5250","title":"Cage","description":"","createdAt":1683284197,"updatedAt":1683286339,"user":{"id":"Mc4s0WQtm6ScRdqg5P9d9CMltOt1","customId":"","name":"gaz","biography":"","image":"https://pbs.twimg.com/profile_images/711553957064118272/2tS0uPDj_normal.jpg","createdAt":1550907159000,"updatedAt":1686718855899},"codes":[{"id":"chae1pcn70rkl4ca5260","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"chae1pcn70rkl4ca5250","libraries":[]},{"id":"chae1pcn70rkl4ca526g","type":4,"text":"precision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n#define T time\n#define hash(n)fract(sin((n)*vec3(9,7,6))*5e3)\n#define H(h)(cos((h)*6.3+vec3(0,21,23))*.5+.5)\n#define E(a)vec3(cos(a.y)*cos(a.x),sin(a.y),cos(a.y)*sin(a.x))\n\nvec3 Q(float t,float a,float b)\n{\n\tfloat i=floor(t);\n\treturn mix(hash(i),hash(i+1.),smoothstep(a,b,fract(t)));\n}\n\nvec3 R(vec3 p,vec3 a,float t)\n{\n \ta=normalize(a);\n \treturn mix(a*dot(p,a),p,cos(t))+sin(t)*cross(p,a);\n}\n\nvec2 M(vec2 p, float n)\n{\n \tfloat a=asin(sin(atan(p.y,p.x)*n))/n;\n \treturn vec2(cos(a),sin(a))*length(p);\n}\n\nvec3 trap;\nfloat map(vec3 p)\n{\n\tp=asin(sin(p/2.5)*.997)*2.5;\n\tp=R(p,vec3(1),T*.5);\n\tp+=cross(sin(p*.3),cos(p*.4));\n\tp.xy=M(p.xy,10.);\n\tp.x-=1.;\n\tp.zx=M(p.zx,5.);\n\tp.z-=1.3;\n\tp.z=asin(sin(p.z));\n\ttrap=p;\n\tvec3 q=p;\n\tp-=clamp(p,-.15,.15);\n\tfloat de=1.;\n\tde=min(de,length(vec2(length(p.zy)-.3,p.x))-.05);\n\tde=min(de,length(cross(p,normalize(H(.9))))-.03);\n\tde=min(de,length(q.xy)-.05);\n\treturn abs(de)+.003;\n}\n\nmat3 lookat()\n{\n \tvec3 w=E(3.*Q(T*.3,.1,.3));\n \tvec3 u=cross(w,vec3(0,1,0));\n \treturn mat3(u,cross(u,w),w);\n}\n\nvec3 eye()\n{\n \treturn Q(T*.3,.7,.9)+vec3(0,0,T);\n}\n\nvoid main(void) {\n vec2 uv = (gl_FragCoord.xy * 2.0 - resolution.xy) / min(resolution.x, resolution.y);\n\tvec3 O=vec3(0);\n vec3 rd=lookat()*normalize(vec3(uv,.5));\n \tfloat g=.5,e;\n \tfor(float i=0.;i\u003c100.;i++)\n \t{\n \tvec3 p=rd*g+eye();\n \tg+=e=map(p)*.8;\n \tO+=mix(vec3(1),H(trap.z*.3+T*.5),.3)*.1/exp(i*i*e);\n \t}\n gl_FragColor = vec4(O*O,1);\n}","artId":"chae1pcn70rkl4ca5250","libraries":[]}],"like":0,"thumbFileName":"chae1pcn70rkl4ca5250.png","selectedThumbFileName":"chae1pcn70rkl4ca5250.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmUv2DzcbxKs3cXXSqWHqnbGbihrexJhP9zTPXcc3EFQut","resourceFileName":"chae1pcn70rkl4ca5250.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmdk4thdYorMMSUzGmU4Ckbbrku4NShfA8cm4Epm4fhFmH","resourceType":3,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chadsbkn70rkl4ca5210","title":"まわる","description":"","createdAt":1683284499,"updatedAt":1683284573,"user":{"id":"Gt8eI4ixzzfU5PAG1jp6vX7qJNx2","customId":"Gt8eI4ixzzfU5PAG1jp6vX7qJNx2","name":"Hiroki Oka","biography":"making something weird.\nhttps://hirokioka.github.io/\ntwitter-\u003ehttps://twitter.com/unacceptablee2","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/Gt8eI4ixzzfU5PAG1jp6vX7qJNx2.png","createdAt":1573875829000,"updatedAt":1733113534604},"codes":[{"id":"chadsdcn70rkl4ca5220","type":0,"text":"","artId":"chadsbkn70rkl4ca5210","libraries":[]},{"id":"chadsdcn70rkl4ca522g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"chadsbkn70rkl4ca5210","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"chadsdcn70rkl4ca5230","type":2,"text":"\nfunction setup() {\n createCanvas(windowWidth, windowHeight);\n strokeWeight(32);\n}\n\nfunction draw() {\n const ff = frameCount * 0.008;\n background(100, 0, 200, 2);\n for (let r = 12; r \u003c height/4; r+=6) {\n randomSeed(r, ff);\n for (let t = 0; t \u003c= 720; t+=2) {\n const rt = radians(t);\n const x = ((r + (r * noise(ff, -rt))) * sin(rt+ff)) + width/2;\n const y = ((r + (r * noise(ff, -rt))) * cos(rt+ff)) + height/2;\n const colR = (x + (noise(rt, ff))) * sin(rt, ff);\n const colB = (y +(noise(ff, -rt))) * cos(ff, rt);\n const colG = 10;\n const alph = 4;\n stroke(colR, colG, colB, alph);\n point(x, y);\n }\n }\n}\n\nfunction windowResized() {\n resizeCanvas(windowWidth, windowHeight);\n}","artId":"chadsbkn70rkl4ca5210","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.6.0/p5.min.js"]}],"like":1,"thumbFileName":"chadsbkn70rkl4ca5210.png","selectedThumbFileName":"chadsbkn70rkl4ca5210.png","thumbnailFileUrl":"","resourceFileName":"chadsbkn70rkl4ca5210.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZbjCWL1eWBpi4XPobn1CxQo5MkEiLVCqiYEgn2DgtX19","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ca69t1s3p9fbkmo5rdn0","title":"|||Ξ","description":"","createdAt":1683297383,"updatedAt":1683297383,"user":{"id":"9Bqy2IWae5gAXfMSM4cHStP2dxP2","customId":"r21nomi","name":"NIINOMI","biography":"Creative Coder.\nI mainly use GLSL, WebGL.\nRecently, TouchDesigner, Houdini and Unity.\n\nhttps://niinomi.art","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/9Bqy2IWae5gAXfMSM4cHStP2dxP2.jpg","createdAt":1548912457000,"updatedAt":1735357681608},"codes":[{"id":"ca69t443p9fbkmo5rdo0","type":0,"text":"\u003cbutton id=\"generateImageButton\"\u003eGenerate Image\u003c/button\u003e","artId":"ca69t1s3p9fbkmo5rdn0","libraries":[]},{"id":"ca69t443p9fbkmo5rdog","type":1,"text":"body {\n margin: 0;\n overflow: hidden;\n}\ncanvas {\n width: 100px;\n height: 100px;\n}\nbutton {\n display: none;\n position: absolute;\n top: 0;\n left: 0;\n padding: 10px;\n}","artId":"ca69t1s3p9fbkmo5rdn0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ca69t443p9fbkmo5rdp0","type":2,"text":"!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){\"undefined\"!=typeof Symbol\u0026\u0026Symbol.toStringTag\u0026\u0026Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1\u0026e\u0026\u0026(t=n(t)),8\u0026e)return t;if(4\u0026e\u0026\u0026\"object\"==typeof t\u0026\u0026t\u0026\u0026t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:t}),2\u0026e\u0026\u0026\"string\"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t\u0026\u0026t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=2)}([function(t,e){t.exports=\"precision mediump float;\\n\\nconst float PI = 3.1415926535897932384626433832795;\\n\\nattribute float index;\\nattribute vec3 position;\\nattribute vec2 uv;\\nattribute vec2 size;\\nattribute vec2 offset;\\nattribute vec2 padding;\\nattribute vec3 color;\\nattribute float direction;\\nattribute float ratio;\\n\\nuniform mat4 modelViewMatrix;\\nuniform mat4 projectionMatrix;\\nuniform float time;\\nuniform float uWidth;\\nuniform float uHeight;\\nuniform float duration;\\n\\nvarying float vIndex;\\nvarying vec2 vUv;\\nvarying vec3 vColor;\\nvarying vec2 vResolution;\\nvarying float vDirection;\\nvarying float vRatio;\\n\\nmat2 rotate(float radien) {\\n return mat2(\\n sin(radien), -cos(radien),\\n cos(radien), sin(radien)\\n );\\n}\\n\\nfloat y(float x) {\\n float contrast = 16.0; //4.0,8.0,16.0\\n return 1.0 / (1.0 + exp(-contrast * (x - 0.5)));\\n}\\n\\nvoid main() {\\n vIndex = index;\\n vUv = uv;\\n vColor = color;\\n // Actual resolution of rect by vertex with padding.\\n vResolution = vec2(size.x * padding.x, size.y * padding.y);\\n vDirection = direction;\\n vRatio = ratio;\\n\\n float t = time / duration;\\n\\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\\n mvPosition.xy += offset * vResolution;\\n\\n gl_Position = projectionMatrix * mvPosition;\\n}\"},function(t,e){t.exports=\"precision mediump float;\\n\\nconst float PI = 3.1415926535897932384626433832795;\\n\\nuniform vec2 resolution;\\nuniform float time;\\n\\nvarying float vIndex;\\nvarying vec2 vUv;\\nvarying vec3 vColor;\\nvarying vec2 vResolution;\\nvarying float vDirection;\\nvarying float vRatio;\\n\\n// https://coolors.co/ff1053-6c6ea0-66c7f4-c1cad6-ffffff\\nvec3 col1 = vec3(255.0, 16.0, 83.0) / 255.0;\\nvec3 col2 = vec3(108.0, 110.0, 160.0) / 255.0;\\nvec3 col3 = vec3(102.0, 199.0, 244.0) / 255.0;\\nvec3 col4 = vec3(193.0, 202.0, 214.0) / 255.0;\\nvec3 col5 = vec3(255.0, 255.0, 255.0) / 255.0;\\n\\nfloat map(float value, float beforeMin, float beforeMax, float afterMin, float afterMax) {\\n return afterMin + (afterMax - afterMin) * ((value - beforeMin) / (beforeMax - beforeMin));\\n}\\n\\nfloat rand(vec2 n) {\\n return fract(sin(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);\\n}\\n\\nvec3 getSingleColor(float id, float v) {\\n vec3 color;\\n float r = floor(rand(vec2(v * 360.0)) * 5.0);\\n id = r;\\n if (id == 0.0) {\\n // rect 1\\n color = col1;\\n } else if (id == 1.0) {\\n // rect 2\\n color = col2;\\n } else if (id == 2.0) {\\n // rect 3\\n color = col3;\\n } else if (id == 3.0) {\\n // rect 4\\n color = col4;\\n } else {\\n // rect 5\\n color = col5;\\n }\\n return color;\\n}\\n\\nvoid main() {\\n vec2 uv = 2.0 * vUv - 1.0;\\n uv.x *= (vResolution.x / vResolution.y);// make horizontal value begger than 1 (this makes precise circle)\\n\\n float id = floor(mod(vIndex, 4.8));\\n\\n vec3 color = vec3(0.0);\\n float speed = 0.2 + id * 0.1;\\n vec2 dir = vec2(1.0);\\n float dirXY;\\n float v = 0.0;\\n\\n if (vDirection \u003e 0.5) {\\n // vertical stripe\\n dir = vec2(0.0, time * speed);\\n dirXY = uv.x;\\n } else if (vDirection \u003c 0.0) {\\n dirXY = uv.x;\\n if (mod(id, 2.0) == 0.0) {\\n //\\n dir = vec2(0.0, -time * speed * 0.5);\\n } else {\\n //\\n dir = vec2(-time * speed * 0.5, 0.0);\\n }\\n } else {\\n // horizontal stripe\\n dir = vec2(time * speed, 0.0);\\n dirXY = uv.y;\\n }\\n\\n uv += dir;\\n v = step(vRatio, fract(dirXY * vRatio * 100.0));\\n\\n color = getSingleColor(id, v * floor(vIndex * vRatio));\\n\\n float borderWidth = 2.0;\\n if (vRatio \u003c 0.01) {\\n borderWidth = 0.0;\\n } else {\\n borderWidth = 2.0;\\n }\\n float l = step(vResolution.x * vUv.x, borderWidth)\\n + step(vResolution.x - borderWidth, vResolution.x * vUv.x)\\n + step(vResolution.y *vUv.y, borderWidth)\\n + step(vResolution.y - borderWidth, vResolution.y * vUv.y);\\n\\n float transparency = mix(1.0, 0.0, l);\\n\\n gl_FragColor = vec4(color, transparency);\\n}\"},function(t,e,n){\"use strict\";n.r(e);class i{addEventListener(t,e){void 0===this._listeners\u0026\u0026(this._listeners={});const n=this._listeners;void 0===n[t]\u0026\u0026(n[t]=[]),-1===n[t].indexOf(e)\u0026\u0026n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]\u0026\u0026-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t\u0026\u0026n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e\u003ci;e++)n[e].call(this,t);t.target=null}}}const r=[];for(let t=0;t\u003c256;t++)r[t]=(t\u003c16?\"0\":\"\")+t.toString(16);const s=Math.PI/180,a=180/Math.PI;function o(){const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(r[255\u0026t]+r[t\u003e\u003e8\u0026255]+r[t\u003e\u003e16\u0026255]+r[t\u003e\u003e24\u0026255]+\"-\"+r[255\u0026e]+r[e\u003e\u003e8\u0026255]+\"-\"+r[e\u003e\u003e16\u002615|64]+r[e\u003e\u003e24\u0026255]+\"-\"+r[63\u0026n|128]+r[n\u003e\u003e8\u0026255]+\"-\"+r[n\u003e\u003e16\u0026255]+r[n\u003e\u003e24\u0026255]+r[255\u0026i]+r[i\u003e\u003e8\u0026255]+r[i\u003e\u003e16\u0026255]+r[i\u003e\u003e24\u0026255]).toLowerCase()}function l(t,e,n){return Math.max(e,Math.min(n,t))}function c(t,e){return(t%e+e)%e}function h(t,e,n){return(1-n)*t+n*e}function u(t){return 0==(t\u0026t-1)\u0026\u00260!==t}function d(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}class p{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x\u0026\u0026t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}p.prototype.isVector2=!0;class f{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],h=n[7],u=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],x=i[4],y=i[7],_=i[2],b=i[5],M=i[8];return r[0]=s*f+a*v+o*_,r[3]=s*m+a*x+o*b,r[6]=s*g+a*y+o*M,r[1]=l*f+c*v+h*_,r[4]=l*m+c*x+h*b,r[7]=l*g+c*y+h*M,r[2]=u*f+d*v+p*_,r[5]=u*m+d*x+p*b,r[8]=u*g+d*y+p*M,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=c*s-a*l,u=a*o-c*r,d=l*r-s*o,p=e*h+n*u+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=h*f,t[1]=(i*l-c*n)*f,t[2]=(a*n-i*s)*f,t[3]=u*f,t[4]=(c*e-i*o)*f,t[5]=(i*r-a*e)*f,t[6]=d*f,t[7]=(n*o-l*e)*f,t[8]=(s*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t\u003c9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n\u003c9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}function m(t){for(let e=t.length-1;e\u003e=0;--e)if(t[e]\u003e65535)return!0;return!1}f.prototype.isMatrix3=!0;Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array;function g(t){return document.createElementNS(\"http://www.w3.org/1999/xhtml\",t)}function v(t){return t\u003c.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function x(t){return t\u003c.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}const y={srgb:{\"srgb-linear\":v},\"srgb-linear\":{srgb:x}},_={legacyMode:!0,get workingColorSpace(){return\"srgb-linear\"},set workingColorSpace(t){console.warn(\"THREE.ColorManagement: .workingColorSpace is readonly.\")},convert:function(t,e,n){if(this.legacyMode||e===n||!e||!n)return t;if(y[e]\u0026\u0026void 0!==y[e][n]){const i=y[e][n];return t.r=i(t.r),t.g=i(t.g),t.b=i(t.b),t}throw new Error(\"Unsupported color space conversion.\")},fromWorkingColorSpace:function(t,e){return this.convert(t,this.workingColorSpace,e)},toWorkingColorSpace:function(t,e){return this.convert(t,e,this.workingColorSpace)}},b={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},M={r:0,g:0,b:0},w={h:0,s:0,l:0},S={h:0,s:0,l:0};function E(t,e,n){return n\u003c0\u0026\u0026(n+=1),n\u003e1\u0026\u0026(n-=1),n\u003c1/6?t+6*(e-t)*n:n\u003c.5?e:n\u003c2/3?t+6*(e-t)*(2/3-n):t}function T(t,e){return e.r=t.r,e.g=t.g,e.b=t.b,e}class A{constructor(t,e,n){return void 0===e\u0026\u0026void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t\u0026\u0026t.isColor?this.copy(t):\"number\"==typeof t?this.setHex(t):\"string\"==typeof t\u0026\u0026this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t,e=\"srgb\"){return t=Math.floor(t),this.r=(t\u003e\u003e16\u0026255)/255,this.g=(t\u003e\u003e8\u0026255)/255,this.b=(255\u0026t)/255,_.toWorkingColorSpace(this,e),this}setRGB(t,e,n,i=\"srgb-linear\"){return this.r=t,this.g=e,this.b=n,_.toWorkingColorSpace(this,i),this}setHSL(t,e,n,i=\"srgb-linear\"){if(t=c(t,1),e=l(e,0,1),n=l(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n\u003c=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=E(r,i,t+1/3),this.g=E(r,i,t),this.b=E(r,i,t-1/3)}return _.toWorkingColorSpace(this,i),this}setStyle(t,e=\"srgb\"){function n(e){void 0!==e\u0026\u0026parseFloat(e)\u003c1\u0026\u0026console.warn(\"THREE.Color: Alpha component of \"+t+\" will be ignored.\")}let i;if(i=/^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec(t)){let t;const r=i[1],s=i[2];switch(r){case\"rgb\":case\"rgba\":if(t=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(s))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,_.toWorkingColorSpace(this,e),n(t[4]),this;if(t=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(s))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,_.toWorkingColorSpace(this,e),n(t[4]),this;break;case\"hsl\":case\"hsla\":if(t=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(s)){const i=parseFloat(t[1])/360,r=parseInt(t[2],10)/100,s=parseInt(t[3],10)/100;return n(t[4]),this.setHSL(i,r,s,e)}}}else if(i=/^\\#([A-Fa-f\\d]+)$/.exec(t)){const t=i[1],n=t.length;if(3===n)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,_.toWorkingColorSpace(this,e),this;if(6===n)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,_.toWorkingColorSpace(this,e),this}return t\u0026\u0026t.length\u003e0?this.setColorName(t,e):this}setColorName(t,e=\"srgb\"){const n=b[t.toLowerCase()];return void 0!==n?this.setHex(n,e):console.warn(\"THREE.Color: Unknown color \"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copySRGBToLinear(t){return this.r=v(t.r),this.g=v(t.g),this.b=v(t.b),this}copyLinearToSRGB(t){return this.r=x(t.r),this.g=x(t.g),this.b=x(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(t=\"srgb\"){return _.fromWorkingColorSpace(T(this,M),t),l(255*M.r,0,255)\u003c\u003c16^l(255*M.g,0,255)\u003c\u003c8^l(255*M.b,0,255)\u003c\u003c0}getHexString(t=\"srgb\"){return(\"000000\"+this.getHex(t).toString(16)).slice(-6)}getHSL(t,e=\"srgb-linear\"){_.fromWorkingColorSpace(T(this,M),e);const n=M.r,i=M.g,r=M.b,s=Math.max(n,i,r),a=Math.min(n,i,r);let o,l;const c=(a+s)/2;if(a===s)o=0,l=0;else{const t=s-a;switch(l=c\u003c=.5?t/(s+a):t/(2-s-a),s){case n:o=(i-r)/t+(i\u003cr?6:0);break;case i:o=(r-n)/t+2;break;case r:o=(n-i)/t+4}o/=6}return t.h=o,t.s=l,t.l=c,t}getRGB(t,e=\"srgb-linear\"){return _.fromWorkingColorSpace(T(this,M),e),t.r=M.r,t.g=M.g,t.b=M.b,t}getStyle(t=\"srgb\"){return _.fromWorkingColorSpace(T(this,M),t),\"srgb\"!==t?`color(${t} ${M.r} ${M.g} ${M.b})`:`rgb(${255*M.r|0},${255*M.g|0},${255*M.b|0})`}offsetHSL(t,e,n){return this.getHSL(w),w.h+=t,w.s+=e,w.l+=n,this.setHSL(w.h,w.s,w.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(w),t.getHSL(S);const n=h(w.h,S.h,e),i=h(w.s,S.s,e),r=h(w.l,S.l,e);return this.setHSL(n,i,r),this}equals(t){return t.r===this.r\u0026\u0026t.g===this.g\u0026\u0026t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized\u0026\u0026(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}let R;A.NAMES=b,A.prototype.isColor=!0,A.prototype.r=1,A.prototype.g=1,A.prototype.b=1;class C{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\"undefined\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===R\u0026\u0026(R=g(\"canvas\")),R.width=t.width,R.height=t.height;const n=R.getContext(\"2d\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=R}return e.width\u003e2048||e.height\u003e2048?(console.warn(\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\",t),e.toDataURL(\"image/jpeg\",.6)):e.toDataURL(\"image/png\")}static sRGBToLinear(t){if(\"undefined\"!=typeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap\u0026\u0026t instanceof ImageBitmap){const e=g(\"canvas\");e.width=t.width,e.height=t.height;const n=e.getContext(\"2d\");n.drawImage(t,0,0,t.width,t.height);const i=n.getImageData(0,0,t.width,t.height),r=i.data;for(let t=0;t\u003cr.length;t++)r[t]=255*v(r[t]/255);return n.putImageData(i,0,0),e}if(t.data){const e=t.data.slice(0);for(let t=0;t\u003ce.length;t++)e instanceof Uint8Array||e instanceof Uint8ClampedArray?e[t]=Math.floor(255*v(e[t]/255)):e[t]=v(e[t]);return{data:e,width:t.width,height:t.height}}return console.warn(\"THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.\"),t}}class L{constructor(t=null){this.uuid=o(),this.data=t,this.version=0}set needsUpdate(t){!0===t\u0026\u0026this.version++}toJSON(t){const e=void 0===t||\"string\"==typeof t;if(!e\u0026\u0026void 0!==t.images[this.uuid])return t.images[this.uuid];const n={uuid:this.uuid,url:\"\"},i=this.data;if(null!==i){let t;if(Array.isArray(i)){t=[];for(let e=0,n=i.length;e\u003cn;e++)i[e].isDataTexture?t.push(P(i[e].image)):t.push(P(i[e]))}else t=P(i);n.url=t}return e||(t.images[this.uuid]=n),n}}function P(t){return\"undefined\"!=typeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap\u0026\u0026t instanceof ImageBitmap?C.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\"THREE.Texture: Unable to serialize Texture.\"),{})}L.prototype.isSource=!0;let D=0;class I extends i{constructor(t=I.DEFAULT_IMAGE,e=I.DEFAULT_MAPPING,n=1001,i=1001,r=1006,s=1008,a=1023,l=1009,c=1,h=3e3){super(),Object.defineProperty(this,\"id\",{value:D++}),this.uuid=o(),this.name=\"\",this.source=new L(t),this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=s,this.anisotropy=c,this.format=a,this.internalFormat=null,this.type=l,this.offset=new p(0,0),this.repeat=new p(1,1),this.center=new p(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new f,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=h,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(t){this.source.data=t}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(t){return this.name=t.name,this.source=t.source,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this.userData=JSON.parse(JSON.stringify(t.userData)),this.needsUpdate=!0,this}toJSON(t){const e=void 0===t||\"string\"==typeof t;if(!e\u0026\u0026void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,image:this.source.toJSON(t).uuid,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return\"{}\"!==JSON.stringify(this.userData)\u0026\u0026(n.userData=this.userData),e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\"dispose\"})}transformUv(t){if(300!==this.mapping)return t;if(t.applyMatrix3(this.matrix),t.x\u003c0||t.x\u003e1)switch(this.wrapS){case 1e3:t.x=t.x-Math.floor(t.x);break;case 1001:t.x=t.x\u003c0?0:1;break;case 1002:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y\u003c0||t.y\u003e1)switch(this.wrapT){case 1e3:t.y=t.y-Math.floor(t.y);break;case 1001:t.y=t.y\u003c0?0:1;break;case 1002:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY\u0026\u0026(t.y=1-t.y),t}set needsUpdate(t){!0===t\u0026\u0026(this.version++,this.source.needsUpdate=!0)}}I.DEFAULT_IMAGE=null,I.DEFAULT_MAPPING=300,I.prototype.isTexture=!0;class N{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){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: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e\u003c1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=t.elements,a=s[0],o=s[4],l=s[8],c=s[1],h=s[5],u=s[9],d=s[2],p=s[6],f=s[10];if(Math.abs(o-c)\u003c.01\u0026\u0026Math.abs(l-d)\u003c.01\u0026\u0026Math.abs(u-p)\u003c.01){if(Math.abs(o+c)\u003c.1\u0026\u0026Math.abs(l+d)\u003c.1\u0026\u0026Math.abs(u+p)\u003c.1\u0026\u0026Math.abs(a+h+f-3)\u003c.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(a+1)/2,s=(h+1)/2,m=(f+1)/2,g=(o+c)/4,v=(l+d)/4,x=(u+p)/4;return t\u003es\u0026\u0026t\u003em?t\u003c.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):s\u003em?s\u003c.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(s),n=g/i,r=x/i):m\u003c.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=x/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-u)*(p-u)+(l-d)*(l-d)+(c-o)*(c-o));return Math.abs(m)\u003c.001\u0026\u0026(m=1),this.x=(p-u)/m,this.y=(l-d)/m,this.z=(c-o)/m,this.w=Math.acos((a+h+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w\u003c0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x\u0026\u0026t.y===this.y\u0026\u0026t.z===this.z\u0026\u0026t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}N.prototype.isVector4=!0;class O extends i{constructor(t,e,n={}){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new N(0,0,t,e),this.scissorTest=!1,this.viewport=new N(0,0,t,e);const i={width:t,height:e,depth:1};this.texture=new I(i,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=void 0!==n.generateMipmaps\u0026\u0026n.generateMipmaps,this.texture.internalFormat=void 0!==n.internalFormat?n.internalFormat:null,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:1006,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer\u0026\u0026n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null,this.samples=void 0!==n.samples?n.samples:0}setSize(t,e,n=1){this.width===t\u0026\u0026this.height===e\u0026\u0026this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.isRenderTargetTexture=!0;const e=Object.assign({},t.texture.image);return this.texture.source=new L(e),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,null!==t.depthTexture\u0026\u0026(this.depthTexture=t.depthTexture.clone()),this.samples=t.samples,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}O.prototype.isWebGLRenderTarget=!0;class z extends I{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}z.prototype.isDataArrayTexture=!0;(class extends O{constructor(t,e,n){super(t,e),this.depth=n,this.texture=new z(null,t,e,n),this.texture.isRenderTargetTexture=!0}}).prototype.isWebGLArrayRenderTarget=!0;class B extends I{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=1003,this.minFilter=1003,this.wrapR=1001,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}B.prototype.isData3DTexture=!0;(class extends O{constructor(t,e,n){super(t,e),this.depth=n,this.texture=new B(null,t,e,n),this.texture.isRenderTargetTexture=!0}}).prototype.isWebGL3DRenderTarget=!0;(class extends O{constructor(t,e,n,i={}){super(t,e,i);const r=this.texture;this.texture=[];for(let t=0;t\u003cn;t++)this.texture[t]=r.clone(),this.texture[t].isRenderTargetTexture=!0}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let i=0,r=this.texture.length;i\u003cr;i++)this.texture[i].image.width=t,this.texture[i].image.height=e,this.texture[i].image.depth=n;this.dispose()}return this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e),this}copy(t){this.dispose(),this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,null!==t.depthTexture\u0026\u0026(this.depthTexture=t.depthTexture.clone()),this.texture.length=0;for(let e=0,n=t.texture.length;e\u003cn;e++)this.texture[e]=t.texture[e].clone(),this.texture[e].isRenderTargetTexture=!0;return this}}).prototype.isWebGLMultipleRenderTargets=!0;class U{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,r,s,a){let o=n[i+0],l=n[i+1],c=n[i+2],h=n[i+3];const u=r[s+0],d=r[s+1],p=r[s+2],f=r[s+3];if(0===a)return t[e+0]=o,t[e+1]=l,t[e+2]=c,void(t[e+3]=h);if(1===a)return t[e+0]=u,t[e+1]=d,t[e+2]=p,void(t[e+3]=f);if(h!==f||o!==u||l!==d||c!==p){let t=1-a;const e=o*u+l*d+c*p+h*f,n=e\u003e=0?1:-1,i=1-e*e;if(i\u003eNumber.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+u*r,l=l*t+d*r,c=c*t+p*r,h=h*t+f*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+h*h);o*=t,l*=t,c*=t,h*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=h}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],h=r[s],u=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*h+o*d-l*u,t[e+1]=o*p+c*u+l*h-a*d,t[e+2]=l*p+c*d+a*u-o*h,t[e+3]=c*p-a*h-o*u-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),h=a(r/2),u=o(n/2),d=o(i/2),p=o(r/2);switch(s){case\"XYZ\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\"YXZ\":this._x=u*c*h+l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\"ZXY\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h-u*d*p;break;case\"ZYX\":this._x=u*c*h-l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h+u*d*p;break;case\"YZX\":this._x=u*c*h+l*d*p,this._y=l*d*h+u*c*p,this._z=l*c*p-u*d*h,this._w=l*c*h-u*d*p;break;case\"XZY\":this._x=u*c*h-l*d*p,this._y=l*d*h-u*c*p,this._z=l*c*p+u*d*h,this._w=l*c*h+u*d*p;break;default:console.warn(\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \"+s)}return!1!==e\u0026\u0026this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],h=e[10],u=n+a+h;if(u\u003e0){const t=.5/Math.sqrt(u+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n\u003ea\u0026\u0026n\u003eh){const t=2*Math.sqrt(1+n-a-h);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a\u003eh){const t=2*Math.sqrt(1+a-n-h);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+h-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n\u003cNumber.EPSILON?(n=0,Math.abs(t.x)\u003eMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(l(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a\u003c0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a\u003e=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o\u003c=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),h=Math.sin((1-e)*c)/l,u=Math.sin(e*c)/l;return this._w=s*h+this._w*u,this._x=n*h+this._x*u,this._y=i*h+this._y*u,this._z=r*h+this._z*u,this._onChangeCallback(),this}slerpQuaternions(t,e,n){return this.copy(t).slerp(e,n)}random(){const t=Math.random(),e=Math.sqrt(1-t),n=Math.sqrt(t),i=2*Math.PI*Math.random(),r=2*Math.PI*Math.random();return this.set(e*Math.cos(i),n*Math.sin(r),n*Math.cos(r),e*Math.sin(i))}equals(t){return t._x===this._x\u0026\u0026t._y===this._y\u0026\u0026t._z===this._z\u0026\u0026t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}U.prototype.isQuaternion=!0;class H{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n\u0026\u0026(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t\u0026\u0026t.isEuler||console.error(\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\"),this.applyQuaternion(G.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(G.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,h=o*i+r*n-s*e,u=-r*e-s*n-a*i;return this.x=l*o+u*-r+c*-a-h*-s,this.y=c*o+u*-s+h*-r-l*-a,this.z=h*o+u*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return F.copy(this).projectOnVector(t),this.sub(F)}reflect(t){return this.sub(F.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(l(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}setFromEuler(t){return this.x=t._x,this.y=t._y,this.z=t._z,this}equals(t){return t.x===this.x\u0026\u0026t.y===this.y\u0026\u0026t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const t=2*(Math.random()-.5),e=Math.random()*Math.PI*2,n=Math.sqrt(1-t**2);return this.x=n*Math.cos(e),this.y=n*Math.sin(e),this.z=t,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}H.prototype.isVector3=!0;const F=new H,G=new U;class V{constructor(t=new H(1/0,1/0,1/0),e=new H(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;o\u003cl;o+=3){const l=t[o],c=t[o+1],h=t[o+2];l\u003ce\u0026\u0026(e=l),c\u003cn\u0026\u0026(n=c),h\u003ci\u0026\u0026(i=h),l\u003er\u0026\u0026(r=l),c\u003es\u0026\u0026(s=c),h\u003ea\u0026\u0026(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;o\u003cl;o++){const l=t.getX(o),c=t.getY(o),h=t.getZ(o);l\u003ce\u0026\u0026(e=l),c\u003cn\u0026\u0026(n=c),h\u003ci\u0026\u0026(i=h),l\u003er\u0026\u0026(r=l),c\u003es\u0026\u0026(s=c),h\u003ea\u0026\u0026(a=h)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e\u003cn;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=W.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t,e=!1){return this.makeEmpty(),this.expandByObject(t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x\u003cthis.min.x||this.max.y\u003cthis.min.y||this.max.z\u003cthis.min.z}getCenter(t){return this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t,e=!1){t.updateWorldMatrix(!1,!1);const n=t.geometry;if(void 0!==n)if(e\u0026\u0026null!=n.attributes\u0026\u0026void 0!==n.attributes.position){const e=n.attributes.position;for(let n=0,i=e.count;n\u003ci;n++)W.fromBufferAttribute(e,n).applyMatrix4(t.matrixWorld),this.expandByPoint(W)}else null===n.boundingBox\u0026\u0026n.computeBoundingBox(),j.copy(n.boundingBox),j.applyMatrix4(t.matrixWorld),this.union(j);const i=t.children;for(let t=0,n=i.length;t\u003cn;t++)this.expandByObject(i[t],e);return this}containsPoint(t){return!(t.x\u003cthis.min.x||t.x\u003ethis.max.x||t.y\u003cthis.min.y||t.y\u003ethis.max.y||t.z\u003cthis.min.z||t.z\u003ethis.max.z)}containsBox(t){return this.min.x\u003c=t.min.x\u0026\u0026t.max.x\u003c=this.max.x\u0026\u0026this.min.y\u003c=t.min.y\u0026\u0026t.max.y\u003c=this.max.y\u0026\u0026this.min.z\u003c=t.min.z\u0026\u0026t.max.z\u003c=this.max.z}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x\u003cthis.min.x||t.min.x\u003ethis.max.x||t.max.y\u003cthis.min.y||t.min.y\u003ethis.max.y||t.max.z\u003cthis.min.z||t.min.z\u003ethis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,W),W.distanceToSquared(t.center)\u003c=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x\u003e0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y\u003e0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z\u003e0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e\u003c=-t.constant\u0026\u0026n\u003e=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(Q),$.subVectors(this.max,Q),q.subVectors(t.a,Q),X.subVectors(t.b,Q),J.subVectors(t.c,Q),Y.subVectors(X,q),Z.subVectors(J,X),K.subVectors(q,J);let e=[0,-Y.z,Y.y,0,-Z.z,Z.y,0,-K.z,K.y,Y.z,0,-Y.x,Z.z,0,-Z.x,K.z,0,-K.x,-Y.y,Y.x,0,-Z.y,Z.x,0,-K.y,K.x,0];return!!nt(e,q,X,J,$)\u0026\u0026(e=[1,0,0,0,1,0,0,0,1],!!nt(e,q,X,J,$)\u0026\u0026(tt.crossVectors(Y,Z),e=[tt.x,tt.y,tt.z],nt(e,q,X,J,$)))}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return W.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return this.getCenter(t.center),t.radius=.5*this.getSize(W).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()\u0026\u0026this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(k[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),k[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),k[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),k[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),k[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),k[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),k[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),k[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(k)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)\u0026\u0026t.max.equals(this.max)}}V.prototype.isBox3=!0;const k=[new H,new H,new H,new H,new H,new H,new H,new H],W=new H,j=new V,q=new H,X=new H,J=new H,Y=new H,Z=new H,K=new H,Q=new H,$=new H,tt=new H,et=new H;function nt(t,e,n,i,r){for(let s=0,a=t.length-3;s\u003c=a;s+=3){et.fromArray(t,s);const a=r.x*Math.abs(et.x)+r.y*Math.abs(et.y)+r.z*Math.abs(et.z),o=e.dot(et),l=n.dot(et),c=i.dot(et);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))\u003ea)return!1}return!0}const it=new V,rt=new H,st=new H,at=new H;class ot{constructor(t=new H,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):it.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;e\u003cr;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius\u003c0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)\u003c=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)\u003c=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))\u003c=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return e.copy(t),n\u003ethis.radius*this.radius\u0026\u0026(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){at.subVectors(t,this.center);const e=at.lengthSq();if(e\u003ethis.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(at.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return!0===this.center.equals(t.center)?st.set(0,0,1).multiplyScalar(t.radius):st.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(rt.copy(t.center).add(st)),this.expandByPoint(rt.copy(t.center).sub(st)),this}equals(t){return t.center.equals(this.center)\u0026\u0026t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const lt=new H,ct=new H,ht=new H,ut=new H,dt=new H,pt=new H,ft=new H;class mt{constructor(t=new H,e=new H(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,lt)),this}closestPointToPoint(t,e){e.subVectors(t,this.origin);const n=e.dot(this.direction);return n\u003c0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=lt.subVectors(t,this.origin).dot(this.direction);return e\u003c0?this.origin.distanceToSquared(t):(lt.copy(this.direction).multiplyScalar(e).add(this.origin),lt.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){ct.copy(t).add(e).multiplyScalar(.5),ht.copy(e).sub(t).normalize(),ut.copy(this.origin).sub(ct);const r=.5*t.distanceTo(e),s=-this.direction.dot(ht),a=ut.dot(this.direction),o=-ut.dot(ht),l=ut.lengthSq(),c=Math.abs(1-s*s);let h,u,d,p;if(c\u003e0)if(h=s*o-a,u=s*a-o,p=r*c,h\u003e=0)if(u\u003e=-p)if(u\u003c=p){const t=1/c;h*=t,u*=t,d=h*(h+s*u+2*a)+u*(s*h+u+2*o)+l}else u=r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u=-r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;else u\u003c=-p?(h=Math.max(0,-(-s*r+a)),u=h\u003e0?-r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l):u\u003c=p?(h=0,u=Math.min(Math.max(-r,-o),r),d=u*(u+2*o)+l):(h=Math.max(0,-(s*r+a)),u=h\u003e0?r:Math.min(Math.max(-r,-o),r),d=-h*h+u*(u+2*o)+l);else u=s\u003e0?-r:r,h=Math.max(0,-(s*u+a)),d=-h*h+u*(u+2*o)+l;return n\u0026\u0026n.copy(this.direction).multiplyScalar(h).add(this.origin),i\u0026\u0026i.copy(ht).multiplyScalar(u).add(ct),d}intersectSphere(t,e){lt.subVectors(t.center,this.origin);const n=lt.dot(this.direction),i=lt.dot(lt)-n*n,r=t.radius*t.radius;if(i\u003er)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a\u003c0\u0026\u0026o\u003c0?null:a\u003c0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)\u003c=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n\u003e=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e\u003c0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,h=1/this.direction.z,u=this.origin;return l\u003e=0?(n=(t.min.x-u.x)*l,i=(t.max.x-u.x)*l):(n=(t.max.x-u.x)*l,i=(t.min.x-u.x)*l),c\u003e=0?(r=(t.min.y-u.y)*c,s=(t.max.y-u.y)*c):(r=(t.max.y-u.y)*c,s=(t.min.y-u.y)*c),n\u003es||r\u003ei?null:((r\u003en||n!=n)\u0026\u0026(n=r),(s\u003ci||i!=i)\u0026\u0026(i=s),h\u003e=0?(a=(t.min.z-u.z)*h,o=(t.max.z-u.z)*h):(a=(t.max.z-u.z)*h,o=(t.min.z-u.z)*h),n\u003eo||a\u003ei?null:((a\u003en||n!=n)\u0026\u0026(n=a),(o\u003ci||i!=i)\u0026\u0026(i=o),i\u003c0?null:this.at(n\u003e=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,lt)}intersectTriangle(t,e,n,i,r){dt.subVectors(e,t),pt.subVectors(n,t),ft.crossVectors(dt,pt);let s,a=this.direction.dot(ft);if(a\u003e0){if(i)return null;s=1}else{if(!(a\u003c0))return null;s=-1,a=-a}ut.subVectors(this.origin,t);const o=s*this.direction.dot(pt.crossVectors(ut,pt));if(o\u003c0)return null;const l=s*this.direction.dot(dt.cross(ut));if(l\u003c0)return null;if(o+l\u003ea)return null;const c=-s*ut.dot(ft);return c\u003c0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)\u0026\u0026t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class gt{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l,c,h,u,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=h,g[14]=u,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new gt).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/vt.setFromMatrixColumn(t,0).length(),r=1/vt.setFromMatrixColumn(t,1).length(),s=1/vt.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t\u0026\u0026t.isEuler||console.error(\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),h=Math.sin(r);if(\"XYZ\"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=-o*h,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if(\"YXZ\"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*h,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if(\"ZXY\"===t.order){const t=o*c,n=o*h,i=l*c,r=l*h;e[0]=t-r*a,e[4]=-s*h,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if(\"ZYX\"===t.order){const t=s*c,n=s*h,i=a*c,r=a*h;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*h,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if(\"YZX\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*h,e[8]=i*h+n,e[1]=h,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*h+i,e[10]=t-r*h}else if(\"XZY\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-h,e[8]=l*c,e[1]=t*h+r,e[5]=s*c,e[9]=n*h-i,e[2]=i*h-n,e[6]=a*c,e[10]=r*h+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(yt,t,_t)}lookAt(t,e,n){const i=this.elements;return wt.subVectors(t,e),0===wt.lengthSq()\u0026\u0026(wt.z=1),wt.normalize(),bt.crossVectors(n,wt),0===bt.lengthSq()\u0026\u0026(1===Math.abs(n.z)?wt.x+=1e-4:wt.z+=1e-4,wt.normalize(),bt.crossVectors(n,wt)),bt.normalize(),Mt.crossVectors(wt,bt),i[0]=bt.x,i[4]=Mt.x,i[8]=wt.x,i[1]=bt.y,i[5]=Mt.y,i[9]=wt.y,i[2]=bt.z,i[6]=Mt.z,i[10]=wt.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],h=n[5],u=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],x=n[7],y=n[11],_=n[15],b=i[0],M=i[4],w=i[8],S=i[12],E=i[1],T=i[5],A=i[9],R=i[13],C=i[2],L=i[6],P=i[10],D=i[14],I=i[3],N=i[7],O=i[11],z=i[15];return r[0]=s*b+a*E+o*C+l*I,r[4]=s*M+a*T+o*L+l*N,r[8]=s*w+a*A+o*P+l*O,r[12]=s*S+a*R+o*D+l*z,r[1]=c*b+h*E+u*C+d*I,r[5]=c*M+h*T+u*L+d*N,r[9]=c*w+h*A+u*P+d*O,r[13]=c*S+h*R+u*D+d*z,r[2]=p*b+f*E+m*C+g*I,r[6]=p*M+f*T+m*L+g*N,r[10]=p*w+f*A+m*P+g*O,r[14]=p*S+f*R+m*D+g*z,r[3]=v*b+x*E+y*C+_*I,r[7]=v*M+x*T+y*L+_*N,r[11]=v*w+x*A+y*P+_*O,r[15]=v*S+x*R+y*D+_*z,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],h=t[6],u=t[10],d=t[14];return t[3]*(+r*o*h-i*l*h-r*a*u+n*l*u+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*u+r*s*u-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*h-e*a*d-r*s*h+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*h+e*a*u+i*s*h-n*s*u+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],h=t[9],u=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=h*m*l-f*u*l+f*o*d-a*m*d-h*o*g+a*u*g,x=p*u*l-c*m*l-p*o*d+s*m*d+c*o*g-s*u*g,y=c*f*l-p*h*l+p*a*d-s*f*d-c*a*g+s*h*g,_=p*h*o-c*f*o-p*a*u+s*f*u+c*a*m-s*h*m,b=e*v+n*x+i*y+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const M=1/b;return t[0]=v*M,t[1]=(f*u*r-h*m*r-f*i*d+n*m*d+h*i*g-n*u*g)*M,t[2]=(a*m*r-f*o*r+f*i*l-n*m*l-a*i*g+n*o*g)*M,t[3]=(h*o*r-a*u*r-h*i*l+n*u*l+a*i*d-n*o*d)*M,t[4]=x*M,t[5]=(c*m*r-p*u*r+p*i*d-e*m*d-c*i*g+e*u*g)*M,t[6]=(p*o*r-s*m*r-p*i*l+e*m*l+s*i*g-e*o*g)*M,t[7]=(s*u*r-c*o*r+c*i*l-e*u*l-s*i*d+e*o*d)*M,t[8]=y*M,t[9]=(p*h*r-c*f*r-p*n*d+e*f*d+c*n*g-e*h*g)*M,t[10]=(s*f*r-p*a*r+p*n*l-e*f*l-s*n*g+e*a*g)*M,t[11]=(c*a*r-s*h*r-c*n*l+e*h*l+s*n*d-e*a*d)*M,t[12]=_*M,t[13]=(c*f*i-p*h*i+p*n*u-e*f*u-c*n*m+e*h*m)*M,t[14]=(p*a*i-s*f*i-p*n*o+e*f*o+s*n*m-e*a*m)*M,t[15]=(s*h*i-c*a*i+c*n*o-e*h*o-s*n*u+e*a*u)*M,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,h=a+a,u=r*l,d=r*c,p=r*h,f=s*c,m=s*h,g=a*h,v=o*l,x=o*c,y=o*h,_=n.x,b=n.y,M=n.z;return i[0]=(1-(f+g))*_,i[1]=(d+y)*_,i[2]=(p-x)*_,i[3]=0,i[4]=(d-y)*b,i[5]=(1-(u+g))*b,i[6]=(m+v)*b,i[7]=0,i[8]=(p+x)*M,i[9]=(m-v)*M,i[10]=(1-(u+f))*M,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=vt.set(i[0],i[1],i[2]).length();const s=vt.set(i[4],i[5],i[6]).length(),a=vt.set(i[8],i[9],i[10]).length();this.determinant()\u003c0\u0026\u0026(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],xt.copy(this);const o=1/r,l=1/s,c=1/a;return xt.elements[0]*=o,xt.elements[1]*=o,xt.elements[2]*=o,xt.elements[4]*=l,xt.elements[5]*=l,xt.elements[6]*=l,xt.elements[8]*=c,xt.elements[9]*=c,xt.elements[10]*=c,e.setFromRotationMatrix(xt),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s\u0026\u0026console.warn(\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),h=(n+i)/(n-i),u=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=u,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),h=(e+t)*o,u=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-u,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t\u003c16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n\u003c16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}gt.prototype.isMatrix4=!0;const vt=new H,xt=new gt,yt=new H(0,0,0),_t=new H(1,1,1),bt=new H,Mt=new H,wt=new H,St=new gt,Et=new U;class Tt{constructor(t=0,e=0,n=0,i=Tt.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i=this._order){return this._x=t,this._y=e,this._z=n,this._order=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e=this._order,n=!0){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],c=i[5],h=i[9],u=i[2],d=i[6],p=i[10];switch(e){case\"XYZ\":this._y=Math.asin(l(a,-1,1)),Math.abs(a)\u003c.9999999?(this._x=Math.atan2(-h,p),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(d,c),this._z=0);break;case\"YXZ\":this._x=Math.asin(-l(h,-1,1)),Math.abs(h)\u003c.9999999?(this._y=Math.atan2(a,p),this._z=Math.atan2(o,c)):(this._y=Math.atan2(-u,r),this._z=0);break;case\"ZXY\":this._x=Math.asin(l(d,-1,1)),Math.abs(d)\u003c.9999999?(this._y=Math.atan2(-u,p),this._z=Math.atan2(-s,c)):(this._y=0,this._z=Math.atan2(o,r));break;case\"ZYX\":this._y=Math.asin(-l(u,-1,1)),Math.abs(u)\u003c.9999999?(this._x=Math.atan2(d,p),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,c));break;case\"YZX\":this._z=Math.asin(l(o,-1,1)),Math.abs(o)\u003c.9999999?(this._x=Math.atan2(-h,c),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(a,p));break;case\"XZY\":this._z=Math.asin(-l(s,-1,1)),Math.abs(s)\u003c.9999999?(this._x=Math.atan2(d,c),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-h,p),this._y=0);break;default:console.warn(\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \"+e)}return this._order=e,!0===n\u0026\u0026this._onChangeCallback(),this}setFromQuaternion(t,e,n){return St.makeRotationFromQuaternion(t),this.setFromRotationMatrix(St,e,n)}setFromVector3(t,e=this._order){return this.set(t.x,t.y,t.z,e)}reorder(t){return Et.setFromEuler(this),this.setFromQuaternion(Et,t)}equals(t){return t._x===this._x\u0026\u0026t._y===this._y\u0026\u0026t._z===this._z\u0026\u0026t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]\u0026\u0026(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}}Tt.prototype.isEuler=!0,Tt.DefaultOrder=\"XYZ\",Tt.RotationOrders=[\"XYZ\",\"YZX\",\"ZXY\",\"XZY\",\"YXZ\",\"ZYX\"];class At{constructor(){this.mask=1}set(t){this.mask=(1\u003c\u003ct|0)\u003e\u003e\u003e0}enable(t){this.mask|=1\u003c\u003ct|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1\u003c\u003ct|0}disable(t){this.mask\u0026=~(1\u003c\u003ct|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask\u0026t.mask)}isEnabled(t){return 0!=(this.mask\u0026(1\u003c\u003ct|0))}}let Rt=0;const Ct=new H,Lt=new U,Pt=new gt,Dt=new H,It=new H,Nt=new H,Ot=new U,zt=new H(1,0,0),Bt=new H(0,1,0),Ut=new H(0,0,1),Ht={type:\"added\"},Ft={type:\"removed\"};class Gt extends i{constructor(){super(),Object.defineProperty(this,\"id\",{value:Rt++}),this.uuid=o(),this.name=\"\",this.type=\"Object3D\",this.parent=null,this.children=[],this.up=Gt.DefaultUp.clone();const t=new H,e=new Tt,n=new U,i=new H(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new gt},normalMatrix:{value:new f}}),this.matrix=new gt,this.matrixWorld=new gt,this.matrixAutoUpdate=Gt.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new At,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Lt.setFromAxisAngle(t,e),this.quaternion.multiply(Lt),this}rotateOnWorldAxis(t,e){return Lt.setFromAxisAngle(t,e),this.quaternion.premultiply(Lt),this}rotateX(t){return this.rotateOnAxis(zt,t)}rotateY(t){return this.rotateOnAxis(Bt,t)}rotateZ(t){return this.rotateOnAxis(Ut,t)}translateOnAxis(t,e){return Ct.copy(t).applyQuaternion(this.quaternion),this.position.add(Ct.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(zt,t)}translateY(t){return this.translateOnAxis(Bt,t)}translateZ(t){return this.translateOnAxis(Ut,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4(Pt.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?Dt.copy(t):Dt.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),It.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?Pt.lookAt(It,Dt,this.up):Pt.lookAt(Dt,It,this.up),this.quaternion.setFromRotationMatrix(Pt),i\u0026\u0026(Pt.extractRotation(i.matrixWorld),Lt.setFromRotationMatrix(Pt),this.quaternion.premultiply(Lt.invert()))}add(t){if(arguments.length\u003e1){for(let t=0;t\u003carguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",t),this):(t\u0026\u0026t.isObject3D?(null!==t.parent\u0026\u0026t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(Ht)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",t),this)}remove(t){if(arguments.length\u003e1){for(let t=0;t\u003carguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e\u0026\u0026(t.parent=null,this.children.splice(e,1),t.dispatchEvent(Ft)),this}removeFromParent(){const t=this.parent;return null!==t\u0026\u0026t.remove(this),this}clear(){for(let t=0;t\u003cthis.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(Ft)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),Pt.copy(this.matrixWorld).invert(),null!==t.parent\u0026\u0026(t.parent.updateWorldMatrix(!0,!1),Pt.multiply(t.parent.matrixWorld)),t.applyMatrix4(Pt),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\"id\",t)}getObjectByName(t){return this.getObjectByProperty(\"name\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n\u003ci;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(It,t,Nt),t}getWorldScale(t){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(It,Ot,t),t}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e\u0026\u0026(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)\u0026\u0026(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t\u0026\u0026null!==n\u0026\u0026n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e\u003cn;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\"string\"==typeof t,n={};e\u0026\u0026(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},n.metadata={version:4.5,type:\"Object\",generator:\"Object3D.toJSON\"});const i={};function r(e,n){return void 0===e[n.uuid]\u0026\u0026(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\"\"!==this.name\u0026\u0026(i.name=this.name),!0===this.castShadow\u0026\u0026(i.castShadow=!0),!0===this.receiveShadow\u0026\u0026(i.receiveShadow=!0),!1===this.visible\u0026\u0026(i.visible=!1),!1===this.frustumCulled\u0026\u0026(i.frustumCulled=!1),0!==this.renderOrder\u0026\u0026(i.renderOrder=this.renderOrder),\"{}\"!==JSON.stringify(this.userData)\u0026\u0026(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate\u0026\u0026(i.matrixAutoUpdate=!1),this.isInstancedMesh\u0026\u0026(i.type=\"InstancedMesh\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor\u0026\u0026(i.instanceColor=this.instanceColor.toJSON())),this.isScene)this.background\u0026\u0026(this.background.isColor?i.background=this.background.toJSON():this.background.isTexture\u0026\u0026(i.background=this.background.toJSON(t).uuid)),this.environment\u0026\u0026this.environment.isTexture\u0026\u0026(i.environment=this.environment.toJSON(t).uuid);else if(this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e\u0026\u0026void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e\u003ci;e++){const i=n[e];r(t.shapes,i)}else r(t.shapes,n)}}if(this.isSkinnedMesh\u0026\u0026(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton\u0026\u0026(r(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n\u003ci;n++)e.push(r(t.materials,this.material[n]));i.material=e}else i.material=r(t.materials,this.material);if(this.children.length\u003e0){i.children=[];for(let e=0;e\u003cthis.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length\u003e0){i.animations=[];for(let e=0;e\u003cthis.animations.length;e++){const n=this.animations[e];i.animations.push(r(t.animations,n))}}if(e){const e=s(t.geometries),i=s(t.materials),r=s(t.textures),a=s(t.images),o=s(t.shapes),l=s(t.skeletons),c=s(t.animations),h=s(t.nodes);e.length\u003e0\u0026\u0026(n.geometries=e),i.length\u003e0\u0026\u0026(n.materials=i),r.length\u003e0\u0026\u0026(n.textures=r),a.length\u003e0\u0026\u0026(n.images=a),o.length\u003e0\u0026\u0026(n.shapes=o),l.length\u003e0\u0026\u0026(n.skeletons=l),c.length\u003e0\u0026\u0026(n.animations=c),h.length\u003e0\u0026\u0026(n.nodes=h)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e\u003ct.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}Gt.DefaultUp=new H(0,1,0),Gt.DefaultMatrixAutoUpdate=!0,Gt.prototype.isObject3D=!0;const Vt=new H,kt=new H,Wt=new H,jt=new H,qt=new H,Xt=new H,Jt=new H,Yt=new H,Zt=new H,Kt=new H;class Qt{constructor(t=new H,e=new H,n=new H){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){i.subVectors(n,e),Vt.subVectors(t,e),i.cross(Vt);const r=i.lengthSq();return r\u003e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){Vt.subVectors(i,e),kt.subVectors(n,e),Wt.subVectors(t,e);const s=Vt.dot(Vt),a=Vt.dot(kt),o=Vt.dot(Wt),l=kt.dot(kt),c=kt.dot(Wt),h=s*l-a*a;if(0===h)return r.set(-2,-1,-1);const u=1/h,d=(l*o-a*c)*u,p=(s*c-a*o)*u;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,jt),jt.x\u003e=0\u0026\u0026jt.y\u003e=0\u0026\u0026jt.x+jt.y\u003c=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,jt),o.set(0,0),o.addScaledVector(r,jt.x),o.addScaledVector(s,jt.y),o.addScaledVector(a,jt.z),o}static isFrontFacing(t,e,n,i){return Vt.subVectors(n,e),kt.subVectors(t,e),Vt.cross(kt).dot(i)\u003c0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}setFromAttributeAndIndices(t,e,n,i){return this.a.fromBufferAttribute(t,e),this.b.fromBufferAttribute(t,n),this.c.fromBufferAttribute(t,i),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return Vt.subVectors(this.c,this.b),kt.subVectors(this.a,this.b),.5*Vt.cross(kt).length()}getMidpoint(t){return t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Qt.getNormal(this.a,this.b,this.c,t)}getPlane(t){return t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Qt.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Qt.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Qt.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Qt.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){const n=this.a,i=this.b,r=this.c;let s,a;qt.subVectors(i,n),Xt.subVectors(r,n),Yt.subVectors(t,n);const o=qt.dot(Yt),l=Xt.dot(Yt);if(o\u003c=0\u0026\u0026l\u003c=0)return e.copy(n);Zt.subVectors(t,i);const c=qt.dot(Zt),h=Xt.dot(Zt);if(c\u003e=0\u0026\u0026h\u003c=c)return e.copy(i);const u=o*h-c*l;if(u\u003c=0\u0026\u0026o\u003e=0\u0026\u0026c\u003c=0)return s=o/(o-c),e.copy(n).addScaledVector(qt,s);Kt.subVectors(t,r);const d=qt.dot(Kt),p=Xt.dot(Kt);if(p\u003e=0\u0026\u0026d\u003c=p)return e.copy(r);const f=d*l-o*p;if(f\u003c=0\u0026\u0026l\u003e=0\u0026\u0026p\u003c=0)return a=l/(l-p),e.copy(n).addScaledVector(Xt,a);const m=c*p-d*h;if(m\u003c=0\u0026\u0026h-c\u003e=0\u0026\u0026d-p\u003e=0)return Jt.subVectors(r,i),a=(h-c)/(h-c+(d-p)),e.copy(i).addScaledVector(Jt,a);const g=1/(m+f+u);return s=f*g,a=u*g,e.copy(n).addScaledVector(qt,s).addScaledVector(Xt,a)}equals(t){return t.a.equals(this.a)\u0026\u0026t.b.equals(this.b)\u0026\u0026t.c.equals(this.c)}}let $t=0;class te extends i{constructor(){super(),Object.defineProperty(this,\"id\",{value:$t++}),this.uuid=o(),this.name=\"\",this.type=\"Material\",this.blending=1,this.side=0,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=204,this.blendDst=205,this.blendEquation=100,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=3,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=519,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=7680,this.stencilZFail=7680,this.stencilZPass=7680,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(t){this._alphaTest\u003e0!=t\u003e0\u0026\u0026this.version++,this._alphaTest=t}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\"THREE.Material: '\"+e+\"' parameter is undefined.\");continue}if(\"shading\"===e){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=1===n;continue}const i=this[e];void 0!==i?i\u0026\u0026i.isColor?i.set(n):i\u0026\u0026i.isVector3\u0026\u0026n\u0026\u0026n.isVector3?i.copy(n):this[e]=n:console.warn(\"THREE.\"+this.type+\": '\"+e+\"' is not a property of this material.\")}}toJSON(t){const e=void 0===t||\"string\"==typeof t;e\u0026\u0026(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\"Material\",generator:\"Material.toJSON\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\"\"!==this.name\u0026\u0026(n.name=this.name),this.color\u0026\u0026this.color.isColor\u0026\u0026(n.color=this.color.getHex()),void 0!==this.roughness\u0026\u0026(n.roughness=this.roughness),void 0!==this.metalness\u0026\u0026(n.metalness=this.metalness),void 0!==this.sheen\u0026\u0026(n.sheen=this.sheen),this.sheenColor\u0026\u0026this.sheenColor.isColor\u0026\u0026(n.sheenColor=this.sheenColor.getHex()),void 0!==this.sheenRoughness\u0026\u0026(n.sheenRoughness=this.sheenRoughness),this.emissive\u0026\u0026this.emissive.isColor\u0026\u0026(n.emissive=this.emissive.getHex()),this.emissiveIntensity\u0026\u00261!==this.emissiveIntensity\u0026\u0026(n.emissiveIntensity=this.emissiveIntensity),this.specular\u0026\u0026this.specular.isColor\u0026\u0026(n.specular=this.specular.getHex()),void 0!==this.specularIntensity\u0026\u0026(n.specularIntensity=this.specularIntensity),this.specularColor\u0026\u0026this.specularColor.isColor\u0026\u0026(n.specularColor=this.specularColor.getHex()),void 0!==this.shininess\u0026\u0026(n.shininess=this.shininess),void 0!==this.clearcoat\u0026\u0026(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness\u0026\u0026(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap\u0026\u0026this.clearcoatMap.isTexture\u0026\u0026(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap\u0026\u0026this.clearcoatRoughnessMap.isTexture\u0026\u0026(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap\u0026\u0026this.clearcoatNormalMap.isTexture\u0026\u0026(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map\u0026\u0026this.map.isTexture\u0026\u0026(n.map=this.map.toJSON(t).uuid),this.matcap\u0026\u0026this.matcap.isTexture\u0026\u0026(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap\u0026\u0026this.alphaMap.isTexture\u0026\u0026(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap\u0026\u0026this.lightMap.isTexture\u0026\u0026(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap\u0026\u0026this.aoMap.isTexture\u0026\u0026(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap\u0026\u0026this.bumpMap.isTexture\u0026\u0026(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap\u0026\u0026this.normalMap.isTexture\u0026\u0026(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap\u0026\u0026this.displacementMap.isTexture\u0026\u0026(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap\u0026\u0026this.roughnessMap.isTexture\u0026\u0026(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap\u0026\u0026this.metalnessMap.isTexture\u0026\u0026(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap\u0026\u0026this.emissiveMap.isTexture\u0026\u0026(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap\u0026\u0026this.specularMap.isTexture\u0026\u0026(n.specularMap=this.specularMap.toJSON(t).uuid),this.specularIntensityMap\u0026\u0026this.specularIntensityMap.isTexture\u0026\u0026(n.specularIntensityMap=this.specularIntensityMap.toJSON(t).uuid),this.specularColorMap\u0026\u0026this.specularColorMap.isTexture\u0026\u0026(n.specularColorMap=this.specularColorMap.toJSON(t).uuid),this.envMap\u0026\u0026this.envMap.isTexture\u0026\u0026(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine\u0026\u0026(n.combine=this.combine)),void 0!==this.envMapIntensity\u0026\u0026(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity\u0026\u0026(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio\u0026\u0026(n.refractionRatio=this.refractionRatio),this.gradientMap\u0026\u0026this.gradientMap.isTexture\u0026\u0026(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission\u0026\u0026(n.transmission=this.transmission),this.transmissionMap\u0026\u0026this.transmissionMap.isTexture\u0026\u0026(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness\u0026\u0026(n.thickness=this.thickness),this.thicknessMap\u0026\u0026this.thicknessMap.isTexture\u0026\u0026(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance\u0026\u0026(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor\u0026\u0026(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size\u0026\u0026(n.size=this.size),null!==this.shadowSide\u0026\u0026(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation\u0026\u0026(n.sizeAttenuation=this.sizeAttenuation),1!==this.blending\u0026\u0026(n.blending=this.blending),0!==this.side\u0026\u0026(n.side=this.side),this.vertexColors\u0026\u0026(n.vertexColors=!0),this.opacity\u003c1\u0026\u0026(n.opacity=this.opacity),!0===this.transparent\u0026\u0026(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,void 0!==this.rotation\u0026\u00260!==this.rotation\u0026\u0026(n.rotation=this.rotation),!0===this.polygonOffset\u0026\u0026(n.polygonOffset=!0),0!==this.polygonOffsetFactor\u0026\u0026(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits\u0026\u0026(n.polygonOffsetUnits=this.polygonOffsetUnits),void 0!==this.linewidth\u0026\u00261!==this.linewidth\u0026\u0026(n.linewidth=this.linewidth),void 0!==this.dashSize\u0026\u0026(n.dashSize=this.dashSize),void 0!==this.gapSize\u0026\u0026(n.gapSize=this.gapSize),void 0!==this.scale\u0026\u0026(n.scale=this.scale),!0===this.dithering\u0026\u0026(n.dithering=!0),this.alphaTest\u003e0\u0026\u0026(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage\u0026\u0026(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha\u0026\u0026(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe\u0026\u0026(n.wireframe=this.wireframe),this.wireframeLinewidth\u003e1\u0026\u0026(n.wireframeLinewidth=this.wireframeLinewidth),\"round\"!==this.wireframeLinecap\u0026\u0026(n.wireframeLinecap=this.wireframeLinecap),\"round\"!==this.wireframeLinejoin\u0026\u0026(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.flatShading\u0026\u0026(n.flatShading=this.flatShading),!1===this.visible\u0026\u0026(n.visible=!1),!1===this.toneMapped\u0026\u0026(n.toneMapped=!1),!1===this.fog\u0026\u0026(n.fog=!1),\"{}\"!==JSON.stringify(this.userData)\u0026\u0026(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length\u003e0\u0026\u0026(n.textures=e),r.length\u003e0\u0026\u0026(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}set needsUpdate(t){!0===t\u0026\u0026this.version++}}te.prototype.isMaterial=!0,te.fromType=function(){return null};class ee extends te{constructor(t){super(),this.type=\"MeshBasicMaterial\",this.color=new A(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.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}ee.prototype.isMeshBasicMaterial=!0;const ne=new H,ie=new p;class re{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.name=\"\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t\u0026\u0026this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i\u003cr;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyColorsArray(): color is undefined\",i),r=new A),e[n++]=r.r,e[n++]=r.g,e[n++]=r.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\",i),r=new p),e[n++]=r.x,e[n++]=r.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\",i),r=new H),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\",i),r=new N),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z,e[n++]=r.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e\u003cn;e++)ie.fromBufferAttribute(this,e),ie.applyMatrix3(t),this.setXY(e,ie.x,ie.y);else if(3===this.itemSize)for(let e=0,n=this.count;e\u003cn;e++)ne.fromBufferAttribute(this,e),ne.applyMatrix3(t),this.setXYZ(e,ne.x,ne.y,ne.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e\u003cn;e++)ne.fromBufferAttribute(this,e),ne.applyMatrix4(t),this.setXYZ(e,ne.x,ne.y,ne.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e\u003cn;e++)ne.fromBufferAttribute(this,e),ne.applyNormalMatrix(t),this.setXYZ(e,ne.x,ne.y,ne.z);return this}transformDirection(t){for(let e=0,n=this.count;e\u003cn;e++)ne.fromBufferAttribute(this,e),ne.transformDirection(t),this.setXYZ(e,ne.x,ne.y,ne.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\"\"!==this.name\u0026\u0026(t.name=this.name),35044!==this.usage\u0026\u0026(t.usage=this.usage),0===this.updateRange.offset\u0026\u0026-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}re.prototype.isBufferAttribute=!0;class se extends re{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class ae extends re{constructor(t,e,n){super(new Uint32Array(t),e,n)}}(class extends re{constructor(t,e,n){super(new Uint16Array(t),e,n)}}).prototype.isFloat16BufferAttribute=!0;class oe extends re{constructor(t,e,n){super(new Float32Array(t),e,n)}}let le=0;const ce=new gt,he=new Gt,ue=new H,de=new V,pe=new V,fe=new H;class me extends i{constructor(){super(),Object.defineProperty(this,\"id\",{value:le++}),this.uuid=o(),this.name=\"\",this.type=\"BufferGeometry\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(m(t)?ae:se)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e\u0026\u0026(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new f).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i\u0026\u0026(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox\u0026\u0026this.computeBoundingBox(),null!==this.boundingSphere\u0026\u0026this.computeBoundingSphere(),this}applyQuaternion(t){return ce.makeRotationFromQuaternion(t),this.applyMatrix4(ce),this}rotateX(t){return ce.makeRotationX(t),this.applyMatrix4(ce),this}rotateY(t){return ce.makeRotationY(t),this.applyMatrix4(ce),this}rotateZ(t){return ce.makeRotationZ(t),this.applyMatrix4(ce),this}translate(t,e,n){return ce.makeTranslation(t,e,n),this.applyMatrix4(ce),this}scale(t,e,n){return ce.makeScale(t,e,n),this.applyMatrix4(ce),this}lookAt(t){return he.lookAt(t),he.updateMatrix(),this.applyMatrix4(he.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ue).negate(),this.translate(ue.x,ue.y,ue.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\"position\",new oe(e,3)),this}computeBoundingBox(){null===this.boundingBox\u0026\u0026(this.boundingBox=new V);const t=this.attributes.position,e=this.morphAttributes.position;if(t\u0026\u0026t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingBox.set(new H(-1/0,-1/0,-1/0),new H(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];de.setFromBufferAttribute(n),this.morphTargetsRelative?(fe.addVectors(this.boundingBox.min,de.min),this.boundingBox.expandByPoint(fe),fe.addVectors(this.boundingBox.max,de.max),this.boundingBox.expandByPoint(fe)):(this.boundingBox.expandByPoint(de.min),this.boundingBox.expandByPoint(de.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere\u0026\u0026(this.boundingSphere=new ot);const t=this.attributes.position,e=this.morphAttributes.position;if(t\u0026\u0026t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingSphere.set(new H,1/0);if(t){const n=this.boundingSphere.center;if(de.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];pe.setFromBufferAttribute(n),this.morphTargetsRelative?(fe.addVectors(de.min,pe.min),de.expandByPoint(fe),fe.addVectors(de.max,pe.max),de.expandByPoint(fe)):(de.expandByPoint(pe.min),de.expandByPoint(pe.max))}de.getCenter(n);let i=0;for(let e=0,r=t.count;e\u003cr;e++)fe.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(fe));if(e)for(let r=0,s=e.length;r\u003cs;r++){const s=e[r],a=this.morphTargetsRelative;for(let e=0,r=s.count;e\u003cr;e++)fe.fromBufferAttribute(s,e),a\u0026\u0026(ue.fromBufferAttribute(t,e),fe.add(ue)),i=Math.max(i,n.distanceToSquared(fe))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\");const n=t.array,i=e.position.array,r=e.normal.array,s=e.uv.array,a=i.length/3;!1===this.hasAttribute(\"tangent\")\u0026\u0026this.setAttribute(\"tangent\",new re(new Float32Array(4*a),4));const o=this.getAttribute(\"tangent\").array,l=[],c=[];for(let t=0;t\u003ca;t++)l[t]=new H,c[t]=new H;const h=new H,u=new H,d=new H,f=new p,m=new p,g=new p,v=new H,x=new H;function y(t,e,n){h.fromArray(i,3*t),u.fromArray(i,3*e),d.fromArray(i,3*n),f.fromArray(s,2*t),m.fromArray(s,2*e),g.fromArray(s,2*n),u.sub(h),d.sub(h),m.sub(f),g.sub(f);const r=1/(m.x*g.y-g.x*m.y);isFinite(r)\u0026\u0026(v.copy(u).multiplyScalar(g.y).addScaledVector(d,-m.y).multiplyScalar(r),x.copy(d).multiplyScalar(m.x).addScaledVector(u,-g.x).multiplyScalar(r),l[t].add(v),l[e].add(v),l[n].add(v),c[t].add(x),c[e].add(x),c[n].add(x))}let _=this.groups;0===_.length\u0026\u0026(_=[{start:0,count:n.length}]);for(let t=0,e=_.length;t\u003ce;++t){const e=_[t],i=e.start;for(let t=i,r=i+e.count;t\u003cr;t+=3)y(n[t+0],n[t+1],n[t+2])}const b=new H,M=new H,w=new H,S=new H;function E(t){w.fromArray(r,3*t),S.copy(w);const e=l[t];b.copy(e),b.sub(w.multiplyScalar(w.dot(e))).normalize(),M.crossVectors(S,e);const n=M.dot(c[t])\u003c0?-1:1;o[4*t]=b.x,o[4*t+1]=b.y,o[4*t+2]=b.z,o[4*t+3]=n}for(let t=0,e=_.length;t\u003ce;++t){const e=_[t],i=e.start;for(let t=i,r=i+e.count;t\u003cr;t+=3)E(n[t+0]),E(n[t+1]),E(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\"position\");if(void 0!==e){let n=this.getAttribute(\"normal\");if(void 0===n)n=new re(new Float32Array(3*e.count),3),this.setAttribute(\"normal\",n);else for(let t=0,e=n.count;t\u003ce;t++)n.setXYZ(t,0,0,0);const i=new H,r=new H,s=new H,a=new H,o=new H,l=new H,c=new H,h=new H;if(t)for(let u=0,d=t.count;u\u003cd;u+=3){const d=t.getX(u+0),p=t.getX(u+1),f=t.getX(u+2);i.fromBufferAttribute(e,d),r.fromBufferAttribute(e,p),s.fromBufferAttribute(e,f),c.subVectors(s,r),h.subVectors(i,r),c.cross(h),a.fromBufferAttribute(n,d),o.fromBufferAttribute(n,p),l.fromBufferAttribute(n,f),a.add(c),o.add(c),l.add(c),n.setXYZ(d,a.x,a.y,a.z),n.setXYZ(p,o.x,o.y,o.z),n.setXYZ(f,l.x,l.y,l.z)}else for(let t=0,a=e.count;t\u003ca;t+=3)i.fromBufferAttribute(e,t+0),r.fromBufferAttribute(e,t+1),s.fromBufferAttribute(e,t+2),c.subVectors(s,r),h.subVectors(i,r),c.cross(h),n.setXYZ(t+0,c.x,c.y,c.z),n.setXYZ(t+1,c.x,c.y,c.z),n.setXYZ(t+2,c.x,c.y,c.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\",t);void 0===e\u0026\u0026(e=0,console.warn(\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const r=n[i].array,s=t.attributes[i],a=s.array,o=s.itemSize*e,l=Math.min(a.length,r.length-o);for(let t=0,e=o;t\u003cl;t++,e++)r[e]=a[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e\u003cn;e++)fe.fromBufferAttribute(t,e),fe.normalize(),t.setXYZ(e,fe.x,fe.y,fe.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,r=t.normalized,s=new n.constructor(e.length*i);let a=0,o=0;for(let r=0,l=e.length;r\u003cl;r++){a=t.isInterleavedBufferAttribute?e[r]*t.data.stride+t.offset:e[r]*i;for(let t=0;t\u003ci;t++)s[o++]=n[a++]}return new re(s,i,r)}if(null===this.index)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\"),this;const e=new me,n=this.index.array,i=this.attributes;for(const r in i){const s=t(i[r],n);e.setAttribute(r,s)}const r=this.morphAttributes;for(const i in r){const s=[],a=r[i];for(let e=0,i=a.length;e\u003ci;e++){const i=t(a[e],n);s.push(i)}e.morphAttributes[i]=s}e.morphTargetsRelative=this.morphTargetsRelative;const s=this.groups;for(let t=0,n=s.length;t\u003cn;t++){const n=s[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};if(t.uuid=this.uuid,t.type=this.type,\"\"!==this.name\u0026\u0026(t.name=this.name),Object.keys(this.userData).length\u003e0\u0026\u0026(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]\u0026\u0026(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e\u0026\u0026(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e\u003ci;e++){const i=n[e];s.push(i.toJSON(t.data))}s.length\u003e0\u0026\u0026(i[e]=s,r=!0)}r\u0026\u0026(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length\u003e0\u0026\u0026(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a\u0026\u0026(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new this.constructor).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n\u0026\u0026this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t\u003cr;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const s=t.groups;for(let t=0,e=s.length;t\u003ce;t++){const e=s[t];this.addGroup(e.start,e.count,e.materialIndex)}const a=t.boundingBox;null!==a\u0026\u0026(this.boundingBox=a.clone());const o=t.boundingSphere;return null!==o\u0026\u0026(this.boundingSphere=o.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,void 0!==t.parameters\u0026\u0026(this.parameters=Object.assign({},t.parameters)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}}me.prototype.isBufferGeometry=!0;const ge=new gt,ve=new mt,xe=new ot,ye=new H,_e=new H,be=new H,Me=new H,we=new H,Se=new H,Ee=new H,Te=new H,Ae=new H,Re=new p,Ce=new p,Le=new p,Pe=new H,De=new H;class Ie extends Gt{constructor(t=new me,e=new ee){super(),this.type=\"Mesh\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences\u0026\u0026(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary\u0026\u0026(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),xe.copy(n.boundingSphere),xe.applyMatrix4(r),!1===t.ray.intersectsSphere(xe))return;if(ge.copy(r).invert(),ve.copy(t.ray).applyMatrix4(ge),null!==n.boundingBox\u0026\u0026!1===ve.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,h=n.attributes.uv2,u=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=u.length;n\u003cp;n++){const p=u[n],f=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(r.count,Math.min(p.start+p.count,d.start+d.count));n\u003ci;n+=3){const i=r.getX(n),u=r.getX(n+1),d=r.getX(n+2);s=Ne(this,f,t,ve,a,o,l,c,h,i,u,d),s\u0026\u0026(s.faceIndex=Math.floor(n/3),s.face.materialIndex=p.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),u=Math.min(r.count,d.start+d.count);n\u003cu;n+=3){const u=r.getX(n),d=r.getX(n+1),p=r.getX(n+2);s=Ne(this,i,t,ve,a,o,l,c,h,u,d,p),s\u0026\u0026(s.faceIndex=Math.floor(n/3),e.push(s))}}else if(void 0!==a)if(Array.isArray(i))for(let n=0,r=u.length;n\u003cr;n++){const r=u[n],p=i[r.materialIndex];for(let n=Math.max(r.start,d.start),i=Math.min(a.count,Math.min(r.start+r.count,d.start+d.count));n\u003ci;n+=3){s=Ne(this,p,t,ve,a,o,l,c,h,n,n+1,n+2),s\u0026\u0026(s.faceIndex=Math.floor(n/3),s.face.materialIndex=r.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),r=Math.min(a.count,d.start+d.count);n\u003cr;n+=3){s=Ne(this,i,t,ve,a,o,l,c,h,n,n+1,n+2),s\u0026\u0026(s.faceIndex=Math.floor(n/3),e.push(s))}}}else n.isGeometry\u0026\u0026console.error(\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}function Ne(t,e,n,i,r,s,a,o,l,c,h,u){ye.fromBufferAttribute(r,c),_e.fromBufferAttribute(r,h),be.fromBufferAttribute(r,u);const d=t.morphTargetInfluences;if(s\u0026\u0026d){Ee.set(0,0,0),Te.set(0,0,0),Ae.set(0,0,0);for(let t=0,e=s.length;t\u003ce;t++){const e=d[t],n=s[t];0!==e\u0026\u0026(Me.fromBufferAttribute(n,c),we.fromBufferAttribute(n,h),Se.fromBufferAttribute(n,u),a?(Ee.addScaledVector(Me,e),Te.addScaledVector(we,e),Ae.addScaledVector(Se,e)):(Ee.addScaledVector(Me.sub(ye),e),Te.addScaledVector(we.sub(_e),e),Ae.addScaledVector(Se.sub(be),e)))}ye.add(Ee),_e.add(Te),be.add(Ae)}t.isSkinnedMesh\u0026\u0026(t.boneTransform(c,ye),t.boneTransform(h,_e),t.boneTransform(u,be));const f=function(t,e,n,i,r,s,a,o){let l;if(l=1===e.side?i.intersectTriangle(a,s,r,!0,o):i.intersectTriangle(r,s,a,2!==e.side,o),null===l)return null;De.copy(o),De.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(De);return c\u003cn.near||c\u003en.far?null:{distance:c,point:De.clone(),object:t}}(t,e,n,i,ye,_e,be,Pe);if(f){o\u0026\u0026(Re.fromBufferAttribute(o,c),Ce.fromBufferAttribute(o,h),Le.fromBufferAttribute(o,u),f.uv=Qt.getUV(Pe,ye,_e,be,Re,Ce,Le,new p)),l\u0026\u0026(Re.fromBufferAttribute(l,c),Ce.fromBufferAttribute(l,h),Le.fromBufferAttribute(l,u),f.uv2=Qt.getUV(Pe,ye,_e,be,Re,Ce,Le,new p));const t={a:c,b:h,c:u,normal:new H,materialIndex:0};Qt.getNormal(ye,_e,be,t.normal),f.face=t}return f}Ie.prototype.isMesh=!0;class Oe extends me{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type=\"BoxGeometry\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],h=[];let u=0,d=0;function p(t,e,n,i,r,s,p,f,m,g,v){const x=s/m,y=p/g,_=s/2,b=p/2,M=f/2,w=m+1,S=g+1;let E=0,T=0;const A=new H;for(let s=0;s\u003cS;s++){const a=s*y-b;for(let o=0;o\u003cw;o++){const u=o*x-_;A[t]=u*i,A[e]=a*r,A[n]=M,l.push(A.x,A.y,A.z),A[t]=0,A[e]=0,A[n]=f\u003e0?1:-1,c.push(A.x,A.y,A.z),h.push(o/m),h.push(1-s/g),E+=1}}for(let t=0;t\u003cg;t++)for(let e=0;e\u003cm;e++){const n=u+e+w*t,i=u+e+w*(t+1),r=u+(e+1)+w*(t+1),s=u+(e+1)+w*t;o.push(n,i,s),o.push(i,r,s),T+=6}a.addGroup(d,T,v),d+=T,u+=E}p(\"z\",\"y\",\"x\",-1,-1,n,e,t,s,r,0),p(\"z\",\"y\",\"x\",1,-1,n,e,-t,s,r,1),p(\"x\",\"z\",\"y\",1,1,t,n,e,i,s,2),p(\"x\",\"z\",\"y\",1,-1,t,n,-e,i,s,3),p(\"x\",\"y\",\"z\",1,-1,t,e,n,i,r,4),p(\"x\",\"y\",\"z\",-1,-1,t,e,-n,i,r,5),this.setIndex(o),this.setAttribute(\"position\",new oe(l,3)),this.setAttribute(\"normal\",new oe(c,3)),this.setAttribute(\"uv\",new oe(h,2))}static fromJSON(t){return new Oe(t.width,t.height,t.depth,t.widthSegments,t.heightSegments,t.depthSegments)}}function ze(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const r=t[n][i];r\u0026\u0026(r.isColor||r.isMatrix3||r.isMatrix4||r.isVector2||r.isVector3||r.isVector4||r.isTexture||r.isQuaternion)?e[n][i]=r.clone():Array.isArray(r)?e[n][i]=r.slice():e[n][i]=r}}return e}function Be(t){const e={};for(let n=0;n\u003ct.length;n++){const i=ze(t[n]);for(const t in i)e[t]=i[t]}return e}const Ue={clone:ze,merge:Be};class He extends te{constructor(t){super(),this.type=\"ShaderMaterial\",this.defines={},this.uniforms={},this.vertexShader=\"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\",this.fragmentShader=\"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==t\u0026\u0026(void 0!==t.attributes\u0026\u0026console.error(\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=ze(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.fog=t.fog,this.lights=t.lights,this.clipping=t.clipping,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i\u0026\u0026i.isTexture?e.uniforms[n]={type:\"t\",value:i.toJSON(t).uuid}:i\u0026\u0026i.isColor?e.uniforms[n]={type:\"c\",value:i.getHex()}:i\u0026\u0026i.isVector2?e.uniforms[n]={type:\"v2\",value:i.toArray()}:i\u0026\u0026i.isVector3?e.uniforms[n]={type:\"v3\",value:i.toArray()}:i\u0026\u0026i.isVector4?e.uniforms[n]={type:\"v4\",value:i.toArray()}:i\u0026\u0026i.isMatrix3?e.uniforms[n]={type:\"m3\",value:i.toArray()}:i\u0026\u0026i.isMatrix4?e.uniforms[n]={type:\"m4\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length\u003e0\u0026\u0026(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]\u0026\u0026(n[t]=!0);return Object.keys(n).length\u003e0\u0026\u0026(e.extensions=n),e}}He.prototype.isShaderMaterial=!0;class Fe extends Gt{constructor(){super(),this.type=\"Camera\",this.matrixWorldInverse=new gt,this.projectionMatrix=new gt,this.projectionMatrixInverse=new gt}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}Fe.prototype.isCamera=!0;class Ge extends Fe{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\"PerspectiveCamera\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*a*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*s*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*a*Math.atan(Math.tan(.5*s*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*s*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const a=this.view;if(null!==this.view\u0026\u0026this.view.enabled){const t=a.fullWidth,s=a.fullHeight;r+=a.offsetX*i/t,e-=a.offsetY*n/s,i*=a.width/t,n*=a.height/s}const o=this.filmOffset;0!==o\u0026\u0026(r+=t*o/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view\u0026\u0026(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}Ge.prototype.isPerspectiveCamera=!0;class Ve extends Gt{constructor(t,e,n){if(super(),this.type=\"CubeCamera\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\");this.renderTarget=n;const i=new Ge(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new H(1,0,0)),this.add(i);const r=new Ge(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new H(-1,0,0)),this.add(r);const s=new Ge(90,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new H(0,1,0)),this.add(s);const a=new Ge(90,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new H(0,-1,0)),this.add(a);const o=new Ge(90,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new H(0,0,1)),this.add(o);const l=new Ge(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new H(0,0,-1)),this.add(l)}update(t,e){null===this.parent\u0026\u0026this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.getRenderTarget(),h=t.toneMapping,u=t.xr.enabled;t.toneMapping=0,t.xr.enabled=!1;const d=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=d,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(c),t.toneMapping=h,t.xr.enabled=u,n.texture.needsPMREMUpdate=!0}}class ke extends I{constructor(t,e,n,i,r,s,a,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:301,n,i,r,s,a,o,l,c),this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}ke.prototype.isCubeTexture=!0;class We extends O{constructor(t,e={}){super(t,t,e);const n={width:t,height:t,depth:1},i=[n,n,n,n,n,n];this.texture=new ke(i,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=void 0!==e.generateMipmaps\u0026\u0026e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:1006}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\"\\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 \u003cbegin_vertex\u003e\\n\\t\\t\\t\\t\\t#include \u003cproject_vertex\u003e\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t\",fragmentShader:\"\\n\\n\\t\\t\\t\\tuniform sampler2D tEquirect;\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\t#include \u003ccommon\u003e\\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\"},i=new Oe(5,5,5),r=new He({name:\"CubemapFromEquirect\",uniforms:ze(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});r.uniforms.tEquirect.value=e;const s=new Ie(i,r),a=e.minFilter;1008===e.minFilter\u0026\u0026(e.minFilter=1006);return new Ve(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r\u003c6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}We.prototype.isWebGLCubeRenderTarget=!0;const je=new H,qe=new H,Xe=new f;class Je{constructor(t=new H(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=je.subVectors(n,e).cross(qe.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){const n=t.delta(je),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r\u003c0||r\u003e1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e\u003c0\u0026\u0026n\u003e0||n\u003c0\u0026\u0026e\u003e0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||Xe.getNormalMatrix(t),i=this.coplanarPoint(je).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)\u0026\u0026t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}Je.prototype.isPlane=!0;const Ye=new ot,Ze=new H;class Ke{constructor(t=new Je,e=new Je,n=new Je,i=new Je,r=new Je,s=new Je){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n\u003c6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],h=n[7],u=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],x=n[15];return e[0].setComponents(a-i,h-o,f-u,x-m).normalize(),e[1].setComponents(a+i,h+o,f+u,x+m).normalize(),e[2].setComponents(a+r,h+l,f+d,x+g).normalize(),e[3].setComponents(a-r,h-l,f-d,x-g).normalize(),e[4].setComponents(a-s,h-c,f-p,x-v).normalize(),e[5].setComponents(a+s,h+c,f+p,x+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere\u0026\u0026e.computeBoundingSphere(),Ye.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Ye)}intersectsSprite(t){return Ye.center.set(0,0,0),Ye.radius=.7071067811865476,Ye.applyMatrix4(t.matrixWorld),this.intersectsSphere(Ye)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t\u003c6;t++){if(e[t].distanceToPoint(n)\u003ci)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n\u003c6;n++){const i=e[n];if(Ze.x=i.normal.x\u003e0?t.max.x:t.min.x,Ze.y=i.normal.y\u003e0?t.max.y:t.min.y,Ze.z=i.normal.z\u003e0?t.max.z:t.min.z,i.distanceToPoint(Ze)\u003c0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n\u003c6;n++)if(e[n].distanceToPoint(t)\u003c0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Qe(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e\u0026\u0026null!==n\u0026\u0026(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function $e(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute\u0026\u0026(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute\u0026\u0026(e=e.data);const n=i.get(e);n\u0026\u0026(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version\u003ce.version)\u0026\u0026i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute\u0026\u0026(e=e.data);const s=i.get(e);void 0===s?i.set(e,function(e,i){const r=e.array,s=e.usage,a=t.createBuffer();let o;if(t.bindBuffer(i,a),t.bufferData(i,r,s),e.onUploadCallback(),r instanceof Float32Array)o=5126;else if(r instanceof Uint16Array)if(e.isFloat16BufferAttribute){if(!n)throw new Error(\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\");o=5131}else o=5123;else if(r instanceof Int16Array)o=5122;else if(r instanceof Uint32Array)o=5125;else if(r instanceof Int32Array)o=5124;else if(r instanceof Int8Array)o=5120;else if(r instanceof Uint8Array)o=5121;else{if(!(r instanceof Uint8ClampedArray))throw new Error(\"THREE.WebGLAttributes: Unsupported buffer data format: \"+r);o=5121}return{buffer:a,type:o,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}(e,r)):s.version\u003ce.version\u0026\u0026(!function(e,i,r){const s=i.array,a=i.updateRange;t.bindBuffer(r,e),-1===a.count?t.bufferSubData(r,0,s):(n?t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s,a.offset,a.count):t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s.subarray(a.offset,a.offset+a.count)),a.count=-1)}(s.buffer,e,r),s.version=e.version)}}}class tn extends me{constructor(t=1,e=1,n=1,i=1){super(),this.type=\"PlaneGeometry\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const r=t/2,s=e/2,a=Math.floor(n),o=Math.floor(i),l=a+1,c=o+1,h=t/a,u=e/o,d=[],p=[],f=[],m=[];for(let t=0;t\u003cc;t++){const e=t*u-s;for(let n=0;n\u003cl;n++){const i=n*h-r;p.push(i,-e,0),f.push(0,0,1),m.push(n/a),m.push(1-t/o)}}for(let t=0;t\u003co;t++)for(let e=0;e\u003ca;e++){const n=e+l*t,i=e+l*(t+1),r=e+1+l*(t+1),s=e+1+l*t;d.push(n,i,s),d.push(i,r,s)}this.setIndex(d),this.setAttribute(\"position\",new oe(p,3)),this.setAttribute(\"normal\",new oe(f,3)),this.setAttribute(\"uv\",new oe(m,2))}static fromJSON(t){return new tn(t.width,t.height,t.widthSegments,t.heightSegments)}}const en={alphamap_fragment:\"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\",alphamap_pars_fragment:\"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",alphatest_fragment:\"#ifdef USE_ALPHATEST\\n\\tif ( diffuseColor.a \u003c alphaTest ) discard;\\n#endif\",alphatest_pars_fragment:\"#ifdef USE_ALPHATEST\\n\\tuniform float alphaTest;\\n#endif\",aomap_fragment:\"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\\n\\t#endif\\n#endif\",aomap_pars_fragment:\"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\",begin_vertex:\"vec3 transformed = vec3( position );\",beginnormal_vertex:\"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\",bsdfs:\"vec3 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 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}\\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float 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\\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\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 \u003e 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 ] ) \u003c 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}\\nfloat 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}\\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\",bumpmap_pars_fragment:\"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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\",clipping_planes_fragment:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES \u003c NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i \u003c NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) \u0026\u0026 clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\",clipping_planes_pars_fragment:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\",clipping_planes_pars_vertex:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvarying vec3 vClipPosition;\\n#endif\",clipping_planes_vertex:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\",color_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\",color_pars_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_pars_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_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\",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; }\\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 color ) { return dot( color, vec3( 0.3333 ) ); }\\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};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\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}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\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}\",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 \u003e absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x \u003e absDirection.y )\\n\\t\\t\\t\\tface = direction.x \u003e 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y \u003e 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z \u003e absDirection.y )\\n\\t\\t\\t\\tface = direction.z \u003e 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y \u003e 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\\tvec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\\n\\t\\tif ( face \u003e 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 r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness \u003e= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness \u003e= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness \u003e= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness \u003e= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), 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\",defaultnormal_vertex:\"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\",displacementmap_pars_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\",displacementmap_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\",emissivemap_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\",emissivemap_pars_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\",encodings_fragment:\"gl_FragColor = linearToOutputTexel( gl_FragColor );\",encodings_pars_fragment:\"vec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 LinearTosRGB( 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}\",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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\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\",envmap_common_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\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\",envmap_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\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\",envmap_pars_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\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\",envmap_physical_pars_fragment:\"#if defined( USE_ENVMAP )\\n\\tvec3 getIBLIrradiance( const in vec3 normal ) {\\n\\t\\t#if defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, 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#if defined( 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, 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#endif\",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\",fog_vertex:\"#ifdef USE_FOG\\n\\tvFogDepth = - mvPosition.z;\\n#endif\",fog_pars_vertex:\"#ifdef USE_FOG\\n\\tvarying float vFogDepth;\\n#endif\",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\",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\",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\\treturn ( coord.x \u003c 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\",lightmap_fragment:\"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\treflectedLight.indirectDiffuse += lightMapIrradiance;\\n#endif\",lightmap_pars_fragment:\"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\",lights_lambert_vertex:\"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\\n#endif\\n#if NUM_POINT_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\",lights_pars_begin:\"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\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\\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tif ( cutoffDistance \u003e 0.0 ) {\\n\\t\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\t}\\n\\t\\treturn distanceFalloff;\\n\\t#else\\n\\t\\tif ( cutoffDistance \u003e 0.0 \u0026\u0026 decayExponent \u003e 0.0 ) {\\n\\t\\t\\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t\\t}\\n\\t\\treturn 1.0;\\n\\t#endif\\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 \u003e 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, const in GeometricContext geometry, 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 \u003e 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 GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\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 \u003e 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 GeometricContext geometry, out IncidentLight light ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\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 \u003e 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 \u003e 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 \u003e 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\",lights_toon_fragment:\"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\",lights_toon_pars_fragment:\"varying vec3 vViewPosition;\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, 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#define Material_LightProbeLOD( material )\\t(0)\",lights_phong_fragment:\"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\",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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, 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#define Material_LightProbeLOD( material )\\t(0)\",lights_physical_fragment:\"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\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\\t#ifdef SPECULAR\\n\\t\\tfloat specularIntensityFactor = specularIntensity;\\n\\t\\tvec3 specularColorFactor = specularColor;\\n\\t\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\t\\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\\n\\t\\t#endif\\n\\t\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\t\\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\\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( ( ior - 1.0 ) / ( 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, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\\n\\tmaterial.sheenColor = sheenColor;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\\n\\t#endif\\n\\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\\n\\t#endif\\n#endif\",lights_physical_pars_fragment:\"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat roughness;\\n\\tvec3 specularColor;\\n\\tfloat specularF90;\\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_SHEEN\\n\\t\\tvec3 sheenColor;\\n\\t\\tfloat sheenRoughness;\\n\\t#endif\\n};\\nvec3 clearcoatSpecular = vec3( 0.0 );\\nvec3 sheenSpecular = vec3( 0.0 );\\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 \u003c 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\\n\\tfloat b = roughness \u003c 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 \u003c 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}\\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\\tvec2 fab = DFGApprox( normal, viewDir, roughness );\\n\\tvec3 FssEss = specularColor * fab.x + specularF90 * fab.y;\\n\\tfloat Ess = fab.x + fab.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\n#if NUM_RECT_AREA_LIGHTS \u003e 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = dotNLcc * directLight.color;\\n\\t\\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\\n\\t#endif\\n\\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, 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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\\n\\t#endif\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\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}\",lights_fragment_begin:\"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef USE_CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointLightInfo( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_SPOT_LIGHT_SHADOWS \u003e 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotLightInfo( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, 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\\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\\n\\t#if ( NUM_HEMI_LIGHTS \u003e 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\\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\",lights_fragment_maps:\"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD ) \u0026\u0026 defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getIBLIrradiance( geometry.normal );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) \u0026\u0026 defined( RE_IndirectSpecular )\\n\\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\\n\\t#endif\\n#endif\",lights_fragment_end:\"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\",logdepthbuf_fragment:\"#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\",logdepthbuf_pars_fragment:\"#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\",logdepthbuf_pars_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\",logdepthbuf_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\",map_fragment:\"#ifdef USE_MAP\\n\\tvec4 sampledDiffuseColor = texture2D( map, vUv );\\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#endif\\n\\tdiffuseColor *= sampledDiffuseColor;\\n#endif\",map_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\",map_particle_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\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\",map_particle_pars_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",metalnessmap_fragment:\"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\",metalnessmap_pars_fragment:\"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\",morphcolor_vertex:\"#if defined( USE_MORPHCOLORS ) \u0026\u0026 defined( MORPHTARGETS_TEXTURE )\\n\\tvColor *= morphTargetBaseInfluence;\\n\\tfor ( int i = 0; i \u003c 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\",morphnormal_vertex:\"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i \u003c MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\t\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\t\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\t\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n\\t#endif\\n#endif\",morphtarget_pars_vertex:\"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\\n\\t\\tuniform sampler2DArray morphTargetsTexture;\\n\\t\\tuniform ivec2 morphTargetsTextureSize;\\n\\t\\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\\n\\t\\t\\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\\n\\t\\t\\tint y = texelIndex / morphTargetsTextureSize.x;\\n\\t\\t\\tint x = texelIndex - y * morphTargetsTextureSize.x;\\n\\t\\t\\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\\n\\t\\t\\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\\n\\t\\t}\\n\\t#else\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t\\t#else\\n\\t\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\",morphtarget_vertex:\"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\t#ifdef MORPHTARGETS_TEXTURE\\n\\t\\tfor ( int i = 0; i \u003c MORPHTARGETS_COUNT; i ++ ) {\\n\\t\\t\\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\\n\\t\\t}\\n\\t#else\\n\\t\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\t\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\t\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\t\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t\\t#ifndef USE_MORPHNORMALS\\n\\t\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t\\t#endif\\n\\t#endif\\n#endif\",normal_fragment_begin:\"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\",normal_fragment_maps:\"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\",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\",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\",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\",normalmap_pars_fragment:\"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) \u0026\u0026 ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\",clearcoat_normal_fragment_begin:\"#ifdef USE_CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\",clearcoat_normal_fragment_maps:\"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\",clearcoat_pars_fragment:\"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\",output_fragment:\"#ifdef OPAQUE\\ndiffuseColor.a = 1.0;\\n#endif\\n#ifdef USE_TRANSMISSION\\ndiffuseColor.a *= transmissionAlpha + 0.1;\\n#endif\\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\",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.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( 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( 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 linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\",premultiplied_alpha_fragment:\"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\",project_vertex:\"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\",dithering_fragment:\"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\",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\",roughnessmap_fragment:\"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\",roughnessmap_pars_fragment:\"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\",shadowmap_pars_fragment:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 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 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 \u003e 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\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 \u003e 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 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 shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x \u003e= 0.0, shadowCoord.x \u003c= 1.0, shadowCoord.y \u003e= 0.0, shadowCoord.y \u003c= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z \u003c= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\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 shadow;\\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 \u003e= almostOne ) {\\n\\t\\t\\tif ( v.z \u003e 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x \u003e= 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 \u003e= 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 shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\",shadowmap_pars_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 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 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 \u003e 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\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 \u003e 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 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\",shadowmap_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0 || NUM_SPOT_LIGHT_SHADOWS \u003e 0 || NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\",shadowmask_pars_fragment:\"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, 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 \u003e 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, 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}\",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\",skinning_pars_vertex:\"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\tuniform highp sampler2D boneTexture;\\n\\tuniform int boneTextureSize;\\n\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\tfloat j = i * 4.0;\\n\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\ty = dy * ( y + 0.5 );\\n\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\treturn bone;\\n\\t}\\n#endif\",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\",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\",specularmap_fragment:\"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\",specularmap_pars_fragment:\"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\",tonemapping_fragment:\"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\",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 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}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\",transmission_fragment:\"#ifdef USE_TRANSMISSION\\n\\tfloat transmissionAlpha = 1.0;\\n\\tfloat transmissionFactor = transmission;\\n\\tfloat thicknessFactor = thickness;\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSMAP\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 n = inverseTransformDirection( normal, viewMatrix );\\n\\tvec4 transmission = getIBLVolumeRefraction(\\n\\t\\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationColor, attenuationDistance );\\n\\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\\n\\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\\n#endif\",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\\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 framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\\n\\t\\t#ifdef texture2DLodEXT\\n\\t\\t\\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#else\\n\\t\\t\\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\\n\\t\\t#endif\\n\\t}\\n\\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tif ( attenuationDistance == 0.0 ) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\\t\\t\\treturn transmittance * radiance;\\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 ior, const in float thickness,\\n\\t\\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\\n\\t\\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\\n\\t\\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\\n\\t}\\n#endif\",uv_pars_fragment:\"#if ( defined( USE_UV ) \u0026\u0026 ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\",uv_pars_vertex:\"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\",uv_vertex:\"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\",uv2_pars_fragment:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\",uv2_pars_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\",uv2_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\",worldpos_vertex:\"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\",background_vert:\"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}\",background_frag:\"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tgl_FragColor = texture2D( t2D, vUv );\\n\\t#ifdef DECODE_VIDEO_TEXTURE\\n\\t\\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\\n\\t#endif\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",cube_vert:\"varying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\tgl_Position.z = gl_Position.w;\\n}\",cube_frag:\"#include \u003cenvmap_common_pars_fragment\u003e\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \u003ccube_uv_reflection_fragment\u003e\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",depth_vert:\"#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \u003cbeginnormal_vertex\u003e\\n\\t\\t#include \u003cmorphnormal_vertex\u003e\\n\\t\\t#include \u003cskinnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\",depth_frag:\"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003clogdepthbuf_fragment\u003e\\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#endif\\n}\",distanceRGBA_vert:\"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \u003cbeginnormal_vertex\u003e\\n\\t\\t#include \u003cmorphnormal_vertex\u003e\\n\\t\\t#include \u003cskinnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvWorldPosition = worldPosition.xyz;\\n}\",distanceRGBA_frag:\"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main () {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\",equirect_vert:\"varying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n}\",equirect_frag:\"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",linedashed_vert:\"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",linedashed_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tif ( mod( vLineDistance, totalSize ) \u003e dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n}\",meshbasic_vert:\"#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\\n\\t\\t#include \u003cbeginnormal_vertex\u003e\\n\\t\\t#include \u003cmorphnormal_vertex\u003e\\n\\t\\t#include \u003cskinbase_vertex\u003e\\n\\t\\t#include \u003cskinnormal_vertex\u003e\\n\\t\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshbasic_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\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, vUv2 );\\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 \u003caomap_fragment\u003e\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshlambert_vert:\"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003clights_lambert_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshlambert_frag:\"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cshadowmask_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \u003clightmap_fragment\u003e\\n\\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshmatcap_vert:\"#define MATCAP\\nvarying vec3 vViewPosition;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cnormal_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n}\",meshmatcap_frag:\"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#include \u003ccommon\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cnormal_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\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 \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshnormal_vert:\"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cnormal_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\",meshnormal_frag:\"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cnormal_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n\\t#ifdef OPAQUE\\n\\t\\tgl_FragColor.a = 1.0;\\n\\t#endif\\n}\",meshphong_vert:\"#define PHONG\\nvarying vec3 vViewPosition;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cnormal_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshphong_frag:\"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cnormal_pars_fragment\u003e\\n#include \u003clights_phong_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#include \u003clights_phong_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshphysical_vert:\"#define STANDARD\\nvarying vec3 vViewPosition;\\n#ifdef USE_TRANSMISSION\\n\\tvarying vec3 vWorldPosition;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cnormal_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition.xyz;\\n#endif\\n}\",meshphysical_frag:\"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define IOR\\n\\t#define 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 SPECULAR\\n\\tuniform float specularIntensity;\\n\\tuniform vec3 specularColor;\\n\\t#ifdef USE_SPECULARINTENSITYMAP\\n\\t\\tuniform sampler2D specularIntensityMap;\\n\\t#endif\\n\\t#ifdef USE_SPECULARCOLORMAP\\n\\t\\tuniform sampler2D specularColorMap;\\n\\t#endif\\n#endif\\n#ifdef USE_CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheenColor;\\n\\tuniform float sheenRoughness;\\n\\t#ifdef USE_SHEENCOLORMAP\\n\\t\\tuniform sampler2D sheenColorMap;\\n\\t#endif\\n\\t#ifdef USE_SHEENROUGHNESSMAP\\n\\t\\tuniform sampler2D sheenRoughnessMap;\\n\\t#endif\\n#endif\\nvarying vec3 vViewPosition;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_physical_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cnormal_pars_fragment\u003e\\n#include \u003clights_physical_pars_fragment\u003e\\n#include \u003ctransmission_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003cclearcoat_pars_fragment\u003e\\n#include \u003croughnessmap_pars_fragment\u003e\\n#include \u003cmetalnessmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003croughnessmap_fragment\u003e\\n\\t#include \u003cmetalnessmap_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cclearcoat_normal_fragment_begin\u003e\\n\\t#include \u003cclearcoat_normal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#include \u003clights_physical_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\\n\\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\\n\\t#include \u003ctransmission_fragment\u003e\\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 + sheenSpecular;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT\\n\\t\\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\\n\\t\\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\\n\\t#endif\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshtoon_vert:\"#define TOON\\nvarying vec3 vViewPosition;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cnormal_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshtoon_frag:\"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cgradientmap_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cnormal_pars_fragment\u003e\\n#include \u003clights_toon_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#include \u003clights_toon_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",points_vert:\"uniform float size;\\nuniform float scale;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cmorphcolor_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\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 \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",points_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cmap_particle_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_particle_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n}\",shadow_vert:\"#include \u003ccommon\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",shadow_frag:\"uniform vec3 color;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cshadowmask_pars_fragment\u003e\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n}\",sprite_vert:\"uniform float rotation;\\nuniform vec2 center;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\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 \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",sprite_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003calphatest_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\t#include \u003coutput_fragment\u003e\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n}\"},nn={common:{diffuse:{value:new A(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new f},uv2Transform:{value:new f},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new p(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new A(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new A(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new f}},sprite:{diffuse:{value:new A(16777215)},opacity:{value:1},center:{value:new p(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new f}}},rn={basic:{uniforms:Be([nn.common,nn.specularmap,nn.envmap,nn.aomap,nn.lightmap,nn.fog]),vertexShader:en.meshbasic_vert,fragmentShader:en.meshbasic_frag},lambert:{uniforms:Be([nn.common,nn.specularmap,nn.envmap,nn.aomap,nn.lightmap,nn.emissivemap,nn.fog,nn.lights,{emissive:{value:new A(0)}}]),vertexShader:en.meshlambert_vert,fragmentShader:en.meshlambert_frag},phong:{uniforms:Be([nn.common,nn.specularmap,nn.envmap,nn.aomap,nn.lightmap,nn.emissivemap,nn.bumpmap,nn.normalmap,nn.displacementmap,nn.fog,nn.lights,{emissive:{value:new A(0)},specular:{value:new A(1118481)},shininess:{value:30}}]),vertexShader:en.meshphong_vert,fragmentShader:en.meshphong_frag},standard:{uniforms:Be([nn.common,nn.envmap,nn.aomap,nn.lightmap,nn.emissivemap,nn.bumpmap,nn.normalmap,nn.displacementmap,nn.roughnessmap,nn.metalnessmap,nn.fog,nn.lights,{emissive:{value:new A(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:en.meshphysical_vert,fragmentShader:en.meshphysical_frag},toon:{uniforms:Be([nn.common,nn.aomap,nn.lightmap,nn.emissivemap,nn.bumpmap,nn.normalmap,nn.displacementmap,nn.gradientmap,nn.fog,nn.lights,{emissive:{value:new A(0)}}]),vertexShader:en.meshtoon_vert,fragmentShader:en.meshtoon_frag},matcap:{uniforms:Be([nn.common,nn.bumpmap,nn.normalmap,nn.displacementmap,nn.fog,{matcap:{value:null}}]),vertexShader:en.meshmatcap_vert,fragmentShader:en.meshmatcap_frag},points:{uniforms:Be([nn.points,nn.fog]),vertexShader:en.points_vert,fragmentShader:en.points_frag},dashed:{uniforms:Be([nn.common,nn.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:en.linedashed_vert,fragmentShader:en.linedashed_frag},depth:{uniforms:Be([nn.common,nn.displacementmap]),vertexShader:en.depth_vert,fragmentShader:en.depth_frag},normal:{uniforms:Be([nn.common,nn.bumpmap,nn.normalmap,nn.displacementmap,{opacity:{value:1}}]),vertexShader:en.meshnormal_vert,fragmentShader:en.meshnormal_frag},sprite:{uniforms:Be([nn.sprite,nn.fog]),vertexShader:en.sprite_vert,fragmentShader:en.sprite_frag},background:{uniforms:{uvTransform:{value:new f},t2D:{value:null}},vertexShader:en.background_vert,fragmentShader:en.background_frag},cube:{uniforms:Be([nn.envmap,{opacity:{value:1}}]),vertexShader:en.cube_vert,fragmentShader:en.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:en.equirect_vert,fragmentShader:en.equirect_frag},distanceRGBA:{uniforms:Be([nn.common,nn.displacementmap,{referencePosition:{value:new H},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:en.distanceRGBA_vert,fragmentShader:en.distanceRGBA_frag},shadow:{uniforms:Be([nn.lights,nn.fog,{color:{value:new A(0)},opacity:{value:1}}]),vertexShader:en.shadow_vert,fragmentShader:en.shadow_frag}};function sn(t,e,n,i,r,s){const a=new A(0);let o,l,c=!0===r?0:1,h=null,u=0,d=null;function p(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,s)}return{getClearColor:function(){return a},setClearColor:function(t,e=1){a.set(t),c=e,p(a,c)},getClearAlpha:function(){return c},setClearAlpha:function(t){c=t,p(a,c)},render:function(n,r){let s=!1,f=!0===r.isScene?r.background:null;f\u0026\u0026f.isTexture\u0026\u0026(f=e.get(f));const m=t.xr,g=m.getSession\u0026\u0026m.getSession();g\u0026\u0026\"additive\"===g.environmentBlendMode\u0026\u0026(f=null),null===f?p(a,c):f\u0026\u0026f.isColor\u0026\u0026(p(f,1),s=!0),(t.autoClear||s)\u0026\u0026t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),f\u0026\u0026(f.isCubeTexture||306===f.mapping)?(void 0===l\u0026\u0026(l=new Ie(new Oe(1,1,1),new He({name:\"BackgroundCubeMaterial\",uniforms:ze(rn.cube.uniforms),vertexShader:rn.cube.vertexShader,fragmentShader:rn.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),l.geometry.deleteAttribute(\"normal\"),l.geometry.deleteAttribute(\"uv\"),l.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(l.material,\"envMap\",{get:function(){return this.uniforms.envMap.value}}),i.update(l)),l.material.uniforms.envMap.value=f,l.material.uniforms.flipEnvMap.value=f.isCubeTexture\u0026\u0026!1===f.isRenderTargetTexture?-1:1,h===f\u0026\u0026u===f.version\u0026\u0026d===t.toneMapping||(l.material.needsUpdate=!0,h=f,u=f.version,d=t.toneMapping),l.layers.enableAll(),n.unshift(l,l.geometry,l.material,0,0,null)):f\u0026\u0026f.isTexture\u0026\u0026(void 0===o\u0026\u0026(o=new Ie(new tn(2,2),new He({name:\"BackgroundMaterial\",uniforms:ze(rn.background.uniforms),vertexShader:rn.background.vertexShader,fragmentShader:rn.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\"normal\"),Object.defineProperty(o.material,\"map\",{get:function(){return this.uniforms.t2D.value}}),i.update(o)),o.material.uniforms.t2D.value=f,!0===f.matrixAutoUpdate\u0026\u0026f.updateMatrix(),o.material.uniforms.uvTransform.value.copy(f.matrix),h===f\u0026\u0026u===f.version\u0026\u0026d===t.toneMapping||(o.material.needsUpdate=!0,h=f,u=f.version,d=t.toneMapping),o.layers.enableAll(),n.unshift(o,o.geometry,o.material,0,0,null))}}}function an(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get(\"OES_vertex_array_object\"),a=i.isWebGL2||null!==s,o={},l=p(null);let c=l,h=!1;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function d(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function p(t){const e=[],n=[],i=[];for(let t=0;t\u003cr;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function f(){const t=c.newAttributes;for(let e=0,n=t.length;e\u003cn;e++)t[e]=0}function m(t){g(t,0)}function g(n,r){const s=c.newAttributes,a=c.enabledAttributes,o=c.attributeDivisors;if(s[n]=1,0===a[n]\u0026\u0026(t.enableVertexAttribArray(n),a[n]=1),o[n]!==r){(i.isWebGL2?t:e.get(\"ANGLE_instanced_arrays\"))[i.isWebGL2?\"vertexAttribDivisor\":\"vertexAttribDivisorANGLE\"](n,r),o[n]=r}}function v(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,r=n.length;i\u003cr;i++)n[i]!==e[i]\u0026\u0026(t.disableVertexAttribArray(i),n[i]=0)}function x(e,n,r,s,a,o){!0!==i.isWebGL2||5124!==r\u0026\u00265125!==r?t.vertexAttribPointer(e,n,r,s,a,o):t.vertexAttribIPointer(e,n,r,a,o)}function y(){_(),h=!0,c!==l\u0026\u0026(c=l,u(c.object))}function _(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(r,l,d,y,_){let b=!1;if(a){const e=function(e,n,r){const a=!0===r.wireframe;let l=o[e.id];void 0===l\u0026\u0026(l={},o[e.id]=l);let c=l[n.id];void 0===c\u0026\u0026(c={},l[n.id]=c);let h=c[a];void 0===h\u0026\u0026(h=p(i.isWebGL2?t.createVertexArray():s.createVertexArrayOES()),c[a]=h);return h}(y,d,l);c!==e\u0026\u0026(c=e,u(c.object)),b=function(t,e,n,i){const r=c.attributes,s=e.attributes;let a=0;const o=n.getAttributes();for(const e in o){if(o[e].location\u003e=0){const n=r[e];let i=s[e];if(void 0===i\u0026\u0026(\"instanceMatrix\"===e\u0026\u0026t.instanceMatrix\u0026\u0026(i=t.instanceMatrix),\"instanceColor\"===e\u0026\u0026t.instanceColor\u0026\u0026(i=t.instanceColor)),void 0===n)return!0;if(n.attribute!==i)return!0;if(i\u0026\u0026n.data!==i.data)return!0;a++}}return c.attributesNum!==a||c.index!==i}(r,y,d,_),b\u0026\u0026function(t,e,n,i){const r={},s=e.attributes;let a=0;const o=n.getAttributes();for(const e in o){if(o[e].location\u003e=0){let n=s[e];void 0===n\u0026\u0026(\"instanceMatrix\"===e\u0026\u0026t.instanceMatrix\u0026\u0026(n=t.instanceMatrix),\"instanceColor\"===e\u0026\u0026t.instanceColor\u0026\u0026(n=t.instanceColor));const i={};i.attribute=n,n\u0026\u0026n.data\u0026\u0026(i.data=n.data),r[e]=i,a++}}c.attributes=r,c.attributesNum=a,c.index=i}(r,y,d,_)}else{const t=!0===l.wireframe;c.geometry===y.id\u0026\u0026c.program===d.id\u0026\u0026c.wireframe===t||(c.geometry=y.id,c.program=d.id,c.wireframe=t,b=!0)}null!==_\u0026\u0026n.update(_,34963),(b||h)\u0026\u0026(h=!1,function(r,s,a,o){if(!1===i.isWebGL2\u0026\u0026(r.isInstancedMesh||o.isInstancedBufferGeometry)\u0026\u0026null===e.get(\"ANGLE_instanced_arrays\"))return;f();const l=o.attributes,c=a.getAttributes(),h=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i.location\u003e=0){let s=l[e];if(void 0===s\u0026\u0026(\"instanceMatrix\"===e\u0026\u0026r.instanceMatrix\u0026\u0026(s=r.instanceMatrix),\"instanceColor\"===e\u0026\u0026r.instanceColor\u0026\u0026(s=r.instanceColor)),void 0!==s){const e=s.normalized,a=s.itemSize,l=n.get(s);if(void 0===l)continue;const c=l.buffer,h=l.type,u=l.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,l=n.stride,d=s.offset;if(n.isInstancedInterleavedBuffer){for(let t=0;t\u003ci.locationSize;t++)g(i.location+t,n.meshPerAttribute);!0!==r.isInstancedMesh\u0026\u0026void 0===o._maxInstanceCount\u0026\u0026(o._maxInstanceCount=n.meshPerAttribute*n.count)}else for(let t=0;t\u003ci.locationSize;t++)m(i.location+t);t.bindBuffer(34962,c);for(let t=0;t\u003ci.locationSize;t++)x(i.location+t,a/i.locationSize,h,e,l*u,(d+a/i.locationSize*t)*u)}else{if(s.isInstancedBufferAttribute){for(let t=0;t\u003ci.locationSize;t++)g(i.location+t,s.meshPerAttribute);!0!==r.isInstancedMesh\u0026\u0026void 0===o._maxInstanceCount\u0026\u0026(o._maxInstanceCount=s.meshPerAttribute*s.count)}else for(let t=0;t\u003ci.locationSize;t++)m(i.location+t);t.bindBuffer(34962,c);for(let t=0;t\u003ci.locationSize;t++)x(i.location+t,a/i.locationSize,h,e,a*u,a/i.locationSize*t*u)}}else if(void 0!==h){const n=h[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i.location,n);break;case 3:t.vertexAttrib3fv(i.location,n);break;case 4:t.vertexAttrib4fv(i.location,n);break;default:t.vertexAttrib1fv(i.location,n)}}}}v()}(r,l,d,y),null!==_\u0026\u0026t.bindBuffer(34963,n.get(_).buffer))},reset:y,resetDefaultState:_,dispose:function(){y();for(const t in o){const e=o[t];for(const t in e){const n=e[t];for(const t in n)d(n[t].object),delete n[t];delete e[t]}delete o[t]}},releaseStatesOfGeometry:function(t){if(void 0===o[t.id])return;const e=o[t.id];for(const t in e){const n=e[t];for(const t in n)d(n[t].object),delete n[t];delete e[t]}delete o[t.id]},releaseStatesOfProgram:function(t){for(const e in o){const n=o[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)d(i[t].object),delete i[t];delete n[t.id]}},initAttributes:f,enableAttribute:m,disableUnusedAttributes:v}}function on(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,a,o){if(0===o)return;let l,c;if(r)l=t,c=\"drawArraysInstanced\";else if(l=e.get(\"ANGLE_instanced_arrays\"),c=\"drawArraysInstancedANGLE\",null===l)return void console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");l[c](s,i,a,o),n.update(a,s,o)}}function ln(t,e,n){let i;function r(e){if(\"highp\"===e){if(t.getShaderPrecisionFormat(35633,36338).precision\u003e0\u0026\u0026t.getShaderPrecisionFormat(35632,36338).precision\u003e0)return\"highp\";e=\"mediump\"}return\"mediump\"===e\u0026\u0026t.getShaderPrecisionFormat(35633,36337).precision\u003e0\u0026\u0026t.getShaderPrecisionFormat(35632,36337).precision\u003e0?\"mediump\":\"lowp\"}const s=\"undefined\"!=typeof WebGL2RenderingContext\u0026\u0026t instanceof WebGL2RenderingContext||\"undefined\"!=typeof WebGL2ComputeRenderingContext\u0026\u0026t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:\"highp\";const o=r(a);o!==a\u0026\u0026(console.warn(\"THREE.WebGLRenderer:\",a,\"not supported, using\",o,\"instead.\"),a=o);const l=s||e.has(\"WEBGL_draw_buffers\"),c=!0===n.logarithmicDepthBuffer,h=t.getParameter(34930),u=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),f=t.getParameter(34921),m=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),x=u\u003e0,y=s||e.has(\"OES_texture_float\");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\"EXT_texture_filter_anisotropic\")){const n=e.get(\"EXT_texture_filter_anisotropic\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:u,maxTextureSize:d,maxCubemapSize:p,maxAttributes:f,maxVertexUniforms:m,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:x,floatFragmentTextures:y,floatVertexTextures:x\u0026\u0026y,maxSamples:s?t.getParameter(36183):0}}function cn(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new Je,o=new f,l={value:null,needsUpdate:!1};function c(){l.value!==n\u0026\u0026(l.value=n,l.needsUpdate=i\u003e0),e.numPlanes=i,e.numIntersection=0}function h(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length\u003ce)\u0026\u0026(c=new Float32Array(e));for(let e=0,n=i;e!==s;++e,n+=4)a.copy(t[e]).applyMatrix4(r,o),a.normal.toArray(c,n),c[n+3]=a.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=s,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,s){const a=0!==t.length||e||0!==i||r;return r=e,n=h(t,s,0),i=t.length,a},this.beginShadows=function(){s=!0,h(null)},this.endShadows=function(){s=!1,c()},this.setState=function(e,a,o){const u=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,f=t.get(e);if(!r||null===u||0===u.length||s\u0026\u0026!p)s?h(null):c();else{const t=s?0:i,e=4*t;let r=f.clippingState||null;l.value=r,r=h(u,a,e,o);for(let t=0;t!==e;++t)r[t]=n[t];f.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function hn(t){let e=new WeakMap;function n(t,e){return 303===e?t.mapping=301:304===e\u0026\u0026(t.mapping=302),t}function i(t){const n=t.target;n.removeEventListener(\"dispose\",i);const r=e.get(n);void 0!==r\u0026\u0026(e.delete(n),r.dispose())}return{get:function(r){if(r\u0026\u0026r.isTexture\u0026\u0026!1===r.isRenderTargetTexture){const s=r.mapping;if(303===s||304===s){if(e.has(r)){return n(e.get(r).texture,r.mapping)}{const s=r.image;if(s\u0026\u0026s.height\u003e0){const a=new We(s.height/2);return a.fromEquirectangularTexture(t,r),e.set(r,a),r.addEventListener(\"dispose\",i),n(a.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}rn.physical={uniforms:Be([rn.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new p(1,1)},clearcoatNormalMap:{value:null},sheen:{value:0},sheenColor:{value:new A(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new p},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new A(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new A(1,1,1)},specularColorMap:{value:null}}]),vertexShader:en.meshphysical_vert,fragmentShader:en.meshphysical_frag};class un extends Fe{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type=\"OrthographicCamera\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){null===this.view\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,a=i+e,o=i-e;if(null!==this.view\u0026\u0026this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view\u0026\u0026(e.object.view=Object.assign({},this.view)),e}}un.prototype.isOrthographicCamera=!0;const dn=[.125,.215,.35,.446,.526,.582],pn=new un,fn=new A;let mn=null;const gn=(1+Math.sqrt(5))/2,vn=1/gn,xn=[new H(1,1,1),new H(-1,1,1),new H(1,1,-1),new H(-1,1,-1),new H(0,gn,vn),new H(0,gn,-vn),new H(vn,0,gn),new H(-vn,0,gn),new H(gn,vn,0),new H(-gn,vn,0)];class yn{constructor(t){this._renderer=t,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)}fromScene(t,e=0,n=.1,i=100){mn=this._renderer.getRenderTarget(),this._setSize(256);const r=this._allocateTargets();return r.depthBuffer=!0,this._sceneToCubeUV(t,n,i,r),e\u003e0\u0026\u0026this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t,e=null){return this._fromTexture(t,e)}fromCubemap(t,e=null){return this._fromTexture(t,e)}compileCubemapShader(){null===this._cubemapMaterial\u0026\u0026(this._cubemapMaterial=wn(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){null===this._equirectMaterial\u0026\u0026(this._equirectMaterial=Mn(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),null!==this._cubemapMaterial\u0026\u0026this._cubemapMaterial.dispose(),null!==this._equirectMaterial\u0026\u0026this._equirectMaterial.dispose()}_setSize(t){this._lodMax=Math.floor(Math.log2(t)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){null!==this._blurMaterial\u0026\u0026this._blurMaterial.dispose(),null!==this._pingPongRenderTarget\u0026\u0026this._pingPongRenderTarget.dispose();for(let t=0;t\u003cthis._lodPlanes.length;t++)this._lodPlanes[t].dispose()}_cleanup(t){this._renderer.setRenderTarget(mn),t.scissorTest=!1,bn(t,0,0,t.width,t.height)}_fromTexture(t,e){301===t.mapping||302===t.mapping?this._setSize(0===t.image.length?16:t.image[0].width||t.image[0].image.width):this._setSize(t.image.width/4),mn=this._renderer.getRenderTarget();const n=e||this._allocateTargets();return this._textureToCubeUV(t,n),this._applyPMREM(n),this._cleanup(n),n}_allocateTargets(){const t=3*Math.max(this._cubeSize,112),e=4*this._cubeSize,n={magFilter:1006,minFilter:1006,generateMipmaps:!1,type:1016,format:1023,encoding:3e3,depthBuffer:!1},i=_n(t,e,n);if(null===this._pingPongRenderTarget||this._pingPongRenderTarget.width!==t){null!==this._pingPongRenderTarget\u0026\u0026this._dispose(),this._pingPongRenderTarget=_n(t,e,n);const{_lodMax:i}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=function(t){const e=[],n=[],i=[];let r=t;const s=t-4+1+dn.length;for(let a=0;a\u003cs;a++){const s=Math.pow(2,r);n.push(s);let o=1/s;a\u003et-4?o=dn[a-t+4-1]:0===a\u0026\u0026(o=0),i.push(o);const l=1/(s-2),c=-l,h=1+l,u=[c,c,h,c,h,h,c,c,h,h,c,h],d=6,p=6,f=3,m=2,g=1,v=new Float32Array(f*p*d),x=new Float32Array(m*p*d),y=new Float32Array(g*p*d);for(let t=0;t\u003cd;t++){const e=t%3*2/3-1,n=t\u003e2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];v.set(i,f*p*t),x.set(u,m*p*t);const r=[t,t,t,t,t,t];y.set(r,g*p*t)}const _=new me;_.setAttribute(\"position\",new re(v,f)),_.setAttribute(\"uv\",new re(x,m)),_.setAttribute(\"faceIndex\",new re(y,g)),e.push(_),r\u003e4\u0026\u0026r--}return{lodPlanes:e,sizeLods:n,sigmas:i}}(i)),this._blurMaterial=function(t,e,n){const i=new Float32Array(20),r=new H(0,1,0);return new He({name:\"SphericalGaussianBlur\",defines:{n:20,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:t+\".0\"},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:r}},vertexShader:Sn(),fragmentShader:\"\\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 \u003ccube_uv_reflection_fragment\u003e\\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 \u003c n; i++ ) {\\n\\n\\t\\t\\t\\t\\tif ( i \u003e= 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\",blending:0,depthTest:!1,depthWrite:!1})}(i,t,e)}return i}_compileMaterial(t){const e=new Ie(this._lodPlanes[0],t);this._renderer.compile(e,pn)}_sceneToCubeUV(t,e,n,i){const r=new Ge(90,1,e,n),s=[1,-1,1,1,1,1],a=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,c=o.toneMapping;o.getClearColor(fn),o.toneMapping=0,o.autoClear=!1;const h=new ee({name:\"PMREM.Background\",side:1,depthWrite:!1,depthTest:!1}),u=new Ie(new Oe,h);let d=!1;const p=t.background;p?p.isColor\u0026\u0026(h.color.copy(p),t.background=null,d=!0):(h.color.copy(fn),d=!0);for(let e=0;e\u003c6;e++){const n=e%3;0===n?(r.up.set(0,s[e],0),r.lookAt(a[e],0,0)):1===n?(r.up.set(0,0,s[e]),r.lookAt(0,a[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,a[e]));const l=this._cubeSize;bn(i,n*l,e\u003e2?l:0,l,l),o.setRenderTarget(i),d\u0026\u0026o.render(u,r),o.render(t,r)}u.geometry.dispose(),u.material.dispose(),o.toneMapping=c,o.autoClear=l,t.background=p}_textureToCubeUV(t,e){const n=this._renderer,i=301===t.mapping||302===t.mapping;i?(null===this._cubemapMaterial\u0026\u0026(this._cubemapMaterial=wn()),this._cubemapMaterial.uniforms.flipEnvMap.value=!1===t.isRenderTargetTexture?-1:1):null===this._equirectMaterial\u0026\u0026(this._equirectMaterial=Mn());const r=i?this._cubemapMaterial:this._equirectMaterial,s=new Ie(this._lodPlanes[0],r);r.uniforms.envMap.value=t;const a=this._cubeSize;bn(e,0,0,3*a,2*a),n.setRenderTarget(e),n.render(s,pn)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;e\u003cthis._lodPlanes.length;e++){const n=Math.sqrt(this._sigmas[e]*this._sigmas[e]-this._sigmas[e-1]*this._sigmas[e-1]),i=xn[(e-1)%xn.length];this._blur(t,e-1,e,n,i)}e.autoClear=n}_blur(t,e,n,i,r){const s=this._pingPongRenderTarget;this._halfBlur(t,s,e,n,i,\"latitudinal\",r),this._halfBlur(s,t,n,n,i,\"longitudinal\",r)}_halfBlur(t,e,n,i,r,s,a){const o=this._renderer,l=this._blurMaterial;\"latitudinal\"!==s\u0026\u0026\"longitudinal\"!==s\u0026\u0026console.error(\"blur direction must be either latitudinal or longitudinal!\");const c=new Ie(this._lodPlanes[i],l),h=l.uniforms,u=this._sizeLods[n]-1,d=isFinite(r)?Math.PI/(2*u):2*Math.PI/39,p=r/d,f=isFinite(r)?1+Math.floor(3*p):20;f\u003e20\u0026\u0026console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const m=[];let g=0;for(let t=0;t\u003c20;++t){const e=t/p,n=Math.exp(-e*e/2);m.push(n),0===t?g+=n:t\u003cf\u0026\u0026(g+=2*n)}for(let t=0;t\u003cm.length;t++)m[t]=m[t]/g;h.envMap.value=t.texture,h.samples.value=f,h.weights.value=m,h.latitudinal.value=\"latitudinal\"===s,a\u0026\u0026(h.poleAxis.value=a);const{_lodMax:v}=this;h.dTheta.value=d,h.mipInt.value=v-n;const x=this._sizeLods[i];bn(e,3*x*(i\u003ev-4?i-v+4:0),4*(this._cubeSize-x),3*x,2*x),o.setRenderTarget(e),o.render(c,pn)}}function _n(t,e,n){const i=new O(t,e,n);return i.texture.mapping=306,i.texture.name=\"PMREM.cubeUv\",i.scissorTest=!0,i}function bn(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function Mn(){return new He({name:\"EquirectangularToCubeUV\",uniforms:{envMap:{value:null}},vertexShader:Sn(),fragmentShader:\"\\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 \u003ccommon\u003e\\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\",blending:0,depthTest:!1,depthWrite:!1})}function wn(){return new He({name:\"CubemapToCubeUV\",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Sn(),fragmentShader:\"\\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\",blending:0,depthTest:!1,depthWrite:!1})}function Sn(){return\"\\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\"}function En(t){let e=new WeakMap,n=null;function i(t){const n=t.target;n.removeEventListener(\"dispose\",i);const r=e.get(n);void 0!==r\u0026\u0026(e.delete(n),r.dispose())}return{get:function(r){if(r\u0026\u0026r.isTexture){const s=r.mapping,a=303===s||304===s,o=301===s||302===s;if(a||o){if(r.isRenderTargetTexture\u0026\u0026!0===r.needsPMREMUpdate){r.needsPMREMUpdate=!1;let i=e.get(r);return null===n\u0026\u0026(n=new yn(t)),i=a?n.fromEquirectangular(r,i):n.fromCubemap(r,i),e.set(r,i),i.texture}if(e.has(r))return e.get(r).texture;{const s=r.image;if(a\u0026\u0026s\u0026\u0026s.height\u003e0||o\u0026\u0026s\u0026\u0026function(t){let e=0;for(let n=0;n\u003c6;n++)void 0!==t[n]\u0026\u0026e++;return 6===e}(s)){null===n\u0026\u0026(n=new yn(t));const s=a?n.fromEquirectangular(r):n.fromCubemap(r);return e.set(r,s),r.addEventListener(\"dispose\",i),s.texture}return null}}}return r},dispose:function(){e=new WeakMap,null!==n\u0026\u0026(n.dispose(),n=null)}}}function Tn(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\"WEBGL_depth_texture\":i=t.getExtension(\"WEBGL_depth_texture\")||t.getExtension(\"MOZ_WEBGL_depth_texture\")||t.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case\"EXT_texture_filter_anisotropic\":i=t.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case\"WEBGL_compressed_texture_s3tc\":i=t.getExtension(\"WEBGL_compressed_texture_s3tc\")||t.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case\"WEBGL_compressed_texture_pvrtc\":i=t.getExtension(\"WEBGL_compressed_texture_pvrtc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\"EXT_color_buffer_float\"):(n(\"WEBGL_depth_texture\"),n(\"OES_texture_float\"),n(\"OES_texture_half_float\"),n(\"OES_texture_half_float_linear\"),n(\"OES_standard_derivatives\"),n(\"OES_element_index_uint\"),n(\"OES_vertex_array_object\"),n(\"ANGLE_instanced_arrays\")),n(\"OES_texture_float_linear\"),n(\"EXT_color_buffer_half_float\"),n(\"WEBGL_multisampled_render_to_texture\")},get:function(t){const e=n(t);return null===e\u0026\u0026console.warn(\"THREE.WebGLRenderer: \"+t+\" extension not supported.\"),e}}}function An(t,e,n,i){const r={},s=new WeakMap;function a(t){const o=t.target;null!==o.index\u0026\u0026e.remove(o.index);for(const t in o.attributes)e.remove(o.attributes[t]);o.removeEventListener(\"dispose\",a),delete r[o.id];const l=s.get(o);l\u0026\u0026(e.remove(l),s.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry\u0026\u0026delete o._maxInstanceCount,n.memory.geometries--}function o(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e\u003ci;e+=3){const i=t[e+0],r=t[e+1],s=t[e+2];n.push(i,r,r,s,s,i)}}else{const t=r.array;a=r.version;for(let e=0,i=t.length/3-1;e\u003ci;e+=3){const t=e+0,i=e+1,r=e+2;n.push(t,i,i,r,r,t)}}const o=new(m(n)?ae:se)(n,1);o.version=a;const l=s.get(t);l\u0026\u0026e.remove(l),s.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener(\"dispose\",a),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t\u003ci;t++)e.update(n[t],34962)}},getWireframeAttribute:function(t){const e=s.get(t);if(e){const n=t.index;null!==n\u0026\u0026e.version\u003cn.version\u0026\u0026o(t)}else o(t);return s.get(t)}}}function Rn(t,e,n,i){const r=i.isWebGL2;let s,a,o;this.setMode=function(t){s=t},this.setIndex=function(t){a=t.type,o=t.bytesPerElement},this.render=function(e,i){t.drawElements(s,i,a,e*o),n.update(i,s,1)},this.renderInstances=function(i,l,c){if(0===c)return;let h,u;if(r)h=t,u=\"drawElementsInstanced\";else if(h=e.get(\"ANGLE_instanced_arrays\"),u=\"drawElementsInstancedANGLE\",null===h)return void console.error(\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");h[u](s,l,a,i*o,c),n.update(l,s,c)}}function Cn(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(t,n,i){switch(e.calls++,n){case 4:e.triangles+=i*(t/3);break;case 1:e.lines+=i*(t/2);break;case 3:e.lines+=i*(t-1);break;case 2:e.lines+=i*t;break;case 0:e.points+=i*t;break;default:console.error(\"THREE.WebGLInfo: Unknown draw mode:\",n)}}}}function Ln(t,e){return t[0]-e[0]}function Pn(t,e){return Math.abs(e[1])-Math.abs(t[1])}function Dn(t,e){let n=1;const i=e.isInterleavedBufferAttribute?e.data.array:e.array;i instanceof Int8Array?n=127:i instanceof Int16Array?n=32767:i instanceof Int32Array?n=2147483647:console.error(\"THREE.WebGLMorphtargets: Unsupported morph attribute data type: \",i),t.divideScalar(n)}function In(t,e,n){const i={},r=new Float32Array(8),s=new WeakMap,a=new N,o=[];for(let t=0;t\u003c8;t++)o[t]=[t,0];return{update:function(l,c,h,u){const d=l.morphTargetInfluences;if(!0===e.isWebGL2){const i=c.morphAttributes.position||c.morphAttributes.normal||c.morphAttributes.color,r=void 0!==i?i.length:0;let o=s.get(c);if(void 0===o||o.count!==r){void 0!==o\u0026\u0026o.texture.dispose();const t=void 0!==c.morphAttributes.position,n=void 0!==c.morphAttributes.normal,i=void 0!==c.morphAttributes.color,l=c.morphAttributes.position||[],h=c.morphAttributes.normal||[],u=c.morphAttributes.color||[];let d=0;!0===t\u0026\u0026(d=1),!0===n\u0026\u0026(d=2),!0===i\u0026\u0026(d=3);let f=c.attributes.position.count*d,m=1;f\u003ee.maxTextureSize\u0026\u0026(m=Math.ceil(f/e.maxTextureSize),f=e.maxTextureSize);const g=new Float32Array(f*m*4*r),v=new z(g,f,m,r);v.type=1015,v.needsUpdate=!0;const x=4*d;for(let e=0;e\u003cr;e++){const r=l[e],s=h[e],o=u[e],c=f*m*4*e;for(let e=0;e\u003cr.count;e++){const l=e*x;!0===t\u0026\u0026(a.fromBufferAttribute(r,e),!0===r.normalized\u0026\u0026Dn(a,r),g[c+l+0]=a.x,g[c+l+1]=a.y,g[c+l+2]=a.z,g[c+l+3]=0),!0===n\u0026\u0026(a.fromBufferAttribute(s,e),!0===s.normalized\u0026\u0026Dn(a,s),g[c+l+4]=a.x,g[c+l+5]=a.y,g[c+l+6]=a.z,g[c+l+7]=0),!0===i\u0026\u0026(a.fromBufferAttribute(o,e),!0===o.normalized\u0026\u0026Dn(a,o),g[c+l+8]=a.x,g[c+l+9]=a.y,g[c+l+10]=a.z,g[c+l+11]=4===o.itemSize?a.w:1)}}o={count:r,texture:v,size:new p(f,m)},s.set(c,o),c.addEventListener(\"dispose\",(function t(){v.dispose(),s.delete(c),c.removeEventListener(\"dispose\",t)}))}let l=0;for(let t=0;t\u003cd.length;t++)l+=d[t];const h=c.morphTargetsRelative?1:1-l;u.getUniforms().setValue(t,\"morphTargetBaseInfluence\",h),u.getUniforms().setValue(t,\"morphTargetInfluences\",d),u.getUniforms().setValue(t,\"morphTargetsTexture\",o.texture,n),u.getUniforms().setValue(t,\"morphTargetsTextureSize\",o.size)}else{const e=void 0===d?0:d.length;let n=i[c.id];if(void 0===n||n.length!==e){n=[];for(let t=0;t\u003ce;t++)n[t]=[t,0];i[c.id]=n}for(let t=0;t\u003ce;t++){const e=n[t];e[0]=t,e[1]=d[t]}n.sort(Pn);for(let t=0;t\u003c8;t++)t\u003ce\u0026\u0026n[t][1]?(o[t][0]=n[t][0],o[t][1]=n[t][1]):(o[t][0]=Number.MAX_SAFE_INTEGER,o[t][1]=0);o.sort(Ln);const s=c.morphAttributes.position,a=c.morphAttributes.normal;let l=0;for(let t=0;t\u003c8;t++){const e=o[t],n=e[0],i=e[1];n!==Number.MAX_SAFE_INTEGER\u0026\u0026i?(s\u0026\u0026c.getAttribute(\"morphTarget\"+t)!==s[n]\u0026\u0026c.setAttribute(\"morphTarget\"+t,s[n]),a\u0026\u0026c.getAttribute(\"morphNormal\"+t)!==a[n]\u0026\u0026c.setAttribute(\"morphNormal\"+t,a[n]),r[t]=i,l+=i):(s\u0026\u0026!0===c.hasAttribute(\"morphTarget\"+t)\u0026\u0026c.deleteAttribute(\"morphTarget\"+t),a\u0026\u0026!0===c.hasAttribute(\"morphNormal\"+t)\u0026\u0026c.deleteAttribute(\"morphNormal\"+t),r[t]=0)}const h=c.morphTargetsRelative?1:1-l;u.getUniforms().setValue(t,\"morphTargetBaseInfluence\",h),u.getUniforms().setValue(t,\"morphTargetInfluences\",r)}}}}function Nn(t,e,n,i){let r=new WeakMap;function s(t){const e=t.target;e.removeEventListener(\"dispose\",s),n.remove(e.instanceMatrix),null!==e.instanceColor\u0026\u0026n.remove(e.instanceColor)}return{update:function(t){const a=i.render.frame,o=t.geometry,l=e.get(t,o);return r.get(l)!==a\u0026\u0026(e.update(l),r.set(l,a)),t.isInstancedMesh\u0026\u0026(!1===t.hasEventListener(\"dispose\",s)\u0026\u0026t.addEventListener(\"dispose\",s),n.update(t.instanceMatrix,34962),null!==t.instanceColor\u0026\u0026n.update(t.instanceColor,34962)),l},dispose:function(){r=new WeakMap}}}const On=new I,zn=new z,Bn=new B,Un=new ke,Hn=[],Fn=[],Gn=new Float32Array(16),Vn=new Float32Array(9),kn=new Float32Array(4);function Wn(t,e,n){const i=t[0];if(i\u003c=0||i\u003e0)return t;const r=e*n;let s=Hn[r];if(void 0===s\u0026\u0026(s=new Float32Array(r),Hn[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function jn(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n\u003ci;n++)if(t[n]!==e[n])return!1;return!0}function qn(t,e){for(let n=0,i=e.length;n\u003ci;n++)t[n]=e[n]}function Xn(t,e){let n=Fn[e];void 0===n\u0026\u0026(n=new Int32Array(e),Fn[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function Jn(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1f(this.addr,e),n[0]=e)}function Yn(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(jn(n,e))return;t.uniform2fv(this.addr,e),qn(n,e)}}function Zn(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y\u0026\u0026n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r\u0026\u0026n[1]===e.g\u0026\u0026n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(jn(n,e))return;t.uniform3fv(this.addr,e),qn(n,e)}}function Kn(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y\u0026\u0026n[2]===e.z\u0026\u0026n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(jn(n,e))return;t.uniform4fv(this.addr,e),qn(n,e)}}function Qn(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(jn(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),qn(n,e)}else{if(jn(n,i))return;kn.set(i),t.uniformMatrix2fv(this.addr,!1,kn),qn(n,i)}}function $n(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(jn(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),qn(n,e)}else{if(jn(n,i))return;Vn.set(i),t.uniformMatrix3fv(this.addr,!1,Vn),qn(n,i)}}function ti(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(jn(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),qn(n,e)}else{if(jn(n,i))return;Gn.set(i),t.uniformMatrix4fv(this.addr,!1,Gn),qn(n,i)}}function ei(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1i(this.addr,e),n[0]=e)}function ni(t,e){const n=this.cache;jn(n,e)||(t.uniform2iv(this.addr,e),qn(n,e))}function ii(t,e){const n=this.cache;jn(n,e)||(t.uniform3iv(this.addr,e),qn(n,e))}function ri(t,e){const n=this.cache;jn(n,e)||(t.uniform4iv(this.addr,e),qn(n,e))}function si(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1ui(this.addr,e),n[0]=e)}function ai(t,e){const n=this.cache;jn(n,e)||(t.uniform2uiv(this.addr,e),qn(n,e))}function oi(t,e){const n=this.cache;jn(n,e)||(t.uniform3uiv(this.addr,e),qn(n,e))}function li(t,e){const n=this.cache;jn(n,e)||(t.uniform4uiv(this.addr,e),qn(n,e))}function ci(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTexture2D(e||On,r)}function hi(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTexture3D(e||Bn,r)}function ui(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTextureCube(e||Un,r)}function di(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTexture2DArray(e||zn,r)}function pi(t,e){t.uniform1fv(this.addr,e)}function fi(t,e){const n=Wn(e,this.size,2);t.uniform2fv(this.addr,n)}function mi(t,e){const n=Wn(e,this.size,3);t.uniform3fv(this.addr,n)}function gi(t,e){const n=Wn(e,this.size,4);t.uniform4fv(this.addr,n)}function vi(t,e){const n=Wn(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function xi(t,e){const n=Wn(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function yi(t,e){const n=Wn(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function _i(t,e){t.uniform1iv(this.addr,e)}function bi(t,e){t.uniform2iv(this.addr,e)}function Mi(t,e){t.uniform3iv(this.addr,e)}function wi(t,e){t.uniform4iv(this.addr,e)}function Si(t,e){t.uniform1uiv(this.addr,e)}function Ei(t,e){t.uniform2uiv(this.addr,e)}function Ti(t,e){t.uniform3uiv(this.addr,e)}function Ai(t,e){t.uniform4uiv(this.addr,e)}function Ri(t,e,n){const i=e.length,r=Xn(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.setTexture2D(e[t]||On,r[t])}function Ci(t,e,n){const i=e.length,r=Xn(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.setTexture3D(e[t]||Bn,r[t])}function Li(t,e,n){const i=e.length,r=Xn(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.setTextureCube(e[t]||Un,r[t])}function Pi(t,e,n){const i=e.length,r=Xn(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.setTexture2DArray(e[t]||zn,r[t])}function Di(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return Jn;case 35664:return Yn;case 35665:return Zn;case 35666:return Kn;case 35674:return Qn;case 35675:return $n;case 35676:return ti;case 5124:case 35670:return ei;case 35667:case 35671:return ni;case 35668:case 35672:return ii;case 35669:case 35673:return ri;case 5125:return si;case 36294:return ai;case 36295:return oi;case 36296:return li;case 35678:case 36198:case 36298:case 36306:case 35682:return ci;case 35679:case 36299:case 36307:return hi;case 35680:case 36300:case 36308:case 36293:return ui;case 36289:case 36303:case 36311:case 36292:return di}}(e.type)}function Ii(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return pi;case 35664:return fi;case 35665:return mi;case 35666:return gi;case 35674:return vi;case 35675:return xi;case 35676:return yi;case 5124:case 35670:return _i;case 35667:case 35671:return bi;case 35668:case 35672:return Mi;case 35669:case 35673:return wi;case 5125:return Si;case 36294:return Ei;case 36295:return Ti;case 36296:return Ai;case 35678:case 36198:case 36298:case 36306:case 35682:return Ri;case 35679:case 36299:case 36307:return Ci;case 35680:case 36300:case 36308:case 36293:return Li;case 36289:case 36303:case 36311:case 36292:return Pi}}(e.type)}function Ni(t){this.id=t,this.seq=[],this.map={}}Ni.prototype.setValue=function(t,e,n){const i=this.seq;for(let r=0,s=i.length;r!==s;++r){const s=i[r];s.setValue(t,e[s.id],n)}};const Oi=/(\\w+)(\\])?(\\[|\\.)?/g;function zi(t,e){t.seq.push(e),t.map[e.id]=e}function Bi(t,e,n){const i=t.name,r=i.length;for(Oi.lastIndex=0;;){const s=Oi.exec(i),a=Oi.lastIndex;let o=s[1];const l=\"]\"===s[2],c=s[3];if(l\u0026\u0026(o|=0),void 0===c||\"[\"===c\u0026\u0026a+2===r){zi(n,void 0===c?new Di(o,t,e):new Ii(o,t,e));break}{let t=n.map[o];void 0===t\u0026\u0026(t=new Ni(o),zi(n,t)),n=t}}}function Ui(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,35718);for(let i=0;i\u003cn;++i){const n=t.getActiveUniform(e,i);Bi(n,t.getUniformLocation(e,n.name),this)}}function Hi(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}Ui.prototype.setValue=function(t,e,n,i){const r=this.map[e];void 0!==r\u0026\u0026r.setValue(t,n,i)},Ui.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i\u0026\u0026this.setValue(t,n,i)},Ui.upload=function(t,e,n,i){for(let r=0,s=e.length;r!==s;++r){const s=e[r],a=n[s.id];!1!==a.needsUpdate\u0026\u0026s.setValue(t,a.value,i)}},Ui.seqWithValue=function(t,e){const n=[];for(let i=0,r=t.length;i!==r;++i){const r=t[i];r.id in e\u0026\u0026n.push(r)}return n};let Fi=0;function Gi(t,e,n){const i=t.getShaderParameter(e,35713),r=t.getShaderInfoLog(e).trim();if(i\u0026\u0026\"\"===r)return\"\";const s=/ERROR: 0:(\\d+)/.exec(r);if(s){const i=parseInt(s[0]);return n.toUpperCase()+\"\\n\\n\"+r+\"\\n\\n\"+function(t,e){const n=t.split(\"\\n\"),i=[],r=Math.max(e-6,0),s=Math.min(e+6,n.length);for(let t=r;t\u003cs;t++)i.push(t+1+\": \"+n[t]);return i.join(\"\\n\")}(t.getShaderSource(e),i)}return r}function Vi(t,e){const n=function(t){switch(t){case 3e3:return[\"Linear\",\"( value )\"];case 3001:return[\"sRGB\",\"( value )\"];default:return console.warn(\"THREE.WebGLProgram: Unsupported encoding:\",t),[\"Linear\",\"( value )\"]}}(e);return\"vec4 \"+t+\"( vec4 value ) { return LinearTo\"+n[0]+n[1]+\"; }\"}function ki(t,e){let n;switch(e){case 1:n=\"Linear\";break;case 2:n=\"Reinhard\";break;case 3:n=\"OptimizedCineon\";break;case 4:n=\"ACESFilmic\";break;case 5:n=\"Custom\";break;default:console.warn(\"THREE.WebGLProgram: Unsupported toneMapping:\",e),n=\"Linear\"}return\"vec3 \"+t+\"( vec3 color ) { return \"+n+\"ToneMapping( color ); }\"}function Wi(t){return\"\"!==t}function ji(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function qi(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const Xi=/^[ \\t]*#include +\u003c([\\w\\d./]+)\u003e/gm;function Ji(t){return t.replace(Xi,Yi)}function Yi(t,e){const n=en[e];if(void 0===n)throw new Error(\"Can not resolve #include \u003c\"+e+\"\u003e\");return Ji(n)}const Zi=/#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i \u003c (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g,Ki=/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*\u003c\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;function Qi(t){return t.replace(Ki,tr).replace(Zi,$i)}function $i(t,e,n,i){return console.warn(\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\"),tr(t,e,n,i)}function tr(t,e,n,i){let r=\"\";for(let t=parseInt(e);t\u003cparseInt(n);t++)r+=i.replace(/\\[\\s*i\\s*\\]/g,\"[ \"+t+\" ]\").replace(/UNROLLED_LOOP_INDEX/g,t);return r}function er(t){let e=\"precision \"+t.precision+\" float;\\nprecision \"+t.precision+\" int;\";return\"highp\"===t.precision?e+=\"\\n#define HIGH_PRECISION\":\"mediump\"===t.precision?e+=\"\\n#define MEDIUM_PRECISION\":\"lowp\"===t.precision\u0026\u0026(e+=\"\\n#define LOW_PRECISION\"),e}function nr(t,e,n,i){const r=t.getContext(),s=n.defines;let a=n.vertexShader,o=n.fragmentShader;const l=function(t){let e=\"SHADOWMAP_TYPE_BASIC\";return 1===t.shadowMapType?e=\"SHADOWMAP_TYPE_PCF\":2===t.shadowMapType?e=\"SHADOWMAP_TYPE_PCF_SOFT\":3===t.shadowMapType\u0026\u0026(e=\"SHADOWMAP_TYPE_VSM\"),e}(n),c=function(t){let e=\"ENVMAP_TYPE_CUBE\";if(t.envMap)switch(t.envMapMode){case 301:case 302:e=\"ENVMAP_TYPE_CUBE\";break;case 306:e=\"ENVMAP_TYPE_CUBE_UV\"}return e}(n),h=function(t){let e=\"ENVMAP_MODE_REFLECTION\";if(t.envMap)switch(t.envMapMode){case 302:e=\"ENVMAP_MODE_REFRACTION\"}return e}(n),u=function(t){let e=\"ENVMAP_BLENDING_NONE\";if(t.envMap)switch(t.combine){case 0:e=\"ENVMAP_BLENDING_MULTIPLY\";break;case 1:e=\"ENVMAP_BLENDING_MIX\";break;case 2:e=\"ENVMAP_BLENDING_ADD\"}return e}(n),d=function(t){const e=t.envMapCubeUVHeight;if(null===e)return null;const n=Math.log2(e)-2,i=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,n),112)),texelHeight:i,maxMip:n}}(n),p=n.isWebGL2?\"\":function(t){return[t.extensionDerivatives||t.envMapCubeUVHeight||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\"physical\"===t.shaderID?\"#extension GL_OES_standard_derivatives : enable\":\"\",(t.extensionFragDepth||t.logarithmicDepthBuffer)\u0026\u0026t.rendererExtensionFragDepth?\"#extension GL_EXT_frag_depth : enable\":\"\",t.extensionDrawBuffers\u0026\u0026t.rendererExtensionDrawBuffers?\"#extension GL_EXT_draw_buffers : require\":\"\",(t.extensionShaderTextureLOD||t.envMap||t.transmission)\u0026\u0026t.rendererExtensionShaderTextureLod?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter(Wi).join(\"\\n\")}(n),f=function(t){const e=[];for(const n in t){const i=t[n];!1!==i\u0026\u0026e.push(\"#define \"+n+\" \"+i)}return e.join(\"\\n\")}(s),m=r.createProgram();let g,v,x=n.glslVersion?\"#version \"+n.glslVersion+\"\\n\":\"\";n.isRawShaderMaterial?(g=[f].filter(Wi).join(\"\\n\"),g.length\u003e0\u0026\u0026(g+=\"\\n\"),v=[p,f].filter(Wi).join(\"\\n\"),v.length\u003e0\u0026\u0026(v+=\"\\n\")):(g=[er(n),\"#define SHADER_NAME \"+n.shaderName,f,n.instancing?\"#define USE_INSTANCING\":\"\",n.instancingColor?\"#define USE_INSTANCING_COLOR\":\"\",n.supportsVertexTextures?\"#define VERTEX_TEXTURES\":\"\",n.useFog\u0026\u0026n.fog?\"#define USE_FOG\":\"\",n.useFog\u0026\u0026n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+h:\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.displacementMap\u0026\u0026n.supportsVertexTextures?\"#define USE_DISPLACEMENTMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.specularIntensityMap?\"#define USE_SPECULARINTENSITYMAP\":\"\",n.specularColorMap?\"#define USE_SPECULARCOLORMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.sheenColorMap?\"#define USE_SHEENCOLORMAP\":\"\",n.sheenRoughnessMap?\"#define USE_SHEENROUGHNESSMAP\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.skinning?\"#define USE_SKINNING\":\"\",n.morphTargets?\"#define USE_MORPHTARGETS\":\"\",n.morphNormals\u0026\u0026!1===n.flatShading?\"#define USE_MORPHNORMALS\":\"\",n.morphColors\u0026\u0026n.isWebGL2?\"#define USE_MORPHCOLORS\":\"\",n.morphTargetsCount\u003e0\u0026\u0026n.isWebGL2?\"#define MORPHTARGETS_TEXTURE\":\"\",n.morphTargetsCount\u003e0\u0026\u0026n.isWebGL2?\"#define MORPHTARGETS_TEXTURE_STRIDE \"+n.morphTextureStride:\"\",n.morphTargetsCount\u003e0\u0026\u0026n.isWebGL2?\"#define MORPHTARGETS_COUNT \"+n.morphTargetsCount:\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer\u0026\u0026n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",\"#ifdef USE_INSTANCING\",\"\\tattribute mat4 instanceMatrix;\",\"#endif\",\"#ifdef USE_INSTANCING_COLOR\",\"\\tattribute vec3 instanceColor;\",\"#endif\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_TANGENT\",\"\\tattribute vec4 tangent;\",\"#endif\",\"#if defined( USE_COLOR_ALPHA )\",\"\\tattribute vec4 color;\",\"#elif defined( USE_COLOR )\",\"\\tattribute vec3 color;\",\"#endif\",\"#if ( defined( USE_MORPHTARGETS ) \u0026\u0026 ! defined( MORPHTARGETS_TEXTURE ) )\",\"\\tattribute vec3 morphTarget0;\",\"\\tattribute vec3 morphTarget1;\",\"\\tattribute vec3 morphTarget2;\",\"\\tattribute vec3 morphTarget3;\",\"\\t#ifdef USE_MORPHNORMALS\",\"\\t\\tattribute vec3 morphNormal0;\",\"\\t\\tattribute vec3 morphNormal1;\",\"\\t\\tattribute vec3 morphNormal2;\",\"\\t\\tattribute vec3 morphNormal3;\",\"\\t#else\",\"\\t\\tattribute vec3 morphTarget4;\",\"\\t\\tattribute vec3 morphTarget5;\",\"\\t\\tattribute vec3 morphTarget6;\",\"\\t\\tattribute vec3 morphTarget7;\",\"\\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\\tattribute vec4 skinIndex;\",\"\\tattribute vec4 skinWeight;\",\"#endif\",\"\\n\"].filter(Wi).join(\"\\n\"),v=[p,er(n),\"#define SHADER_NAME \"+n.shaderName,f,n.useFog\u0026\u0026n.fog?\"#define USE_FOG\":\"\",n.useFog\u0026\u0026n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.matcap?\"#define USE_MATCAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+c:\"\",n.envMap?\"#define \"+h:\"\",n.envMap?\"#define \"+u:\"\",d?\"#define CUBEUV_TEXEL_WIDTH \"+d.texelWidth:\"\",d?\"#define CUBEUV_TEXEL_HEIGHT \"+d.texelHeight:\"\",d?\"#define CUBEUV_MAX_MIP \"+d.maxMip+\".0\":\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoat?\"#define USE_CLEARCOAT\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.specularIntensityMap?\"#define USE_SPECULARINTENSITYMAP\":\"\",n.specularColorMap?\"#define USE_SPECULARCOLORMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.alphaTest?\"#define USE_ALPHATEST\":\"\",n.sheen?\"#define USE_SHEEN\":\"\",n.sheenColorMap?\"#define USE_SHEENCOLORMAP\":\"\",n.sheenRoughnessMap?\"#define USE_SHEENROUGHNESSMAP\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.decodeVideoTexture?\"#define DECODE_VIDEO_TEXTURE\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors||n.instancingColor?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.gradientMap?\"#define USE_GRADIENTMAP\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",n.physicallyCorrectLights?\"#define PHYSICALLY_CORRECT_LIGHTS\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer\u0026\u0026n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",0!==n.toneMapping?\"#define TONE_MAPPING\":\"\",0!==n.toneMapping?en.tonemapping_pars_fragment:\"\",0!==n.toneMapping?ki(\"toneMapping\",n.toneMapping):\"\",n.dithering?\"#define DITHERING\":\"\",n.opaque?\"#define OPAQUE\":\"\",en.encodings_pars_fragment,Vi(\"linearToOutputTexel\",n.outputEncoding),n.useDepthPacking?\"#define DEPTH_PACKING \"+n.depthPacking:\"\",\"\\n\"].filter(Wi).join(\"\\n\")),a=Ji(a),a=ji(a,n),a=qi(a,n),o=Ji(o),o=ji(o,n),o=qi(o,n),a=Qi(a),o=Qi(o),n.isWebGL2\u0026\u0026!0!==n.isRawShaderMaterial\u0026\u0026(x=\"#version 300 es\\n\",g=[\"precision mediump sampler2DArray;\",\"#define attribute in\",\"#define varying out\",\"#define texture2D texture\"].join(\"\\n\")+\"\\n\"+g,v=[\"#define varying in\",\"300 es\"===n.glslVersion?\"\":\"layout(location = 0) out highp vec4 pc_fragColor;\",\"300 es\"===n.glslVersion?\"\":\"#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\"+v);const y=x+v+o,_=Hi(r,35633,x+g+a),b=Hi(r,35632,y);if(r.attachShader(m,_),r.attachShader(m,b),void 0!==n.index0AttributeName?r.bindAttribLocation(m,0,n.index0AttributeName):!0===n.morphTargets\u0026\u0026r.bindAttribLocation(m,0,\"position\"),r.linkProgram(m),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(m).trim(),e=r.getShaderInfoLog(_).trim(),n=r.getShaderInfoLog(b).trim();let i=!0,s=!0;if(!1===r.getProgramParameter(m,35714)){i=!1;const e=Gi(r,_,\"vertex\"),n=Gi(r,b,\"fragment\");console.error(\"THREE.WebGLProgram: Shader Error \"+r.getError()+\" - VALIDATE_STATUS \"+r.getProgramParameter(m,35715)+\"\\n\\nProgram Info Log: \"+t+\"\\n\"+e+\"\\n\"+n)}else\"\"!==t?console.warn(\"THREE.WebGLProgram: Program Info Log:\",t):\"\"!==e\u0026\u0026\"\"!==n||(s=!1);s\u0026\u0026(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:g},fragmentShader:{log:n,prefix:v}})}let M,w;return r.deleteShader(_),r.deleteShader(b),this.getUniforms=function(){return void 0===M\u0026\u0026(M=new Ui(r,m)),M},this.getAttributes=function(){return void 0===w\u0026\u0026(w=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r\u003ci;r++){const i=t.getActiveAttrib(e,r),s=i.name;let a=1;35674===i.type\u0026\u0026(a=2),35675===i.type\u0026\u0026(a=3),35676===i.type\u0026\u0026(a=4),n[s]={type:i.type,location:t.getAttribLocation(e,s),locationSize:a}}return n}(r,m)),w},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(m),this.program=void 0},this.name=n.shaderName,this.id=Fi++,this.cacheKey=e,this.usedTimes=1,this.program=m,this.vertexShader=_,this.fragmentShader=b,this}let ir=0;class rr{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(t){const e=t.vertexShader,n=t.fragmentShader,i=this._getShaderStage(e),r=this._getShaderStage(n),s=this._getShaderCacheForMaterial(t);return!1===s.has(i)\u0026\u0026(s.add(i),i.usedTimes++),!1===s.has(r)\u0026\u0026(s.add(r),r.usedTimes++),this}remove(t){const e=this.materialCache.get(t);for(const t of e)t.usedTimes--,0===t.usedTimes\u0026\u0026this.shaderCache.delete(t.code);return this.materialCache.delete(t),this}getVertexShaderID(t){return this._getShaderStage(t.vertexShader).id}getFragmentShaderID(t){return this._getShaderStage(t.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(t){const e=this.materialCache;return!1===e.has(t)\u0026\u0026e.set(t,new Set),e.get(t)}_getShaderStage(t){const e=this.shaderCache;if(!1===e.has(t)){const n=new sr(t);e.set(t,n)}return e.get(t)}}class sr{constructor(t){this.id=ir++,this.code=t,this.usedTimes=0}}function ar(t,e,n,i,r,s,a){const o=new At,l=new rr,c=[],h=r.isWebGL2,u=r.logarithmicDepthBuffer,d=r.vertexTextures;let p=r.precision;const f={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\"};return{getParameters:function(s,o,c,m,g){const v=m.fog,x=g.geometry,y=s.isMeshStandardMaterial?m.environment:null,_=(s.isMeshStandardMaterial?n:e).get(s.envMap||y),b=_\u0026\u0026306===_.mapping?_.image.height:null,M=f[s.type];null!==s.precision\u0026\u0026(p=r.getMaxPrecision(s.precision),p!==s.precision\u0026\u0026console.warn(\"THREE.WebGLProgram.getParameters:\",s.precision,\"not supported, using\",p,\"instead.\"));const w=x.morphAttributes.position||x.morphAttributes.normal||x.morphAttributes.color,S=void 0!==w?w.length:0;let E,T,A,R,C=0;if(void 0!==x.morphAttributes.position\u0026\u0026(C=1),void 0!==x.morphAttributes.normal\u0026\u0026(C=2),void 0!==x.morphAttributes.color\u0026\u0026(C=3),M){const t=rn[M];E=t.vertexShader,T=t.fragmentShader}else E=s.vertexShader,T=s.fragmentShader,l.update(s),A=l.getVertexShaderID(s),R=l.getFragmentShaderID(s);const L=t.getRenderTarget(),P=s.alphaTest\u003e0,D=s.clearcoat\u003e0;return{isWebGL2:h,shaderID:M,shaderName:s.type,vertexShader:E,fragmentShader:T,defines:s.defines,customVertexShaderID:A,customFragmentShaderID:R,isRawShaderMaterial:!0===s.isRawShaderMaterial,glslVersion:s.glslVersion,precision:p,instancing:!0===g.isInstancedMesh,instancingColor:!0===g.isInstancedMesh\u0026\u0026null!==g.instanceColor,supportsVertexTextures:d,outputEncoding:null===L?t.outputEncoding:!0===L.isXRRenderTarget?L.texture.encoding:3e3,map:!!s.map,matcap:!!s.matcap,envMap:!!_,envMapMode:_\u0026\u0026_.mapping,envMapCubeUVHeight:b,lightMap:!!s.lightMap,aoMap:!!s.aoMap,emissiveMap:!!s.emissiveMap,bumpMap:!!s.bumpMap,normalMap:!!s.normalMap,objectSpaceNormalMap:1===s.normalMapType,tangentSpaceNormalMap:0===s.normalMapType,decodeVideoTexture:!!s.map\u0026\u0026!0===s.map.isVideoTexture\u0026\u00263001===s.map.encoding,clearcoat:D,clearcoatMap:D\u0026\u0026!!s.clearcoatMap,clearcoatRoughnessMap:D\u0026\u0026!!s.clearcoatRoughnessMap,clearcoatNormalMap:D\u0026\u0026!!s.clearcoatNormalMap,displacementMap:!!s.displacementMap,roughnessMap:!!s.roughnessMap,metalnessMap:!!s.metalnessMap,specularMap:!!s.specularMap,specularIntensityMap:!!s.specularIntensityMap,specularColorMap:!!s.specularColorMap,opaque:!1===s.transparent\u0026\u00261===s.blending,alphaMap:!!s.alphaMap,alphaTest:P,gradientMap:!!s.gradientMap,sheen:s.sheen\u003e0,sheenColorMap:!!s.sheenColorMap,sheenRoughnessMap:!!s.sheenRoughnessMap,transmission:s.transmission\u003e0,transmissionMap:!!s.transmissionMap,thicknessMap:!!s.thicknessMap,combine:s.combine,vertexTangents:!!s.normalMap\u0026\u0026!!x.attributes.tangent,vertexColors:s.vertexColors,vertexAlphas:!0===s.vertexColors\u0026\u0026!!x.attributes.color\u0026\u00264===x.attributes.color.itemSize,vertexUvs:!!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatMap||s.clearcoatRoughnessMap||s.clearcoatNormalMap||s.displacementMap||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheenColorMap||s.sheenRoughnessMap),uvsVertexOnly:!(s.map||s.bumpMap||s.normalMap||s.specularMap||s.alphaMap||s.emissiveMap||s.roughnessMap||s.metalnessMap||s.clearcoatNormalMap||s.transmission\u003e0||s.transmissionMap||s.thicknessMap||s.specularIntensityMap||s.specularColorMap||s.sheen\u003e0||s.sheenColorMap||s.sheenRoughnessMap||!s.displacementMap),fog:!!v,useFog:!0===s.fog,fogExp2:v\u0026\u0026v.isFogExp2,flatShading:!!s.flatShading,sizeAttenuation:s.sizeAttenuation,logarithmicDepthBuffer:u,skinning:!0===g.isSkinnedMesh,morphTargets:void 0!==x.morphAttributes.position,morphNormals:void 0!==x.morphAttributes.normal,morphColors:void 0!==x.morphAttributes.color,morphTargetsCount:S,morphTextureStride:C,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:s.dithering,shadowMapEnabled:t.shadowMap.enabled\u0026\u0026c.length\u003e0,shadowMapType:t.shadowMap.type,toneMapping:s.toneMapped?t.toneMapping:0,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:s.premultipliedAlpha,doubleSided:2===s.side,flipSided:1===s.side,useDepthPacking:!!s.depthPacking,depthPacking:s.depthPacking||0,index0AttributeName:s.index0AttributeName,extensionDerivatives:s.extensions\u0026\u0026s.extensions.derivatives,extensionFragDepth:s.extensions\u0026\u0026s.extensions.fragDepth,extensionDrawBuffers:s.extensions\u0026\u0026s.extensions.drawBuffers,extensionShaderTextureLOD:s.extensions\u0026\u0026s.extensions.shaderTextureLOD,rendererExtensionFragDepth:h||i.has(\"EXT_frag_depth\"),rendererExtensionDrawBuffers:h||i.has(\"WEBGL_draw_buffers\"),rendererExtensionShaderTextureLod:h||i.has(\"EXT_shader_texture_lod\"),customProgramCacheKey:s.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.customVertexShaderID),n.push(e.customFragmentShaderID)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);return!1===e.isRawShaderMaterial\u0026\u0026(!function(t,e){t.push(e.precision),t.push(e.outputEncoding),t.push(e.envMapMode),t.push(e.envMapCubeUVHeight),t.push(e.combine),t.push(e.vertexUvs),t.push(e.fogExp2),t.push(e.sizeAttenuation),t.push(e.morphTargetsCount),t.push(e.morphAttributeCount),t.push(e.numDirLights),t.push(e.numPointLights),t.push(e.numSpotLights),t.push(e.numHemiLights),t.push(e.numRectAreaLights),t.push(e.numDirLightShadows),t.push(e.numPointLightShadows),t.push(e.numSpotLightShadows),t.push(e.shadowMapType),t.push(e.toneMapping),t.push(e.numClippingPlanes),t.push(e.numClipIntersection),t.push(e.depthPacking)}(n,e),function(t,e){o.disableAll(),e.isWebGL2\u0026\u0026o.enable(0);e.supportsVertexTextures\u0026\u0026o.enable(1);e.instancing\u0026\u0026o.enable(2);e.instancingColor\u0026\u0026o.enable(3);e.map\u0026\u0026o.enable(4);e.matcap\u0026\u0026o.enable(5);e.envMap\u0026\u0026o.enable(6);e.lightMap\u0026\u0026o.enable(7);e.aoMap\u0026\u0026o.enable(8);e.emissiveMap\u0026\u0026o.enable(9);e.bumpMap\u0026\u0026o.enable(10);e.normalMap\u0026\u0026o.enable(11);e.objectSpaceNormalMap\u0026\u0026o.enable(12);e.tangentSpaceNormalMap\u0026\u0026o.enable(13);e.clearcoat\u0026\u0026o.enable(14);e.clearcoatMap\u0026\u0026o.enable(15);e.clearcoatRoughnessMap\u0026\u0026o.enable(16);e.clearcoatNormalMap\u0026\u0026o.enable(17);e.displacementMap\u0026\u0026o.enable(18);e.specularMap\u0026\u0026o.enable(19);e.roughnessMap\u0026\u0026o.enable(20);e.metalnessMap\u0026\u0026o.enable(21);e.gradientMap\u0026\u0026o.enable(22);e.alphaMap\u0026\u0026o.enable(23);e.alphaTest\u0026\u0026o.enable(24);e.vertexColors\u0026\u0026o.enable(25);e.vertexAlphas\u0026\u0026o.enable(26);e.vertexUvs\u0026\u0026o.enable(27);e.vertexTangents\u0026\u0026o.enable(28);e.uvsVertexOnly\u0026\u0026o.enable(29);e.fog\u0026\u0026o.enable(30);t.push(o.mask),o.disableAll(),e.useFog\u0026\u0026o.enable(0);e.flatShading\u0026\u0026o.enable(1);e.logarithmicDepthBuffer\u0026\u0026o.enable(2);e.skinning\u0026\u0026o.enable(3);e.morphTargets\u0026\u0026o.enable(4);e.morphNormals\u0026\u0026o.enable(5);e.morphColors\u0026\u0026o.enable(6);e.premultipliedAlpha\u0026\u0026o.enable(7);e.shadowMapEnabled\u0026\u0026o.enable(8);e.physicallyCorrectLights\u0026\u0026o.enable(9);e.doubleSided\u0026\u0026o.enable(10);e.flipSided\u0026\u0026o.enable(11);e.useDepthPacking\u0026\u0026o.enable(12);e.dithering\u0026\u0026o.enable(13);e.specularIntensityMap\u0026\u0026o.enable(14);e.specularColorMap\u0026\u0026o.enable(15);e.transmission\u0026\u0026o.enable(16);e.transmissionMap\u0026\u0026o.enable(17);e.thicknessMap\u0026\u0026o.enable(18);e.sheen\u0026\u0026o.enable(19);e.sheenColorMap\u0026\u0026o.enable(20);e.sheenRoughnessMap\u0026\u0026o.enable(21);e.decodeVideoTexture\u0026\u0026o.enable(22);e.opaque\u0026\u0026o.enable(23);t.push(o.mask)}(n,e),n.push(t.outputEncoding)),n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=f[t.type];let n;if(e){const t=rn[e];n=Ue.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=c.length;t\u003ce;t++){const e=c[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i\u0026\u0026(i=new nr(t,n,e,s),c.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=c.indexOf(t);c[e]=c[c.length-1],c.pop(),t.destroy()}},releaseShaderCache:function(t){l.remove(t)},programs:c,dispose:function(){l.dispose()}}}function or(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n\u0026\u0026(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function lr(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function cr(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function hr(){const t=[];let e=0;const n=[],i=[],r=[];function s(n,i,r,s,a,o){let l=t[e];return void 0===l?(l={id:n.id,object:n,geometry:i,material:r,groupOrder:s,renderOrder:n.renderOrder,z:a,group:o},t[e]=l):(l.id=n.id,l.object=n,l.geometry=i,l.material=r,l.groupOrder=s,l.renderOrder=n.renderOrder,l.z=a,l.group=o),e++,l}return{opaque:n,transmissive:i,transparent:r,init:function(){e=0,n.length=0,i.length=0,r.length=0},push:function(t,e,a,o,l,c){const h=s(t,e,a,o,l,c);a.transmission\u003e0?i.push(h):!0===a.transparent?r.push(h):n.push(h)},unshift:function(t,e,a,o,l,c){const h=s(t,e,a,o,l,c);a.transmission\u003e0?i.unshift(h):!0===a.transparent?r.unshift(h):n.unshift(h)},finish:function(){for(let n=e,i=t.length;n\u003ci;n++){const e=t[n];if(null===e.id)break;e.id=null,e.object=null,e.geometry=null,e.material=null,e.group=null}},sort:function(t,e){n.length\u003e1\u0026\u0026n.sort(t||lr),i.length\u003e1\u0026\u0026i.sort(e||cr),r.length\u003e1\u0026\u0026r.sort(e||cr)}}}function ur(){let t=new WeakMap;return{get:function(e,n){let i;return!1===t.has(e)?(i=new hr,t.set(e,[i])):n\u003e=t.get(e).length?(i=new hr,t.get(e).push(i)):i=t.get(e)[n],i},dispose:function(){t=new WeakMap}}}function dr(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":n={direction:new H,color:new A};break;case\"SpotLight\":n={position:new H,direction:new H,color:new A,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\"PointLight\":n={position:new H,color:new A,distance:0,decay:0};break;case\"HemisphereLight\":n={direction:new H,skyColor:new A,groundColor:new A};break;case\"RectAreaLight\":n={color:new A,position:new H,halfWidth:new H,halfHeight:new H}}return t[e.id]=n,n}}}let pr=0;function fr(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function mr(t,e){const n=new dr,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":case\"SpotLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new p};break;case\"PointLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new p,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t\u003c9;t++)r.probe.push(new H);const s=new H,a=new gt,o=new gt;return{setup:function(s,a){let o=0,l=0,c=0;for(let t=0;t\u003c9;t++)r.probe[t].set(0,0,0);let h=0,u=0,d=0,p=0,f=0,m=0,g=0,v=0;s.sort(fr);const x=!0!==a?Math.PI:1;for(let t=0,e=s.length;t\u003ce;t++){const e=s[t],a=e.color,y=e.intensity,_=e.distance,b=e.shadow\u0026\u0026e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)o+=a.r*y*x,l+=a.g*y*x,c+=a.b*y*x;else if(e.isLightProbe)for(let t=0;t\u003c9;t++)r.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*x),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.directionalShadow[h]=n,r.directionalShadowMap[h]=b,r.directionalShadowMatrix[h]=e.shadow.matrix,m++}r.directional[h]=t,h++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(a).multiplyScalar(y*x),t.distance=_,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.spotShadow[d]=n,r.spotShadowMap[d]=b,r.spotShadowMatrix[d]=e.shadow.matrix,v++}r.spot[d]=t,d++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(a).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),r.rectArea[p]=t,p++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity*x),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,r.pointShadow[u]=n,r.pointShadowMap[u]=b,r.pointShadowMatrix[u]=e.shadow.matrix,g++}r.point[u]=t,u++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y*x),t.groundColor.copy(e.groundColor).multiplyScalar(y*x),r.hemi[f]=t,f++}}p\u003e0\u0026\u0026(e.isWebGL2||!0===t.has(\"OES_texture_float_linear\")?(r.rectAreaLTC1=nn.LTC_FLOAT_1,r.rectAreaLTC2=nn.LTC_FLOAT_2):!0===t.has(\"OES_texture_half_float_linear\")?(r.rectAreaLTC1=nn.LTC_HALF_1,r.rectAreaLTC2=nn.LTC_HALF_2):console.error(\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\")),r.ambient[0]=o,r.ambient[1]=l,r.ambient[2]=c;const y=r.hash;y.directionalLength===h\u0026\u0026y.pointLength===u\u0026\u0026y.spotLength===d\u0026\u0026y.rectAreaLength===p\u0026\u0026y.hemiLength===f\u0026\u0026y.numDirectionalShadows===m\u0026\u0026y.numPointShadows===g\u0026\u0026y.numSpotShadows===v||(r.directional.length=h,r.spot.length=d,r.rectArea.length=p,r.point.length=u,r.hemi.length=f,r.directionalShadow.length=m,r.directionalShadowMap.length=m,r.pointShadow.length=g,r.pointShadowMap.length=g,r.spotShadow.length=v,r.spotShadowMap.length=v,r.directionalShadowMatrix.length=m,r.pointShadowMatrix.length=g,r.spotShadowMatrix.length=v,y.directionalLength=h,y.pointLength=u,y.spotLength=d,y.rectAreaLength=p,y.hemiLength=f,y.numDirectionalShadows=m,y.numPointShadows=g,y.numSpotShadows=v,r.version=pr++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,h=0;const u=e.matrixWorldInverse;for(let e=0,d=t.length;e\u003cd;e++){const d=t[e];if(d.isDirectionalLight){const t=r.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(u),n++}else if(d.isSpotLight){const t=r.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(u),l++}else if(d.isRectAreaLight){const t=r.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),o.identity(),a.copy(d.matrixWorld),a.premultiply(u),o.extractRotation(a),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(o),t.halfHeight.applyMatrix4(o),c++}else if(d.isPointLight){const t=r.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(u),i++}else if(d.isHemisphereLight){const t=r.hemi[h];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(u),h++}}},state:r}}function gr(t,e){const n=new mr(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(t){n.setup(i,t)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function vr(t,e){let n=new WeakMap;return{get:function(i,r=0){let s;return!1===n.has(i)?(s=new gr(t,e),n.set(i,[s])):r\u003e=n.get(i).length?(s=new gr(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class xr extends te{constructor(t){super(),this.type=\"MeshDepthMaterial\",this.depthPacking=3200,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}xr.prototype.isMeshDepthMaterial=!0;class yr extends te{constructor(t){super(),this.type=\"MeshDistanceMaterial\",this.referencePosition=new H,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}yr.prototype.isMeshDistanceMaterial=!0;function _r(t,e,n){let i=new Ke;const r=new p,s=new p,a=new N,o=new xr({depthPacking:3201}),l=new yr,c={},h=n.maxTextureSize,u={0:1,1:0,2:2},d=new He({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new p},radius:{value:4}},vertexShader:\"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\",fragmentShader:\"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \u003cpacking\u003e\\nvoid main() {\\n\\tconst float samples = float( VSM_SAMPLES );\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat uvStride = samples \u003c= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\\n\\tfloat uvStart = samples \u003c= 1.0 ? 0.0 : - 1.0;\\n\\tfor ( float i = 0.0; i \u003c 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}\"}),f=d.clone();f.defines.HORIZONTAL_PASS=1;const m=new me;m.setAttribute(\"position\",new re(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const g=new Ie(m,d),v=this;function x(n,i){const r=e.update(g);d.defines.VSM_SAMPLES!==n.blurSamples\u0026\u0026(d.defines.VSM_SAMPLES=n.blurSamples,f.defines.VSM_SAMPLES=n.blurSamples,d.needsUpdate=!0,f.needsUpdate=!0),d.uniforms.shadow_pass.value=n.map.texture,d.uniforms.resolution.value=n.mapSize,d.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,d,g,null),f.uniforms.shadow_pass.value=n.mapPass.texture,f.uniforms.resolution.value=n.mapSize,f.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,f,g,null)}function y(e,n,i,r,s,a){let h=null;const d=!0===i.isPointLight?e.customDistanceMaterial:e.customDepthMaterial;if(h=void 0!==d?d:!0===i.isPointLight?l:o,t.localClippingEnabled\u0026\u0026!0===n.clipShadows\u0026\u00260!==n.clippingPlanes.length||n.displacementMap\u0026\u00260!==n.displacementScale||n.alphaMap\u0026\u0026n.alphaTest\u003e0){const t=h.uuid,e=n.uuid;let i=c[t];void 0===i\u0026\u0026(i={},c[t]=i);let r=i[e];void 0===r\u0026\u0026(r=h.clone(),i[e]=r),h=r}return h.visible=n.visible,h.wireframe=n.wireframe,h.side=3===a?null!==n.shadowSide?n.shadowSide:n.side:null!==n.shadowSide?n.shadowSide:u[n.side],h.alphaMap=n.alphaMap,h.alphaTest=n.alphaTest,h.clipShadows=n.clipShadows,h.clippingPlanes=n.clippingPlanes,h.clipIntersection=n.clipIntersection,h.displacementMap=n.displacementMap,h.displacementScale=n.displacementScale,h.displacementBias=n.displacementBias,h.wireframeLinewidth=n.wireframeLinewidth,h.linewidth=n.linewidth,!0===i.isPointLight\u0026\u0026!0===h.isMeshDistanceMaterial\u0026\u0026(h.referencePosition.setFromMatrixPosition(i.matrixWorld),h.nearDistance=r,h.farDistance=s),h}function _(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)\u0026\u0026(n.isMesh||n.isLine||n.isPoints)\u0026\u0026(n.castShadow||n.receiveShadow\u0026\u00263===o)\u0026\u0026(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;l\u003cc;l++){const c=e[l],h=r[c.materialIndex];if(h\u0026\u0026h.visible){const e=y(n,h,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,c)}}}else if(r.visible){const e=y(n,r,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t\u003ce;t++)_(l[t],r,s,a,o)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1,this.render=function(e,n,o){if(!1===v.enabled)return;if(!1===v.autoUpdate\u0026\u0026!1===v.needsUpdate)return;if(0===e.length)return;const l=t.getRenderTarget(),c=t.getActiveCubeFace(),u=t.getActiveMipmapLevel(),d=t.state;d.setBlending(0),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(let l=0,c=e.length;l\u003cc;l++){const c=e[l],u=c.shadow;if(void 0===u){console.warn(\"THREE.WebGLShadowMap:\",c,\"has no shadow.\");continue}if(!1===u.autoUpdate\u0026\u0026!1===u.needsUpdate)continue;r.copy(u.mapSize);const p=u.getFrameExtents();if(r.multiply(p),s.copy(u.mapSize),(r.x\u003eh||r.y\u003eh)\u0026\u0026(r.x\u003eh\u0026\u0026(s.x=Math.floor(h/p.x),r.x=s.x*p.x,u.mapSize.x=s.x),r.y\u003eh\u0026\u0026(s.y=Math.floor(h/p.y),r.y=s.y*p.y,u.mapSize.y=s.y)),null!==u.map||u.isPointLightShadow||3!==this.type||(u.map=new O(r.x,r.y),u.map.texture.name=c.name+\".shadowMap\",u.mapPass=new O(r.x,r.y),u.camera.updateProjectionMatrix()),null===u.map){const t={minFilter:1003,magFilter:1003,format:1023};u.map=new O(r.x,r.y,t),u.map.texture.name=c.name+\".shadowMap\",u.camera.updateProjectionMatrix()}t.setRenderTarget(u.map),t.clear();const f=u.getViewportCount();for(let t=0;t\u003cf;t++){const e=u.getViewport(t);a.set(s.x*e.x,s.y*e.y,s.x*e.z,s.y*e.w),d.viewport(a),u.updateMatrices(c,t),i=u.getFrustum(),_(n,o,u.camera,c,this.type)}u.isPointLightShadow||3!==this.type||x(u,o),u.needsUpdate=!1}v.needsUpdate=!1,t.setRenderTarget(l,c,u)}}function br(t,e,n){const i=n.isWebGL2;const r=new function(){let e=!1;const n=new N;let i=null;const r=new N(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,s,a,o){!0===o\u0026\u0026(e*=a,i*=a,s*=a),n.set(e,i,s,a),!1===r.equals(n)\u0026\u0026(t.clearColor(e,i,s,a),r.copy(n))},reset:function(){e=!1,i=null,r.set(-1,0,0,0)}}},s=new function(){let e=!1,n=null,i=null,r=null;return{setTest:function(t){t?H(2929):F(2929)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case 0:t.depthFunc(512);break;case 1:t.depthFunc(519);break;case 2:t.depthFunc(513);break;case 3:t.depthFunc(515);break;case 4:t.depthFunc(514);break;case 5:t.depthFunc(518);break;case 6:t.depthFunc(516);break;case 7:t.depthFunc(517);break;default:t.depthFunc(515)}else t.depthFunc(515);i=e}},setLocked:function(t){e=t},setClear:function(e){r!==e\u0026\u0026(t.clearDepth(e),r=e)},reset:function(){e=!1,n=null,i=null,r=null}}},a=new function(){let e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null;return{setTest:function(t){e||(t?H(2960):F(2960))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,a){i===e\u0026\u0026r===n\u0026\u0026s===a||(t.stencilFunc(e,n,a),i=e,r=n,s=a)},setOp:function(e,n,i){a===e\u0026\u0026o===n\u0026\u0026l===i||(t.stencilOp(e,n,i),a=e,o=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e\u0026\u0026(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null}}};let o={},l={},c=new WeakMap,h=[],u=null,d=!1,p=null,f=null,m=null,g=null,v=null,x=null,y=null,_=!1,b=null,M=null,w=null,S=null,E=null;const T=t.getParameter(35661);let A=!1,R=0;const C=t.getParameter(7938);-1!==C.indexOf(\"WebGL\")?(R=parseFloat(/^WebGL (\\d)/.exec(C)[1]),A=R\u003e=1):-1!==C.indexOf(\"OpenGL ES\")\u0026\u0026(R=parseFloat(/^OpenGL ES (\\d)/.exec(C)[1]),A=R\u003e=2);let L=null,P={};const D=t.getParameter(3088),I=t.getParameter(2978),O=(new N).fromArray(D),z=(new N).fromArray(I);function B(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;e\u003ci;e++)t.texImage2D(n+e,0,6408,1,1,0,6408,5121,r);return s}const U={};function H(e){!0!==o[e]\u0026\u0026(t.enable(e),o[e]=!0)}function F(e){!1!==o[e]\u0026\u0026(t.disable(e),o[e]=!1)}U[3553]=B(3553,3553,1),U[34067]=B(34067,34069,6),r.setClear(0,0,0,1),s.setClear(1),a.setClear(0),H(2929),s.setFunc(3),W(!1),j(1),H(2884),k(0);const G={100:32774,101:32778,102:32779};if(i)G[103]=32775,G[104]=32776;else{const t=e.get(\"EXT_blend_minmax\");null!==t\u0026\u0026(G[103]=t.MIN_EXT,G[104]=t.MAX_EXT)}const V={200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};function k(e,n,i,r,s,a,o,l){if(0!==e){if(!1===d\u0026\u0026(H(3042),d=!0),5===e)s=s||n,a=a||i,o=o||r,n===f\u0026\u0026s===v||(t.blendEquationSeparate(G[n],G[s]),f=n,v=s),i===m\u0026\u0026r===g\u0026\u0026a===x\u0026\u0026o===y||(t.blendFuncSeparate(V[i],V[r],V[a],V[o]),m=i,g=r,x=a,y=o),p=e,_=null;else if(e!==p||l!==_){if(100===f\u0026\u0026100===v||(t.blendEquation(32774),f=100,v=100),l)switch(e){case 1:t.blendFuncSeparate(1,771,1,771);break;case 2:t.blendFunc(1,1);break;case 3:t.blendFuncSeparate(0,769,0,1);break;case 4:t.blendFuncSeparate(0,768,0,770);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}else switch(e){case 1:t.blendFuncSeparate(770,771,1,771);break;case 2:t.blendFunc(770,1);break;case 3:t.blendFuncSeparate(0,769,0,1);break;case 4:t.blendFunc(0,768);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}m=null,g=null,x=null,y=null,p=e,_=l}}else!0===d\u0026\u0026(F(3042),d=!1)}function W(e){b!==e\u0026\u0026(e?t.frontFace(2304):t.frontFace(2305),b=e)}function j(e){0!==e?(H(2884),e!==M\u0026\u0026(1===e?t.cullFace(1029):2===e?t.cullFace(1028):t.cullFace(1032))):F(2884),M=e}function q(e,n,i){e?(H(32823),S===n\u0026\u0026E===i||(t.polygonOffset(n,i),S=n,E=i)):F(32823)}function X(e){void 0===e\u0026\u0026(e=33984+T-1),L!==e\u0026\u0026(t.activeTexture(e),L=e)}return{buffers:{color:r,depth:s,stencil:a},enable:H,disable:F,bindFramebuffer:function(e,n){return l[e]!==n\u0026\u0026(t.bindFramebuffer(e,n),l[e]=n,i\u0026\u0026(36009===e\u0026\u0026(l[36160]=n),36160===e\u0026\u0026(l[36009]=n)),!0)},drawBuffers:function(i,r){let s=h,a=!1;if(i)if(s=c.get(r),void 0===s\u0026\u0026(s=[],c.set(r,s)),i.isWebGLMultipleRenderTargets){const t=i.texture;if(s.length!==t.length||36064!==s[0]){for(let e=0,n=t.length;e\u003cn;e++)s[e]=36064+e;s.length=t.length,a=!0}}else 36064!==s[0]\u0026\u0026(s[0]=36064,a=!0);else 1029!==s[0]\u0026\u0026(s[0]=1029,a=!0);a\u0026\u0026(n.isWebGL2?t.drawBuffers(s):e.get(\"WEBGL_draw_buffers\").drawBuffersWEBGL(s))},useProgram:function(e){return u!==e\u0026\u0026(t.useProgram(e),u=e,!0)},setBlending:k,setMaterial:function(t,e){2===t.side?F(2884):H(2884);let n=1===t.side;e\u0026\u0026(n=!n),W(n),1===t.blending\u0026\u0026!1===t.transparent?k(0):k(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha),s.setFunc(t.depthFunc),s.setTest(t.depthTest),s.setMask(t.depthWrite),r.setMask(t.colorWrite);const i=t.stencilWrite;a.setTest(i),i\u0026\u0026(a.setMask(t.stencilWriteMask),a.setFunc(t.stencilFunc,t.stencilRef,t.stencilFuncMask),a.setOp(t.stencilFail,t.stencilZFail,t.stencilZPass)),q(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits),!0===t.alphaToCoverage?H(32926):F(32926)},setFlipSided:W,setCullFace:j,setLineWidth:function(e){e!==w\u0026\u0026(A\u0026\u0026t.lineWidth(e),w=e)},setPolygonOffset:q,setScissorTest:function(t){t?H(3089):F(3089)},activeTexture:X,bindTexture:function(e,n){null===L\u0026\u0026X();let i=P[L];void 0===i\u0026\u0026(i={type:void 0,texture:void 0},P[L]=i),i.type===e\u0026\u0026i.texture===n||(t.bindTexture(e,n||U[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=P[L];void 0!==e\u0026\u0026void 0!==e.type\u0026\u0026(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texStorage2D:function(){try{t.texStorage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texStorage3D:function(){try{t.texStorage3D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texSubImage2D:function(){try{t.texSubImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texSubImage3D:function(){try{t.texSubImage3D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},compressedTexSubImage2D:function(){try{t.compressedTexSubImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},scissor:function(e){!1===O.equals(e)\u0026\u0026(t.scissor(e.x,e.y,e.z,e.w),O.copy(e))},viewport:function(e){!1===z.equals(e)\u0026\u0026(t.viewport(e.x,e.y,e.z,e.w),z.copy(e))},reset:function(){t.disable(3042),t.disable(2884),t.disable(2929),t.disable(32823),t.disable(3089),t.disable(2960),t.disable(32926),t.blendEquation(32774),t.blendFunc(1,0),t.blendFuncSeparate(1,0,1,0),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(513),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(519,0,4294967295),t.stencilOp(7680,7680,7680),t.clearStencil(0),t.cullFace(1029),t.frontFace(2305),t.polygonOffset(0,0),t.activeTexture(33984),t.bindFramebuffer(36160,null),!0===i\u0026\u0026(t.bindFramebuffer(36009,null),t.bindFramebuffer(36008,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),o={},L=null,P={},l={},c=new WeakMap,h=[],u=null,d=!1,p=null,f=null,m=null,g=null,v=null,x=null,y=null,_=!1,b=null,M=null,w=null,S=null,E=null,O.set(0,0,t.canvas.width,t.canvas.height),z.set(0,0,t.canvas.width,t.canvas.height),r.reset(),s.reset(),a.reset()}}}function Mr(t,e,n,i,r,s,a){const o=r.isWebGL2,l=r.maxTextures,c=r.maxCubemapSize,h=r.maxTextureSize,p=r.maxSamples,f=e.has(\"WEBGL_multisampled_render_to_texture\")?e.get(\"WEBGL_multisampled_render_to_texture\"):null,m=/OculusBrowser/g.test(navigator.userAgent),v=new WeakMap;let x;const y=new WeakMap;let _=!1;try{_=\"undefined\"!=typeof OffscreenCanvas\u0026\u0026null!==new OffscreenCanvas(1,1).getContext(\"2d\")}catch(t){}function b(t,e){return _?new OffscreenCanvas(t,e):g(\"canvas\")}function M(t,e,n,i){let r=1;if((t.width\u003ei||t.height\u003ei)\u0026\u0026(r=i/Math.max(t.width,t.height)),r\u003c1||!0===e){if(\"undefined\"!=typeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap\u0026\u0026t instanceof ImageBitmap){const i=e?d:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===x\u0026\u0026(x=b(s,a));const o=n?b(s,a):x;o.width=s,o.height=a;return o.getContext(\"2d\").drawImage(t,0,0,s,a),console.warn(\"THREE.WebGLRenderer: Texture has been resized from (\"+t.width+\"x\"+t.height+\") to (\"+s+\"x\"+a+\").\"),o}return\"data\"in t\u0026\u0026console.warn(\"THREE.WebGLRenderer: Image in DataTexture is too big (\"+t.width+\"x\"+t.height+\").\"),t}return t}function w(t){return u(t.width)\u0026\u0026u(t.height)}function S(t,e){return t.generateMipmaps\u0026\u0026e\u0026\u00261003!==t.minFilter\u0026\u00261006!==t.minFilter}function E(e){t.generateMipmap(e)}function T(n,i,r,s,a=!1){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\"+n+\"'\")}let l=i;return 6403===i\u0026\u0026(5126===r\u0026\u0026(l=33326),5131===r\u0026\u0026(l=33325),5121===r\u0026\u0026(l=33321)),33319===i\u0026\u0026(5126===r\u0026\u0026(l=33328),5131===r\u0026\u0026(l=33327),5121===r\u0026\u0026(l=33323)),6408===i\u0026\u0026(5126===r\u0026\u0026(l=34836),5131===r\u0026\u0026(l=34842),5121===r\u0026\u0026(l=3001===s\u0026\u0026!1===a?35907:32856),32819===r\u0026\u0026(l=32854),32820===r\u0026\u0026(l=32855)),33325!==l\u0026\u002633326!==l\u0026\u002633327!==l\u0026\u002633328!==l\u0026\u002634842!==l\u0026\u002634836!==l||e.get(\"EXT_color_buffer_float\"),l}function A(t,e,n){return!0===S(t,n)||t.isFramebufferTexture\u0026\u00261003!==t.minFilter\u0026\u00261006!==t.minFilter?Math.log2(Math.max(e.width,e.height))+1:void 0!==t.mipmaps\u0026\u0026t.mipmaps.length\u003e0?t.mipmaps.length:t.isCompressedTexture\u0026\u0026Array.isArray(t.image)?e.mipmaps.length:1}function R(t){return 1003===t||1004===t||1005===t?9728:9729}function L(t){const e=t.target;e.removeEventListener(\"dispose\",L),function(t){const e=i.get(t);if(void 0===e.__webglInit)return;const n=t.source,r=y.get(n);if(r){const i=r[e.__cacheKey];i.usedTimes--,0===i.usedTimes\u0026\u0026D(t),0===Object.keys(r).length\u0026\u0026y.delete(n)}i.remove(t)}(e),e.isVideoTexture\u0026\u0026v.delete(e)}function P(e){const n=e.target;n.removeEventListener(\"dispose\",P),function(e){const n=e.texture,r=i.get(e),s=i.get(n);void 0!==s.__webglTexture\u0026\u0026(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture\u0026\u0026e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e\u003c6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer\u0026\u0026t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e\u003cr;e++){const r=i.get(n[e]);r.__webglTexture\u0026\u0026(t.deleteTexture(r.__webglTexture),a.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}function D(e){const n=i.get(e);t.deleteTexture(n.__webglTexture);const r=e.source;delete y.get(r)[n.__cacheKey],a.memory.textures--}let I=0;function N(t,e){const r=i.get(t);if(t.isVideoTexture\u0026\u0026function(t){const e=a.render.frame;v.get(t)!==e\u0026\u0026(v.set(t,e),t.update())}(t),!1===t.isRenderTargetTexture\u0026\u0026t.version\u003e0\u0026\u0026r.__version!==t.version){const n=t.image;if(null===n)console.warn(\"THREE.WebGLRenderer: Texture marked for update but no image data found.\");else{if(!1!==n.complete)return void H(r,t,e);console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}const O={1e3:10497,1001:33071,1002:33648},z={1003:9728,1004:9984,1005:9986,1006:9729,1007:9985,1008:9987};function B(n,s,a){if(a?(t.texParameteri(n,10242,O[s.wrapS]),t.texParameteri(n,10243,O[s.wrapT]),32879!==n\u0026\u002635866!==n||t.texParameteri(n,32882,O[s.wrapR]),t.texParameteri(n,10240,z[s.magFilter]),t.texParameteri(n,10241,z[s.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n\u0026\u002635866!==n||t.texParameteri(n,32882,33071),1001===s.wrapS\u0026\u00261001===s.wrapT||console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\"),t.texParameteri(n,10240,R(s.magFilter)),t.texParameteri(n,10241,R(s.minFilter)),1003!==s.minFilter\u0026\u00261006!==s.minFilter\u0026\u0026console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\")),!0===e.has(\"EXT_texture_filter_anisotropic\")){const a=e.get(\"EXT_texture_filter_anisotropic\");if(1015===s.type\u0026\u0026!1===e.has(\"OES_texture_float_linear\"))return;if(!1===o\u0026\u00261016===s.type\u0026\u0026!1===e.has(\"OES_texture_half_float_linear\"))return;(s.anisotropy\u003e1||i.get(s).__currentAnisotropy)\u0026\u0026(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function U(e,n){let i=!1;void 0===e.__webglInit\u0026\u0026(e.__webglInit=!0,n.addEventListener(\"dispose\",L));const r=n.source;let s=y.get(r);void 0===s\u0026\u0026(s={},y.set(r,s));const o=function(t){const e=[];return e.push(t.wrapS),e.push(t.wrapT),e.push(t.magFilter),e.push(t.minFilter),e.push(t.anisotropy),e.push(t.internalFormat),e.push(t.format),e.push(t.type),e.push(t.generateMipmaps),e.push(t.premultiplyAlpha),e.push(t.flipY),e.push(t.unpackAlignment),e.push(t.encoding),e.join()}(n);if(o!==e.__cacheKey){void 0===s[o]\u0026\u0026(s[o]={texture:t.createTexture(),usedTimes:0},a.memory.textures++,i=!0),s[o].usedTimes++;const r=s[e.__cacheKey];void 0!==r\u0026\u0026(s[e.__cacheKey].usedTimes--,0===r.usedTimes\u0026\u0026D(n)),e.__cacheKey=o,e.__webglTexture=s[o].texture}return i}function H(e,i,r){let a=3553;i.isDataArrayTexture\u0026\u0026(a=35866),i.isData3DTexture\u0026\u0026(a=32879);const l=U(e,i),c=i.source;if(n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),c.version!==c.__currentVersion||!0===l){t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const r=function(t){return!o\u0026\u0026(1001!==t.wrapS||1001!==t.wrapT||1003!==t.minFilter\u0026\u00261006!==t.minFilter)}(i)\u0026\u0026!1===w(i.image);let u=M(i.image,r,!1,h);u=j(i,u);const d=w(u)||o,p=s.convert(i.format,i.encoding);let f,m=s.convert(i.type),g=T(i.internalFormat,p,m,i.encoding,i.isVideoTexture);B(a,i,d);const v=i.mipmaps,x=o\u0026\u0026!0!==i.isVideoTexture,y=void 0===e.__version||!0===l,_=A(i,u,d);if(i.isDepthTexture)g=6402,o?g=1015===i.type?36012:1014===i.type?33190:1020===i.type?35056:33189:1015===i.type\u0026\u0026console.error(\"WebGLRenderer: Floating point depth texture requires WebGL2.\"),1026===i.format\u0026\u00266402===g\u0026\u00261012!==i.type\u0026\u00261014!==i.type\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),i.type=1012,m=s.convert(i.type)),1027===i.format\u0026\u00266402===g\u0026\u0026(g=34041,1020!==i.type\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),i.type=1020,m=s.convert(i.type))),y\u0026\u0026(x?n.texStorage2D(3553,1,g,u.width,u.height):n.texImage2D(3553,0,g,u.width,u.height,0,p,m,null));else if(i.isDataTexture)if(v.length\u003e0\u0026\u0026d){x\u0026\u0026y\u0026\u0026n.texStorage2D(3553,_,g,v[0].width,v[0].height);for(let t=0,e=v.length;t\u003ce;t++)f=v[t],x?n.texSubImage2D(3553,t,0,0,f.width,f.height,p,m,f.data):n.texImage2D(3553,t,g,f.width,f.height,0,p,m,f.data);i.generateMipmaps=!1}else x?(y\u0026\u0026n.texStorage2D(3553,_,g,u.width,u.height),n.texSubImage2D(3553,0,0,0,u.width,u.height,p,m,u.data)):n.texImage2D(3553,0,g,u.width,u.height,0,p,m,u.data);else if(i.isCompressedTexture){x\u0026\u0026y\u0026\u0026n.texStorage2D(3553,_,g,v[0].width,v[0].height);for(let t=0,e=v.length;t\u003ce;t++)f=v[t],1023!==i.format?null!==p?x?n.compressedTexSubImage2D(3553,t,0,0,f.width,f.height,p,f.data):n.compressedTexImage2D(3553,t,g,f.width,f.height,0,f.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):x?n.texSubImage2D(3553,t,0,0,f.width,f.height,p,m,f.data):n.texImage2D(3553,t,g,f.width,f.height,0,p,m,f.data)}else if(i.isDataArrayTexture)x?(y\u0026\u0026n.texStorage3D(35866,_,g,u.width,u.height,u.depth),n.texSubImage3D(35866,0,0,0,0,u.width,u.height,u.depth,p,m,u.data)):n.texImage3D(35866,0,g,u.width,u.height,u.depth,0,p,m,u.data);else if(i.isData3DTexture)x?(y\u0026\u0026n.texStorage3D(32879,_,g,u.width,u.height,u.depth),n.texSubImage3D(32879,0,0,0,0,u.width,u.height,u.depth,p,m,u.data)):n.texImage3D(32879,0,g,u.width,u.height,u.depth,0,p,m,u.data);else if(i.isFramebufferTexture){if(y)if(x)n.texStorage2D(3553,_,g,u.width,u.height);else{let t=u.width,e=u.height;for(let i=0;i\u003c_;i++)n.texImage2D(3553,i,g,t,e,0,p,m,null),t\u003e\u003e=1,e\u003e\u003e=1}}else if(v.length\u003e0\u0026\u0026d){x\u0026\u0026y\u0026\u0026n.texStorage2D(3553,_,g,v[0].width,v[0].height);for(let t=0,e=v.length;t\u003ce;t++)f=v[t],x?n.texSubImage2D(3553,t,0,0,p,m,f):n.texImage2D(3553,t,g,p,m,f);i.generateMipmaps=!1}else x?(y\u0026\u0026n.texStorage2D(3553,_,g,u.width,u.height),n.texSubImage2D(3553,0,0,0,p,m,u)):n.texImage2D(3553,0,g,p,m,u);S(i,d)\u0026\u0026E(a),c.__currentVersion=c.version,i.onUpdate\u0026\u0026i.onUpdate(i)}e.__version=i.version}function F(e,r,a,o,l){const c=s.convert(a.format,a.encoding),h=s.convert(a.type),u=T(a.internalFormat,c,h,a.encoding);i.get(r).__hasExternalTextures||(32879===l||35866===l?n.texImage3D(l,0,u,r.width,r.height,r.depth,0,c,h,null):n.texImage2D(l,0,u,r.width,r.height,0,c,h,null)),n.bindFramebuffer(36160,e),W(r)?f.framebufferTexture2DMultisampleEXT(36160,o,l,i.get(a).__webglTexture,0,k(r)):t.framebufferTexture2D(36160,o,l,i.get(a).__webglTexture,0),n.bindFramebuffer(36160,null)}function G(e,n,i){if(t.bindRenderbuffer(36161,e),n.depthBuffer\u0026\u0026!n.stencilBuffer){let r=33189;if(i||W(n)){const e=n.depthTexture;e\u0026\u0026e.isDepthTexture\u0026\u0026(1015===e.type?r=36012:1014===e.type\u0026\u0026(r=33190));const i=k(n);W(n)?f.renderbufferStorageMultisampleEXT(36161,i,r,n.width,n.height):t.renderbufferStorageMultisample(36161,i,r,n.width,n.height)}else t.renderbufferStorage(36161,r,n.width,n.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(n.depthBuffer\u0026\u0026n.stencilBuffer){const r=k(n);i\u0026\u0026!1===W(n)?t.renderbufferStorageMultisample(36161,r,35056,n.width,n.height):W(n)?f.renderbufferStorageMultisampleEXT(36161,r,35056,n.width,n.height):t.renderbufferStorage(36161,34041,n.width,n.height),t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,r=s.convert(e.format,e.encoding),a=s.convert(e.type),o=T(e.internalFormat,r,a,e.encoding),l=k(n);i\u0026\u0026!1===W(n)?t.renderbufferStorageMultisample(36161,l,o,n.width,n.height):W(n)?f.renderbufferStorageMultisampleEXT(36161,l,o,n.width,n.height):t.renderbufferStorage(36161,o,n.width,n.height)}t.bindRenderbuffer(36161,null)}function V(e){const r=i.get(e),s=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture\u0026\u0026!r.__autoAllocateDepthBuffer){if(s)throw new Error(\"target.depthTexture not supported in Cube render targets\");!function(e,r){if(r\u0026\u0026r.isWebGLCubeRenderTarget)throw new Error(\"Depth Texture with cube render targets is not supported\");if(n.bindFramebuffer(36160,e),!r.depthTexture||!r.depthTexture.isDepthTexture)throw new Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");i.get(r.depthTexture).__webglTexture\u0026\u0026r.depthTexture.image.width===r.width\u0026\u0026r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),N(r.depthTexture,0);const s=i.get(r.depthTexture).__webglTexture,a=k(r);if(1026===r.depthTexture.format)W(r)?f.framebufferTexture2DMultisampleEXT(36160,36096,3553,s,0,a):t.framebufferTexture2D(36160,36096,3553,s,0);else{if(1027!==r.depthTexture.format)throw new Error(\"Unknown depthTexture format\");W(r)?f.framebufferTexture2DMultisampleEXT(36160,33306,3553,s,0,a):t.framebufferTexture2D(36160,33306,3553,s,0)}}(r.__webglFramebuffer,e)}else if(s){r.__webglDepthbuffer=[];for(let i=0;i\u003c6;i++)n.bindFramebuffer(36160,r.__webglFramebuffer[i]),r.__webglDepthbuffer[i]=t.createRenderbuffer(),G(r.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(36160,r.__webglFramebuffer),r.__webglDepthbuffer=t.createRenderbuffer(),G(r.__webglDepthbuffer,e,!1);n.bindFramebuffer(36160,null)}function k(t){return Math.min(p,t.samples)}function W(t){const n=i.get(t);return o\u0026\u0026t.samples\u003e0\u0026\u0026!0===e.has(\"WEBGL_multisampled_render_to_texture\")\u0026\u0026!1!==n.__useRenderToTexture}function j(t,n){const i=t.encoding,r=t.format,s=t.type;return!0===t.isCompressedTexture||!0===t.isVideoTexture||1035===t.format||3e3!==i\u0026\u0026(3001===i?!1===o?!0===e.has(\"EXT_sRGB\")\u0026\u00261023===r?(t.format=1035,t.minFilter=1006,t.generateMipmaps=!1):n=C.sRGBToLinear(n):1023===r\u0026\u00261009===s||console.warn(\"THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.\"):console.error(\"THREE.WebGLTextures: Unsupported texture encoding:\",i)),n}this.allocateTextureUnit=function(){const t=I;return t\u003e=l\u0026\u0026console.warn(\"THREE.WebGLTextures: Trying to use \"+t+\" texture units while this GPU supports only \"+l),I+=1,t},this.resetTextureUnits=function(){I=0},this.setTexture2D=N,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version\u003e0\u0026\u0026r.__version!==t.version?H(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version\u003e0\u0026\u0026r.__version!==t.version?H(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=function(e,r){const a=i.get(e);e.version\u003e0\u0026\u0026a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;const a=U(e,i),l=i.source;if(n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),l.version!==l.__currentVersion||!0===a){t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const r=i.isCompressedTexture||i.image[0].isCompressedTexture,a=i.image[0]\u0026\u0026i.image[0].isDataTexture,h=[];for(let t=0;t\u003c6;t++)h[t]=r||a?a?i.image[t].image:i.image[t]:M(i.image[t],!1,!0,c),h[t]=j(i,h[t]);const u=h[0],d=w(u)||o,p=s.convert(i.format,i.encoding),f=s.convert(i.type),m=T(i.internalFormat,p,f,i.encoding),g=o\u0026\u0026!0!==i.isVideoTexture,v=void 0===e.__version;let x,y=A(i,u,d);if(B(34067,i,d),r){g\u0026\u0026v\u0026\u0026n.texStorage2D(34067,y,m,u.width,u.height);for(let t=0;t\u003c6;t++){x=h[t].mipmaps;for(let e=0;e\u003cx.length;e++){const r=x[e];1023!==i.format?null!==p?g?n.compressedTexSubImage2D(34069+t,e,0,0,r.width,r.height,p,r.data):n.compressedTexImage2D(34069+t,e,m,r.width,r.height,0,r.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):g?n.texSubImage2D(34069+t,e,0,0,r.width,r.height,p,f,r.data):n.texImage2D(34069+t,e,m,r.width,r.height,0,p,f,r.data)}}}else{x=i.mipmaps,g\u0026\u0026v\u0026\u0026(x.length\u003e0\u0026\u0026y++,n.texStorage2D(34067,y,m,h[0].width,h[0].height));for(let t=0;t\u003c6;t++)if(a){g?n.texSubImage2D(34069+t,0,0,0,h[t].width,h[t].height,p,f,h[t].data):n.texImage2D(34069+t,0,m,h[t].width,h[t].height,0,p,f,h[t].data);for(let e=0;e\u003cx.length;e++){const i=x[e].image[t].image;g?n.texSubImage2D(34069+t,e+1,0,0,i.width,i.height,p,f,i.data):n.texImage2D(34069+t,e+1,m,i.width,i.height,0,p,f,i.data)}}else{g?n.texSubImage2D(34069+t,0,0,0,p,f,h[t]):n.texImage2D(34069+t,0,m,p,f,h[t]);for(let e=0;e\u003cx.length;e++){const i=x[e];g?n.texSubImage2D(34069+t,e+1,0,0,p,f,i.image[t]):n.texImage2D(34069+t,e+1,m,p,f,i.image[t])}}}S(i,d)\u0026\u0026E(34067),l.__currentVersion=l.version,i.onUpdate\u0026\u0026i.onUpdate(i)}e.__version=i.version}(a,e,r):(n.activeTexture(33984+r),n.bindTexture(34067,a.__webglTexture))},this.rebindTextures=function(t,e,n){const r=i.get(t);void 0!==e\u0026\u0026F(r.__webglFramebuffer,t,t.texture,36064,3553),void 0!==n\u0026\u0026V(t)},this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),h=i.get(l);e.addEventListener(\"dispose\",P),!0!==e.isWebGLMultipleRenderTargets\u0026\u0026(void 0===h.__webglTexture\u0026\u0026(h.__webglTexture=t.createTexture()),h.__version=l.version,a.memory.textures++);const u=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=w(e)||o;if(u){c.__webglFramebuffer=[];for(let e=0;e\u003c6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;e\u003cr;e++){const r=i.get(n[e]);void 0===r.__webglTexture\u0026\u0026(r.__webglTexture=t.createTexture(),a.memory.textures++)}}else console.warn(\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\");else if(o\u0026\u0026e.samples\u003e0\u0026\u0026!1===W(e)){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,c.__webglColorRenderbuffer);const i=s.convert(l.format,l.encoding),r=s.convert(l.type),a=T(l.internalFormat,i,r,l.encoding),o=k(e);t.renderbufferStorageMultisample(36161,o,a,e.width,e.height),n.bindFramebuffer(36160,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,c.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer\u0026\u0026(c.__webglDepthRenderbuffer=t.createRenderbuffer(),G(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}if(u){n.bindTexture(34067,h.__webglTexture),B(34067,l,p);for(let t=0;t\u003c6;t++)F(c.__webglFramebuffer[t],e,l,36064,34069+t);S(l,p)\u0026\u0026E(34067),n.unbindTexture()}else if(d){const t=e.texture;for(let r=0,s=t.length;r\u003cs;r++){const s=t[r],a=i.get(s);n.bindTexture(3553,a.__webglTexture),B(3553,s,p),F(c.__webglFramebuffer,e,s,36064+r,3553),S(s,p)\u0026\u0026E(3553)}n.unbindTexture()}else{let t=3553;(e.isWebGL3DRenderTarget||e.isWebGLArrayRenderTarget)\u0026\u0026(o?t=e.isWebGL3DRenderTarget?32879:35866:console.error(\"THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.\")),n.bindTexture(t,h.__webglTexture),B(t,l,p),F(c.__webglFramebuffer,e,l,36064,t),S(l,p)\u0026\u0026E(t),n.unbindTexture()}e.depthBuffer\u0026\u0026V(e)},this.updateRenderTargetMipmap=function(t){const e=w(t)||o,r=!0===t.isWebGLMultipleRenderTargets?t.texture:[t.texture];for(let s=0,a=r.length;s\u003ca;s++){const a=r[s];if(S(a,e)){const e=t.isWebGLCubeRenderTarget?34067:3553,r=i.get(a).__webglTexture;n.bindTexture(e,r),E(e),n.unbindTexture()}}},this.updateMultisampleRenderTarget=function(e){if(o\u0026\u0026e.samples\u003e0\u0026\u0026!1===W(e)){const r=e.width,s=e.height;let a=16384;const o=[36064],l=e.stencilBuffer?33306:36096;e.depthBuffer\u0026\u0026o.push(l);const c=i.get(e),h=void 0!==c.__ignoreDepthValues\u0026\u0026c.__ignoreDepthValues;!1===h\u0026\u0026(e.depthBuffer\u0026\u0026(a|=256),e.stencilBuffer\u0026\u0026(a|=1024)),n.bindFramebuffer(36008,c.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,c.__webglFramebuffer),!0===h\u0026\u0026(t.invalidateFramebuffer(36008,[l]),t.invalidateFramebuffer(36009,[l])),t.blitFramebuffer(0,0,r,s,0,0,r,s,a,9728),m\u0026\u0026t.invalidateFramebuffer(36008,o),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,c.__webglMultisampledFramebuffer)}},this.setupDepthRenderbuffer=V,this.setupFrameBufferTexture=F,this.useMultisampledRTT=W}function wr(t,e,n){const i=n.isWebGL2;return{convert:function(n,r=null){let s;if(1009===n)return 5121;if(1017===n)return 32819;if(1018===n)return 32820;if(1010===n)return 5120;if(1011===n)return 5122;if(1012===n)return 5123;if(1013===n)return 5124;if(1014===n)return 5125;if(1015===n)return 5126;if(1016===n)return i?5131:(s=e.get(\"OES_texture_half_float\"),null!==s?s.HALF_FLOAT_OES:null);if(1021===n)return 6406;if(1023===n)return 6408;if(1024===n)return 6409;if(1025===n)return 6410;if(1026===n)return 6402;if(1027===n)return 34041;if(1028===n)return 6403;if(1022===n)return console.warn(\"THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228\"),6408;if(1035===n)return s=e.get(\"EXT_sRGB\"),null!==s?s.SRGB_ALPHA_EXT:null;if(1029===n)return 36244;if(1030===n)return 33319;if(1031===n)return 33320;if(1033===n)return 36249;if(33776===n||33777===n||33778===n||33779===n)if(3001===r){if(s=e.get(\"WEBGL_compressed_texture_s3tc_srgb\"),null===s)return null;if(33776===n)return s.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(33777===n)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(33778===n)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(33779===n)return s.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else{if(s=e.get(\"WEBGL_compressed_texture_s3tc\"),null===s)return null;if(33776===n)return s.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===n)return s.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(33778===n)return s.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===n)return s.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(35840===n||35841===n||35842===n||35843===n){if(s=e.get(\"WEBGL_compressed_texture_pvrtc\"),null===s)return null;if(35840===n)return s.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===n)return s.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===n)return s.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===n)return s.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(36196===n)return s=e.get(\"WEBGL_compressed_texture_etc1\"),null!==s?s.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===n||37496===n){if(s=e.get(\"WEBGL_compressed_texture_etc\"),null===s)return null;if(37492===n)return 3001===r?s.COMPRESSED_SRGB8_ETC2:s.COMPRESSED_RGB8_ETC2;if(37496===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:s.COMPRESSED_RGBA8_ETC2_EAC}if(37808===n||37809===n||37810===n||37811===n||37812===n||37813===n||37814===n||37815===n||37816===n||37817===n||37818===n||37819===n||37820===n||37821===n){if(s=e.get(\"WEBGL_compressed_texture_astc\"),null===s)return null;if(37808===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:s.COMPRESSED_RGBA_ASTC_4x4_KHR;if(37809===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:s.COMPRESSED_RGBA_ASTC_5x4_KHR;if(37810===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:s.COMPRESSED_RGBA_ASTC_5x5_KHR;if(37811===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:s.COMPRESSED_RGBA_ASTC_6x5_KHR;if(37812===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:s.COMPRESSED_RGBA_ASTC_6x6_KHR;if(37813===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:s.COMPRESSED_RGBA_ASTC_8x5_KHR;if(37814===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:s.COMPRESSED_RGBA_ASTC_8x6_KHR;if(37815===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:s.COMPRESSED_RGBA_ASTC_8x8_KHR;if(37816===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:s.COMPRESSED_RGBA_ASTC_10x5_KHR;if(37817===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:s.COMPRESSED_RGBA_ASTC_10x6_KHR;if(37818===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:s.COMPRESSED_RGBA_ASTC_10x8_KHR;if(37819===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:s.COMPRESSED_RGBA_ASTC_10x10_KHR;if(37820===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:s.COMPRESSED_RGBA_ASTC_12x10_KHR;if(37821===n)return 3001===r?s.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:s.COMPRESSED_RGBA_ASTC_12x12_KHR}if(36492===n){if(s=e.get(\"EXT_texture_compression_bptc\"),null===s)return null;if(36492===n)return 3001===r?s.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:s.COMPRESSED_RGBA_BPTC_UNORM_EXT}return 1020===n?i?34042:(s=e.get(\"WEBGL_depth_texture\"),null!==s?s.UNSIGNED_INT_24_8_WEBGL:null):void 0!==t[n]?t[n]:null}}}class Sr extends Ge{constructor(t=[]){super(),this.cameras=t}}Sr.prototype.isArrayCamera=!0;class Er extends Gt{constructor(){super(),this.type=\"Group\"}}Er.prototype.isGroup=!0;const Tr={type:\"move\"};class Ar{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand\u0026\u0026(this._hand=new Er,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay\u0026\u0026(this._targetRay=new Er,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new H,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new H),this._targetRay}getGripSpace(){return null===this._grip\u0026\u0026(this._grip=new Er,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new H,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new H),this._grip}dispatchEvent(t){return null!==this._targetRay\u0026\u0026this._targetRay.dispatchEvent(t),null!==this._grip\u0026\u0026this._grip.dispatchEvent(t),null!==this._hand\u0026\u0026this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\"disconnected\",data:t}),null!==this._targetRay\u0026\u0026(this._targetRay.visible=!1),null!==this._grip\u0026\u0026(this._grip.visible=!1),null!==this._hand\u0026\u0026(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(t\u0026\u0026\"visible-blurred\"!==e.session.visibilityState)if(null!==a\u0026\u0026(i=e.getPose(t.targetRaySpace,n),null!==i\u0026\u0026(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(Tr))),l\u0026\u0026t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new Er;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t\u0026\u0026(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints[\"index-finger-tip\"],r=l.joints[\"thumb-tip\"],a=i.position.distanceTo(r.position),o=.02,c=.005;l.inputState.pinching\u0026\u0026a\u003eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\"pinchend\",handedness:t.handedness,target:this})):!l.inputState.pinching\u0026\u0026a\u003c=o-c\u0026\u0026(l.inputState.pinching=!0,this.dispatchEvent({type:\"pinchstart\",handedness:t.handedness,target:this}))}else null!==o\u0026\u0026t.gripSpace\u0026\u0026(r=e.getPose(t.gripSpace,n),null!==r\u0026\u0026(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a\u0026\u0026(a.visible=null!==i),null!==o\u0026\u0026(o.visible=null!==r),null!==l\u0026\u0026(l.visible=null!==s),this}}class Rr extends I{constructor(t,e,n,i,r,s,a,o,l,c){if(1026!==(c=void 0!==c?c:1026)\u0026\u00261027!==c)throw new Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");void 0===n\u0026\u00261026===c\u0026\u0026(n=1012),void 0===n\u0026\u00261027===c\u0026\u0026(n=1020),super(null,i,r,s,a,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==a?a:1003,this.minFilter=void 0!==o?o:1003,this.flipY=!1,this.generateMipmaps=!1}}Rr.prototype.isDepthTexture=!0;class Cr extends i{constructor(t,e){super();const n=this;let i=null,r=1,s=null,a=\"local-floor\",o=null,l=null,c=null,h=null,u=null,d=null;const p=e.getContextAttributes();let f=null,m=null;const g=[],v=new Map,x=new Ge;x.layers.enable(1),x.viewport=new N;const y=new Ge;y.layers.enable(2),y.viewport=new N;const _=[x,y],b=new Sr;b.layers.enable(1),b.layers.enable(2);let M=null,w=null;function S(t){const e=v.get(t.inputSource);e\u0026\u0026e.dispatchEvent({type:t.type,data:t.inputSource})}function E(){v.forEach((function(t,e){t.disconnect(e)})),v.clear(),M=null,w=null,t.setRenderTarget(f),u=null,h=null,c=null,i=null,m=null,P.stop(),n.isPresenting=!1,n.dispatchEvent({type:\"sessionend\"})}function T(t){const e=i.inputSources;for(let t=0;t\u003ce.length;t++){const n=\"right\"===e[t].handedness?1:0;v.set(e[t],g[n])}for(let e=0;e\u003ct.removed.length;e++){const n=t.removed[e],i=v.get(n);i\u0026\u0026(i.dispatchEvent({type:\"disconnected\",data:n}),v.delete(n))}for(let e=0;e\u003ct.added.length;e++){const n=t.added[e],i=v.get(n);i\u0026\u0026i.dispatchEvent({type:\"connected\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=g[t];return void 0===e\u0026\u0026(e=new Ar,g[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=g[t];return void 0===e\u0026\u0026(e=new Ar,g[t]=e),e.getGripSpace()},this.getHand=function(t){let e=g[t];return void 0===e\u0026\u0026(e=new Ar,g[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){r=t,!0===n.isPresenting\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\")},this.setReferenceSpaceType=function(t){a=t,!0===n.isPresenting\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change reference space type while presenting.\")},this.getReferenceSpace=function(){return o||s},this.setReferenceSpace=function(t){o=t},this.getBaseLayer=function(){return null!==h?h:u},this.getBinding=function(){return c},this.getFrame=function(){return d},this.getSession=function(){return i},this.setSession=async function(o){if(i=o,null!==i){if(f=t.getRenderTarget(),i.addEventListener(\"select\",S),i.addEventListener(\"selectstart\",S),i.addEventListener(\"selectend\",S),i.addEventListener(\"squeeze\",S),i.addEventListener(\"squeezestart\",S),i.addEventListener(\"squeezeend\",S),i.addEventListener(\"end\",E),i.addEventListener(\"inputsourceschange\",T),!0!==p.xrCompatible\u0026\u0026await e.makeXRCompatible(),void 0===i.renderState.layers||!1===t.capabilities.isWebGL2){const n={antialias:void 0!==i.renderState.layers||p.antialias,alpha:p.alpha,depth:p.depth,stencil:p.stencil,framebufferScaleFactor:r};u=new XRWebGLLayer(i,e,n),i.updateRenderState({baseLayer:u}),m=new O(u.framebufferWidth,u.framebufferHeight,{format:1023,type:1009,encoding:t.outputEncoding})}else{let n=null,s=null,a=null;p.depth\u0026\u0026(a=p.stencil?35056:33190,n=p.stencil?1027:1026,s=p.stencil?1020:1012);const o={colorFormat:3001===t.outputEncoding?35907:32856,depthFormat:a,scaleFactor:r};c=new XRWebGLBinding(i,e),h=c.createProjectionLayer(o),i.updateRenderState({layers:[h]}),m=new O(h.textureWidth,h.textureHeight,{format:1023,type:1009,depthTexture:new Rr(h.textureWidth,h.textureHeight,s,void 0,void 0,void 0,void 0,void 0,void 0,n),stencilBuffer:p.stencil,encoding:t.outputEncoding,samples:p.antialias?4:0});t.properties.get(m).__ignoreDepthValues=h.ignoreDepthValues}m.isXRRenderTarget=!0,this.setFoveation(1),s=await i.requestReferenceSpace(a),P.setContext(i),P.start(),n.isPresenting=!0,n.dispatchEvent({type:\"sessionstart\"})}};const A=new H,R=new H;function C(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===i)return;b.near=y.near=x.near=t.near,b.far=y.far=x.far=t.far,M===b.near\u0026\u0026w===b.far||(i.updateRenderState({depthNear:b.near,depthFar:b.far}),M=b.near,w=b.far);const e=t.parent,n=b.cameras;C(b,e);for(let t=0;t\u003cn.length;t++)C(n[t],e);b.matrixWorld.decompose(b.position,b.quaternion,b.scale),t.position.copy(b.position),t.quaternion.copy(b.quaternion),t.scale.copy(b.scale),t.matrix.copy(b.matrix),t.matrixWorld.copy(b.matrixWorld);const r=t.children;for(let t=0,e=r.length;t\u003ce;t++)r[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){A.setFromMatrixPosition(e.matrixWorld),R.setFromMatrixPosition(n.matrixWorld);const i=A.distanceTo(R),r=e.projectionMatrix.elements,s=n.projectionMatrix.elements,a=r[14]/(r[10]-1),o=r[14]/(r[10]+1),l=(r[9]+1)/r[5],c=(r[9]-1)/r[5],h=(r[8]-1)/r[0],u=(s[8]+1)/s[0],d=a*h,p=a*u,f=i/(-h+u),m=f*-h;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(f),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const g=a+f,v=o+f,x=d-m,y=p+(i-m),_=l*o/v*g,b=c*o/v*g;t.projectionMatrix.makePerspective(x,y,_,b,g,v)}(b,x,y):b.projectionMatrix.copy(x.projectionMatrix)},this.getCamera=function(){return b},this.getFoveation=function(){return null!==h?h.fixedFoveation:null!==u?u.fixedFoveation:void 0},this.setFoveation=function(t){null!==h\u0026\u0026(h.fixedFoveation=t),null!==u\u0026\u0026void 0!==u.fixedFoveation\u0026\u0026(u.fixedFoveation=t)};let L=null;const P=new Qe;P.setAnimationLoop((function(e,n){if(l=n.getViewerPose(o||s),d=n,null!==l){const e=l.views;null!==u\u0026\u0026(t.setRenderTargetFramebuffer(m,u.framebuffer),t.setRenderTarget(m));let n=!1;e.length!==b.cameras.length\u0026\u0026(b.cameras.length=0,n=!0);for(let i=0;i\u003ce.length;i++){const r=e[i];let s=null;if(null!==u)s=u.getViewport(r);else{const e=c.getViewSubImage(h,r);s=e.viewport,0===i\u0026\u0026(t.setRenderTargetTextures(m,e.colorTexture,h.ignoreDepthValues?void 0:e.depthStencilTexture),t.setRenderTarget(m))}const a=_[i];a.matrix.fromArray(r.transform.matrix),a.projectionMatrix.fromArray(r.projectionMatrix),a.viewport.set(s.x,s.y,s.width,s.height),0===i\u0026\u0026b.matrix.copy(a.matrix),!0===n\u0026\u0026b.cameras.push(a)}}const r=i.inputSources;for(let t=0;t\u003cg.length;t++){const e=r[t],i=v.get(e);void 0!==i\u0026\u0026i.update(e,n,o||s)}L\u0026\u0026L(e,n),d=null})),this.setAnimationLoop=function(t){L=t},this.dispose=function(){}}}function Lr(t,e){function n(n,i){n.opacity.value=i.opacity,i.color\u0026\u0026n.diffuse.value.copy(i.color),i.emissive\u0026\u0026n.emissive.value.copy(i.emissive).multiplyScalar(i.emissiveIntensity),i.map\u0026\u0026(n.map.value=i.map),i.alphaMap\u0026\u0026(n.alphaMap.value=i.alphaMap),i.bumpMap\u0026\u0026(n.bumpMap.value=i.bumpMap,n.bumpScale.value=i.bumpScale,1===i.side\u0026\u0026(n.bumpScale.value*=-1)),i.displacementMap\u0026\u0026(n.displacementMap.value=i.displacementMap,n.displacementScale.value=i.displacementScale,n.displacementBias.value=i.displacementBias),i.emissiveMap\u0026\u0026(n.emissiveMap.value=i.emissiveMap),i.normalMap\u0026\u0026(n.normalMap.value=i.normalMap,n.normalScale.value.copy(i.normalScale),1===i.side\u0026\u0026n.normalScale.value.negate()),i.specularMap\u0026\u0026(n.specularMap.value=i.specularMap),i.alphaTest\u003e0\u0026\u0026(n.alphaTest.value=i.alphaTest);const r=e.get(i).envMap;if(r\u0026\u0026(n.envMap.value=r,n.flipEnvMap.value=r.isCubeTexture\u0026\u0026!1===r.isRenderTargetTexture?-1:1,n.reflectivity.value=i.reflectivity,n.ior.value=i.ior,n.refractionRatio.value=i.refractionRatio),i.lightMap){n.lightMap.value=i.lightMap;const e=!0!==t.physicallyCorrectLights?Math.PI:1;n.lightMapIntensity.value=i.lightMapIntensity*e}let s,a;i.aoMap\u0026\u0026(n.aoMap.value=i.aoMap,n.aoMapIntensity.value=i.aoMapIntensity),i.map?s=i.map:i.specularMap?s=i.specularMap:i.displacementMap?s=i.displacementMap:i.normalMap?s=i.normalMap:i.bumpMap?s=i.bumpMap:i.roughnessMap?s=i.roughnessMap:i.metalnessMap?s=i.metalnessMap:i.alphaMap?s=i.alphaMap:i.emissiveMap?s=i.emissiveMap:i.clearcoatMap?s=i.clearcoatMap:i.clearcoatNormalMap?s=i.clearcoatNormalMap:i.clearcoatRoughnessMap?s=i.clearcoatRoughnessMap:i.specularIntensityMap?s=i.specularIntensityMap:i.specularColorMap?s=i.specularColorMap:i.transmissionMap?s=i.transmissionMap:i.thicknessMap?s=i.thicknessMap:i.sheenColorMap?s=i.sheenColorMap:i.sheenRoughnessMap\u0026\u0026(s=i.sheenRoughnessMap),void 0!==s\u0026\u0026(s.isWebGLRenderTarget\u0026\u0026(s=s.texture),!0===s.matrixAutoUpdate\u0026\u0026s.updateMatrix(),n.uvTransform.value.copy(s.matrix)),i.aoMap?a=i.aoMap:i.lightMap\u0026\u0026(a=i.lightMap),void 0!==a\u0026\u0026(a.isWebGLRenderTarget\u0026\u0026(a=a.texture),!0===a.matrixAutoUpdate\u0026\u0026a.updateMatrix(),n.uv2Transform.value.copy(a.matrix))}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2\u0026\u0026(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,a){i.isMeshBasicMaterial||i.isMeshLambertMaterial?n(t,i):i.isMeshToonMaterial?(n(t,i),function(t,e){e.gradientMap\u0026\u0026(t.gradientMap.value=e.gradientMap)}(t,i)):i.isMeshPhongMaterial?(n(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4)}(t,i)):i.isMeshStandardMaterial?(n(t,i),function(t,n){t.roughness.value=n.roughness,t.metalness.value=n.metalness,n.roughnessMap\u0026\u0026(t.roughnessMap.value=n.roughnessMap);n.metalnessMap\u0026\u0026(t.metalnessMap.value=n.metalnessMap);e.get(n).envMap\u0026\u0026(t.envMapIntensity.value=n.envMapIntensity)}(t,i),i.isMeshPhysicalMaterial\u0026\u0026function(t,e,n){t.ior.value=e.ior,e.sheen\u003e0\u0026\u0026(t.sheenColor.value.copy(e.sheenColor).multiplyScalar(e.sheen),t.sheenRoughness.value=e.sheenRoughness,e.sheenColorMap\u0026\u0026(t.sheenColorMap.value=e.sheenColorMap),e.sheenRoughnessMap\u0026\u0026(t.sheenRoughnessMap.value=e.sheenRoughnessMap));e.clearcoat\u003e0\u0026\u0026(t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.clearcoatMap\u0026\u0026(t.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap\u0026\u0026(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap\u0026\u0026(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side\u0026\u0026t.clearcoatNormalScale.value.negate()));e.transmission\u003e0\u0026\u0026(t.transmission.value=e.transmission,t.transmissionSamplerMap.value=n.texture,t.transmissionSamplerSize.value.set(n.width,n.height),e.transmissionMap\u0026\u0026(t.transmissionMap.value=e.transmissionMap),t.thickness.value=e.thickness,e.thicknessMap\u0026\u0026(t.thicknessMap.value=e.thicknessMap),t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor));t.specularIntensity.value=e.specularIntensity,t.specularColor.value.copy(e.specularColor),e.specularIntensityMap\u0026\u0026(t.specularIntensityMap.value=e.specularIntensityMap);e.specularColorMap\u0026\u0026(t.specularColorMap.value=e.specularColorMap)}(t,i,a)):i.isMeshMatcapMaterial?(n(t,i),function(t,e){e.matcap\u0026\u0026(t.matcap.value=e.matcap)}(t,i)):i.isMeshDepthMaterial?n(t,i):i.isMeshDistanceMaterial?(n(t,i),function(t,e){t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?n(t,i):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial\u0026\u0026function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map\u0026\u0026(t.map.value=e.map);e.alphaMap\u0026\u0026(t.alphaMap.value=e.alphaMap);e.alphaTest\u003e0\u0026\u0026(t.alphaTest.value=e.alphaTest);let r;e.map?r=e.map:e.alphaMap\u0026\u0026(r=e.alphaMap);void 0!==r\u0026\u0026(!0===r.matrixAutoUpdate\u0026\u0026r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map\u0026\u0026(t.map.value=e.map);e.alphaMap\u0026\u0026(t.alphaMap.value=e.alphaMap);e.alphaTest\u003e0\u0026\u0026(t.alphaTest.value=e.alphaTest);let n;e.map?n=e.map:e.alphaMap\u0026\u0026(n=e.alphaMap);void 0!==n\u0026\u0026(!0===n.matrixAutoUpdate\u0026\u0026n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial\u0026\u0026(i.uniformsNeedUpdate=!1)}}}function Pr(t={}){const e=void 0!==t.canvas?t.canvas:function(){const t=g(\"canvas\");return t.style.display=\"block\",t}(),n=void 0!==t.context?t.context:null,i=void 0===t.depth||t.depth,r=void 0===t.stencil||t.stencil,s=void 0!==t.antialias\u0026\u0026t.antialias,a=void 0===t.premultipliedAlpha||t.premultipliedAlpha,o=void 0!==t.preserveDrawingBuffer\u0026\u0026t.preserveDrawingBuffer,l=void 0!==t.powerPreference?t.powerPreference:\"default\",c=void 0!==t.failIfMajorPerformanceCaveat\u0026\u0026t.failIfMajorPerformanceCaveat;let h;h=null!==n?n.getContextAttributes().alpha:void 0!==t.alpha\u0026\u0026t.alpha;let u=null,f=null;const m=[],v=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=3e3,this.physicallyCorrectLights=!1,this.toneMapping=0,this.toneMappingExposure=1;const x=this;let y=!1,_=0,b=0,M=null,w=-1,S=null;const E=new N,T=new N;let A=null,R=e.width,C=e.height,L=1,P=null,D=null;const I=new N(0,0,R,C),z=new N(0,0,R,C);let B=!1;const U=new Ke;let F=!1,G=!1,V=null;const k=new gt,W=new p,j=new H,q={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function X(){return null===M?L:1}let J,Y,Z,K,Q,$,tt,et,nt,it,rt,st,at,ot,lt,ct,ht,ut,dt,pt,ft,mt,vt,xt=n;function yt(t,n){for(let i=0;i\u003ct.length;i++){const r=t[i],s=e.getContext(r,n);if(null!==s)return s}return null}try{const t={alpha:!0,depth:i,stencil:r,antialias:s,premultipliedAlpha:a,preserveDrawingBuffer:o,powerPreference:l,failIfMajorPerformanceCaveat:c};if(\"setAttribute\"in e\u0026\u0026e.setAttribute(\"data-engine\",\"three.js r140\"),e.addEventListener(\"webglcontextlost\",Mt,!1),e.addEventListener(\"webglcontextrestored\",wt,!1),null===xt){const e=[\"webgl2\",\"webgl\",\"experimental-webgl\"];if(!0===x.isWebGL1Renderer\u0026\u0026e.shift(),xt=yt(e,t),null===xt)throw yt(e)?new Error(\"Error creating WebGL context with your selected attributes.\"):new Error(\"Error creating WebGL context.\")}void 0===xt.getShaderPrecisionFormat\u0026\u0026(xt.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\"THREE.WebGLRenderer: \"+t.message),t}function _t(){J=new Tn(xt),Y=new ln(xt,J,t),J.init(Y),mt=new wr(xt,J,Y),Z=new br(xt,J,Y),K=new Cn(xt),Q=new or,$=new Mr(xt,J,Z,Q,Y,mt,K),tt=new hn(x),et=new En(x),nt=new $e(xt,Y),vt=new an(xt,J,nt,Y),it=new An(xt,nt,K,vt),rt=new Nn(xt,it,nt,K),dt=new In(xt,Y,$),ct=new cn(Q),st=new ar(x,tt,et,J,Y,vt,ct),at=new Lr(x,Q),ot=new ur,lt=new vr(J,Y),ut=new sn(x,tt,Z,rt,h,a),ht=new _r(x,rt,Y),pt=new on(xt,J,K,Y),ft=new Rn(xt,J,K,Y),K.programs=st.programs,x.capabilities=Y,x.extensions=J,x.properties=Q,x.renderLists=ot,x.shadowMap=ht,x.state=Z,x.info=K}_t();const bt=new Cr(x,xt);function Mt(t){t.preventDefault(),console.log(\"THREE.WebGLRenderer: Context Lost.\"),y=!0}function wt(){console.log(\"THREE.WebGLRenderer: Context Restored.\"),y=!1;const t=K.autoReset,e=ht.enabled,n=ht.autoUpdate,i=ht.needsUpdate,r=ht.type;_t(),K.autoReset=t,ht.enabled=e,ht.autoUpdate=n,ht.needsUpdate=i,ht.type=r}function St(t){const e=t.target;e.removeEventListener(\"dispose\",St),function(t){(function(t){const e=Q.get(t).programs;void 0!==e\u0026\u0026(e.forEach((function(t){st.releaseProgram(t)})),t.isShaderMaterial\u0026\u0026st.releaseShaderCache(t))})(t),Q.remove(t)}(e)}this.xr=bt,this.getContext=function(){return xt},this.getContextAttributes=function(){return xt.getContextAttributes()},this.forceContextLoss=function(){const t=J.get(\"WEBGL_lose_context\");t\u0026\u0026t.loseContext()},this.forceContextRestore=function(){const t=J.get(\"WEBGL_lose_context\");t\u0026\u0026t.restoreContext()},this.getPixelRatio=function(){return L},this.setPixelRatio=function(t){void 0!==t\u0026\u0026(L=t,this.setSize(R,C,!1))},this.getSize=function(t){return t.set(R,C)},this.setSize=function(t,n,i){bt.isPresenting?console.warn(\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\"):(R=t,C=n,e.width=Math.floor(t*L),e.height=Math.floor(n*L),!1!==i\u0026\u0026(e.style.width=t+\"px\",e.style.height=n+\"px\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return t.set(R*L,C*L).floor()},this.setDrawingBufferSize=function(t,n,i){R=t,C=n,L=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return t.copy(E)},this.getViewport=function(t){return t.copy(I)},this.setViewport=function(t,e,n,i){t.isVector4?I.set(t.x,t.y,t.z,t.w):I.set(t,e,n,i),Z.viewport(E.copy(I).multiplyScalar(L).floor())},this.getScissor=function(t){return t.copy(z)},this.setScissor=function(t,e,n,i){t.isVector4?z.set(t.x,t.y,t.z,t.w):z.set(t,e,n,i),Z.scissor(T.copy(z).multiplyScalar(L).floor())},this.getScissorTest=function(){return B},this.setScissorTest=function(t){Z.setScissorTest(B=t)},this.setOpaqueSort=function(t){P=t},this.setTransparentSort=function(t){D=t},this.getClearColor=function(t){return t.copy(ut.getClearColor())},this.setClearColor=function(){ut.setClearColor.apply(ut,arguments)},this.getClearAlpha=function(){return ut.getClearAlpha()},this.setClearAlpha=function(){ut.setClearAlpha.apply(ut,arguments)},this.clear=function(t=!0,e=!0,n=!0){let i=0;t\u0026\u0026(i|=16384),e\u0026\u0026(i|=256),n\u0026\u0026(i|=1024),xt.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\"webglcontextlost\",Mt,!1),e.removeEventListener(\"webglcontextrestored\",wt,!1),ot.dispose(),lt.dispose(),Q.dispose(),tt.dispose(),et.dispose(),rt.dispose(),vt.dispose(),st.dispose(),bt.dispose(),bt.removeEventListener(\"sessionstart\",Tt),bt.removeEventListener(\"sessionend\",At),V\u0026\u0026(V.dispose(),V=null),Rt.stop()},this.renderBufferDirect=function(t,e,n,i,r,s){null===e\u0026\u0026(e=q);const a=r.isMesh\u0026\u0026r.matrixWorld.determinant()\u003c0,o=function(t,e,n,i,r){!0!==e.isScene\u0026\u0026(e=q);$.resetTextureUnits();const s=e.fog,a=i.isMeshStandardMaterial?e.environment:null,o=null===M?x.outputEncoding:!0===M.isXRRenderTarget?M.texture.encoding:3e3,l=(i.isMeshStandardMaterial?et:tt).get(i.envMap||a),c=!0===i.vertexColors\u0026\u0026!!n.attributes.color\u0026\u00264===n.attributes.color.itemSize,h=!!i.normalMap\u0026\u0026!!n.attributes.tangent,u=!!n.morphAttributes.position,d=!!n.morphAttributes.normal,p=!!n.morphAttributes.color,m=i.toneMapped?x.toneMapping:0,g=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,v=void 0!==g?g.length:0,y=Q.get(i),_=f.state.lights;if(!0===F\u0026\u0026(!0===G||t!==S)){const e=t===S\u0026\u0026i.id===w;ct.setState(i,t,e)}let b=!1;i.version===y.__version?y.needsLights\u0026\u0026y.lightsStateVersion!==_.state.version||y.outputEncoding!==o||r.isInstancedMesh\u0026\u0026!1===y.instancing?b=!0:r.isInstancedMesh||!0!==y.instancing?r.isSkinnedMesh\u0026\u0026!1===y.skinning?b=!0:r.isSkinnedMesh||!0!==y.skinning?y.envMap!==l||!0===i.fog\u0026\u0026y.fog!==s?b=!0:void 0===y.numClippingPlanes||y.numClippingPlanes===ct.numPlanes\u0026\u0026y.numIntersection===ct.numIntersection?(y.vertexAlphas!==c||y.vertexTangents!==h||y.morphTargets!==u||y.morphNormals!==d||y.morphColors!==p||y.toneMapping!==m||!0===Y.isWebGL2\u0026\u0026y.morphTargetsCount!==v)\u0026\u0026(b=!0):b=!0:b=!0:b=!0:(b=!0,y.__version=i.version);let E=y.currentProgram;!0===b\u0026\u0026(E=Dt(i,e,r));let T=!1,A=!1,R=!1;const P=E.getUniforms(),D=y.uniforms;Z.useProgram(E.program)\u0026\u0026(T=!0,A=!0,R=!0);i.id!==w\u0026\u0026(w=i.id,A=!0);if(T||S!==t){if(P.setValue(xt,\"projectionMatrix\",t.projectionMatrix),Y.logarithmicDepthBuffer\u0026\u0026P.setValue(xt,\"logDepthBufFC\",2/(Math.log(t.far+1)/Math.LN2)),S!==t\u0026\u0026(S=t,A=!0,R=!0),i.isShaderMaterial||i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshStandardMaterial||i.envMap){const e=P.map.cameraPosition;void 0!==e\u0026\u0026e.setValue(xt,j.setFromMatrixPosition(t.matrixWorld))}(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial)\u0026\u0026P.setValue(xt,\"isOrthographic\",!0===t.isOrthographicCamera),(i.isMeshPhongMaterial||i.isMeshToonMaterial||i.isMeshLambertMaterial||i.isMeshBasicMaterial||i.isMeshStandardMaterial||i.isShaderMaterial||i.isShadowMaterial||r.isSkinnedMesh)\u0026\u0026P.setValue(xt,\"viewMatrix\",t.matrixWorldInverse)}if(r.isSkinnedMesh){P.setOptional(xt,r,\"bindMatrix\"),P.setOptional(xt,r,\"bindMatrixInverse\");const t=r.skeleton;t\u0026\u0026(Y.floatVertexTextures?(null===t.boneTexture\u0026\u0026t.computeBoneTexture(),P.setValue(xt,\"boneTexture\",t.boneTexture,$),P.setValue(xt,\"boneTextureSize\",t.boneTextureSize)):console.warn(\"THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.\"))}const I=n.morphAttributes;(void 0!==I.position||void 0!==I.normal||void 0!==I.color\u0026\u0026!0===Y.isWebGL2)\u0026\u0026dt.update(r,n,i,E);(A||y.receiveShadow!==r.receiveShadow)\u0026\u0026(y.receiveShadow=r.receiveShadow,P.setValue(xt,\"receiveShadow\",r.receiveShadow));A\u0026\u0026(P.setValue(xt,\"toneMappingExposure\",x.toneMappingExposure),y.needsLights\u0026\u0026function(t,e){t.ambientLightColor.needsUpdate=e,t.lightProbe.needsUpdate=e,t.directionalLights.needsUpdate=e,t.directionalLightShadows.needsUpdate=e,t.pointLights.needsUpdate=e,t.pointLightShadows.needsUpdate=e,t.spotLights.needsUpdate=e,t.spotLightShadows.needsUpdate=e,t.rectAreaLights.needsUpdate=e,t.hemisphereLights.needsUpdate=e}(D,R),s\u0026\u0026!0===i.fog\u0026\u0026at.refreshFogUniforms(D,s),at.refreshMaterialUniforms(D,i,L,C,V),Ui.upload(xt,y.uniformsList,D,$));i.isShaderMaterial\u0026\u0026!0===i.uniformsNeedUpdate\u0026\u0026(Ui.upload(xt,y.uniformsList,D,$),i.uniformsNeedUpdate=!1);i.isSpriteMaterial\u0026\u0026P.setValue(xt,\"center\",r.center);return P.setValue(xt,\"modelViewMatrix\",r.modelViewMatrix),P.setValue(xt,\"normalMatrix\",r.normalMatrix),P.setValue(xt,\"modelMatrix\",r.matrixWorld),E}(t,e,n,i,r);Z.setMaterial(i,a);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let h,u=1;!0===i.wireframe\u0026\u0026(l=it.getWireframeAttribute(n),u=2),vt.setup(r,i,o,n,l);let d=pt;null!==l\u0026\u0026(h=nt.get(l),d=ft,d.setIndex(h));const p=null!==l?l.count:c.count,m=n.drawRange.start*u,g=n.drawRange.count*u,v=null!==s?s.start*u:0,y=null!==s?s.count*u:1/0,_=Math.max(m,v),b=Math.min(p,m+g,v+y)-1,E=Math.max(0,b-_+1);if(0!==E){if(r.isMesh)!0===i.wireframe?(Z.setLineWidth(i.wireframeLinewidth*X()),d.setMode(1)):d.setMode(4);else if(r.isLine){let t=i.linewidth;void 0===t\u0026\u0026(t=1),Z.setLineWidth(t*X()),r.isLineSegments?d.setMode(1):r.isLineLoop?d.setMode(2):d.setMode(3)}else r.isPoints?d.setMode(0):r.isSprite\u0026\u0026d.setMode(4);if(r.isInstancedMesh)d.renderInstances(_,E,r.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(_,E,t)}else d.render(_,E)}},this.compile=function(t,e){f=lt.get(t),f.init(),v.push(f),t.traverseVisible((function(t){t.isLight\u0026\u0026t.layers.test(e.layers)\u0026\u0026(f.pushLight(t),t.castShadow\u0026\u0026f.pushShadow(t))})),f.setupLights(x.physicallyCorrectLights),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i\u003cn.length;i++){Dt(n[i],t,e)}else Dt(n,t,e)})),v.pop(),f=null};let Et=null;function Tt(){Rt.stop()}function At(){Rt.start()}const Rt=new Qe;function Ct(t,e,n,i){const r=t.opaque,a=t.transmissive,o=t.transparent;f.setupLightsView(n),a.length\u003e0\u0026\u0026function(t,e,n){const i=Y.isWebGL2;null===V\u0026\u0026(V=new O(1,1,{generateMipmaps:!0,type:J.has(\"EXT_color_buffer_half_float\")?1016:1009,minFilter:1008,samples:i\u0026\u0026!0===s?4:0}));x.getDrawingBufferSize(W),i?V.setSize(W.x,W.y):V.setSize(d(W.x),d(W.y));const r=x.getRenderTarget();x.setRenderTarget(V),x.clear();const a=x.toneMapping;x.toneMapping=0,Lt(t,e,n),x.toneMapping=a,$.updateMultisampleRenderTarget(V),$.updateRenderTargetMipmap(V),x.setRenderTarget(r)}(r,e,n),i\u0026\u0026Z.viewport(E.copy(i)),r.length\u003e0\u0026\u0026Lt(r,e,n),a.length\u003e0\u0026\u0026Lt(a,e,n),o.length\u003e0\u0026\u0026Lt(o,e,n),Z.buffers.depth.setTest(!0),Z.buffers.depth.setMask(!0),Z.buffers.color.setMask(!0),Z.setPolygonOffset(!1)}function Lt(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r\u003cs;r++){const s=t[r],a=s.object,o=s.geometry,l=null===i?s.material:i,c=s.group;a.layers.test(n.layers)\u0026\u0026Pt(a,e,n,o,l,c)}}function Pt(t,e,n,i,r,s){t.onBeforeRender(x,e,n,i,r,s),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),r.onBeforeRender(x,e,n,i,t,s),!0===r.transparent\u0026\u00262===r.side?(r.side=1,r.needsUpdate=!0,x.renderBufferDirect(n,e,i,r,t,s),r.side=0,r.needsUpdate=!0,x.renderBufferDirect(n,e,i,r,t,s),r.side=2):x.renderBufferDirect(n,e,i,r,t,s),t.onAfterRender(x,e,n,i,r,s)}function Dt(t,e,n){!0!==e.isScene\u0026\u0026(e=q);const i=Q.get(t),r=f.state.lights,s=f.state.shadowsArray,a=r.state.version,o=st.getParameters(t,r.state,s,e,n),l=st.getProgramCacheKey(o);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=(t.isMeshStandardMaterial?et:tt).get(t.envMap||i.environment),void 0===c\u0026\u0026(t.addEventListener(\"dispose\",St),c=new Map,i.programs=c);let h=c.get(l);if(void 0!==h){if(i.currentProgram===h\u0026\u0026i.lightsStateVersion===a)return It(t,o),h}else o.uniforms=st.getUniforms(t),t.onBuild(n,o,x),t.onBeforeCompile(o,x),h=st.acquireProgram(o,l),c.set(l,h),i.uniforms=o.uniforms;const u=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)\u0026\u0026!0!==t.clipping||(u.clippingPlanes=ct.uniform),It(t,o),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial\u0026\u0026!0===t.lights}(t),i.lightsStateVersion=a,i.needsLights\u0026\u0026(u.ambientLightColor.value=r.state.ambient,u.lightProbe.value=r.state.probe,u.directionalLights.value=r.state.directional,u.directionalLightShadows.value=r.state.directionalShadow,u.spotLights.value=r.state.spot,u.spotLightShadows.value=r.state.spotShadow,u.rectAreaLights.value=r.state.rectArea,u.ltc_1.value=r.state.rectAreaLTC1,u.ltc_2.value=r.state.rectAreaLTC2,u.pointLights.value=r.state.point,u.pointLightShadows.value=r.state.pointShadow,u.hemisphereLights.value=r.state.hemi,u.directionalShadowMap.value=r.state.directionalShadowMap,u.directionalShadowMatrix.value=r.state.directionalShadowMatrix,u.spotShadowMap.value=r.state.spotShadowMap,u.spotShadowMatrix.value=r.state.spotShadowMatrix,u.pointShadowMap.value=r.state.pointShadowMap,u.pointShadowMatrix.value=r.state.pointShadowMatrix);const d=h.getUniforms(),p=Ui.seqWithValue(d.seq,u);return i.currentProgram=h,i.uniformsList=p,h}function It(t,e){const n=Q.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.morphTargets=e.morphTargets,n.morphNormals=e.morphNormals,n.morphColors=e.morphColors,n.morphTargetsCount=e.morphTargetsCount,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas,n.vertexTangents=e.vertexTangents,n.toneMapping=e.toneMapping}Rt.setAnimationLoop((function(t){Et\u0026\u0026Et(t)})),\"undefined\"!=typeof self\u0026\u0026Rt.setContext(self),this.setAnimationLoop=function(t){Et=t,bt.setAnimationLoop(t),null===t?Rt.stop():Rt.start()},bt.addEventListener(\"sessionstart\",Tt),bt.addEventListener(\"sessionend\",At),this.render=function(t,e){if(void 0!==e\u0026\u0026!0!==e.isCamera)return void console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");if(!0===y)return;!0===t.autoUpdate\u0026\u0026t.updateMatrixWorld(),null===e.parent\u0026\u0026e.updateMatrixWorld(),!0===bt.enabled\u0026\u0026!0===bt.isPresenting\u0026\u0026(!0===bt.cameraAutoUpdate\u0026\u0026bt.updateCamera(e),e=bt.getCamera()),!0===t.isScene\u0026\u0026t.onBeforeRender(x,t,e,M),f=lt.get(t,v.length),f.init(),v.push(f),k.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),U.setFromProjectionMatrix(k),G=this.localClippingEnabled,F=ct.init(this.clippingPlanes,G,e),u=ot.get(t,m.length),u.init(),m.push(u),function t(e,n,i,r){if(!1===e.visible)return;if(e.layers.test(n.layers))if(e.isGroup)i=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate\u0026\u0026e.update(n);else if(e.isLight)f.pushLight(e),e.castShadow\u0026\u0026f.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||U.intersectsSprite(e)){r\u0026\u0026j.setFromMatrixPosition(e.matrixWorld).applyMatrix4(k);const t=rt.update(e),n=e.material;n.visible\u0026\u0026u.push(e,t,n,i,j.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)\u0026\u0026(e.isSkinnedMesh\u0026\u0026e.skeleton.frame!==K.render.frame\u0026\u0026(e.skeleton.update(),e.skeleton.frame=K.render.frame),!e.frustumCulled||U.intersectsObject(e))){r\u0026\u0026j.setFromMatrixPosition(e.matrixWorld).applyMatrix4(k);const t=rt.update(e),n=e.material;if(Array.isArray(n)){const r=t.groups;for(let s=0,a=r.length;s\u003ca;s++){const a=r[s],o=n[a.materialIndex];o\u0026\u0026o.visible\u0026\u0026u.push(e,t,o,i,j.z,a)}}else n.visible\u0026\u0026u.push(e,t,n,i,j.z,null)}const s=e.children;for(let e=0,a=s.length;e\u003ca;e++)t(s[e],n,i,r)}(t,e,0,x.sortObjects),u.finish(),!0===x.sortObjects\u0026\u0026u.sort(P,D),!0===F\u0026\u0026ct.beginShadows();const n=f.state.shadowsArray;if(ht.render(n,t,e),!0===F\u0026\u0026ct.endShadows(),!0===this.info.autoReset\u0026\u0026this.info.reset(),ut.render(u,t),f.setupLights(x.physicallyCorrectLights),e.isArrayCamera){const n=e.cameras;for(let e=0,i=n.length;e\u003ci;e++){const i=n[e];Ct(u,t,i,i.viewport)}}else Ct(u,t,e);null!==M\u0026\u0026($.updateMultisampleRenderTarget(M),$.updateRenderTargetMipmap(M)),!0===t.isScene\u0026\u0026t.onAfterRender(x,t,e),vt.resetDefaultState(),w=-1,S=null,v.pop(),f=v.length\u003e0?v[v.length-1]:null,m.pop(),u=m.length\u003e0?m[m.length-1]:null},this.getActiveCubeFace=function(){return _},this.getActiveMipmapLevel=function(){return b},this.getRenderTarget=function(){return M},this.setRenderTargetTextures=function(t,e,n){Q.get(t.texture).__webglTexture=e,Q.get(t.depthTexture).__webglTexture=n;const i=Q.get(t);i.__hasExternalTextures=!0,i.__hasExternalTextures\u0026\u0026(i.__autoAllocateDepthBuffer=void 0===n,i.__autoAllocateDepthBuffer||!0===J.has(\"WEBGL_multisampled_render_to_texture\")\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided\"),i.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(t,e){const n=Q.get(t);n.__webglFramebuffer=e,n.__useDefaultFramebuffer=void 0===e},this.setRenderTarget=function(t,e=0,n=0){M=t,_=e,b=n;let i=!0;if(t){const e=Q.get(t);void 0!==e.__useDefaultFramebuffer?(Z.bindFramebuffer(36160,null),i=!1):void 0===e.__webglFramebuffer?$.setupRenderTarget(t):e.__hasExternalTextures\u0026\u0026$.rebindTextures(t,Q.get(t.texture).__webglTexture,Q.get(t.depthTexture).__webglTexture)}let r=null,s=!1,a=!1;if(t){const n=t.texture;(n.isData3DTexture||n.isDataArrayTexture)\u0026\u0026(a=!0);const i=Q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(r=i[e],s=!0):r=Y.isWebGL2\u0026\u0026t.samples\u003e0\u0026\u0026!1===$.useMultisampledRTT(t)?Q.get(t).__webglMultisampledFramebuffer:i,E.copy(t.viewport),T.copy(t.scissor),A=t.scissorTest}else E.copy(I).multiplyScalar(L).floor(),T.copy(z).multiplyScalar(L).floor(),A=B;if(Z.bindFramebuffer(36160,r)\u0026\u0026Y.drawBuffers\u0026\u0026i\u0026\u0026Z.drawBuffers(t,r),Z.viewport(E),Z.scissor(T),Z.setScissorTest(A),s){const i=Q.get(t.texture);xt.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(a){const i=Q.get(t.texture),r=e||0;xt.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}w=-1},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");let o=Q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget\u0026\u0026void 0!==a\u0026\u0026(o=o[a]),o){Z.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(1023!==o\u0026\u0026mt.convert(o)!==xt.getParameter(35739))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\");const c=1016===l\u0026\u0026(J.has(\"EXT_color_buffer_half_float\")||Y.isWebGL2\u0026\u0026J.has(\"EXT_color_buffer_float\"));if(!(1009===l||mt.convert(l)===xt.getParameter(35738)||1015===l\u0026\u0026(Y.isWebGL2||J.has(\"OES_texture_float\")||J.has(\"WEBGL_color_buffer_float\"))||c))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\");e\u003e=0\u0026\u0026e\u003c=t.width-i\u0026\u0026n\u003e=0\u0026\u0026n\u003c=t.height-r\u0026\u0026xt.readPixels(e,n,i,r,mt.convert(o),mt.convert(l),s)}finally{const t=null!==M?Q.get(M).__webglFramebuffer:null;Z.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){if(!0!==e.isFramebufferTexture)return void console.error(\"THREE.WebGLRenderer: copyFramebufferToTexture() can only be used with FramebufferTexture.\");const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);$.setTexture2D(e,0),xt.copyTexSubImage2D(3553,n,0,0,t.x,t.y,r,s),Z.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=mt.convert(n.format),o=mt.convert(n.type);$.setTexture2D(n,0),xt.pixelStorei(37440,n.flipY),xt.pixelStorei(37441,n.premultiplyAlpha),xt.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?xt.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?xt.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):xt.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i\u0026\u0026n.generateMipmaps\u0026\u0026xt.generateMipmap(3553),Z.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(x.isWebGL1Renderer)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\");const s=t.max.x-t.min.x+1,a=t.max.y-t.min.y+1,o=t.max.z-t.min.z+1,l=mt.convert(i.format),c=mt.convert(i.type);let h;if(i.isData3DTexture)$.setTexture3D(i,0),h=32879;else{if(!i.isDataArrayTexture)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\");$.setTexture2DArray(i,0),h=35866}xt.pixelStorei(37440,i.flipY),xt.pixelStorei(37441,i.premultiplyAlpha),xt.pixelStorei(3317,i.unpackAlignment);const u=xt.getParameter(3314),d=xt.getParameter(32878),p=xt.getParameter(3316),f=xt.getParameter(3315),m=xt.getParameter(32877),g=n.isCompressedTexture?n.mipmaps[0]:n.image;xt.pixelStorei(3314,g.width),xt.pixelStorei(32878,g.height),xt.pixelStorei(3316,t.min.x),xt.pixelStorei(3315,t.min.y),xt.pixelStorei(32877,t.min.z),n.isDataTexture||n.isData3DTexture?xt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g.data):n.isCompressedTexture?(console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\"),xt.compressedTexSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,g.data)):xt.texSubImage3D(h,r,e.x,e.y,e.z,s,a,o,l,c,g),xt.pixelStorei(3314,u),xt.pixelStorei(32878,d),xt.pixelStorei(3316,p),xt.pixelStorei(3315,f),xt.pixelStorei(32877,m),0===r\u0026\u0026i.generateMipmaps\u0026\u0026xt.generateMipmap(h),Z.unbindTexture()},this.initTexture=function(t){$.setTexture2D(t,0),Z.unbindTexture()},this.resetState=function(){_=0,b=0,M=null,Z.reset(),vt.reset()},\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}Pr.prototype.isWebGLRenderer=!0;(class extends Pr{}).prototype.isWebGL1Renderer=!0;class Dr{constructor(t,e=25e-5){this.name=\"\",this.color=new A(t),this.density=e}clone(){return new Dr(this.color,this.density)}toJSON(){return{type:\"FogExp2\",color:this.color.getHex(),density:this.density}}}Dr.prototype.isFogExp2=!0;class Ir{constructor(t,e=1,n=1e3){this.name=\"\",this.color=new A(t),this.near=e,this.far=n}clone(){return new Ir(this.color,this.near,this.far)}toJSON(){return{type:\"Fog\",color:this.color.getHex(),near:this.near,far:this.far}}}Ir.prototype.isFog=!0;class Nr extends Gt{constructor(){super(),this.type=\"Scene\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background\u0026\u0026(this.background=t.background.clone()),null!==t.environment\u0026\u0026(this.environment=t.environment.clone()),null!==t.fog\u0026\u0026(this.fog=t.fog.clone()),null!==t.overrideMaterial\u0026\u0026(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.fog\u0026\u0026(e.object.fog=this.fog.toJSON()),e}}Nr.prototype.isScene=!0;class Or{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=35044,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=o()}onUploadCallback(){}set needsUpdate(t){!0===t\u0026\u0026this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;i\u003cr;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers\u0026\u0026(t.arrayBuffers={}),void 0===this.array.buffer._uuid\u0026\u0026(this.array.buffer._uuid=o()),void 0===t.arrayBuffers[this.array.buffer._uuid]\u0026\u0026(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers\u0026\u0026(t.arrayBuffers={}),void 0===this.array.buffer._uuid\u0026\u0026(this.array.buffer._uuid=o()),void 0===t.arrayBuffers[this.array.buffer._uuid]\u0026\u0026(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}Or.prototype.isInterleavedBuffer=!0;const zr=new H;class Br{constructor(t,e,n,i=!1){this.name=\"\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e\u003cn;e++)zr.fromBufferAttribute(this,e),zr.applyMatrix4(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e\u003cn;e++)zr.fromBufferAttribute(this,e),zr.applyNormalMatrix(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}transformDirection(t){for(let e=0,n=this.count;e\u003cn;e++)zr.fromBufferAttribute(this,e),zr.transformDirection(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=r,this}clone(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e\u003cthis.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e\u003cthis.itemSize;e++)t.push(this.data.array[n+e])}return new re(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers\u0026\u0026(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]\u0026\u0026(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new Br(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e\u003cthis.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e\u003cthis.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers\u0026\u0026(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]\u0026\u0026(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}Br.prototype.isInterleavedBufferAttribute=!0;class Ur extends te{constructor(t){super(),this.type=\"SpriteMaterial\",this.color=new A(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}let Hr;Ur.prototype.isSpriteMaterial=!0;const Fr=new H,Gr=new H,Vr=new H,kr=new p,Wr=new p,jr=new gt,qr=new H,Xr=new H,Jr=new H,Yr=new p,Zr=new p,Kr=new p;class Qr extends Gt{constructor(t){if(super(),this.type=\"Sprite\",void 0===Hr){Hr=new me;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new Or(t,5);Hr.setIndex([0,1,2,0,2,3]),Hr.setAttribute(\"position\",new Br(e,3,0,!1)),Hr.setAttribute(\"uv\",new Br(e,2,3,!1))}this.geometry=Hr,this.material=void 0!==t?t:new Ur,this.center=new p(.5,.5)}raycast(t,e){null===t.camera\u0026\u0026console.error('THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.'),Gr.setFromMatrixScale(this.matrixWorld),jr.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),Vr.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera\u0026\u0026!1===this.material.sizeAttenuation\u0026\u0026Gr.multiplyScalar(-Vr.z);const n=this.material.rotation;let i,r;0!==n\u0026\u0026(r=Math.cos(n),i=Math.sin(n));const s=this.center;$r(qr.set(-.5,-.5,0),Vr,s,Gr,i,r),$r(Xr.set(.5,-.5,0),Vr,s,Gr,i,r),$r(Jr.set(.5,.5,0),Vr,s,Gr,i,r),Yr.set(0,0),Zr.set(1,0),Kr.set(1,1);let a=t.ray.intersectTriangle(qr,Xr,Jr,!1,Fr);if(null===a\u0026\u0026($r(Xr.set(-.5,.5,0),Vr,s,Gr,i,r),Zr.set(0,1),a=t.ray.intersectTriangle(qr,Jr,Xr,!1,Fr),null===a))return;const o=t.ray.origin.distanceTo(Fr);o\u003ct.near||o\u003et.far||e.push({distance:o,point:Fr.clone(),uv:Qt.getUV(Fr,qr,Xr,Jr,Yr,Zr,Kr,new p),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center\u0026\u0026this.center.copy(t.center),this.material=t.material,this}}function $r(t,e,n,i,r,s){kr.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(Wr.x=s*kr.x-r*kr.y,Wr.y=r*kr.x+s*kr.y):Wr.copy(kr),t.copy(e),t.x+=Wr.x,t.y+=Wr.y,t.applyMatrix4(jr)}Qr.prototype.isSprite=!0;const ts=new H,es=new N,ns=new N,is=new H,rs=new gt;class ss extends Ie{constructor(t,e){super(t,e),this.type=\"SkinnedMesh\",this.bindMode=\"attached\",this.bindMatrix=new gt,this.bindMatrixInverse=new gt}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e\u0026\u0026(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new N,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n\u003ci;n++){t.fromBufferAttribute(e,n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\"attached\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\"detached\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\"THREE.SkinnedMesh: Unrecognized bindMode: \"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;es.fromBufferAttribute(i.attributes.skinIndex,t),ns.fromBufferAttribute(i.attributes.skinWeight,t),ts.copy(e).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t\u003c4;t++){const i=ns.getComponent(t);if(0!==i){const r=es.getComponent(t);rs.multiplyMatrices(n.bones[r].matrixWorld,n.boneInverses[r]),e.addScaledVector(is.copy(ts).applyMatrix4(rs),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}ss.prototype.isSkinnedMesh=!0;class as extends Gt{constructor(){super(),this.type=\"Bone\"}}as.prototype.isBone=!0;class os extends I{constructor(t=null,e=1,n=1,i,r,s,a,o,l=1003,c=1003,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={data:t,width:e,height:n},this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}os.prototype.isDataTexture=!0;class ls extends re{constructor(t,e,n,i=1){\"number\"==typeof n\u0026\u0026(i=n,n=!1,console.error(\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\")),super(t,e,n),this.meshPerAttribute=i}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}ls.prototype.isInstancedBufferAttribute=!0;const cs=new gt,hs=new gt,us=[],ds=new Ie;class ps extends Ie{constructor(t,e,n){super(t,e),this.instanceMatrix=new ls(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor\u0026\u0026(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(ds.geometry=this.geometry,ds.material=this.material,void 0!==ds.material)for(let r=0;r\u003ci;r++){this.getMatrixAt(r,cs),hs.multiplyMatrices(n,cs),ds.matrixWorld=hs,ds.raycast(t,us);for(let t=0,n=us.length;t\u003cn;t++){const n=us[t];n.instanceId=r,n.object=this,e.push(n)}us.length=0}}setColorAt(t,e){null===this.instanceColor\u0026\u0026(this.instanceColor=new ls(new Float32Array(3*this.instanceMatrix.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\"dispose\"})}}ps.prototype.isInstancedMesh=!0;class fs extends te{constructor(t){super(),this.type=\"LineBasicMaterial\",this.color=new A(16777215),this.linewidth=1,this.linecap=\"round\",this.linejoin=\"round\",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this.fog=t.fog,this}}fs.prototype.isLineBasicMaterial=!0;const ms=new H,gs=new H,vs=new gt,xs=new mt,ys=new ot;class _s extends Gt{constructor(t=new me,e=new fs){super(),this.type=\"Line\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t\u003ci;t++)ms.fromBufferAttribute(e,t-1),gs.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=ms.distanceTo(gs);t.setAttribute(\"lineDistance\",new oe(n,1))}else console.warn(\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry\u0026\u0026console.error(\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Line.threshold,s=n.drawRange;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),ys.copy(n.boundingSphere),ys.applyMatrix4(i),ys.radius+=r,!1===t.ray.intersectsSphere(ys))return;vs.copy(i).invert(),xs.copy(t.ray).applyMatrix4(vs);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a,l=new H,c=new H,h=new H,u=new H,d=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,r=n.attributes.position;if(null!==i){for(let n=Math.max(0,s.start),a=Math.min(i.count,s.start+s.count)-1;n\u003ca;n+=d){const s=i.getX(n),a=i.getX(n+1);l.fromBufferAttribute(r,s),c.fromBufferAttribute(r,a);if(xs.distanceSqToSegment(l,c,u,h)\u003eo)continue;u.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(u);d\u003ct.near||d\u003et.far||e.push({distance:d,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;n\u003ci;n+=d){l.fromBufferAttribute(r,n),c.fromBufferAttribute(r,n+1);if(xs.distanceSqToSegment(l,c,u,h)\u003eo)continue;u.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(u);i\u003ct.near||i\u003et.far||e.push({distance:i,point:h.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry\u0026\u0026console.error(\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}_s.prototype.isLine=!0;const bs=new H,Ms=new H;class ws extends _s{constructor(t,e){super(t,e),this.type=\"LineSegments\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t\u003ci;t+=2)bs.fromBufferAttribute(e,t),Ms.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+bs.distanceTo(Ms);t.setAttribute(\"lineDistance\",new oe(n,1))}else console.warn(\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry\u0026\u0026console.error(\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}}ws.prototype.isLineSegments=!0;class Ss extends _s{constructor(t,e){super(t,e),this.type=\"LineLoop\"}}Ss.prototype.isLineLoop=!0;class Es extends te{constructor(t){super(),this.type=\"PointsMaterial\",this.color=new A(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this.fog=t.fog,this}}Es.prototype.isPointsMaterial=!0;const Ts=new gt,As=new mt,Rs=new ot,Cs=new H;class Ls extends Gt{constructor(t=new me,e=new Es){super(),this.type=\"Points\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,s=n.drawRange;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),Rs.copy(n.boundingSphere),Rs.applyMatrix4(i),Rs.radius+=r,!1===t.ray.intersectsSphere(Rs))return;Ts.copy(i).invert(),As.copy(t.ray).applyMatrix4(Ts);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position;if(null!==r){for(let n=Math.max(0,s.start),l=Math.min(r.count,s.start+s.count);n\u003cl;n++){const s=r.getX(n);Cs.fromBufferAttribute(a,s),Ps(Cs,s,o,i,t,e,this)}}else{for(let n=Math.max(0,s.start),r=Math.min(a.count,s.start+s.count);n\u003cr;n++)Cs.fromBufferAttribute(a,n),Ps(Cs,n,o,i,t,e,this)}}else console.error(\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}function Ps(t,e,n,i,r,s,a){const o=As.distanceSqToPoint(t);if(o\u003cn){const n=new H;As.closestPointToPoint(t,n),n.applyMatrix4(i);const l=r.ray.origin.distanceTo(n);if(l\u003cr.near||l\u003er.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}Ls.prototype.isPoints=!0;(class extends I{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.minFilter=void 0!==s?s:1006,this.magFilter=void 0!==r?r:1006,this.generateMipmaps=!1;const c=this;\"requestVideoFrameCallback\"in t\u0026\u0026t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\"requestVideoFrameCallback\"in t\u0026\u0026t.readyState\u003e=t.HAVE_CURRENT_DATA\u0026\u0026(this.needsUpdate=!0)}}).prototype.isVideoTexture=!0;(class extends I{constructor(t,e,n){super({width:t,height:e}),this.format=n,this.magFilter=1003,this.minFilter=1003,this.generateMipmaps=!1,this.needsUpdate=!0}}).prototype.isFramebufferTexture=!0;class Ds extends I{constructor(t,e,n,i,r,s,a,o,l,c,h,u){super(null,s,a,o,l,c,i,r,h,u),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}Ds.prototype.isCompressedTexture=!0;(class extends I{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}).prototype.isCanvasTexture=!0;class Is{constructor(){this.type=\"Curve\",this.arcLengthDivisions=200}getPoint(){return console.warn(\"THREE.Curve: .getPoint() not implemented.\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths\u0026\u0026this.cacheArcLengths.length===t+1\u0026\u0026!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s\u003c=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o\u003c=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a\u003c0)o=i+1;else{if(!(a\u003e0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){let n=t-1e-4,i=t+1e-4;n\u003c0\u0026\u0026(n=0),i\u003e1\u0026\u0026(i=1);const r=this.getPoint(n),s=this.getPoint(i),a=e||(r.isVector2?new p:new H);return a.copy(s).sub(r).normalize(),a}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new H,i=[],r=[],s=[],a=new H,o=new gt;for(let e=0;e\u003c=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new H)}r[0]=new H,s[0]=new H;let c=Number.MAX_VALUE;const h=Math.abs(i[0].x),u=Math.abs(i[0].y),d=Math.abs(i[0].z);h\u003c=c\u0026\u0026(c=h,n.set(1,0,0)),u\u003c=c\u0026\u0026(c=u,n.set(0,1,0)),d\u003c=c\u0026\u0026n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e\u003c=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()\u003eNumber.EPSILON){a.normalize();const t=Math.acos(l(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(l(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))\u003e0\u0026\u0026(e=-e);for(let n=1;n\u003c=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\"Curve\",generator:\"Curve.toJSON\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Ns extends Is{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type=\"EllipseCurve\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new p,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)\u003cNumber.EPSILON;for(;r\u003c0;)r+=i;for(;r\u003ei;)r-=i;r\u003cNumber.EPSILON\u0026\u0026(r=s?0:i),!0!==this.aClockwise||s||(r===i?r=-i:r-=i);const a=this.aStartAngle+t*r;let o=this.aX+this.xRadius*Math.cos(a),l=this.aY+this.yRadius*Math.sin(a);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=o-this.aX,i=l-this.aY;o=n*t-i*e+this.aX,l=n*e+i*t+this.aY}return n.set(o,l)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}Ns.prototype.isEllipseCurve=!0;class Os extends Ns{constructor(t,e,n,i,r,s){super(t,e,n,n,i,r,s),this.type=\"ArcCurve\"}}function zs(){let t=0,e=0,n=0,i=0;function r(r,s,a,o){t=r,e=a,n=-3*r+3*s-2*a-o,i=2*r-2*s+a+o}return{initCatmullRom:function(t,e,n,i,s){r(e,n,s*(n-t),s*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,s,a,o){let l=(e-t)/s-(n-t)/(s+a)+(n-e)/a,c=(n-e)/a-(i-e)/(a+o)+(i-n)/o;l*=a,c*=a,r(e,n,l,c)},calc:function(r){const s=r*r;return t+e*r+n*s+i*(s*r)}}}Os.prototype.isArcCurve=!0;const Bs=new H,Us=new zs,Hs=new zs,Fs=new zs;class Gs extends Is{constructor(t=[],e=!1,n=\"centripetal\",i=.5){super(),this.type=\"CatmullRomCurve3\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new H){const n=e,i=this.points,r=i.length,s=(r-(this.closed?0:1))*t;let a,o,l=Math.floor(s),c=s-l;this.closed?l+=l\u003e0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c\u0026\u0026l===r-1\u0026\u0026(l=r-2,c=1),this.closed||l\u003e0?a=i[(l-1)%r]:(Bs.subVectors(i[0],i[1]).add(i[0]),a=Bs);const h=i[l%r],u=i[(l+1)%r];if(this.closed||l+2\u003cr?o=i[(l+2)%r]:(Bs.subVectors(i[r-1],i[r-2]).add(i[r-1]),o=Bs),\"centripetal\"===this.curveType||\"chordal\"===this.curveType){const t=\"chordal\"===this.curveType?.5:.25;let e=Math.pow(a.distanceToSquared(h),t),n=Math.pow(h.distanceToSquared(u),t),i=Math.pow(u.distanceToSquared(o),t);n\u003c1e-4\u0026\u0026(n=1),e\u003c1e-4\u0026\u0026(e=n),i\u003c1e-4\u0026\u0026(i=n),Us.initNonuniformCatmullRom(a.x,h.x,u.x,o.x,e,n,i),Hs.initNonuniformCatmullRom(a.y,h.y,u.y,o.y,e,n,i),Fs.initNonuniformCatmullRom(a.z,h.z,u.z,o.z,e,n,i)}else\"catmullrom\"===this.curveType\u0026\u0026(Us.initCatmullRom(a.x,h.x,u.x,o.x,this.tension),Hs.initCatmullRom(a.y,h.y,u.y,o.y,this.tension),Fs.initCatmullRom(a.z,h.z,u.z,o.z,this.tension));return n.set(Us.calc(c),Hs.calc(c),Fs.calc(c)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e\u003cn;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push((new H).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}function Vs(t,e,n,i,r){const s=.5*(i-e),a=.5*(r-n),o=t*t;return(2*n-2*i+s+a)*(t*o)+(-3*n+3*i-2*s-a)*o+s*t+n}function ks(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function Ws(t,e,n,i,r){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,r)}Gs.prototype.isCatmullRomCurve3=!0;class js extends Is{constructor(t=new p,e=new p,n=new p,i=new p){super(),this.type=\"CubicBezierCurve\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new p){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(Ws(t,i.x,r.x,s.x,a.x),Ws(t,i.y,r.y,s.y,a.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}js.prototype.isCubicBezierCurve=!0;class qs extends Is{constructor(t=new H,e=new H,n=new H,i=new H){super(),this.type=\"CubicBezierCurve3\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new H){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(Ws(t,i.x,r.x,s.x,a.x),Ws(t,i.y,r.y,s.y,a.y),Ws(t,i.z,r.z,s.z,a.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}qs.prototype.isCubicBezierCurve3=!0;class Xs extends Is{constructor(t=new p,e=new p){super(),this.type=\"LineCurve\",this.v1=t,this.v2=e}getPoint(t,e=new p){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new p;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}Xs.prototype.isLineCurve=!0;class Js extends Is{constructor(t=new p,e=new p,n=new p){super(),this.type=\"QuadraticBezierCurve\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new p){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(ks(t,i.x,r.x,s.x),ks(t,i.y,r.y,s.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}Js.prototype.isQuadraticBezierCurve=!0;class Ys extends Is{constructor(t=new H,e=new H,n=new H){super(),this.type=\"QuadraticBezierCurve3\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new H){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(ks(t,i.x,r.x,s.x),ks(t,i.y,r.y,s.y),ks(t,i.z,r.z,s.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}Ys.prototype.isQuadraticBezierCurve3=!0;class Zs extends Is{constructor(t=[]){super(),this.type=\"SplineCurve\",this.points=t}getPoint(t,e=new p){const n=e,i=this.points,r=(i.length-1)*t,s=Math.floor(r),a=r-s,o=i[0===s?s:s-1],l=i[s],c=i[s\u003ei.length-2?i.length-1:s+1],h=i[s\u003ei.length-3?i.length-1:s+2];return n.set(Vs(a,o.x,l.x,c.x,h.x),Vs(a,o.y,l.y,c.y,h.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e\u003cn;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push((new p).fromArray(n))}return this}}Zs.prototype.isSplineCurve=!0;var Ks=Object.freeze({__proto__:null,ArcCurve:Os,CatmullRomCurve3:Gs,CubicBezierCurve:js,CubicBezierCurve3:qs,EllipseCurve:Ns,LineCurve:Xs,LineCurve3:class extends Is{constructor(t=new H,e=new H){super(),this.type=\"LineCurve3\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new H){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}},QuadraticBezierCurve:Js,QuadraticBezierCurve3:Ys,SplineCurve:Zs});class Qs extends Is{constructor(){super(),this.type=\"CurvePath\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new Xs(e,t))}getPoint(t,e){const n=t*this.getLength(),i=this.getCurveLengths();let r=0;for(;r\u003ci.length;){if(i[r]\u003e=n){const t=i[r]-n,s=this.curves[r],a=s.getLength(),o=0===a?0:1-t/a;return s.getPointAt(o,e)}r++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths\u0026\u0026this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n\u003ci;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPoint(n/t));return this.autoClose\u0026\u0026e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,r=this.curves;i\u003cr.length;i++){const s=r[i],a=s.isEllipseCurve?2*t:s.isLineCurve||s.isLineCurve3?1:s.isSplineCurve?t*s.points.length:t,o=s.getPoints(a);for(let t=0;t\u003co.length;t++){const i=o[t];n\u0026\u0026n.equals(i)||(e.push(i),n=i)}}return this.autoClose\u0026\u0026e.length\u003e1\u0026\u0026!e[e.length-1].equals(e[0])\u0026\u0026e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e\u003cn;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e\u003cn;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e\u003cn;e++){const n=t.curves[e];this.curves.push((new Ks[n.type]).fromJSON(n))}return this}}class $s extends Qs{constructor(t){super(),this.type=\"Path\",this.currentPoint=new p,t\u0026\u0026this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e\u003cn;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new Xs(this.currentPoint.clone(),new p(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,i){const r=new Js(this.currentPoint.clone(),new p(t,e),new p(n,i));return this.curves.push(r),this.currentPoint.set(n,i),this}bezierCurveTo(t,e,n,i,r,s){const a=new js(this.currentPoint.clone(),new p(t,e),new p(n,i),new p(r,s));return this.curves.push(a),this.currentPoint.set(r,s),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new Zs(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,r,s){const a=this.currentPoint.x,o=this.currentPoint.y;return this.absarc(t+a,e+o,n,i,r,s),this}absarc(t,e,n,i,r,s){return this.absellipse(t,e,n,n,i,r,s),this}ellipse(t,e,n,i,r,s,a,o){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,r,s,a,o),this}absellipse(t,e,n,i,r,s,a,o){const l=new Ns(t,e,n,i,r,s,a,o);if(this.curves.length\u003e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}new H,new H,new H,new Qt;class ta extends $s{constructor(t){super(t),this.uuid=o(),this.type=\"Shape\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n\u003ci;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e\u003cn;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e\u003cn;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e\u003cn;e++){const n=t.holes[e];this.holes.push((new $s).fromJSON(n))}return this}}const ea=function(t,e,n=2){const i=e\u0026\u0026e.length,r=i?e[0]*n:t.length;let s=na(t,0,r,n,!0);const a=[];if(!s||s.next===s.prev)return a;let o,l,c,h,u,d,p;if(i\u0026\u0026(s=function(t,e,n,i){const r=[];let s,a,o,l,c;for(s=0,a=e.length;s\u003ca;s++)o=e[s]*i,l=s\u003ca-1?e[s+1]*i:t.length,c=na(t,o,l,i,!1),c===c.next\u0026\u0026(c.steiner=!0),r.push(pa(c));for(r.sort(ca),s=0;s\u003cr.length;s++)ha(r[s],n),n=ia(n,n.next);return n}(t,e,s,n)),t.length\u003e80*n){o=c=t[0],l=h=t[1];for(let e=n;e\u003cr;e+=n)u=t[e],d=t[e+1],u\u003co\u0026\u0026(o=u),d\u003cl\u0026\u0026(l=d),u\u003ec\u0026\u0026(c=u),d\u003eh\u0026\u0026(h=d);p=Math.max(c-o,h-l),p=0!==p?1/p:0}return ra(s,a,n,o,l,p),a};function na(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s\u003cn;s+=i)r+=(t[a]-t[s])*(t[s+1]+t[a+1]),a=s;return r}(t,e,n,i)\u003e0)for(s=e;s\u003cn;s+=i)a=wa(s,t[s],t[s+1],a);else for(s=n-i;s\u003e=e;s-=i)a=wa(s,t[s],t[s+1],a);return a\u0026\u0026va(a,a.next)\u0026\u0026(Sa(a),a=a.next),a}function ia(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!va(i,i.next)\u0026\u00260!==ga(i.prev,i,i.next))i=i.next;else{if(Sa(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function ra(t,e,n,i,r,s,a){if(!t)return;!a\u0026\u0026s\u0026\u0026function(t,e,n,i){let r=t;do{null===r.z\u0026\u0026(r.z=da(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e\u003cc\u0026\u0026(o++,i=i.nextZ,i);e++);for(l=c;o\u003e0||l\u003e0\u0026\u0026i;)0!==o\u0026\u0026(0===l||!i||n.z\u003c=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a\u003e1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?aa(t,i,r,s):sa(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),Sa(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?ra(t=oa(ia(t),e,n),e,n,i,r,s,2):2===a\u0026\u0026la(t,e,n,i,r,s):ra(ia(t),e,n,i,r,s,1);break}}function sa(t){const e=t.prev,n=t,i=t.next;if(ga(e,n,i)\u003e=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(fa(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)\u0026\u0026ga(r.prev,r,r.next)\u003e=0)return!1;r=r.next}return!0}function aa(t,e,n,i){const r=t.prev,s=t,a=t.next;if(ga(r,s,a)\u003e=0)return!1;const o=r.x\u003cs.x?r.x\u003ca.x?r.x:a.x:s.x\u003ca.x?s.x:a.x,l=r.y\u003cs.y?r.y\u003ca.y?r.y:a.y:s.y\u003ca.y?s.y:a.y,c=r.x\u003es.x?r.x\u003ea.x?r.x:a.x:s.x\u003ea.x?s.x:a.x,h=r.y\u003es.y?r.y\u003ea.y?r.y:a.y:s.y\u003ea.y?s.y:a.y,u=da(o,l,e,n,i),d=da(c,h,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p\u0026\u0026p.z\u003e=u\u0026\u0026f\u0026\u0026f.z\u003c=d;){if(p!==t.prev\u0026\u0026p!==t.next\u0026\u0026fa(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)\u0026\u0026ga(p.prev,p,p.next)\u003e=0)return!1;if(p=p.prevZ,f!==t.prev\u0026\u0026f!==t.next\u0026\u0026fa(r.x,r.y,s.x,s.y,a.x,a.y,f.x,f.y)\u0026\u0026ga(f.prev,f,f.next)\u003e=0)return!1;f=f.nextZ}for(;p\u0026\u0026p.z\u003e=u;){if(p!==t.prev\u0026\u0026p!==t.next\u0026\u0026fa(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)\u0026\u0026ga(p.prev,p,p.next)\u003e=0)return!1;p=p.prevZ}for(;f\u0026\u0026f.z\u003c=d;){if(f!==t.prev\u0026\u0026f!==t.next\u0026\u0026fa(r.x,r.y,s.x,s.y,a.x,a.y,f.x,f.y)\u0026\u0026ga(f.prev,f,f.next)\u003e=0)return!1;f=f.nextZ}return!0}function oa(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!va(r,s)\u0026\u0026xa(r,i,i.next,s)\u0026\u0026ba(r,s)\u0026\u0026ba(s,r)\u0026\u0026(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),Sa(i),Sa(i.next),i=t=s),i=i.next}while(i!==t);return ia(i)}function la(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i\u0026\u0026ma(a,t)){let o=Ma(a,t);return a=ia(a,a.next),o=ia(o,o.next),ra(a,e,n,i,r,s),void ra(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function ca(t,e){return t.x-e.x}function ha(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r\u003c=n.y\u0026\u0026r\u003e=n.next.y\u0026\u0026n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t\u003c=i\u0026\u0026t\u003ea){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x\u003cn.next.x?n:n.next}}n=n.next}while(n!==e);if(!s)return null;if(i===a)return s;const o=s,l=s.x,c=s.y;let h,u=1/0;n=s;do{i\u003e=n.x\u0026\u0026n.x\u003e=l\u0026\u0026i!==n.x\u0026\u0026fa(r\u003cc?i:a,r,l,c,r\u003cc?a:i,r,n.x,n.y)\u0026\u0026(h=Math.abs(r-n.y)/(i-n.x),ba(n,t)\u0026\u0026(h\u003cu||h===u\u0026\u0026(n.x\u003es.x||n.x===s.x\u0026\u0026ua(s,n)))\u0026\u0026(s=n,u=h)),n=n.next}while(n!==o);return s}(t,e)){const n=Ma(e,t);ia(e,e.next),ia(n,n.next)}}function ua(t,e){return ga(t.prev,t,e.prev)\u003c0\u0026\u0026ga(e.next,t,t.next)\u003c0}function da(t,e,n,i,r){return(t=1431655765\u0026((t=858993459\u0026((t=252645135\u0026((t=16711935\u0026((t=32767*(t-n)*r)|t\u003c\u003c8))|t\u003c\u003c4))|t\u003c\u003c2))|t\u003c\u003c1))|(e=1431655765\u0026((e=858993459\u0026((e=252645135\u0026((e=16711935\u0026((e=32767*(e-i)*r)|e\u003c\u003c8))|e\u003c\u003c4))|e\u003c\u003c2))|e\u003c\u003c1))\u003c\u003c1}function pa(t){let e=t,n=t;do{(e.x\u003cn.x||e.x===n.x\u0026\u0026e.y\u003cn.y)\u0026\u0026(n=e),e=e.next}while(e!==t);return n}function fa(t,e,n,i,r,s,a,o){return(r-a)*(e-o)-(t-a)*(s-o)\u003e=0\u0026\u0026(t-a)*(i-o)-(n-a)*(e-o)\u003e=0\u0026\u0026(n-a)*(s-o)-(r-a)*(i-o)\u003e=0}function ma(t,e){return t.next.i!==e.i\u0026\u0026t.prev.i!==e.i\u0026\u0026!function(t,e){let n=t;do{if(n.i!==t.i\u0026\u0026n.next.i!==t.i\u0026\u0026n.i!==e.i\u0026\u0026n.next.i!==e.i\u0026\u0026xa(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)\u0026\u0026(ba(t,e)\u0026\u0026ba(e,t)\u0026\u0026function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y\u003es!=n.next.y\u003es\u0026\u0026n.next.y!==n.y\u0026\u0026r\u003c(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x\u0026\u0026(i=!i),n=n.next}while(n!==t);return i}(t,e)\u0026\u0026(ga(t.prev,t,e.prev)||ga(t,e.prev,e))||va(t,e)\u0026\u0026ga(t.prev,t,t.next)\u003e0\u0026\u0026ga(e.prev,e,e.next)\u003e0)}function ga(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function va(t,e){return t.x===e.x\u0026\u0026t.y===e.y}function xa(t,e,n,i){const r=_a(ga(t,e,n)),s=_a(ga(t,e,i)),a=_a(ga(n,i,t)),o=_a(ga(n,i,e));return r!==s\u0026\u0026a!==o||(!(0!==r||!ya(t,n,e))||(!(0!==s||!ya(t,i,e))||(!(0!==a||!ya(n,t,i))||!(0!==o||!ya(n,e,i)))))}function ya(t,e,n){return e.x\u003c=Math.max(t.x,n.x)\u0026\u0026e.x\u003e=Math.min(t.x,n.x)\u0026\u0026e.y\u003c=Math.max(t.y,n.y)\u0026\u0026e.y\u003e=Math.min(t.y,n.y)}function _a(t){return t\u003e0?1:t\u003c0?-1:0}function ba(t,e){return ga(t.prev,t,t.next)\u003c0?ga(t,e,t.next)\u003e=0\u0026\u0026ga(t,t.prev,e)\u003e=0:ga(t,e,t.prev)\u003c0||ga(t,t.next,e)\u003c0}function Ma(t,e){const n=new Ea(t.i,t.x,t.y),i=new Ea(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function wa(t,e,n,i){const r=new Ea(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function Sa(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ\u0026\u0026(t.prevZ.nextZ=t.nextZ),t.nextZ\u0026\u0026(t.nextZ.prevZ=t.prevZ)}function Ea(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Ta{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r\u003ce;i=r++)n+=t[i].x*t[r].y-t[r].x*t[i].y;return.5*n}static isClockWise(t){return Ta.area(t)\u003c0}static triangulateShape(t,e){const n=[],i=[],r=[];Aa(t),Ra(n,t);let s=t.length;e.forEach(Aa);for(let t=0;t\u003ce.length;t++)i.push(s),s+=e[t].length,Ra(n,e[t]);const a=ea(n,i);for(let t=0;t\u003ca.length;t+=3)r.push(a.slice(t,t+3));return r}}function Aa(t){const e=t.length;e\u003e2\u0026\u0026t[e-1].equals(t[0])\u0026\u0026t.pop()}function Ra(t,e){for(let n=0;n\u003ce.length;n++)t.push(e[n].x),t.push(e[n].y)}class Ca extends me{constructor(t=new ta([new p(.5,.5),new p(-.5,.5),new p(-.5,-.5),new p(.5,-.5)]),e={}){super(),this.type=\"ExtrudeGeometry\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],r=[];for(let e=0,n=t.length;e\u003cn;e++){s(t[e])}function s(t){const s=[],a=void 0!==e.curveSegments?e.curveSegments:12,o=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:1,c=void 0===e.bevelEnabled||e.bevelEnabled,h=void 0!==e.bevelThickness?e.bevelThickness:.2,u=void 0!==e.bevelSize?e.bevelSize:h-.1,d=void 0!==e.bevelOffset?e.bevelOffset:0,f=void 0!==e.bevelSegments?e.bevelSegments:3;const m=e.extrudePath,g=void 0!==e.UVGenerator?e.UVGenerator:La;void 0!==e.amount\u0026\u0026(console.warn(\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\"),l=e.amount);let v,x,y,_,b,M=!1;m\u0026\u0026(v=m.getSpacedPoints(o),M=!0,c=!1,x=m.computeFrenetFrames(o,!1),y=new H,_=new H,b=new H),c||(f=0,h=0,u=0,d=0);const w=t.extractPoints(a);let S=w.shape;const E=w.holes;if(!Ta.isClockWise(S)){S=S.reverse();for(let t=0,e=E.length;t\u003ce;t++){const e=E[t];Ta.isClockWise(e)\u0026\u0026(E[t]=e.reverse())}}const T=Ta.triangulateShape(S,E),A=S;for(let t=0,e=E.length;t\u003ce;t++){const e=E[t];S=S.concat(e)}function R(t,e,n){return e||console.error(\"THREE.ExtrudeGeometry: vec does not exist\"),e.clone().multiplyScalar(n).add(t)}const C=S.length,L=T.length;function P(t,e,n){let i,r,s;const a=t.x-e.x,o=t.y-e.y,l=n.x-t.x,c=n.y-t.y,h=a*a+o*o,u=a*c-o*l;if(Math.abs(u)\u003eNumber.EPSILON){const u=Math.sqrt(h),d=Math.sqrt(l*l+c*c),f=e.x-o/u,m=e.y+a/u,g=((n.x-c/d-f)*c-(n.y+l/d-m)*l)/(a*c-o*l);i=f+a*g-t.x,r=m+o*g-t.y;const v=i*i+r*r;if(v\u003c=2)return new p(i,r);s=Math.sqrt(v/2)}else{let t=!1;a\u003eNumber.EPSILON?l\u003eNumber.EPSILON\u0026\u0026(t=!0):a\u003c-Number.EPSILON?l\u003c-Number.EPSILON\u0026\u0026(t=!0):Math.sign(o)===Math.sign(c)\u0026\u0026(t=!0),t?(i=-o,r=a,s=Math.sqrt(h)):(i=a,r=o,s=Math.sqrt(h/2))}return new p(i/s,r/s)}const D=[];for(let t=0,e=A.length,n=e-1,i=t+1;t\u003ce;t++,n++,i++)n===e\u0026\u0026(n=0),i===e\u0026\u0026(i=0),D[t]=P(A[t],A[n],A[i]);const I=[];let N,O=D.concat();for(let t=0,e=E.length;t\u003ce;t++){const e=E[t];N=[];for(let t=0,n=e.length,i=n-1,r=t+1;t\u003cn;t++,i++,r++)i===n\u0026\u0026(i=0),r===n\u0026\u0026(r=0),N[t]=P(e[t],e[i],e[r]);I.push(N),O=O.concat(N)}for(let t=0;t\u003cf;t++){const e=t/f,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=A.length;t\u003ce;t++){const e=R(A[t],D[t],i);U(e.x,e.y,-n)}for(let t=0,e=E.length;t\u003ce;t++){const e=E[t];N=I[t];for(let t=0,r=e.length;t\u003cr;t++){const r=R(e[t],N[t],i);U(r.x,r.y,-n)}}}const z=u+d;for(let t=0;t\u003cC;t++){const e=c?R(S[t],O[t],z):S[t];M?(_.copy(x.normals[0]).multiplyScalar(e.x),y.copy(x.binormals[0]).multiplyScalar(e.y),b.copy(v[0]).add(_).add(y),U(b.x,b.y,b.z)):U(e.x,e.y,0)}for(let t=1;t\u003c=o;t++)for(let e=0;e\u003cC;e++){const n=c?R(S[e],O[e],z):S[e];M?(_.copy(x.normals[t]).multiplyScalar(n.x),y.copy(x.binormals[t]).multiplyScalar(n.y),b.copy(v[t]).add(_).add(y),U(b.x,b.y,b.z)):U(n.x,n.y,l/o*t)}for(let t=f-1;t\u003e=0;t--){const e=t/f,n=h*Math.cos(e*Math.PI/2),i=u*Math.sin(e*Math.PI/2)+d;for(let t=0,e=A.length;t\u003ce;t++){const e=R(A[t],D[t],i);U(e.x,e.y,l+n)}for(let t=0,e=E.length;t\u003ce;t++){const e=E[t];N=I[t];for(let t=0,r=e.length;t\u003cr;t++){const r=R(e[t],N[t],i);M?U(r.x,r.y+v[o-1].y,v[o-1].x+n):U(r.x,r.y,l+n)}}}function B(t,e){let n=t.length;for(;--n\u003e=0;){const i=n;let r=n-1;r\u003c0\u0026\u0026(r=t.length-1);for(let t=0,n=o+2*f;t\u003cn;t++){const n=C*t,s=C*(t+1);G(e+i+n,e+r+n,e+r+s,e+i+s)}}}function U(t,e,n){s.push(t),s.push(e),s.push(n)}function F(t,e,r){V(t),V(e),V(r);const s=i.length/3,a=g.generateTopUV(n,i,s-3,s-2,s-1);k(a[0]),k(a[1]),k(a[2])}function G(t,e,r,s){V(t),V(e),V(s),V(e),V(r),V(s);const a=i.length/3,o=g.generateSideWallUV(n,i,a-6,a-3,a-2,a-1);k(o[0]),k(o[1]),k(o[3]),k(o[1]),k(o[2]),k(o[3])}function V(t){i.push(s[3*t+0]),i.push(s[3*t+1]),i.push(s[3*t+2])}function k(t){r.push(t.x),r.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=C*t;for(let t=0;t\u003cL;t++){const n=T[t];F(n[2]+e,n[1]+e,n[0]+e)}t=o+2*f,e=C*t;for(let t=0;t\u003cL;t++){const n=T[t];F(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t\u003cL;t++){const e=T[t];F(e[2],e[1],e[0])}for(let t=0;t\u003cL;t++){const e=T[t];F(e[0]+C*o,e[1]+C*o,e[2]+C*o)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;B(A,e),e+=A.length;for(let t=0,n=E.length;t\u003cn;t++){const n=E[t];B(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\"position\",new oe(i,3)),this.setAttribute(\"uv\",new oe(r,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e\u003ci;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath\u0026\u0026(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i\u003cr;i++){const r=e[t.shapes[i]];n.push(r)}const i=t.options.extrudePath;return void 0!==i\u0026\u0026(t.options.extrudePath=(new Ks[i.type]).fromJSON(i)),new Ca(n,t.options)}}const La={generateTopUV:function(t,e,n,i,r){const s=e[3*n],a=e[3*n+1],o=e[3*i],l=e[3*i+1],c=e[3*r],h=e[3*r+1];return[new p(s,a),new p(o,l),new p(c,h)]},generateSideWallUV:function(t,e,n,i,r,s){const a=e[3*n],o=e[3*n+1],l=e[3*n+2],c=e[3*i],h=e[3*i+1],u=e[3*i+2],d=e[3*r],f=e[3*r+1],m=e[3*r+2],g=e[3*s],v=e[3*s+1],x=e[3*s+2];return Math.abs(o-h)\u003cMath.abs(a-c)?[new p(a,1-l),new p(c,1-u),new p(d,1-m),new p(g,1-x)]:[new p(o,1-l),new p(h,1-u),new p(f,1-m),new p(v,1-x)]}};class Pa extends me{constructor(t=new ta([new p(0,.5),new p(-.5,-.5),new p(.5,-.5)]),e=12){super(),this.type=\"ShapeGeometry\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],r=[],s=[];let a=0,o=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e\u003ct.length;e++)l(t[e]),this.addGroup(a,o,e),a+=o,o=0;function l(t){const a=i.length/3,l=t.extractPoints(e);let c=l.shape;const h=l.holes;!1===Ta.isClockWise(c)\u0026\u0026(c=c.reverse());for(let t=0,e=h.length;t\u003ce;t++){const e=h[t];!0===Ta.isClockWise(e)\u0026\u0026(h[t]=e.reverse())}const u=Ta.triangulateShape(c,h);for(let t=0,e=h.length;t\u003ce;t++){const e=h[t];c=c.concat(e)}for(let t=0,e=c.length;t\u003ce;t++){const e=c[t];i.push(e.x,e.y,0),r.push(0,0,1),s.push(e.x,e.y)}for(let t=0,e=u.length;t\u003ce;t++){const e=u[t],i=e[0]+a,r=e[1]+a,s=e[2]+a;n.push(i,r,s),o+=3}}this.setIndex(n),this.setAttribute(\"position\",new oe(i,3)),this.setAttribute(\"normal\",new oe(r,3)),this.setAttribute(\"uv\",new oe(s,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}static fromJSON(t,e){const n=[];for(let i=0,r=t.shapes.length;i\u003cr;i++){const r=e[t.shapes[i]];n.push(r)}return new Pa(n,t.curveSegments)}}class Da extends te{constructor(t){super(),this.type=\"ShadowMaterial\",this.color=new A(0),this.transparent=!0,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.fog=t.fog,this}}Da.prototype.isShadowMaterial=!0;class Ia extends He{constructor(t){super(t),this.type=\"RawShaderMaterial\"}}Ia.prototype.isRawShaderMaterial=!0;class Na extends te{constructor(t){super(),this.defines={STANDARD:\"\"},this.type=\"MeshStandardMaterial\",this.color=new A(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 A(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new p(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\"\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}Na.prototype.isMeshStandardMaterial=!0;class Oa extends Na{constructor(t){super(),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.type=\"MeshPhysicalMaterial\",this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new p(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,\"reflectivity\",{get:function(){return l(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(t){this.ior=(1+.4*t)/(1-.4*t)}}),this.sheenColor=new A(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationColor=new A(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new A(1,1,1),this.specularColorMap=null,this._sheen=0,this._clearcoat=0,this._transmission=0,this.setValues(t)}get sheen(){return this._sheen}set sheen(t){this._sheen\u003e0!=t\u003e0\u0026\u0026this.version++,this._sheen=t}get clearcoat(){return this._clearcoat}set clearcoat(t){this._clearcoat\u003e0!=t\u003e0\u0026\u0026this.version++,this._clearcoat=t}get transmission(){return this._transmission}set transmission(t){this._transmission\u003e0!=t\u003e0\u0026\u0026this.version++,this._transmission=t}copy(t){return super.copy(t),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.ior=t.ior,this.sheen=t.sheen,this.sheenColor.copy(t.sheenColor),this.sheenColorMap=t.sheenColorMap,this.sheenRoughness=t.sheenRoughness,this.sheenRoughnessMap=t.sheenRoughnessMap,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this.specularIntensity=t.specularIntensity,this.specularIntensityMap=t.specularIntensityMap,this.specularColor.copy(t.specularColor),this.specularColorMap=t.specularColorMap,this}}Oa.prototype.isMeshPhysicalMaterial=!0;class za extends te{constructor(t){super(),this.type=\"MeshPhongMaterial\",this.color=new A(16777215),this.specular=new A(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new A(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new p(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.flatShading=t.flatShading,this.fog=t.fog,this}}za.prototype.isMeshPhongMaterial=!0;class Ba extends te{constructor(t){super(),this.defines={TOON:\"\"},this.type=\"MeshToonMaterial\",this.color=new A(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new A(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new p(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Ba.prototype.isMeshToonMaterial=!0;class Ua extends te{constructor(t){super(),this.type=\"MeshNormalMaterial\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new p(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.flatShading=t.flatShading,this}}Ua.prototype.isMeshNormalMaterial=!0;class Ha extends te{constructor(t){super(),this.type=\"MeshLambertMaterial\",this.color=new A(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new A(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=0,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.fog=t.fog,this}}Ha.prototype.isMeshLambertMaterial=!0;class Fa extends te{constructor(t){super(),this.defines={MATCAP:\"\"},this.type=\"MeshMatcapMaterial\",this.color=new A(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new p(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.flatShading=!1,this.fog=!0,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\"\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.flatShading=t.flatShading,this.fog=t.fog,this}}Fa.prototype.isMeshMatcapMaterial=!0;class Ga extends fs{constructor(t){super(),this.type=\"LineDashedMaterial\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}Ga.prototype.isLineDashedMaterial=!0;const Va={ShadowMaterial:Da,SpriteMaterial:Ur,RawShaderMaterial:Ia,ShaderMaterial:He,PointsMaterial:Es,MeshPhysicalMaterial:Oa,MeshStandardMaterial:Na,MeshPhongMaterial:za,MeshToonMaterial:Ba,MeshNormalMaterial:Ua,MeshLambertMaterial:Ha,MeshDepthMaterial:xr,MeshDistanceMaterial:yr,MeshBasicMaterial:ee,MeshMatcapMaterial:Fa,LineDashedMaterial:Ga,LineBasicMaterial:fs,Material:te};te.fromType=function(t){return new Va[t]};const ka={arraySlice:function(t,e,n){return ka.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n\u0026\u0026t.constructor===e?t:\"number\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)\u0026\u0026!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,a=0;a!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[a++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s\u0026\u0026void 0===s[i];)s=t[r++];if(void 0===s)return;let a=s[i];if(void 0!==a)if(Array.isArray(a))do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),n.push.apply(n,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),a.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),n.push(a)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t\u003cs.tracks.length;++t){const e=s.tracks[t],o=e.getValueSize(),l=[],c=[];for(let t=0;t\u003ce.times.length;++t){const s=e.times[t]*r;if(!(s\u003cn||s\u003e=i)){l.push(e.times[t]);for(let n=0;n\u003co;++n)c.push(e.values[t*o+n])}}0!==l.length\u0026\u0026(e.times=ka.convertArray(l,e.times.constructor),e.values=ka.convertArray(c,e.values.constructor),a.push(e))}s.tracks=a;let o=1/0;for(let t=0;t\u003cs.tracks.length;++t)o\u003es.tracks[t].times[0]\u0026\u0026(o=s.tracks[t].times[0]);for(let t=0;t\u003cs.tracks.length;++t)s.tracks[t].shift(-1*o);return s.resetDuration(),s},makeClipAdditive:function(t,e=0,n=t,i=30){i\u003c=0\u0026\u0026(i=30);const r=n.tracks.length,s=e/i;for(let e=0;e\u003cr;++e){const i=n.tracks[e],r=i.ValueTypeName;if(\"bool\"===r||\"string\"===r)continue;const a=t.tracks.find((function(t){return t.name===i.name\u0026\u0026t.ValueTypeName===r}));if(void 0===a)continue;let o=0;const l=i.getValueSize();i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline\u0026\u0026(o=l/3);let c=0;const h=a.getValueSize();a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline\u0026\u0026(c=h/3);const u=i.times.length-1;let d;if(s\u003c=i.times[0]){const t=o,e=l-o;d=ka.arraySlice(i.values,t,e)}else if(s\u003e=i.times[u]){const t=u*l+o,e=t+l-o;d=ka.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=ka.arraySlice(t.resultBuffer,e,n)}if(\"quaternion\"===r){(new U).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t\u003cp;++t){const e=t*h+c;if(\"quaternion\"===r)U.multiplyQuaternionsFlat(a.values,e,d,0,a.values,e);else{const t=h-2*c;for(let n=0;n\u003ct;++n)a.values[e+n]-=d[n]}}}return t.blendMode=2501,t}};class Wa{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],r=e[n-1];t:{e:{let s;n:{i:if(!(t\u003ci)){for(let s=n+2;;){if(void 0===i){if(t\u003cr)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,r)}if(n===s)break;if(r=i,i=e[++n],t\u003ci)break e}s=e.length;break n}if(t\u003e=r)break t;{const a=e[1];t\u003ca\u0026\u0026(n=2,r=a);for(let s=n-2;;){if(void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===s)break;if(i=r,r=e[--n-1],t\u003e=r)break e}s=n,n=0}}for(;n\u003cs;){const i=n+s\u003e\u003e\u003e1;t\u003ce[i]?s=i:n=i+1}if(i=e[n],r=e[n-1],void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,r,t)}this._cachedIndex=n,this.intervalChanged_(n,r,i)}return this.interpolate_(n,r,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=t*i;for(let t=0;t!==i;++t)e[t]=n[r+t];return e}interpolate_(){throw new Error(\"call to abstract method\")}intervalChanged_(){}}Wa.prototype.beforeStart_=Wa.prototype.copySampleValue_,Wa.prototype.afterEnd_=Wa.prototype.copySampleValue_;class ja extends Wa{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:2400,endingEnd:2400}}intervalChanged_(t,e,n){const i=this.parameterPositions;let r=t-2,s=t+1,a=i[r],o=i[s];if(void 0===a)switch(this.getSettings_().endingStart){case 2401:r=t,a=2*e-n;break;case 2402:r=i.length-2,a=e+i[r]-i[r+1];break;default:r=t,a=n}if(void 0===o)switch(this.getSettings_().endingEnd){case 2401:s=t,o=2*n-e;break;case 2402:s=1,o=n+i[1]-i[0];break;default:s=t-1,o=e}const l=.5*(n-e),c=this.valueSize;this._weightPrev=l/(e-a),this._weightNext=l/(o-n),this._offsetPrev=r*c,this._offsetNext=s*c}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=this._offsetPrev,h=this._offsetNext,u=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),f=p*p,m=f*p,g=-u*m+2*u*f-u*p,v=(1+u)*m+(-1.5-2*u)*f+(-.5+u)*p+1,x=(-1-d)*m+(1.5+d)*f+.5*p,y=d*m-d*f;for(let t=0;t!==a;++t)r[t]=g*s[c+t]+v*s[l+t]+x*s[o+t]+y*s[h+t];return r}}class qa extends Wa{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=(n-e)/(i-e),h=1-c;for(let t=0;t!==a;++t)r[t]=s[l+t]*h+s[o+t]*c;return r}}class Xa extends Wa{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}class Ja{constructor(t,e,n,i){if(void 0===t)throw new Error(\"THREE.KeyframeTrack: track name is undefined\");if(void 0===e||0===e.length)throw new Error(\"THREE.KeyframeTrack: no keyframes in track named \"+t);this.name=t,this.times=ka.convertArray(e,this.TimeBufferType),this.values=ka.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:ka.convertArray(t.times,Array),values:ka.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation\u0026\u0026(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new Xa(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new qa(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new ja(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case 2300:e=this.InterpolantFactoryMethodDiscrete;break;case 2301:e=this.InterpolantFactoryMethodLinear;break;case 2302:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\"unsupported interpolation for \"+this.ValueTypeName+\" keyframe track named \"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\"THREE.KeyframeTrack:\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let r=0,s=i-1;for(;r!==i\u0026\u0026n[r]\u003ct;)++r;for(;-1!==s\u0026\u0026n[s]\u003ee;)--s;if(++s,0!==r||s!==i){r\u003e=s\u0026\u0026(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=ka.arraySlice(n,r,s),this.values=ka.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0\u0026\u0026(console.error(\"THREE.KeyframeTrack: Invalid value size in track.\",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r\u0026\u0026(console.error(\"THREE.KeyframeTrack: Track is empty.\",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if(\"number\"==typeof i\u0026\u0026isNaN(i)){console.error(\"THREE.KeyframeTrack: Time is not a valid number.\",this,e,i),t=!1;break}if(null!==s\u0026\u0026s\u003ei){console.error(\"THREE.KeyframeTrack: Out of order keys.\",this,e,i,s),t=!1;break}s=i}if(void 0!==i\u0026\u0026ka.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\"THREE.KeyframeTrack: Value is not a valid number.\",this,e,n),t=!1;break}}return t}optimize(){const t=ka.arraySlice(this.times),e=ka.arraySlice(this.values),n=this.getValueSize(),i=2302===this.getInterpolation(),r=t.length-1;let s=1;for(let a=1;a\u003cr;++a){let r=!1;const o=t[a];if(o!==t[a+1]\u0026\u0026(1!==a||o!==t[0]))if(i)r=!0;else{const t=a*n,i=t-n,s=t+n;for(let a=0;a!==n;++a){const n=e[t+a];if(n!==e[i+a]||n!==e[s+a]){r=!0;break}}}if(r){if(a!==s){t[s]=t[a];const i=a*n,r=s*n;for(let t=0;t!==n;++t)e[r+t]=e[i+t]}++s}}if(r\u003e0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=ka.arraySlice(t,0,s),this.values=ka.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=ka.arraySlice(this.times,0),e=ka.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Ja.prototype.TimeBufferType=Float32Array,Ja.prototype.ValueBufferType=Float32Array,Ja.prototype.DefaultInterpolation=2301;class Ya extends Ja{}Ya.prototype.ValueTypeName=\"bool\",Ya.prototype.ValueBufferType=Array,Ya.prototype.DefaultInterpolation=2300,Ya.prototype.InterpolantFactoryMethodLinear=void 0,Ya.prototype.InterpolantFactoryMethodSmooth=void 0;class Za extends Ja{}Za.prototype.ValueTypeName=\"color\";class Ka extends Ja{}Ka.prototype.ValueTypeName=\"number\";class Qa extends Wa{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)U.slerpFlat(r,0,s,l-a,s,l,o);return r}}class $a extends Ja{InterpolantFactoryMethodLinear(t){return new Qa(this.times,this.values,this.getValueSize(),t)}}$a.prototype.ValueTypeName=\"quaternion\",$a.prototype.DefaultInterpolation=2301,$a.prototype.InterpolantFactoryMethodSmooth=void 0;class to extends Ja{}to.prototype.ValueTypeName=\"string\",to.prototype.ValueBufferType=Array,to.prototype.DefaultInterpolation=2300,to.prototype.InterpolantFactoryMethodLinear=void 0,to.prototype.InterpolantFactoryMethodSmooth=void 0;class eo extends Ja{}eo.prototype.ValueTypeName=\"vector\";class no{constructor(t,e=-1,n,i=2500){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=o(),this.duration\u003c0\u0026\u0026this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(io(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(Ja.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t\u003cr;t++){let a=[],o=[];a.push((t+r-1)%r,t,(t+1)%r),o.push(0,1,0);const l=ka.getKeyframeOrder(a);a=ka.sortedArray(a,1,l),o=ka.sortedArray(o,1,l),i||0!==a[0]||(a.push(r),o.push(o[0])),s.push(new Ka(\".morphTargetInfluences[\"+e[t].name+\"]\",a,o).scale(1/n))}return new this(t,-1,s)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry\u0026\u0026e.geometry.animations||e.animations}for(let t=0;t\u003cn.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},r=/^([\\w-]*?)([\\d]+)$/;for(let e=0,n=t.length;e\u003cn;e++){const n=t[e],s=n.name.match(r);if(s\u0026\u0026s.length\u003e1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error(\"THREE.AnimationClip: No animation in JSONLoader data.\"),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];ka.flattenJSON(n,s,a,i),0!==s.length\u0026\u0026r.push(new t(e,s,a))}},i=[],r=t.name||\"default\",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t\u003cl.length;t++){const r=l[t].keys;if(r\u0026\u00260!==r.length)if(r[0].morphTargets){const t={};let e;for(e=0;e\u003cr.length;e++)if(r[e].morphTargets)for(let n=0;n\u003cr[e].morphTargets.length;n++)t[r[e].morphTargets[n]]=-1;for(const n in t){const t=[],s=[];for(let i=0;i!==r[e].morphTargets.length;++i){const i=r[e];t.push(i.time),s.push(i.morphTarget===n?1:0)}i.push(new Ka(\".morphTargetInfluence[\"+n+\"]\",t,s))}o=t.length*s}else{const s=\".bones[\"+e[t].name+\"]\";n(eo,s+\".position\",r,\"pos\",i),n($a,s+\".quaternion\",r,\"rot\",i),n(eo,s+\".scale\",r,\"scl\",i)}}if(0===i.length)return null;return new this(r,o,i,a)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t\u003cthis.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e\u003cthis.tracks.length;e++)t=t\u0026\u0026this.tracks[e].validate();return t}optimize(){for(let t=0;t\u003cthis.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e\u003cthis.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function io(t){if(void 0===t.type)throw new Error(\"THREE.KeyframeTrack: track type undefined, can not parse\");const e=function(t){switch(t.toLowerCase()){case\"scalar\":case\"double\":case\"float\":case\"number\":case\"integer\":return Ka;case\"vector\":case\"vector2\":case\"vector3\":case\"vector4\":return eo;case\"color\":return Za;case\"quaternion\":return $a;case\"bool\":case\"boolean\":return Ya;case\"string\":return to}throw new Error(\"THREE.KeyframeTrack: Unsupported typeName: \"+t)}(t.type);if(void 0===t.times){const e=[],n=[];ka.flattenJSON(t.keys,e,n,\"value\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}const ro={enabled:!1,files:{},add:function(t,e){!1!==this.enabled\u0026\u0026(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};class so{constructor(t,e,n){const i=this;let r=!1,s=0,a=0,o=void 0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===r\u0026\u0026void 0!==i.onStart\u0026\u0026i.onStart(t,s,a),r=!0},this.itemEnd=function(t){s++,void 0!==i.onProgress\u0026\u0026i.onProgress(t,s,a),s===a\u0026\u0026(r=!1,void 0!==i.onLoad\u0026\u0026i.onLoad())},this.itemError=function(t){void 0!==i.onError\u0026\u0026i.onError(t)},this.resolveURL=function(t){return o?o(t):t},this.setURLModifier=function(t){return o=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e\u0026\u0026l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e\u003cn;e+=2){const n=l[e],i=l[e+1];if(n.global\u0026\u0026(n.lastIndex=0),n.test(t))return i}return null}}}const ao=new so;class oo{constructor(t){this.manager=void 0!==t?t:ao,this.crossOrigin=\"anonymous\",this.withCredentials=!1,this.path=\"\",this.resourcePath=\"\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,r){n.load(t,i,e,r)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}const lo={};class co extends oo{constructor(t){super(t)}load(t,e,n,i){void 0===t\u0026\u0026(t=\"\"),void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=ro.get(t);if(void 0!==r)return this.manager.itemStart(t),setTimeout(()=\u003e{e\u0026\u0026e(r),this.manager.itemEnd(t)},0),r;if(void 0!==lo[t])return void lo[t].push({onLoad:e,onProgress:n,onError:i});lo[t]=[],lo[t].push({onLoad:e,onProgress:n,onError:i});const s=new Request(t,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?\"include\":\"same-origin\"}),a=this.mimeType,o=this.responseType;fetch(s).then(e=\u003e{if(200===e.status||0===e.status){if(0===e.status\u0026\u0026console.warn(\"THREE.FileLoader: HTTP Status 0 received.\"),\"undefined\"==typeof ReadableStream||void 0===e.body||void 0===e.body.getReader)return e;const n=lo[t],i=e.body.getReader(),r=e.headers.get(\"Content-Length\"),s=r?parseInt(r):0,a=0!==s;let o=0;const l=new ReadableStream({start(t){!function e(){i.read().then(({done:i,value:r})=\u003e{if(i)t.close();else{o+=r.byteLength;const i=new ProgressEvent(\"progress\",{lengthComputable:a,loaded:o,total:s});for(let t=0,e=n.length;t\u003ce;t++){const e=n[t];e.onProgress\u0026\u0026e.onProgress(i)}t.enqueue(r),e()}})}()}});return new Response(l)}throw Error(`fetch for \"${e.url}\" responded with ${e.status}: ${e.statusText}`)}).then(t=\u003e{switch(o){case\"arraybuffer\":return t.arrayBuffer();case\"blob\":return t.blob();case\"document\":return t.text().then(t=\u003e(new DOMParser).parseFromString(t,a));case\"json\":return t.json();default:if(void 0===a)return t.text();{const e=/charset=\"?([^;\"\\s]*)\"?/i.exec(a),n=e\u0026\u0026e[1]?e[1].toLowerCase():void 0,i=new TextDecoder(n);return t.arrayBuffer().then(t=\u003ei.decode(t))}}}).then(e=\u003e{ro.add(t,e);const n=lo[t];delete lo[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onLoad\u0026\u0026i.onLoad(e)}}).catch(e=\u003e{const n=lo[t];if(void 0===n)throw this.manager.itemError(t),e;delete lo[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onError\u0026\u0026i.onError(e)}this.manager.itemError(t)}).finally(()=\u003e{this.manager.itemEnd(t)}),this.manager.itemStart(t)}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class ho extends oo{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=ro.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;const a=g(\"img\");function o(){c(),ro.add(t,this),e\u0026\u0026e(this),r.manager.itemEnd(t)}function l(e){c(),i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)}function c(){a.removeEventListener(\"load\",o,!1),a.removeEventListener(\"error\",l,!1)}return a.addEventListener(\"load\",o,!1),a.addEventListener(\"error\",l,!1),\"data:\"!==t.slice(0,5)\u0026\u0026void 0!==this.crossOrigin\u0026\u0026(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class uo extends oo{constructor(t){super(t)}load(t,e,n,i){const r=new ke,s=new ho(this.manager);s.setCrossOrigin(this.crossOrigin),s.setPath(this.path);let a=0;function o(n){s.load(t[n],(function(t){r.images[n]=t,a++,6===a\u0026\u0026(r.needsUpdate=!0,e\u0026\u0026e(r))}),void 0,i)}for(let e=0;e\u003ct.length;++e)o(e);return r}}class po extends oo{constructor(t){super(t)}load(t,e,n,i){const r=new I,s=new ho(this.manager);return s.setCrossOrigin(this.crossOrigin),s.setPath(this.path),s.load(t,(function(t){r.image=t,r.needsUpdate=!0,void 0!==e\u0026\u0026e(r)}),n,i),r}}class fo extends Gt{constructor(t,e=1){super(),this.type=\"Light\",this.color=new A(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor\u0026\u0026(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance\u0026\u0026(e.object.distance=this.distance),void 0!==this.angle\u0026\u0026(e.object.angle=this.angle),void 0!==this.decay\u0026\u0026(e.object.decay=this.decay),void 0!==this.penumbra\u0026\u0026(e.object.penumbra=this.penumbra),void 0!==this.shadow\u0026\u0026(e.object.shadow=this.shadow.toJSON()),e}}fo.prototype.isLight=!0;class mo extends fo{constructor(t,e,n){super(t,n),this.type=\"HemisphereLight\",this.position.copy(Gt.DefaultUp),this.updateMatrix(),this.groundColor=new A(e)}copy(t){return fo.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}mo.prototype.isHemisphereLight=!0;const go=new gt,vo=new H,xo=new H;class yo{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.blurSamples=8,this.mapSize=new p(512,512),this.map=null,this.mapPass=null,this.matrix=new gt,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Ke,this._frameExtents=new p(1,1),this._viewportCount=1,this._viewports=[new N(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;vo.setFromMatrixPosition(t.matrixWorld),e.position.copy(vo),xo.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(xo),e.updateMatrixWorld(),go.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(go),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map\u0026\u0026this.map.dispose(),this.mapPass\u0026\u0026this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias\u0026\u0026(t.bias=this.bias),0!==this.normalBias\u0026\u0026(t.normalBias=this.normalBias),1!==this.radius\u0026\u0026(t.radius=this.radius),512===this.mapSize.x\u0026\u0026512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class _o extends yo{constructor(){super(new Ge(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*a*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;n===e.fov\u0026\u0026i===e.aspect\u0026\u0026r===e.far||(e.fov=n,e.aspect=i,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}_o.prototype.isSpotLightShadow=!0;class bo extends fo{constructor(t,e,n=0,i=Math.PI/3,r=0,s=1){super(t,e),this.type=\"SpotLight\",this.position.copy(Gt.DefaultUp),this.updateMatrix(),this.target=new Gt,this.distance=n,this.angle=i,this.penumbra=r,this.decay=s,this.shadow=new _o}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}bo.prototype.isSpotLight=!0;const Mo=new gt,wo=new H,So=new H;class Eo extends yo{constructor(){super(new Ge(90,1,.5,500)),this._frameExtents=new p(4,2),this._viewportCount=6,this._viewports=[new N(2,1,1,1),new N(0,1,1,1),new N(3,1,1,1),new N(1,1,1,1),new N(3,0,1,1),new N(1,0,1,1)],this._cubeDirections=[new H(1,0,0),new H(-1,0,0),new H(0,0,1),new H(0,0,-1),new H(0,1,0),new H(0,-1,0)],this._cubeUps=[new H(0,1,0),new H(0,1,0),new H(0,1,0),new H(0,1,0),new H(0,0,1),new H(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,r=t.distance||n.far;r!==n.far\u0026\u0026(n.far=r,n.updateProjectionMatrix()),wo.setFromMatrixPosition(t.matrixWorld),n.position.copy(wo),So.copy(n.position),So.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(So),n.updateMatrixWorld(),i.makeTranslation(-wo.x,-wo.y,-wo.z),Mo.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Mo)}}Eo.prototype.isPointLightShadow=!0;class To extends fo{constructor(t,e,n=0,i=1){super(t,e),this.type=\"PointLight\",this.distance=n,this.decay=i,this.shadow=new Eo}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}To.prototype.isPointLight=!0;class Ao extends yo{constructor(){super(new un(-5,5,5,-5,.5,500))}}Ao.prototype.isDirectionalLightShadow=!0;class Ro extends fo{constructor(t,e){super(t,e),this.type=\"DirectionalLight\",this.position.copy(Gt.DefaultUp),this.updateMatrix(),this.target=new Gt,this.shadow=new Ao}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}Ro.prototype.isDirectionalLight=!0;class Co extends fo{constructor(t,e){super(t,e),this.type=\"AmbientLight\"}}Co.prototype.isAmbientLight=!0;class Lo extends fo{constructor(t,e,n=10,i=10){super(t,e),this.type=\"RectAreaLight\",this.width=n,this.height=i}get power(){return this.intensity*this.width*this.height*Math.PI}set power(t){this.intensity=t/(this.width*this.height*Math.PI)}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}Lo.prototype.isRectAreaLight=!0;class Po{constructor(){this.coefficients=[];for(let t=0;t\u003c9;t++)this.coefficients.push(new H)}set(t){for(let e=0;e\u003c9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t\u003c9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*i),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*n),e.addScaledVector(s[4],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e\u003c9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n\u003c9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e\u003c9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n\u003c9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e\u003c9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i\u003c9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i\u003c9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,r=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.546274*(n*n-i*i)}}Po.prototype.isSphericalHarmonics3=!0;class Do extends fo{constructor(t=new Po,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}Do.prototype.isLightProbe=!0;class Io{static decodeText(t){if(\"undefined\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\"\";for(let n=0,i=t.length;n\u003ci;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\"/\");return-1===e?\"./\":t.slice(0,e+1)}static resolveURL(t,e){return\"string\"!=typeof t||\"\"===t?\"\":(/^https?:\\/\\//i.test(e)\u0026\u0026/^\\//.test(t)\u0026\u0026(e=e.replace(/(^https?:\\/\\/[^\\/]+).*/i,\"$1\")),/^(https?:)?\\/\\//i.test(t)||/^data:.*,.*$/i.test(t)||/^blob:.*$/i.test(t)?t:e+t)}}class No extends me{constructor(){super(),this.type=\"InstancedBufferGeometry\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}No.prototype.isInstancedBufferGeometry=!0;let Oo;(class extends oo{constructor(t){super(t),\"undefined\"==typeof createImageBitmap\u0026\u0026console.warn(\"THREE.ImageBitmapLoader: createImageBitmap() not supported.\"),\"undefined\"==typeof fetch\u0026\u0026console.warn(\"THREE.ImageBitmapLoader: fetch() not supported.\"),this.options={premultiplyAlpha:\"none\"}}setOptions(t){return this.options=t,this}load(t,e,n,i){void 0===t\u0026\u0026(t=\"\"),void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=ro.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;const a={};a.credentials=\"anonymous\"===this.crossOrigin?\"same-origin\":\"include\",a.headers=this.requestHeader,fetch(t,a).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:\"none\"}))})).then((function(n){ro.add(t,n),e\u0026\u0026e(n),r.manager.itemEnd(t)})).catch((function(e){i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)})),r.manager.itemStart(t)}}).prototype.isImageBitmapLoader=!0;const zo=function(){return void 0===Oo\u0026\u0026(Oo=new(window.AudioContext||window.webkitAudioContext)),Oo};class Bo extends oo{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new co(this.manager);s.setResponseType(\"arraybuffer\"),s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{const t=n.slice(0);zo().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}}(class extends Do{constructor(t,e,n=1){super(void 0,n);const i=(new A).set(t),r=(new A).set(e),s=new H(i.r,i.g,i.b),a=new H(r.r,r.g,r.b),o=Math.sqrt(Math.PI),l=o*Math.sqrt(.75);this.sh.coefficients[0].copy(s).add(a).multiplyScalar(o),this.sh.coefficients[1].copy(s).sub(a).multiplyScalar(l)}}).prototype.isHemisphereLightProbe=!0;(class extends Do{constructor(t,e=1){super(void 0,e);const n=(new A).set(t);this.sh.coefficients[0].set(n.r,n.g,n.b).multiplyScalar(2*Math.sqrt(Math.PI))}}).prototype.isAmbientLightProbe=!0;class Uo{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=Ho(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart\u0026\u0026!this.running)return this.start(),0;if(this.running){const e=Ho();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}function Ho(){return(\"undefined\"==typeof performance?Date:performance).now()}class Fo extends Gt{constructor(t){super(),this.type=\"Audio\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\"empty\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"audioNode\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaNode\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaStreamNode\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\"buffer\",this.autoplay\u0026\u0026this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\"THREE.Audio: Audio is already playing.\");if(!1===this.hasPlaybackControl)return void console.warn(\"THREE.Audio: this Audio has no playback control.\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying\u0026\u0026(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop\u0026\u0026(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}connect(){if(this.filters.length\u003e0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t\u003ce;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length\u003e0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t\u003ce;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying\u0026\u0026this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying\u0026\u0026this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\"THREE.Audio: this Audio has no playback control.\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying\u0026\u0026(this.source.loop=this.loop),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}class Go{constructor(t,e,n){let i,r,s;switch(this.binding=t,this.valueSize=n,e){case\"quaternion\":i=this._slerp,r=this._slerpAdditive,s=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\"string\":case\"bool\":i=this._select,r=this._select,s=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,r=this._lerpAdditive,s=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=r,this._setIdentity=s,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,r=t*i+i;let s=this.cumulativeWeight;if(0===s){for(let t=0;t!==i;++t)n[r+t]=n[t];s=e}else{s+=e;const t=e/s;this._mixBufferRegion(n,r,0,t,i)}this.cumulativeWeight=s}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive\u0026\u0026this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,r=this.cumulativeWeight,s=this.cumulativeWeightAdditive,a=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,r\u003c1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-r,e)}s\u003e0\u0026\u0026this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n\u003ce;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n\u003cthis.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,r){if(i\u003e=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){U.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;U.multiplyQuaternionsFlat(t,s,t,e,t,n),U.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const Vo=new RegExp(\"[\\\\[\\\\]\\\\.:\\\\/]\",\"g\"),ko=\"[^\"+\"\\\\[\\\\]\\\\.:\\\\/\".replace(\"\\\\.\",\"\")+\"]\",Wo=/((?:WC+[\\/:])*)/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),jo=/(WCOD+)?/.source.replace(\"WCOD\",ko),qo=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),Xo=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),Jo=new RegExp(\"^\"+Wo+jo+qo+Xo+\"$\"),Yo=[\"material\",\"materials\",\"bones\"];class Zo{constructor(t,e,n){this.path=e,this.parsedPath=n||Zo.parseTrackName(e),this.node=Zo.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t\u0026\u0026t.isAnimationObjectGroup?new Zo.Composite(t,e,n):new Zo(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\s/g,\"_\").replace(Vo,\"\")}static parseTrackName(t){const e=Jo.exec(t);if(null===e)throw new Error(\"PropertyBinding: Cannot parse trackName: \"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName\u0026\u0026n.nodeName.lastIndexOf(\".\");if(void 0!==i\u0026\u0026-1!==i){const t=n.nodeName.substring(i+1);-1!==Yo.indexOf(t)\u0026\u0026(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\"PropertyBinding: can not parse propertyName from trackName: \"+t);return n}static findNode(t,e){if(void 0===e||\"\"===e||\".\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i\u003ct.length;i++){const r=t[i];if(r.name===e||r.uuid===e)return r;const s=n(r.children);if(s)return s}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.targetObject[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let r=e.propertyIndex;if(t||(t=Zo.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\"THREE.PropertyBinding: Trying to update node for track: \"+this.path+\" but it wasn't found.\");if(n){let i=e.objectIndex;switch(n){case\"materials\":if(!t.material)return void console.error(\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",this);if(!t.material.materials)return void console.error(\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\",this);t=t.material.materials;break;case\"bones\":if(!t.skeleton)return void console.error(\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\",this);t=t.skeleton.bones;for(let e=0;e\u003ct.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\",this,t);t=t[i]}}const s=t[i];if(void 0===s){const n=e.nodeName;return void console.error(\"THREE.PropertyBinding: Trying to update property for track: \"+n+\".\"+i+\" but it wasn't found.\",t)}let a=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?a=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate\u0026\u0026(a=this.Versioning.MatrixWorldNeedsUpdate);let o=this.BindingType.Direct;if(void 0!==r){if(\"morphTargetInfluences\"===i){if(!t.geometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\",this);if(!t.geometry.isBufferGeometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\",this);if(!t.geometry.morphAttributes)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\",this);void 0!==t.morphTargetDictionary[r]\u0026\u0026(r=t.morphTargetDictionary[r])}o=this.BindingType.ArrayElement,this.resolvedProperty=s,this.propertyIndex=r}else void 0!==s.fromArray\u0026\u0026void 0!==s.toArray?(o=this.BindingType.HasFromToArray,this.resolvedProperty=s):Array.isArray(s)?(o=this.BindingType.EntireArray,this.resolvedProperty=s):this.propertyName=i;this.getValue=this.GetterByBindingType[o],this.setValue=this.SetterByBindingTypeAndVersioning[o][a]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}Zo.Composite=class{constructor(t,e,n){const i=n||Zo.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i\u0026\u0026i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},Zo.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Zo.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},Zo.prototype.GetterByBindingType=[Zo.prototype._getValue_direct,Zo.prototype._getValue_array,Zo.prototype._getValue_arrayElement,Zo.prototype._getValue_toArray],Zo.prototype.SetterByBindingTypeAndVersioning=[[Zo.prototype._setValue_direct,Zo.prototype._setValue_direct_setNeedsUpdate,Zo.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[Zo.prototype._setValue_array,Zo.prototype._setValue_array_setNeedsUpdate,Zo.prototype._setValue_array_setMatrixWorldNeedsUpdate],[Zo.prototype._setValue_arrayElement,Zo.prototype._setValue_arrayElement_setNeedsUpdate,Zo.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[Zo.prototype._setValue_fromArray,Zo.prototype._setValue_fromArray_setNeedsUpdate,Zo.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];(class{constructor(){this.uuid=o(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;const t={};this._indicesByUUID=t;for(let e=0,n=arguments.length;e!==n;++e)t[arguments[e].uuid]=e;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};const e=this;this.stats={objects:{get total(){return e._objects.length},get inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}add(){const t=this._objects,e=this._indicesByUUID,n=this._paths,i=this._parsedPaths,r=this._bindings,s=r.length;let a=void 0,o=t.length,l=this.nCachedObjects_;for(let c=0,h=arguments.length;c!==h;++c){const h=arguments[c],u=h.uuid;let d=e[u];if(void 0===d){d=o++,e[u]=d,t.push(h);for(let t=0,e=s;t!==e;++t)r[t].push(new Zo(h,n[t],i[t]))}else if(d\u003cl){a=t[d];const o=--l,c=t[o];e[c.uuid]=d,t[d]=c,e[u]=o,t[o]=h;for(let t=0,e=s;t!==e;++t){const e=r[t],s=e[o];let a=e[d];e[d]=s,void 0===a\u0026\u0026(a=new Zo(h,n[t],i[t])),e[o]=a}}else t[d]!==a\u0026\u0026console.error(\"THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.\")}this.nCachedObjects_=l}remove(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s],o=a.uuid,l=e[o];if(void 0!==l\u0026\u0026l\u003e=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l\u003cr){const a=--r,o=t[a],c=--s,h=t[c];e[o.uuid]=l,t[l]=o,e[h.uuid]=a,t[a]=h,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[a],r=e[c];e[l]=i,e[a]=r,e.pop()}}else{const r=--s,a=t[r];r\u003e0\u0026\u0026(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,h=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(h);for(let n=c,i=o.length;n!==i;++n){const i=o[n];h[n]=new Zo(i,t,e)}return h}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}}).prototype.isAnimationObjectGroup=!0;class Ko{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:2400,endingEnd:2400};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=2201,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled\u0026\u0026!this.paused\u0026\u00260!==this.timeScale\u0026\u0026null===this._startTime\u0026\u0026this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t\u0026\u0026(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a\u0026\u0026(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t\u0026\u0026(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i\u003c0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a\u003e0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case 2501:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);break;case 2500:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t\u003en.parameterPositions[1]\u0026\u0026(this.stopFading(),0===i\u0026\u0026(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t\u003en.parameterPositions[1]\u0026\u0026(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=2202===n;if(0===t)return-1===r?i:s\u0026\u00261==(1\u0026r)?e-i:i;if(2200===n){-1===r\u0026\u0026(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i\u003e=e)i=e;else{if(!(i\u003c0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t\u003c0?-1:1})}}else{if(-1===r\u0026\u0026(t\u003e=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i\u003e=e||i\u003c0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a\u003c=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t\u003e0?e:0,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t\u003e0?1:-1});else{if(1===a){const e=t\u003c0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:\"loop\",action:this,loopDelta:n})}}else this.time=i;if(s\u0026\u00261==(1\u0026r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=2401,i.endingEnd=2401):(i.endingStart=t?this.zeroSlopeAtStart?2401:2400:2402,i.endingEnd=e?this.zeroSlopeAtEnd?2401:2400:2402)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s\u0026\u0026(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}(class extends i{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c\u0026\u0026(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let h=c[l];if(void 0!==h)++h.referenceCount,s[t]=h;else{if(h=s[t],void 0!==h){null===h._cacheIndex\u0026\u0026(++h.referenceCount,this._addInactiveBinding(h,o,l));continue}const i=e\u0026\u0026e._propertyBindings[t].binding.parsedPath;h=new Go(Zo.create(n,l,i),r.ValueTypeName,r.getValueSize()),++h.referenceCount,this._addInactiveBinding(h,o,l),s[t]=h}a[t].resultBuffer=h.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i\u0026\u0026i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++\u0026\u0026(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount\u0026\u0026(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e\u0026\u0026e\u003cthis._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,r=this._actionsByClip;let s=r[e];if(void 0===s)s={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,r[e]=s;else{const e=s.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),s.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const r=t._clip.uuid,s=this._actionsByClip,a=s[r],o=a.knownActions,l=o[o.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,o[c]=l,o.pop(),t._byClipCacheIndex=null;delete a.actionByRoot[(t._localRoot||this._root).uuid],0===o.length\u0026\u0026delete s[r],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount\u0026\u0026this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,r=this._bindings;let s=i[e];void 0===s\u0026\u0026(s={},i[e]=s),s[n]=t,t._cacheIndex=r.length,r.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,r=n.path,s=this._bindingsByRootAndName,a=s[i],o=e[e.length-1],l=t._cacheIndex;o._cacheIndex=l,e[l]=o,e.pop(),delete a[r],0===Object.keys(a).length\u0026\u0026delete s[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n\u0026\u0026(n=new qa(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,r=e[i];t.__cacheIndex=i,e[i]=t,r.__cacheIndex=n,e[n]=r}clipAction(t,e,n){const i=e||this._root,r=i.uuid;let s=\"string\"==typeof t?no.findByName(i,t):t;const a=null!==s?s.uuid:t,o=this._actionsByClip[a];let l=null;if(void 0===n\u0026\u0026(n=null!==s?s.blendMode:2500),void 0!==o){const t=o.actionByRoot[r];if(void 0!==t\u0026\u0026t.blendMode===n)return t;l=o.knownActions[0],null===s\u0026\u0026(s=l._clip)}if(null===s)return null;const c=new Ko(this,s,e,n);return this._bindAction(c,l),this._addInactiveAction(c,a,r),c}existingAction(t,e){const n=e||this._root,i=n.uuid,r=\"string\"==typeof t?no.findByName(n,t):t,s=r?r.uuid:t,a=this._actionsByClip[s];return void 0!==a\u0026\u0026a.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e\u003e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t\u003cthis._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,r=i[n];if(void 0!==r){const t=r.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const r=i._cacheIndex,s=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,s._cacheIndex=r,e[r]=s,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i\u0026\u0026(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n\u0026\u0026(this._deactivateAction(n),this._removeInactiveAction(n))}}).prototype._controlInterpolantsResultBuffer=new Float32Array(1);class Qo{constructor(t){\"string\"==typeof t\u0026\u0026(console.warn(\"THREE.Uniform: Type parameter is no longer needed.\"),t=arguments[1]),this.value=t}clone(){return new Qo(void 0===this.value.clone?this.value:this.value.clone())}}(class extends Or{constructor(t,e,n=1){super(t,e),this.meshPerAttribute=n}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}clone(t){const e=super.clone(t);return e.meshPerAttribute=this.meshPerAttribute,e}toJSON(t){const e=super.toJSON(t);return e.isInstancedInterleavedBuffer=!0,e.meshPerAttribute=this.meshPerAttribute,e}}).prototype.isInstancedInterleavedBuffer=!0;(class{constructor(t,e,n,i,r){this.buffer=t,this.type=e,this.itemSize=n,this.elementSize=i,this.count=r,this.version=0}set needsUpdate(t){!0===t\u0026\u0026this.version++}setBuffer(t){return this.buffer=t,this}setType(t,e){return this.type=t,this.elementSize=e,this}setItemSize(t){return this.itemSize=t,this}setCount(t){return this.count=t,this}}).prototype.isGLBufferAttribute=!0;const $o=new p;class tl{constructor(t=new p(1/0,1/0),e=new p(-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e\u003cn;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=$o.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x\u003cthis.min.x||this.max.y\u003cthis.min.y}getCenter(t){return this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x\u003cthis.min.x||t.x\u003ethis.max.x||t.y\u003cthis.min.y||t.y\u003ethis.max.y)}containsBox(t){return this.min.x\u003c=t.min.x\u0026\u0026t.max.x\u003c=this.max.x\u0026\u0026this.min.y\u003c=t.min.y\u0026\u0026t.max.y\u003c=this.max.y}getParameter(t,e){return e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x\u003cthis.min.x||t.min.x\u003ethis.max.x||t.max.y\u003cthis.min.y||t.min.y\u003ethis.max.y)}clampPoint(t,e){return e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return $o.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)\u0026\u0026t.max.equals(this.max)}}tl.prototype.isBox2=!0;const el=new H,nl=new H;const il=new H,rl=new gt,sl=new gt;const al=new ArrayBuffer(4),ol=(new Float32Array(al),new Uint32Array(al),new Uint32Array(512)),ll=new Uint32Array(512);for(let t=0;t\u003c256;++t){const e=t-127;e\u003c-27?(ol[t]=0,ol[256|t]=32768,ll[t]=24,ll[256|t]=24):e\u003c-14?(ol[t]=1024\u003e\u003e-e-14,ol[256|t]=1024\u003e\u003e-e-14|32768,ll[t]=-e-1,ll[256|t]=-e-1):e\u003c=15?(ol[t]=e+15\u003c\u003c10,ol[256|t]=e+15\u003c\u003c10|32768,ll[t]=13,ll[256|t]=13):e\u003c128?(ol[t]=31744,ol[256|t]=64512,ll[t]=24,ll[256|t]=24):(ol[t]=31744,ol[256|t]=64512,ll[t]=13,ll[256|t]=13)}const cl=new Uint32Array(2048),hl=new Uint32Array(64),ul=new Uint32Array(64);for(let t=1;t\u003c1024;++t){let e=t\u003c\u003c13,n=0;for(;0==(8388608\u0026e);)e\u003c\u003c=1,n-=8388608;e\u0026=-8388609,n+=947912704,cl[t]=e|n}for(let t=1024;t\u003c2048;++t)cl[t]=939524096+(t-1024\u003c\u003c13);for(let t=1;t\u003c31;++t)hl[t]=t\u003c\u003c23;hl[31]=1199570944,hl[32]=2147483648;for(let t=33;t\u003c63;++t)hl[t]=2147483648+(t-32\u003c\u003c23);hl[63]=3347054592;for(let t=1;t\u003c64;++t)32!==t\u0026\u0026(ul[t]=1024);Is.create=function(t,e){return console.log(\"THREE.Curve.create() has been deprecated\"),t.prototype=Object.create(Is.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},$s.prototype.fromPoints=function(t){return console.warn(\"THREE.Path: .fromPoints() has been renamed to .setFromPoints().\"),this.setFromPoints(t)};(class extends ws{constructor(t=10,e=10,n=4473924,i=8947848){n=new A(n),i=new A(i);const r=e/2,s=t/e,a=t/2,o=[],l=[];for(let t=0,c=0,h=-a;t\u003c=e;t++,h+=s){o.push(-a,0,h,a,0,h),o.push(h,0,-a,h,0,a);const e=t===r?n:i;e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3}const c=new me;c.setAttribute(\"position\",new oe(o,3)),c.setAttribute(\"color\",new oe(l,3));super(c,new fs({vertexColors:!0,toneMapped:!1})),this.type=\"GridHelper\"}}).prototype.setColors=function(){console.error(\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\")},class extends ws{constructor(t){const e=function t(e){const n=[];!0===e.isBone\u0026\u0026n.push(e);for(let i=0;i\u003ce.children.length;i++)n.push.apply(n,t(e.children[i]));return n}(t),n=new me,i=[],r=[],s=new A(0,0,1),a=new A(0,1,0);for(let t=0;t\u003ce.length;t++){const n=e[t];n.parent\u0026\u0026n.parent.isBone\u0026\u0026(i.push(0,0,0),i.push(0,0,0),r.push(s.r,s.g,s.b),r.push(a.r,a.g,a.b))}n.setAttribute(\"position\",new oe(i,3)),n.setAttribute(\"color\",new oe(r,3));super(n,new fs({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0})),this.type=\"SkeletonHelper\",this.isSkeletonHelper=!0,this.root=t,this.bones=e,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(t){const e=this.bones,n=this.geometry,i=n.getAttribute(\"position\");sl.copy(this.root.matrixWorld).invert();for(let t=0,n=0;t\u003ce.length;t++){const r=e[t];r.parent\u0026\u0026r.parent.isBone\u0026\u0026(rl.multiplyMatrices(sl,r.matrixWorld),il.setFromMatrixPosition(rl),i.setXYZ(n,il.x,il.y,il.z),rl.multiplyMatrices(sl,r.parent.matrixWorld),il.setFromMatrixPosition(rl),i.setXYZ(n+1,il.x,il.y,il.z),n+=2)}n.getAttribute(\"position\").needsUpdate=!0,super.updateMatrixWorld(t)}}.prototype.update=function(){console.error(\"THREE.SkeletonHelper: update() no longer needs to be called.\")};oo.prototype.extractUrlBase=function(t){return console.warn(\"THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.\"),Io.extractUrlBase(t)},oo.Handlers={add:function(){console.error(\"THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.\")},get:function(){console.error(\"THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.\")}};tl.prototype.center=function(t){return console.warn(\"THREE.Box2: .center() has been renamed to .getCenter().\"),this.getCenter(t)},tl.prototype.empty=function(){return console.warn(\"THREE.Box2: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},tl.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},tl.prototype.size=function(t){return console.warn(\"THREE.Box2: .size() has been renamed to .getSize().\"),this.getSize(t)},V.prototype.center=function(t){return console.warn(\"THREE.Box3: .center() has been renamed to .getCenter().\"),this.getCenter(t)},V.prototype.empty=function(){return console.warn(\"THREE.Box3: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},V.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},V.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},V.prototype.size=function(t){return console.warn(\"THREE.Box3: .size() has been renamed to .getSize().\"),this.getSize(t)},Tt.prototype.toVector3=function(){console.error(\"THREE.Euler: .toVector3() has been removed. Use Vector3.setFromEuler() instead\")},ot.prototype.empty=function(){return console.warn(\"THREE.Sphere: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},Ke.prototype.setFromMatrix=function(t){return console.warn(\"THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().\"),this.setFromProjectionMatrix(t)},class{constructor(t=new H,e=new H){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){el.subVectors(t,this.start),nl.subVectors(this.end,this.start);const n=nl.dot(nl);let i=nl.dot(el)/n;return e\u0026\u0026(i=l(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)\u0026\u0026t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}.prototype.center=function(t){return console.warn(\"THREE.Line3: .center() has been renamed to .getCenter().\"),this.getCenter(t)},f.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},f.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},f.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix3: .multiplyVector3Array() has been removed.\")},f.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},f.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix3: .applyToVector3Array() has been removed.\")},f.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},gt.prototype.extractPosition=function(t){return console.warn(\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\"),this.copyPosition(t)},gt.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},gt.prototype.getPosition=function(){return console.warn(\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\"),(new H).setFromMatrixColumn(this,3)},gt.prototype.setRotationFromQuaternion=function(t){return console.warn(\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\"),this.makeRotationFromQuaternion(t)},gt.prototype.multiplyToArray=function(){console.warn(\"THREE.Matrix4: .multiplyToArray() has been removed.\")},gt.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},gt.prototype.multiplyVector4=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},gt.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix4: .multiplyVector3Array() has been removed.\")},gt.prototype.rotateAxis=function(t){console.warn(\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\"),t.transformDirection(this)},gt.prototype.crossVector=function(t){return console.warn(\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},gt.prototype.translate=function(){console.error(\"THREE.Matrix4: .translate() has been removed.\")},gt.prototype.rotateX=function(){console.error(\"THREE.Matrix4: .rotateX() has been removed.\")},gt.prototype.rotateY=function(){console.error(\"THREE.Matrix4: .rotateY() has been removed.\")},gt.prototype.rotateZ=function(){console.error(\"THREE.Matrix4: .rotateZ() has been removed.\")},gt.prototype.rotateByAxis=function(){console.error(\"THREE.Matrix4: .rotateByAxis() has been removed.\")},gt.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},gt.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix4: .applyToVector3Array() has been removed.\")},gt.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn(\"THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.\"),this.makePerspective(t,e,i,n,r,s)},gt.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},Je.prototype.isIntersectionLine=function(t){return console.warn(\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\"),this.intersectsLine(t)},U.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\"),t.applyQuaternion(this)},U.prototype.inverse=function(){return console.warn(\"THREE.Quaternion: .inverse() has been renamed to invert().\"),this.invert()},mt.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},mt.prototype.isIntersectionPlane=function(t){return console.warn(\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\"),this.intersectsPlane(t)},mt.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},Qt.prototype.area=function(){return console.warn(\"THREE.Triangle: .area() has been renamed to .getArea().\"),this.getArea()},Qt.prototype.barycoordFromPoint=function(t,e){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),this.getBarycoord(t,e)},Qt.prototype.midpoint=function(t){return console.warn(\"THREE.Triangle: .midpoint() has been renamed to .getMidpoint().\"),this.getMidpoint(t)},Qt.prototypenormal=function(t){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),this.getNormal(t)},Qt.prototype.plane=function(t){return console.warn(\"THREE.Triangle: .plane() has been renamed to .getPlane().\"),this.getPlane(t)},Qt.barycoordFromPoint=function(t,e,n,i,r){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),Qt.getBarycoord(t,e,n,i,r)},Qt.normal=function(t,e,n,i){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),Qt.getNormal(t,e,n,i)},ta.prototype.extractAllPoints=function(t){return console.warn(\"THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.\"),this.extractPoints(t)},ta.prototype.extrude=function(t){return console.warn(\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\"),new Ca(this,t)},ta.prototype.makeGeometry=function(t){return console.warn(\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\"),new Pa(this,t)},p.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},p.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},p.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},H.prototype.setEulerFromRotationMatrix=function(){console.error(\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\")},H.prototype.setEulerFromQuaternion=function(){console.error(\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\")},H.prototype.getPositionFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\"),this.setFromMatrixPosition(t)},H.prototype.getScaleFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\"),this.setFromMatrixScale(t)},H.prototype.getColumnFromMatrix=function(t,e){return console.warn(\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\"),this.setFromMatrixColumn(e,t)},H.prototype.applyProjection=function(t){return console.warn(\"THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.\"),this.applyMatrix4(t)},H.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},H.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},H.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},N.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},N.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},Gt.prototype.getChildByName=function(t){return console.warn(\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\"),this.getObjectByName(t)},Gt.prototype.renderDepth=function(){console.warn(\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\")},Gt.prototype.translate=function(t,e){return console.warn(\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\"),this.translateOnAxis(e,t)},Gt.prototype.getWorldRotation=function(){console.error(\"THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.\")},Gt.prototype.applyMatrix=function(t){return console.warn(\"THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(Gt.prototype,{eulerOrder:{get:function(){return console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order},set:function(t){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order=t}},useQuaternion:{get:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")},set:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")}}}),Ie.prototype.setDrawMode=function(){console.error(\"THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")},Object.defineProperties(Ie.prototype,{drawMode:{get:function(){return console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.\"),0},set:function(){console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")}}}),ss.prototype.initBones=function(){console.error(\"THREE.SkinnedMesh: initBones() has been removed.\")},Ge.prototype.setLens=function(t,e){console.warn(\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\"),void 0!==e\u0026\u0026(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(fo.prototype,{onlyShadow:{set:function(){console.warn(\"THREE.Light: .onlyShadow has been removed.\")}},shadowCameraFov:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\"),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn(\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\"),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn(\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\"),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn(\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\"),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn(\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\"),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn(\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\"),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\"),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn(\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\")}},shadowBias:{set:function(t){console.warn(\"THREE.Light: .shadowBias is now .shadow.bias.\"),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn(\"THREE.Light: .shadowDarkness has been removed.\")}},shadowMapWidth:{set:function(t){console.warn(\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\"),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn(\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\"),this.shadow.mapSize.height=t}}}),Object.defineProperties(re.prototype,{length:{get:function(){return console.warn(\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\"),this.array.length}},dynamic:{get:function(){return console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),35048===this.usage},set:function(){console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),this.setUsage(35048)}}}),re.prototype.setDynamic=function(t){return console.warn(\"THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?35048:35044),this},re.prototype.copyIndicesArray=function(){console.error(\"THREE.BufferAttribute: .copyIndicesArray() has been removed.\")},re.prototype.setArray=function(){console.error(\"THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},me.prototype.addIndex=function(t){console.warn(\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\"),this.setIndex(t)},me.prototype.addAttribute=function(t,e){return console.warn(\"THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().\"),e\u0026\u0026e.isBufferAttribute||e\u0026\u0026e.isInterleavedBufferAttribute?\"index\"===t?(console.warn(\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\"),this.setIndex(e),this):this.setAttribute(t,e):(console.warn(\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\"),this.setAttribute(t,new re(arguments[1],arguments[2])))},me.prototype.addDrawCall=function(t,e,n){void 0!==n\u0026\u0026console.warn(\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\"),console.warn(\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\"),this.addGroup(t,e)},me.prototype.clearDrawCalls=function(){console.warn(\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\"),this.clearGroups()},me.prototype.computeOffsets=function(){console.warn(\"THREE.BufferGeometry: .computeOffsets() has been removed.\")},me.prototype.removeAttribute=function(t){return console.warn(\"THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().\"),this.deleteAttribute(t)},me.prototype.applyMatrix=function(t){return console.warn(\"THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(me.prototype,{drawcalls:{get:function(){return console.error(\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\"),this.groups}},offsets:{get:function(){return console.warn(\"THREE.BufferGeometry: .offsets has been renamed to .groups.\"),this.groups}}}),Or.prototype.setDynamic=function(t){return console.warn(\"THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?35048:35044),this},Or.prototype.setArray=function(){console.error(\"THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},Ca.prototype.getArrays=function(){console.error(\"THREE.ExtrudeGeometry: .getArrays() has been removed.\")},Ca.prototype.addShapeList=function(){console.error(\"THREE.ExtrudeGeometry: .addShapeList() has been removed.\")},Ca.prototype.addShape=function(){console.error(\"THREE.ExtrudeGeometry: .addShape() has been removed.\")},Nr.prototype.dispose=function(){console.error(\"THREE.Scene: .dispose() has been removed.\")},Qo.prototype.onUpdate=function(){return console.warn(\"THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.\"),this},Object.defineProperties(te.prototype,{wrapAround:{get:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")},set:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")}},overdraw:{get:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")},set:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")}},wrapRGB:{get:function(){return console.warn(\"THREE.Material: .wrapRGB has been removed.\"),new A}},shading:{get:function(){console.error(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\")},set:function(t){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=1===t}},stencilMask:{get:function(){return console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask},set:function(t){console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask=t}},vertexTangents:{get:function(){console.warn(\"THREE.\"+this.type+\": .vertexTangents has been removed.\")},set:function(){console.warn(\"THREE.\"+this.type+\": .vertexTangents has been removed.\")}}}),Object.defineProperties(He.prototype,{derivatives:{get:function(){return console.warn(\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives},set:function(t){console.warn(\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives=t}}}),Pr.prototype.clearTarget=function(t,e,n,i){console.warn(\"THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.\"),this.setRenderTarget(t),this.clear(e,n,i)},Pr.prototype.animate=function(t){console.warn(\"THREE.WebGLRenderer: .animate() is now .setAnimationLoop().\"),this.setAnimationLoop(t)},Pr.prototype.getCurrentRenderTarget=function(){return console.warn(\"THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().\"),this.getRenderTarget()},Pr.prototype.getMaxAnisotropy=function(){return console.warn(\"THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().\"),this.capabilities.getMaxAnisotropy()},Pr.prototype.getPrecision=function(){return console.warn(\"THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.\"),this.capabilities.precision},Pr.prototype.resetGLState=function(){return console.warn(\"THREE.WebGLRenderer: .resetGLState() is now .state.reset().\"),this.state.reset()},Pr.prototype.supportsFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\"),this.extensions.get(\"OES_texture_float\")},Pr.prototype.supportsHalfFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\"),this.extensions.get(\"OES_texture_half_float\")},Pr.prototype.supportsStandardDerivatives=function(){return console.warn(\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\"),this.extensions.get(\"OES_standard_derivatives\")},Pr.prototype.supportsCompressedTextureS3TC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_s3tc\")},Pr.prototype.supportsCompressedTexturePVRTC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_pvrtc\")},Pr.prototype.supportsBlendMinMax=function(){return console.warn(\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\"),this.extensions.get(\"EXT_blend_minmax\")},Pr.prototype.supportsVertexTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\"),this.capabilities.vertexTextures},Pr.prototype.supportsInstancedArrays=function(){return console.warn(\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\"),this.extensions.get(\"ANGLE_instanced_arrays\")},Pr.prototype.enableScissorTest=function(t){console.warn(\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\"),this.setScissorTest(t)},Pr.prototype.initMaterial=function(){console.warn(\"THREE.WebGLRenderer: .initMaterial() has been removed.\")},Pr.prototype.addPrePlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\")},Pr.prototype.addPostPlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\")},Pr.prototype.updateShadowMap=function(){console.warn(\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\")},Pr.prototype.setFaceCulling=function(){console.warn(\"THREE.WebGLRenderer: .setFaceCulling() has been removed.\")},Pr.prototype.allocTextureUnit=function(){console.warn(\"THREE.WebGLRenderer: .allocTextureUnit() has been removed.\")},Pr.prototype.setTexture=function(){console.warn(\"THREE.WebGLRenderer: .setTexture() has been removed.\")},Pr.prototype.setTexture2D=function(){console.warn(\"THREE.WebGLRenderer: .setTexture2D() has been removed.\")},Pr.prototype.setTextureCube=function(){console.warn(\"THREE.WebGLRenderer: .setTextureCube() has been removed.\")},Pr.prototype.getActiveMipMapLevel=function(){return console.warn(\"THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().\"),this.getActiveMipmapLevel()},Object.defineProperties(Pr.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\"),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\"),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")}},context:{get:function(){return console.warn(\"THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.\"),this.getContext()}},vr:{get:function(){return console.warn(\"THREE.WebGLRenderer: .vr has been renamed to .xr\"),this.xr}},gammaInput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\"),!1},set:function(){console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\")}},gammaOutput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),!1},set:function(t){console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),this.outputEncoding=!0===t?3001:3e3}},toneMappingWhitePoint:{get:function(){return console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\"),1},set:function(){console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\")}},gammaFactor:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaFactor has been removed.\"),2},set:function(){console.warn(\"THREE.WebGLRenderer: .gammaFactor has been removed.\")}}}),Object.defineProperties(_r.prototype,{cullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")}},renderReverseSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")}},renderSingleSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")}}});Object.defineProperties(O.prototype,{wrapS:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy=t}},offset:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset=t}},repeat:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat=t}},format:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format=t}},type:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps=t}}}),Fo.prototype.load=function(t){console.warn(\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\");const e=this;return(new Bo).load(t,(function(t){e.setBuffer(t)})),this},class{constructor(t,e=2048){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=e,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let t=0;const e=this.getFrequencyData();for(let n=0;n\u003ce.length;n++)t+=e[n];return t/e.length}}.prototype.getData=function(){return console.warn(\"THREE.AudioAnalyser: .getData() is now .getFrequencyData().\"),this.getFrequencyData()},Ve.prototype.updateCubeMap=function(t,e){return console.warn(\"THREE.CubeCamera: .updateCubeMap() is now .update().\"),this.update(t,e)},Ve.prototype.clear=function(t,e,n,i){return console.warn(\"THREE.CubeCamera: .clear() is now .renderTarget.clear().\"),this.renderTarget.clear(t,e,n,i)},C.crossOrigin=void 0,C.loadTexture=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\");const r=new po;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e\u0026\u0026(s.mapping=e),s},C.loadTextureCube=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\");const r=new uo;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e\u0026\u0026(s.mapping=e),s},C.loadCompressedTexture=function(){console.error(\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\")},C.loadCompressedTextureCube=function(){console.error(\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\")};\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"register\",{detail:{revision:\"140\"}})),\"undefined\"!=typeof window\u0026\u0026(window.__THREE__?console.warn(\"WARNING: Multiple instances of Three.js being imported.\"):window.__THREE__=\"140\");const dl=n(0),pl=n(1),fl=new Uo,ml=new Nr;ml.background=new A(0,0,0);const gl=new me,vl=[],xl=[],yl=[],_l=[],bl=[],Ml=[],wl=[],Sl=[],El=[],Tl=[];let Al,Rl=0;const Cl={rect:{time:{type:\"f\",value:1},resolution:{type:\"v2\",value:new p},uWidth:{value:1},uHeight:{value:1},duration:{type:\"f\",value:6}},bg:{time:{type:\"f\",value:1},resolution:{type:\"v2\",value:new p}}};let Ll=[0],Pl=!1;const Dl=(t,e,n,i,r)=\u003ei+(t-e)/(n-e)*(r-i),Il=new Er,Nl=window.innerWidth/window.innerHeight,Ol=new Ge(45,Nl,1,1e4),zl=window.innerHeight/Math.tan(45*Math.PI/360)/2;Ol.position.z=zl;const Bl=new Pr;document.body.appendChild(Bl.domElement);const Ul=()=\u003e{fl.getDelta();const t=fl.elapsedTime;Pl||(Ll[0]=t),Cl.rect.time.value=Ll[0],Cl.bg.time.value=Ll[0],Al\u0026\u0026Al.update(),Ol.lookAt(new H(0,0,0)),Bl.render(ml,Ol),Pl||requestAnimationFrame(Ul)},Hl=()=\u003e{const t=window.innerWidth,e=window.innerHeight;Fl(t,e)},Fl=(t,e)=\u003e{Ol.aspect=t/e,Ol.updateProjectionMatrix(),Bl.setPixelRatio(window.devicePixelRatio),Bl.setSize(t,e)},Gl=document.getElementById(\"generateImageButton\");Gl.remove();class Vl{constructor(t,e,n,i,r){if(this.x=t,this.y=e,this.w=n,this.h=i,this.age=r,this.children=[],this.offset=Math.floor(50*Math.random()+1),this.ratio=Math.random(),this.targetRatio=this.ratio,this.shouldRender=!1,this.id=-1,this.impulse=0,this.age\u003c7){const t=this.age+1;if(this.age%2==0){const e=this.w*this.ratio,n=this.w*(1-this.ratio);this.children[0]=new Vl(this.x,this.y,e,this.h,t),this.children[1]=new Vl(this.x+e,this.y,n,this.h,t)}else{const e=this.h*this.ratio,n=this.h*(1-this.ratio);this.children[0]=new Vl(this.x,this.y,this.w,e,t),this.children[1]=new Vl(this.x,this.y+e,this.w,n,t)}}else this.draw(!1)}update(t=null){if(t\u0026\u0026(this.x=t.x,this.y=t.y,this.w=t.w,this.h=t.h,this.impulse=t.impulse),this.children.length\u003e0){const t=Math.abs(this.ratio-this.targetRatio);Math.abs(this.ratio-this.targetRatio)\u003c.001\u0026\u0026(this.targetRatio=Math.random());const e=Math.max(Math.min(4*Math.abs(this.targetRatio-this.ratio),.05),0);if(this.ratio+=(this.targetRatio-this.ratio)*e,this.age%2==0){const e=this.x,n=this.y,i=this.w*this.ratio,r=this.h;this.children[0].update({x:e,y:n,w:i,h:r,impulse:t});const s=e+i,a=n,o=this.w*(1-this.ratio),l=this.h;this.children[1].update({x:s,y:a,w:o,h:l,impulse:t})}else{const e=this.x,n=this.y,i=this.w,r=this.h*this.ratio;this.children[0].update({x:e,y:n,w:i,h:r,impulse:t});const s=this.x,a=this.y+r,o=this.w,l=this.h*(1-this.ratio);this.children[1].update({x:s,y:a,w:o,h:l,impulse:t})}}else this.draw(!0)}draw(t=!1){if(this.shouldRender=!0,t)for(let t=0;t\u003c4;t++){const e=4*this.id+t,n=gl.attributes.position;n.setXYZ(e,this.x,this.y,0),n.needsUpdate=!0;const i=gl.attributes.size;i.setXY(e,this.w,this.h),i.needsUpdate=!0;const r=gl.attributes.ratio;r.setX(e,this.impulse),r.needsUpdate=!0}else{this.id=Rl;for(let t=0;t\u003c4;t++)xl.push(this.x,this.y,0),Sl.push(this.w,this.h),Math.abs(this.w-this.h)\u003c100?El.push(-1):this.w\u003ethis.h?El.push(1):El.push(0),Tl.push(this.ratio);const t={x:Dl(Math.random(),0,1,.7,.8),y:Dl(Math.random(),0,1,.1,.3),z:Dl(Math.random(),0,1,.1,.3)},e=1;for(let n=0;n\u003c4;n++)vl.push(this.id),Ml.push(e,e),wl.push(t.x,t.y,t.z);yl.push(0,0,1,0,1,1,0,1),_l.push(0,0,1,0,1,1,0,1);const n=4*this.id;bl.push(n+0,n+1,n+2,n+2,n+3,n+0),Rl++}}}Al=new Vl(-window.innerWidth/2,-window.innerHeight/2,window.innerWidth,window.innerHeight,0),(()=\u003e{gl.setIndex(bl),gl.setAttribute(\"index\",new se(vl,1)),gl.setAttribute(\"position\",new oe(xl,3)),gl.setAttribute(\"uv\",new se(yl,2)),gl.setAttribute(\"size\",new oe(Sl,2)),gl.setAttribute(\"offset\",new oe(_l,2)),gl.setAttribute(\"padding\",new oe(Ml,2)),gl.setAttribute(\"color\",new oe(wl,3)),gl.setAttribute(\"direction\",new oe(El,1)),gl.setAttribute(\"ratio\",new oe(Tl,1));const t=new Ia({uniforms:Cl.rect,vertexShader:dl,fragmentShader:pl,transparent:!0,blending:1,depthTest:!0,wireframe:!1,glslVersion:\"100\"}),e=new Ie(gl,t);Il.add(e),ml.add(Il)})(),window.addEventListener(\"resize\",Hl),Hl(),Ul()}]);","artId":"ca69t1s3p9fbkmo5rdn0","libraries":[]}],"like":0,"thumbFileName":"ca69t1s3p9fbkmo5rdn0.png","selectedThumbFileName":"ca69t1s3p9fbkmo5rdn0.png","thumbnailFileUrl":"","resourceFileName":"ca69t1s3p9fbkmo5rdn0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmeXRjHAPR134vTEgZk8Rs1joArHCcnfj2sDN2F9KnsngN","resourceType":1,"metadataUrl":"","tags":[{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"chahhbkn70rkl4ca55ig","title":"Warning from Transcendental Cube","description":"\"Transcendental Cube\"(2nd place at GLSL Graphics Compo, #SESSIONS_Party 2023)から警告の演出だけ抜き出してきました。\nhttps://twitter.com/gam0022/status/1653096277184503808","createdAt":1683298478,"updatedAt":1683299451,"user":{"id":"NVlqnemVzqUgPSBOOPTPkVUSXQZ2","customId":"","name":"がむ","biography":"","image":"https://pbs.twimg.com/profile_images/1024640222246535168/D0JhkuoJ_normal.jpg","createdAt":1550901834000,"updatedAt":1712851363371},"codes":[{"id":"chahhbkn70rkl4ca55jg","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"chahhbkn70rkl4ca55ig","libraries":[]},{"id":"chahhbkn70rkl4ca55k0","type":4,"text":"// BEGIN: shadertoy porting template\n// https://gam0022.net/blog/2019/03/04/porting-from-shadertoy-to-glslsandbox/\nprecision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\n#define iResolution resolution\n#define iTime time\n#define iMouse (vec4(mouse, 0.5, 0.5) * resolution.xyxy)\n#define iChannel0 backbuffer\n#define texture texture2D\n\nvoid mainImage(out vec4 fragColor, in vec2 fragCoord);\n\nvoid main(void) {\n vec4 col;\n mainImage(col, gl_FragCoord.xy);\n gl_FragColor = col;\n}\n// END: shadertoy porting template\n\n// consts\nconst float PI = 3.14159265359;\nconst float TAU = 6.28318530718;\nconst float PIH = 1.57079632679;\n\n#define BPM 120.0\n#define beat (iTime * BPM / 60.0)\n#define saturate(x) clamp(x, 0., 1.)\n\n#define INV_SQRT3 0.5773503\n\nfloat beatTau;\nfloat beatPhase;\n\nfloat hash12(vec2 p) {\n vec3 p3 = fract(vec3(p.xyx) * .1031);\n p3 += dot(p3, p3.yzx + 33.33);\n return fract((p3.x + p3.y) * p3.z);\n}\n\nvoid rot(inout vec2 p, float a) { p *= mat2(cos(a), sin(a), -sin(a), cos(a)); }\n\n#define opRep(p, a) p = mod(p, a) - a * .5\n#define phase(x) (floor(x) + .5 + .5 * cos(PI * exp(-5.0 * fract(x))))\n\nvec4 PU; // [ 0 1]\n\n// https://www.shadertoy.com/view/Xd2GR3\n// { 2d cell id, distance to border, distnace to center )\nvec4 hexagon( inout vec2 p ) \n{\n\tvec2 q = vec2( p.x*2.0*INV_SQRT3, p.y + p.x*INV_SQRT3 );\n\t\n\tvec2 pi = floor(q);\n\tvec2 pf = fract(q);\n\n\tfloat v = mod(pi.x + pi.y, 3.0);\n\n\tfloat ca = step(1.0,v);\n\tfloat cb = step(2.0,v);\n\tvec2 ma = step(pf.xy,pf.yx);\n\t\n // distance to borders\n\tfloat e = dot( ma, 1.0-pf.yx + ca*(pf.x+pf.y-1.0) + cb*(pf.yx-2.0*pf.xy) );\n\n\t// distance to center\t\n\tp = vec2( q.x + floor(0.5+p.y/1.5), 4.0*p.y/3.0 )*0.5 + 0.5;\n p = (fract(p) - 0.5)*vec2(1.0,0.85);\n\tfloat f = length( p );\t\t\n\t\n\treturn vec4( pi + ca - cb*ma, e, f );\n}\n\nfloat sdBox( in vec2 p, in vec2 b )\n{\n vec2 d = abs(p)-b;\n return length(max(d,0.0)) + min(max(d.x,d.y),0.0);\n}\n\nfloat warning(vec2 p) {\n vec4 h = hexagon(p);\n \n float f = fract(hash12(h.xy) + beatPhase);\n f = mix(f, saturate(sin(h.x - h.y + 4. * beatPhase)), .5 + .5 * sin(beatTau / 16.));\n float hex = smoothstep( 0.10, 0.11, h.z ) * f;\n\n float mark = 1.;\n float dice = fract(hash12(h.xy) + beatPhase / 4.);\n \n if (dice \u003c .5) {\n float d = sdBox(p, vec2(0.4, dice * 0.75));\n float ph = phase(beat / 2. + f);\n float ss = smoothstep(1.0, 1.05, mod(p.x * 10. + 10. * p.y + 8. * ph, 2.));\n mark = saturate(step(0., d) + ss);\n } else {\n /*\n vec4[] param_array = vec4[](\n vec4(140., 72., 0., 0.),\n vec4(0., 184., 482, 0.),\n vec4(0., 0., 753., 0.),\n vec4(541., 156., 453., 0.),\n vec4(112., 0., 301., 0.),\n vec4(311., 172., 50., 0.),\n vec4(249., 40., 492., 0.),\n vec4(0.)\n );\n */\n \n int i = int(mod(dice * 33.01, 8.));\n vec4 param;\n if (i == 0 ) param = vec4(140., 72., 0., 0.);\n else if (i == 1 ) param = vec4(0., 184., 482, 0.);\n else if (i == 2 ) param = vec4(541., 156., 453., 0.);\n else if (i == 3 ) param = vec4(112., 0., 301., 0.);\n else if (i == 4 ) param = vec4(0., 0., 753., 0.);\n else if (i == 5 ) param = vec4(311., 172., 50., 0.);\n else if (i == 6 ) param = vec4(249., 40., 492., 0.);\n else if (i == 7 ) param = vec4(0.);\n param /= vec2(1200., 675.).xyxy;\n //param = PU;\n vec2 p1 = p - param.xy;\n for(int i = 0; i \u003c 3; i++) {\n p1 = abs(p1 + param.xy) - param.xy;\n rot(p1, TAU * param.z);\n }\n \n float d = sdBox(p1, vec2(0.2, 0.05));\n mark = saturate(smoothstep(0., 0.01, d));\n }\n \n return hex * mark;\n}\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n beatTau = beat * TAU;\n beatPhase = floor(beat / 4.)+(.5+.5*cos(TAU * .5 * exp(-5.0*fract(beat / 4.))));\n PU = abs(iMouse / iResolution.xyxy); // [0 1] zwはマイナスっぽいのでabsをつける\n \n // Normalized pixel coordinates (from 0 to 1)\n vec2 uv = fragCoord/iResolution.xy;\n vec2 pos = (-iResolution.xy + 2.0*fragCoord)/iResolution.y;\n\n // Time varying pixel color\n vec3 col = vec3(1.0, 0, 0) * warning(pos * 5.);\n\n // Output to screen\n fragColor = vec4(col,1.0);\n}","artId":"chahhbkn70rkl4ca55ig","libraries":[]}],"like":0,"thumbFileName":"chahhbkn70rkl4ca55ig.png","selectedThumbFileName":"chahhbkn70rkl4ca55ig.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmVEaddwtueNUXMfGgYjwrdF9SPT8KT8mDrfy4DPgsdALG","resourceFileName":"chahhbkn70rkl4ca55ig.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmV3D8GRyJaHW5p6qjTJUNkvNauKNh4xvsB51VcAcKJnVN","resourceType":3,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdsupp4n70rqdtr2k60g","name":"day1"},{"id":"ch4hvjsn70rhlpf0n46g","name":"CURATION_FREE_2"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"chb8t7cn70rqrj9bq84g.jpg","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1683394271,"updatedAt":1683394272},{"id":"ce9fl7kn70rvflp1dnh0","title":"CURATION FREE Day 7","description":"Artworks displayed at open exhibition \"CURATION FREE\" at NEORT++.\nCheck the page below for the detail.\nhttps://neort.io/challenge/cdq4oe4n70rqdtr2jaf0","user":{"id":"FEBFBVGRlZMDfXhIymp2NcAIyM22","customId":"","name":"NEORT","biography":"Thank you for using NEORT.\nThis is NEORT staff account.","image":"https://pbs.twimg.com/profile_images/1095209921816158208/Yznn0ohE_normal.jpg","createdAt":1551604907000,"updatedAt":1670997369315},"arts":[{"id":"ce6c914n70rh3gntscl0","title":"Festive City","description":"This artwork marks the beginning of my journey into the world of digital art. It mixes geometric motifs sketched on Processing with handmade washi paper textures and kirie papercut motifs. When the individual seamless pattern layers are combined, they create a magical moment on the screen, an example of beauty in diversity and creative experimentation.\n\u003cvideo controls width=\"480\" src=\"https://d32h66pp7fue57.cloudfront.net/attachment/ce6c544n70rh3gntscjg.mp4\" alt=\"ce6c544n70rh3gntscjg.mp4\"\u003e\u003c/video\u003e","createdAt":1670169779,"updatedAt":1670169779,"user":{"id":"ZiqQJxL0L2YBgFZBbwKgSe7UsZ23","customId":"ZiqQJxL0L2YBgFZBbwKgSe7UsZ23","name":"Na","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ZiqQJxL0L2YBgFZBbwKgSe7UsZ23.png","createdAt":1670165478733,"updatedAt":1670170241659},"codes":[],"like":2,"thumbFileName":"","selectedThumbFileName":"ce6c914n70rh3gntscl0.jpg","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmY5vgtn7A5enLQwGUzuf6bqgRwMhwg5hqDSTbeSHf5y4z","resourceFileName":"ce6c914n70rh3gntscl0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmRx4kRM9pxQC4agCcJ8kWFwHZuKCnTJufFUDjBfURQRFT","resourceType":2,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmQBvRmiVA8BQieopFKQ3ts8fsHboCT2afstjmaqXDyQwe","tags":[{"id":"bmjb2ss3p9f7m1g0169g","name":"Processing"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"},{"id":"ce6c9csn70rh3gntscmg","name":"paper"},{"id":"ce6c9csn70rh3gntscn0","name":"Photoshop"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.5,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ce67drkn70rlpj69dndg","title":"HCK/TYO/JPN","description":"","createdAt":1670166071,"updatedAt":1670166071,"user":{"id":"5sAXGaBqBVZ7HPdEHMbBrpLVOLT2","customId":"5sAXGaBqBVZ7HPdEHMbBrpLVOLT2","name":"ARAKAWA Kensuke","biography":"Design Engineer. Born in Morioka City, Iwate Prefecture. Specializes in real-time data visualization and interactive exhibits from the perspective of information design and design engineering, and conducts production and research.","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/5sAXGaBqBVZ7HPdEHMbBrpLVOLT2.jpg","createdAt":1567499396000,"updatedAt":1726406393395},"codes":[{"id":"ce67dt4n70rlpj69dneg","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n \u003cmeta charset=\"UTF-8\" /\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" /\u003e\n \u003ctitle\u003eHCK/TYO/JPN\u003c/title\u003e\n \u003clink rel=\"stylesheet\" href=\"https://unpkg.com/maplibre-gl@1.14.0/dist/maplibre-gl.css\" /\u003e\n \u003cscript src=\"https://unpkg.com/maplibre-gl@1.14.0/dist/maplibre-gl.js\"\u003e\u003c/script\u003e\n \u003cscript type=\"module\" crossorigin src=\"https://www.kalium.net/hck-tyo-jpn/assets/index.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" href=\"https://www.kalium.net/hck-tyo-jpn/assets/index.css\"\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e\n \u003cdiv id=\"app\"\u003e\u003c/div\u003e\n \u003ccanvas id=\"cacheCanvas\"\u003e\u003c/canvas\u003e\n \n\n\u003c/body\u003e\n\n\u003c/html\u003e","artId":"ce67drkn70rlpj69dndg","libraries":[]},{"id":"ce67dt4n70rlpj69dnf0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce67drkn70rlpj69dndg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce67dt4n70rlpj69dnfg","type":2,"text":"","artId":"ce67drkn70rlpj69dndg","libraries":[]}],"like":0,"thumbFileName":"ce67drkn70rlpj69dndg.png","selectedThumbFileName":"ce67drkn70rlpj69dndg.png","thumbnailFileUrl":"","resourceFileName":"ce67drkn70rlpj69dndg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUGJrYF8vb9vX2ZvmSGXoAxJDxY1LK3fGzAo18VNKxN1p","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce6ba9sn70rh3gntsbp0","title":"The Model Girl","description":"She’s the model girl who was created only for a garment illustration. But now she exists all by herself. The artist hopes to bring each model girl another life by enlarging and representing her identity in NFT conversion.\n\nEach individual is the best evidence of their time.\n\nYou are iconic.\n\nHand Drawing + Adobe Illustrator\n\nhttps://www.binance.com/en/nft/item/37036096","createdAt":1670165804,"updatedAt":1670165804,"user":{"id":"TObRaoiDL6NY8EC7vcNBANEuvO92","customId":"TObRaoiDL6NY8EC7vcNBANEuvO92","name":"QiuChen Fan","biography":"drawing✍️ + painting👩🏻‍🎨🫧 traditional/digital\n\nhttps://bio.site/QiuchenFan","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/TObRaoiDL6NY8EC7vcNBANEuvO92.jpg","createdAt":1670163905247,"updatedAt":1728324112953},"codes":[],"like":0,"thumbFileName":"ce6ba9sn70rh3gntsbp0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce6ba9sn70rh3gntsbpg.jpg","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmTZYgJPBcReKhewiwPmdBuC9kovtoBaGVi3C5zs2TiHkA","resourceType":4,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"rgba(255, 255, 255, 1)","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce6anisn70rh3gnts6jg","title":"primitives","description":"","createdAt":1670163414,"updatedAt":1670163414,"user":{"id":"9Bqy2IWae5gAXfMSM4cHStP2dxP2","customId":"r21nomi","name":"NIINOMI","biography":"Creative Coder.\nI mainly use GLSL, WebGL.\nRecently, TouchDesigner, Houdini and Unity.\n\nhttps://niinomi.art","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/9Bqy2IWae5gAXfMSM4cHStP2dxP2.jpg","createdAt":1548912457000,"updatedAt":1735357681608},"codes":[{"id":"ce6anlcn70rh3gnts6kg","type":0,"text":"","artId":"ce6anisn70rh3gnts6jg","libraries":[]},{"id":"ce6anlcn70rh3gnts6l0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce6anisn70rh3gnts6jg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce6anlcn70rh3gnts6lg","type":2,"text":"!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){\"undefined\"!=typeof Symbol\u0026\u0026Symbol.toStringTag\u0026\u0026Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1\u0026e\u0026\u0026(t=n(t)),8\u0026e)return t;if(4\u0026e\u0026\u0026\"object\"==typeof t\u0026\u0026t\u0026\u0026t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:t}),2\u0026e\u0026\u0026\"string\"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t\u0026\u0026t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=2)}([function(t,e,n){\"use strict\";n.r(e),n.d(e,\"ACESFilmicToneMapping\",(function(){return nt})),n.d(e,\"AddEquation\",(function(){return T})),n.d(e,\"AddOperation\",(function(){return Q})),n.d(e,\"AdditiveAnimationBlendMode\",(function(){return qe})),n.d(e,\"AdditiveBlending\",(function(){return b})),n.d(e,\"AlphaFormat\",(function(){return Bt})),n.d(e,\"AlwaysDepth\",(function(){return k})),n.d(e,\"AlwaysStencilFunc\",(function(){return Sn})),n.d(e,\"AmbientLight\",(function(){return Dh})),n.d(e,\"AmbientLightProbe\",(function(){return td})),n.d(e,\"AnimationClip\",(function(){return Iu})),n.d(e,\"AnimationLoader\",(function(){return Gu})),n.d(e,\"AnimationMixer\",(function(){return Cd})),n.d(e,\"AnimationObjectGroup\",(function(){return Ld})),n.d(e,\"AnimationUtils\",(function(){return _u})),n.d(e,\"ArcCurve\",(function(){return Zu})),n.d(e,\"ArrayCamera\",(function(){return qo})),n.d(e,\"ArrowHelper\",(function(){return xp})),n.d(e,\"Audio\",(function(){return hd})),n.d(e,\"AudioAnalyser\",(function(){return vd})),n.d(e,\"AudioContext\",(function(){return Qh})),n.d(e,\"AudioListener\",(function(){return ud})),n.d(e,\"AudioLoader\",(function(){return Kh})),n.d(e,\"AxesHelper\",(function(){return _p})),n.d(e,\"AxisHelper\",(function(){return _f})),n.d(e,\"BackSide\",(function(){return m})),n.d(e,\"BasicDepthPacking\",(function(){return sn})),n.d(e,\"BasicShadowMap\",(function(){return u})),n.d(e,\"BinaryTextureLoader\",(function(){return Tf})),n.d(e,\"Bone\",(function(){return Pl})),n.d(e,\"BooleanKeyframeTrack\",(function(){return Eu})),n.d(e,\"BoundingBoxHelper\",(function(){return bf})),n.d(e,\"Box2\",(function(){return Ud})),n.d(e,\"Box3\",(function(){return ui})),n.d(e,\"Box3Helper\",(function(){return fp})),n.d(e,\"BoxBufferGeometry\",(function(){return Ss})),n.d(e,\"BoxGeometry\",(function(){return Ss})),n.d(e,\"BoxHelper\",(function(){return pp})),n.d(e,\"BufferAttribute\",(function(){return Or})),n.d(e,\"BufferGeometry\",(function(){return rs})),n.d(e,\"BufferGeometryLoader\",(function(){return Uh})),n.d(e,\"ByteType\",(function(){return Tt})),n.d(e,\"Cache\",(function(){return zu})),n.d(e,\"Camera\",(function(){return Rs})),n.d(e,\"CameraHelper\",(function(){return up})),n.d(e,\"CanvasRenderer\",(function(){return Af})),n.d(e,\"CanvasTexture\",(function(){return oc})),n.d(e,\"CatmullRomCurve3\",(function(){return eh})),n.d(e,\"CineonToneMapping\",(function(){return et})),n.d(e,\"CircleBufferGeometry\",(function(){return cc})),n.d(e,\"CircleGeometry\",(function(){return cc})),n.d(e,\"ClampToEdgeWrapping\",(function(){return dt})),n.d(e,\"Clock\",(function(){return rd})),n.d(e,\"Color\",(function(){return Ir})),n.d(e,\"ColorKeyframeTrack\",(function(){return Au})),n.d(e,\"CompressedTexture\",(function(){return ac})),n.d(e,\"CompressedTextureLoader\",(function(){return ku})),n.d(e,\"ConeBufferGeometry\",(function(){return hc})),n.d(e,\"ConeGeometry\",(function(){return hc})),n.d(e,\"CubeCamera\",(function(){return Ps})),n.d(e,\"CubeReflectionMapping\",(function(){return st})),n.d(e,\"CubeRefractionMapping\",(function(){return at})),n.d(e,\"CubeTexture\",(function(){return Ds})),n.d(e,\"CubeTextureLoader\",(function(){return Wu})),n.d(e,\"CubeUVReflectionMapping\",(function(){return ct})),n.d(e,\"CubeUVRefractionMapping\",(function(){return ut})),n.d(e,\"CubicBezierCurve\",(function(){return sh})),n.d(e,\"CubicBezierCurve3\",(function(){return ah})),n.d(e,\"CubicInterpolant\",(function(){return wu})),n.d(e,\"CullFaceBack\",(function(){return o})),n.d(e,\"CullFaceFront\",(function(){return l})),n.d(e,\"CullFaceFrontBack\",(function(){return c})),n.d(e,\"CullFaceNone\",(function(){return a})),n.d(e,\"Curve\",(function(){return Xu})),n.d(e,\"CurvePath\",(function(){return ph})),n.d(e,\"CustomBlending\",(function(){return S})),n.d(e,\"CustomToneMapping\",(function(){return it})),n.d(e,\"CylinderBufferGeometry\",(function(){return uc})),n.d(e,\"CylinderGeometry\",(function(){return uc})),n.d(e,\"Cylindrical\",(function(){return Fd})),n.d(e,\"DataTexture\",(function(){return Dl})),n.d(e,\"DataTexture2DArray\",(function(){return ia})),n.d(e,\"DataTexture3D\",(function(){return ra})),n.d(e,\"DataTextureLoader\",(function(){return ju})),n.d(e,\"DataUtils\",(function(){return Mp})),n.d(e,\"DecrementStencilOp\",(function(){return pn})),n.d(e,\"DecrementWrapStencilOp\",(function(){return mn})),n.d(e,\"DefaultLoadingManager\",(function(){return Ou})),n.d(e,\"DepthFormat\",(function(){return kt})),n.d(e,\"DepthStencilFormat\",(function(){return Vt})),n.d(e,\"DepthTexture\",(function(){return lc})),n.d(e,\"DirectionalLight\",(function(){return Ph})),n.d(e,\"DirectionalLightHelper\",(function(){return op})),n.d(e,\"DiscreteInterpolant\",(function(){return Su})),n.d(e,\"DodecahedronBufferGeometry\",(function(){return pc})),n.d(e,\"DodecahedronGeometry\",(function(){return pc})),n.d(e,\"DoubleSide\",(function(){return g})),n.d(e,\"DstAlphaFactor\",(function(){return B})),n.d(e,\"DstColorFactor\",(function(){return F})),n.d(e,\"DynamicBufferAttribute\",(function(){return uf})),n.d(e,\"DynamicCopyUsage\",(function(){return Dn})),n.d(e,\"DynamicDrawUsage\",(function(){return En})),n.d(e,\"DynamicReadUsage\",(function(){return Rn})),n.d(e,\"EdgesGeometry\",(function(){return yc})),n.d(e,\"EdgesHelper\",(function(){return wf})),n.d(e,\"EllipseCurve\",(function(){return Yu})),n.d(e,\"EqualDepth\",(function(){return j})),n.d(e,\"EqualStencilFunc\",(function(){return xn})),n.d(e,\"EquirectangularReflectionMapping\",(function(){return ot})),n.d(e,\"EquirectangularRefractionMapping\",(function(){return lt})),n.d(e,\"Euler\",(function(){return Yi})),n.d(e,\"EventDispatcher\",(function(){return Bn})),n.d(e,\"ExtrudeBufferGeometry\",(function(){return Xc})),n.d(e,\"ExtrudeGeometry\",(function(){return Xc})),n.d(e,\"FaceColors\",(function(){return Kp})),n.d(e,\"FileLoader\",(function(){return Uu})),n.d(e,\"FlatShading\",(function(){return v})),n.d(e,\"Float16BufferAttribute\",(function(){return jr})),n.d(e,\"Float32Attribute\",(function(){return yf})),n.d(e,\"Float32BufferAttribute\",(function(){return qr})),n.d(e,\"Float64Attribute\",(function(){return xf})),n.d(e,\"Float64BufferAttribute\",(function(){return Xr})),n.d(e,\"FloatType\",(function(){return Ct})),n.d(e,\"Fog\",(function(){return el})),n.d(e,\"FogExp2\",(function(){return tl})),n.d(e,\"Font\",(function(){return Xh})),n.d(e,\"FontLoader\",(function(){return Zh})),n.d(e,\"FrontSide\",(function(){return f})),n.d(e,\"Frustum\",(function(){return Bs})),n.d(e,\"GLBufferAttribute\",(function(){return Id})),n.d(e,\"GLSL1\",(function(){return Nn})),n.d(e,\"GLSL3\",(function(){return zn})),n.d(e,\"GammaEncoding\",(function(){return Ke})),n.d(e,\"GreaterDepth\",(function(){return X})),n.d(e,\"GreaterEqualDepth\",(function(){return q})),n.d(e,\"GreaterEqualStencilFunc\",(function(){return Mn})),n.d(e,\"GreaterStencilFunc\",(function(){return bn})),n.d(e,\"GridHelper\",(function(){return np})),n.d(e,\"Group\",(function(){return Xo})),n.d(e,\"HalfFloatType\",(function(){return Pt})),n.d(e,\"HemisphereLight\",(function(){return vh})),n.d(e,\"HemisphereLightHelper\",(function(){return ep})),n.d(e,\"HemisphereLightProbe\",(function(){return $h})),n.d(e,\"IcosahedronBufferGeometry\",(function(){return Zc})),n.d(e,\"IcosahedronGeometry\",(function(){return Zc})),n.d(e,\"ImageBitmapLoader\",(function(){return jh})),n.d(e,\"ImageLoader\",(function(){return Vu})),n.d(e,\"ImageUtils\",(function(){return Kn})),n.d(e,\"ImmediateRenderObject\",(function(){return Wd})),n.d(e,\"IncrementStencilOp\",(function(){return dn})),n.d(e,\"IncrementWrapStencilOp\",(function(){return fn})),n.d(e,\"InstancedBufferAttribute\",(function(){return Hh})),n.d(e,\"InstancedBufferGeometry\",(function(){return Fh})),n.d(e,\"InstancedInterleavedBuffer\",(function(){return Dd})),n.d(e,\"InstancedMesh\",(function(){return Ul})),n.d(e,\"Int16Attribute\",(function(){return ff})),n.d(e,\"Int16BufferAttribute\",(function(){return Gr})),n.d(e,\"Int32Attribute\",(function(){return gf})),n.d(e,\"Int32BufferAttribute\",(function(){return Vr})),n.d(e,\"Int8Attribute\",(function(){return hf})),n.d(e,\"Int8BufferAttribute\",(function(){return Fr})),n.d(e,\"IntType\",(function(){return Lt})),n.d(e,\"InterleavedBuffer\",(function(){return il})),n.d(e,\"InterleavedBufferAttribute\",(function(){return sl})),n.d(e,\"Interpolant\",(function(){return bu})),n.d(e,\"InterpolateDiscrete\",(function(){return He})),n.d(e,\"InterpolateLinear\",(function(){return Ue})),n.d(e,\"InterpolateSmooth\",(function(){return Ge})),n.d(e,\"InvertStencilOp\",(function(){return gn})),n.d(e,\"JSONLoader\",(function(){return Lf})),n.d(e,\"KeepStencilOp\",(function(){return un})),n.d(e,\"KeyframeTrack\",(function(){return Tu})),n.d(e,\"LOD\",(function(){return Sl})),n.d(e,\"LatheBufferGeometry\",(function(){return Jc})),n.d(e,\"LatheGeometry\",(function(){return Jc})),n.d(e,\"Layers\",(function(){return Zi})),n.d(e,\"LensFlare\",(function(){return Cf})),n.d(e,\"LessDepth\",(function(){return V})),n.d(e,\"LessEqualDepth\",(function(){return W})),n.d(e,\"LessEqualStencilFunc\",(function(){return _n})),n.d(e,\"LessStencilFunc\",(function(){return yn})),n.d(e,\"Light\",(function(){return gh})),n.d(e,\"LightProbe\",(function(){return zh})),n.d(e,\"Line\",(function(){return Xl})),n.d(e,\"Line3\",(function(){return Vd})),n.d(e,\"LineBasicMaterial\",(function(){return Gl})),n.d(e,\"LineCurve\",(function(){return oh})),n.d(e,\"LineCurve3\",(function(){return lh})),n.d(e,\"LineDashedMaterial\",(function(){return yu})),n.d(e,\"LineLoop\",(function(){return Ql})),n.d(e,\"LinePieces\",(function(){return Jp})),n.d(e,\"LineSegments\",(function(){return Jl})),n.d(e,\"LineStrip\",(function(){return Zp})),n.d(e,\"LinearEncoding\",(function(){return Je})),n.d(e,\"LinearFilter\",(function(){return xt})),n.d(e,\"LinearInterpolant\",(function(){return Mu})),n.d(e,\"LinearMipMapLinearFilter\",(function(){return Mt})),n.d(e,\"LinearMipMapNearestFilter\",(function(){return bt})),n.d(e,\"LinearMipmapLinearFilter\",(function(){return wt})),n.d(e,\"LinearMipmapNearestFilter\",(function(){return _t})),n.d(e,\"LinearToneMapping\",(function(){return $})),n.d(e,\"Loader\",(function(){return Fu})),n.d(e,\"LoaderUtils\",(function(){return Oh})),n.d(e,\"LoadingManager\",(function(){return Bu})),n.d(e,\"LogLuvEncoding\",(function(){return tn})),n.d(e,\"LoopOnce\",(function(){return Be})),n.d(e,\"LoopPingPong\",(function(){return Fe})),n.d(e,\"LoopRepeat\",(function(){return Oe})),n.d(e,\"LuminanceAlphaFormat\",(function(){return Ut})),n.d(e,\"LuminanceFormat\",(function(){return Ht})),n.d(e,\"MOUSE\",(function(){return r})),n.d(e,\"Material\",(function(){return Er})),n.d(e,\"MaterialLoader\",(function(){return Bh})),n.d(e,\"Math\",(function(){return Yn})),n.d(e,\"MathUtils\",(function(){return Yn})),n.d(e,\"Matrix3\",(function(){return Jn})),n.d(e,\"Matrix4\",(function(){return Fi})),n.d(e,\"MaxEquation\",(function(){return R})),n.d(e,\"Mesh\",(function(){return ws})),n.d(e,\"MeshBasicMaterial\",(function(){return Nr})),n.d(e,\"MeshDepthMaterial\",(function(){return Uo})),n.d(e,\"MeshDistanceMaterial\",(function(){return Go})),n.d(e,\"MeshFaceMaterial\",(function(){return tf})),n.d(e,\"MeshLambertMaterial\",(function(){return gu})),n.d(e,\"MeshMatcapMaterial\",(function(){return vu})),n.d(e,\"MeshNormalMaterial\",(function(){return mu})),n.d(e,\"MeshPhongMaterial\",(function(){return pu})),n.d(e,\"MeshPhysicalMaterial\",(function(){return du})),n.d(e,\"MeshStandardMaterial\",(function(){return hu})),n.d(e,\"MeshToonMaterial\",(function(){return fu})),n.d(e,\"MinEquation\",(function(){return L})),n.d(e,\"MirroredRepeatWrapping\",(function(){return pt})),n.d(e,\"MixOperation\",(function(){return J})),n.d(e,\"MultiMaterial\",(function(){return ef})),n.d(e,\"MultiplyBlending\",(function(){return M})),n.d(e,\"MultiplyOperation\",(function(){return Z})),n.d(e,\"NearestFilter\",(function(){return ft})),n.d(e,\"NearestMipMapLinearFilter\",(function(){return yt})),n.d(e,\"NearestMipMapNearestFilter\",(function(){return gt})),n.d(e,\"NearestMipmapLinearFilter\",(function(){return vt})),n.d(e,\"NearestMipmapNearestFilter\",(function(){return mt})),n.d(e,\"NeverDepth\",(function(){return G})),n.d(e,\"NeverStencilFunc\",(function(){return vn})),n.d(e,\"NoBlending\",(function(){return x})),n.d(e,\"NoColors\",(function(){return Qp})),n.d(e,\"NoToneMapping\",(function(){return K})),n.d(e,\"NormalAnimationBlendMode\",(function(){return je})),n.d(e,\"NormalBlending\",(function(){return _})),n.d(e,\"NotEqualDepth\",(function(){return Y})),n.d(e,\"NotEqualStencilFunc\",(function(){return wn})),n.d(e,\"NumberKeyframeTrack\",(function(){return Lu})),n.d(e,\"Object3D\",(function(){return cr})),n.d(e,\"ObjectLoader\",(function(){return Gh})),n.d(e,\"ObjectSpaceNormalMap\",(function(){return ln})),n.d(e,\"OctahedronBufferGeometry\",(function(){return Qc})),n.d(e,\"OctahedronGeometry\",(function(){return Qc})),n.d(e,\"OneFactor\",(function(){return P})),n.d(e,\"OneMinusDstAlphaFactor\",(function(){return O})),n.d(e,\"OneMinusDstColorFactor\",(function(){return H})),n.d(e,\"OneMinusSrcAlphaFactor\",(function(){return z})),n.d(e,\"OneMinusSrcColorFactor\",(function(){return I})),n.d(e,\"OrthographicCamera\",(function(){return Rh})),n.d(e,\"PCFShadowMap\",(function(){return h})),n.d(e,\"PCFSoftShadowMap\",(function(){return d})),n.d(e,\"PMREMGenerator\",(function(){return Up})),n.d(e,\"ParametricBufferGeometry\",(function(){return Kc})),n.d(e,\"ParametricGeometry\",(function(){return Kc})),n.d(e,\"Particle\",(function(){return rf})),n.d(e,\"ParticleBasicMaterial\",(function(){return of})),n.d(e,\"ParticleSystem\",(function(){return sf})),n.d(e,\"ParticleSystemMaterial\",(function(){return lf})),n.d(e,\"Path\",(function(){return fh})),n.d(e,\"PerspectiveCamera\",(function(){return Cs})),n.d(e,\"Plane\",(function(){return pr})),n.d(e,\"PlaneBufferGeometry\",(function(){return Hs})),n.d(e,\"PlaneGeometry\",(function(){return Hs})),n.d(e,\"PlaneHelper\",(function(){return mp})),n.d(e,\"PointCloud\",(function(){return nf})),n.d(e,\"PointCloudMaterial\",(function(){return af})),n.d(e,\"PointLight\",(function(){return Lh})),n.d(e,\"PointLightHelper\",(function(){return Qd})),n.d(e,\"Points\",(function(){return ic})),n.d(e,\"PointsMaterial\",(function(){return Kl})),n.d(e,\"PolarGridHelper\",(function(){return ip})),n.d(e,\"PolyhedronBufferGeometry\",(function(){return dc})),n.d(e,\"PolyhedronGeometry\",(function(){return dc})),n.d(e,\"PositionalAudio\",(function(){return gd})),n.d(e,\"PropertyBinding\",(function(){return Ad})),n.d(e,\"PropertyMixer\",(function(){return yd})),n.d(e,\"QuadraticBezierCurve\",(function(){return ch})),n.d(e,\"QuadraticBezierCurve3\",(function(){return uh})),n.d(e,\"Quaternion\",(function(){return ai})),n.d(e,\"QuaternionKeyframeTrack\",(function(){return Cu})),n.d(e,\"QuaternionLinearInterpolant\",(function(){return Ru})),n.d(e,\"REVISION\",(function(){return i})),n.d(e,\"RGBADepthPacking\",(function(){return an})),n.d(e,\"RGBAFormat\",(function(){return Ft})),n.d(e,\"RGBAIntegerFormat\",(function(){return Zt})),n.d(e,\"RGBA_ASTC_10x10_Format\",(function(){return ye})),n.d(e,\"RGBA_ASTC_10x5_Format\",(function(){return me})),n.d(e,\"RGBA_ASTC_10x6_Format\",(function(){return ge})),n.d(e,\"RGBA_ASTC_10x8_Format\",(function(){return ve})),n.d(e,\"RGBA_ASTC_12x10_Format\",(function(){return xe})),n.d(e,\"RGBA_ASTC_12x12_Format\",(function(){return _e})),n.d(e,\"RGBA_ASTC_4x4_Format\",(function(){return oe})),n.d(e,\"RGBA_ASTC_5x4_Format\",(function(){return le})),n.d(e,\"RGBA_ASTC_5x5_Format\",(function(){return ce})),n.d(e,\"RGBA_ASTC_6x5_Format\",(function(){return ue})),n.d(e,\"RGBA_ASTC_6x6_Format\",(function(){return he})),n.d(e,\"RGBA_ASTC_8x5_Format\",(function(){return de})),n.d(e,\"RGBA_ASTC_8x6_Format\",(function(){return pe})),n.d(e,\"RGBA_ASTC_8x8_Format\",(function(){return fe})),n.d(e,\"RGBA_BPTC_Format\",(function(){return be})),n.d(e,\"RGBA_ETC2_EAC_Format\",(function(){return ae})),n.d(e,\"RGBA_PVRTC_2BPPV1_Format\",(function(){return ie})),n.d(e,\"RGBA_PVRTC_4BPPV1_Format\",(function(){return ne})),n.d(e,\"RGBA_S3TC_DXT1_Format\",(function(){return Qt})),n.d(e,\"RGBA_S3TC_DXT3_Format\",(function(){return Kt})),n.d(e,\"RGBA_S3TC_DXT5_Format\",(function(){return $t})),n.d(e,\"RGBDEncoding\",(function(){return rn})),n.d(e,\"RGBEEncoding\",(function(){return $e})),n.d(e,\"RGBEFormat\",(function(){return Gt})),n.d(e,\"RGBFormat\",(function(){return Ot})),n.d(e,\"RGBIntegerFormat\",(function(){return Yt})),n.d(e,\"RGBM16Encoding\",(function(){return nn})),n.d(e,\"RGBM7Encoding\",(function(){return en})),n.d(e,\"RGB_ETC1_Format\",(function(){return re})),n.d(e,\"RGB_ETC2_Format\",(function(){return se})),n.d(e,\"RGB_PVRTC_2BPPV1_Format\",(function(){return ee})),n.d(e,\"RGB_PVRTC_4BPPV1_Format\",(function(){return te})),n.d(e,\"RGB_S3TC_DXT1_Format\",(function(){return Jt})),n.d(e,\"RGFormat\",(function(){return qt})),n.d(e,\"RGIntegerFormat\",(function(){return Xt})),n.d(e,\"RawShaderMaterial\",(function(){return uu})),n.d(e,\"Ray\",(function(){return Oi})),n.d(e,\"Raycaster\",(function(){return Nd})),n.d(e,\"RectAreaLight\",(function(){return Ih})),n.d(e,\"RedFormat\",(function(){return Wt})),n.d(e,\"RedIntegerFormat\",(function(){return jt})),n.d(e,\"ReinhardToneMapping\",(function(){return tt})),n.d(e,\"RepeatWrapping\",(function(){return ht})),n.d(e,\"ReplaceStencilOp\",(function(){return hn})),n.d(e,\"ReverseSubtractEquation\",(function(){return A})),n.d(e,\"RingBufferGeometry\",(function(){return $c})),n.d(e,\"RingGeometry\",(function(){return $c})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x10_Format\",(function(){return Ie})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x5_Format\",(function(){return Ce})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x6_Format\",(function(){return Pe})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x8_Format\",(function(){return De})),n.d(e,\"SRGB8_ALPHA8_ASTC_12x10_Format\",(function(){return Ne})),n.d(e,\"SRGB8_ALPHA8_ASTC_12x12_Format\",(function(){return ze})),n.d(e,\"SRGB8_ALPHA8_ASTC_4x4_Format\",(function(){return we})),n.d(e,\"SRGB8_ALPHA8_ASTC_5x4_Format\",(function(){return Me})),n.d(e,\"SRGB8_ALPHA8_ASTC_5x5_Format\",(function(){return Se})),n.d(e,\"SRGB8_ALPHA8_ASTC_6x5_Format\",(function(){return Te})),n.d(e,\"SRGB8_ALPHA8_ASTC_6x6_Format\",(function(){return Ee})),n.d(e,\"SRGB8_ALPHA8_ASTC_8x5_Format\",(function(){return Ae})),n.d(e,\"SRGB8_ALPHA8_ASTC_8x6_Format\",(function(){return Le})),n.d(e,\"SRGB8_ALPHA8_ASTC_8x8_Format\",(function(){return Re})),n.d(e,\"Scene\",(function(){return nl})),n.d(e,\"SceneUtils\",(function(){return Rf})),n.d(e,\"ShaderChunk\",(function(){return Us})),n.d(e,\"ShaderLib\",(function(){return ks})),n.d(e,\"ShaderMaterial\",(function(){return Ls})),n.d(e,\"ShadowMaterial\",(function(){return cu})),n.d(e,\"Shape\",(function(){return mh})),n.d(e,\"ShapeBufferGeometry\",(function(){return tu})),n.d(e,\"ShapeGeometry\",(function(){return tu})),n.d(e,\"ShapePath\",(function(){return qh})),n.d(e,\"ShapeUtils\",(function(){return Wc})),n.d(e,\"ShortType\",(function(){return Et})),n.d(e,\"Skeleton\",(function(){return zl})),n.d(e,\"SkeletonHelper\",(function(){return Jd})),n.d(e,\"SkinnedMesh\",(function(){return Cl})),n.d(e,\"SmoothShading\",(function(){return y})),n.d(e,\"Sphere\",(function(){return Ri})),n.d(e,\"SphereBufferGeometry\",(function(){return eu})),n.d(e,\"SphereGeometry\",(function(){return eu})),n.d(e,\"Spherical\",(function(){return Od})),n.d(e,\"SphericalHarmonics3\",(function(){return Nh})),n.d(e,\"SplineCurve\",(function(){return hh})),n.d(e,\"SpotLight\",(function(){return Mh})),n.d(e,\"SpotLightHelper\",(function(){return qd})),n.d(e,\"Sprite\",(function(){return _l})),n.d(e,\"SpriteMaterial\",(function(){return al})),n.d(e,\"SrcAlphaFactor\",(function(){return N})),n.d(e,\"SrcAlphaSaturateFactor\",(function(){return U})),n.d(e,\"SrcColorFactor\",(function(){return D})),n.d(e,\"StaticCopyUsage\",(function(){return Pn})),n.d(e,\"StaticDrawUsage\",(function(){return Tn})),n.d(e,\"StaticReadUsage\",(function(){return Ln})),n.d(e,\"StereoCamera\",(function(){return id})),n.d(e,\"StreamCopyUsage\",(function(){return In})),n.d(e,\"StreamDrawUsage\",(function(){return An})),n.d(e,\"StreamReadUsage\",(function(){return Cn})),n.d(e,\"StringKeyframeTrack\",(function(){return Pu})),n.d(e,\"SubtractEquation\",(function(){return E})),n.d(e,\"SubtractiveBlending\",(function(){return w})),n.d(e,\"TOUCH\",(function(){return s})),n.d(e,\"TangentSpaceNormalMap\",(function(){return on})),n.d(e,\"TetrahedronBufferGeometry\",(function(){return nu})),n.d(e,\"TetrahedronGeometry\",(function(){return nu})),n.d(e,\"TextBufferGeometry\",(function(){return iu})),n.d(e,\"TextGeometry\",(function(){return iu})),n.d(e,\"Texture\",(function(){return ti})),n.d(e,\"TextureLoader\",(function(){return qu})),n.d(e,\"TorusBufferGeometry\",(function(){return ru})),n.d(e,\"TorusGeometry\",(function(){return ru})),n.d(e,\"TorusKnotBufferGeometry\",(function(){return su})),n.d(e,\"TorusKnotGeometry\",(function(){return su})),n.d(e,\"Triangle\",(function(){return Sr})),n.d(e,\"TriangleFanDrawMode\",(function(){return Ze})),n.d(e,\"TriangleStripDrawMode\",(function(){return Ye})),n.d(e,\"TrianglesDrawMode\",(function(){return Xe})),n.d(e,\"TubeBufferGeometry\",(function(){return au})),n.d(e,\"TubeGeometry\",(function(){return au})),n.d(e,\"UVMapping\",(function(){return rt})),n.d(e,\"Uint16Attribute\",(function(){return mf})),n.d(e,\"Uint16BufferAttribute\",(function(){return kr})),n.d(e,\"Uint32Attribute\",(function(){return vf})),n.d(e,\"Uint32BufferAttribute\",(function(){return Wr})),n.d(e,\"Uint8Attribute\",(function(){return df})),n.d(e,\"Uint8BufferAttribute\",(function(){return Hr})),n.d(e,\"Uint8ClampedAttribute\",(function(){return pf})),n.d(e,\"Uint8ClampedBufferAttribute\",(function(){return Ur})),n.d(e,\"Uniform\",(function(){return Pd})),n.d(e,\"UniformsLib\",(function(){return Gs})),n.d(e,\"UniformsUtils\",(function(){return As})),n.d(e,\"UnsignedByteType\",(function(){return St})),n.d(e,\"UnsignedInt248Type\",(function(){return zt})),n.d(e,\"UnsignedIntType\",(function(){return Rt})),n.d(e,\"UnsignedShort4444Type\",(function(){return Dt})),n.d(e,\"UnsignedShort5551Type\",(function(){return It})),n.d(e,\"UnsignedShort565Type\",(function(){return Nt})),n.d(e,\"UnsignedShortType\",(function(){return At})),n.d(e,\"VSMShadowMap\",(function(){return p})),n.d(e,\"Vector2\",(function(){return Zn})),n.d(e,\"Vector3\",(function(){return oi})),n.d(e,\"Vector4\",(function(){return ni})),n.d(e,\"VectorKeyframeTrack\",(function(){return Du})),n.d(e,\"Vertex\",(function(){return cf})),n.d(e,\"VertexColors\",(function(){return $p})),n.d(e,\"VideoTexture\",(function(){return sc})),n.d(e,\"WebGL1Renderer\",(function(){return $o})),n.d(e,\"WebGLCubeRenderTarget\",(function(){return Is})),n.d(e,\"WebGLMultipleRenderTargets\",(function(){return ri})),n.d(e,\"WebGLMultisampleRenderTarget\",(function(){return si})),n.d(e,\"WebGLRenderTarget\",(function(){return ii})),n.d(e,\"WebGLRenderTargetCube\",(function(){return Ef})),n.d(e,\"WebGLRenderer\",(function(){return Ko})),n.d(e,\"WebGLUtils\",(function(){return jo})),n.d(e,\"WireframeGeometry\",(function(){return ou})),n.d(e,\"WireframeHelper\",(function(){return Mf})),n.d(e,\"WrapAroundEnding\",(function(){return We})),n.d(e,\"XHRLoader\",(function(){return Sf})),n.d(e,\"ZeroCurvatureEnding\",(function(){return ke})),n.d(e,\"ZeroFactor\",(function(){return C})),n.d(e,\"ZeroSlopeEnding\",(function(){return Ve})),n.d(e,\"ZeroStencilOp\",(function(){return cn})),n.d(e,\"sRGBEncoding\",(function(){return Qe}));\nconst i=\"129\",r={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},s={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},a=0,o=1,l=2,c=3,u=0,h=1,d=2,p=3,f=0,m=1,g=2,v=1,y=2,x=0,_=1,b=2,w=3,M=4,S=5,T=100,E=101,A=102,L=103,R=104,C=200,P=201,D=202,I=203,N=204,z=205,B=206,O=207,F=208,H=209,U=210,G=0,k=1,V=2,W=3,j=4,q=5,X=6,Y=7,Z=0,J=1,Q=2,K=0,$=1,tt=2,et=3,nt=4,it=5,rt=300,st=301,at=302,ot=303,lt=304,ct=306,ut=307,ht=1e3,dt=1001,pt=1002,ft=1003,mt=1004,gt=1004,vt=1005,yt=1005,xt=1006,_t=1007,bt=1007,wt=1008,Mt=1008,St=1009,Tt=1010,Et=1011,At=1012,Lt=1013,Rt=1014,Ct=1015,Pt=1016,Dt=1017,It=1018,Nt=1019,zt=1020,Bt=1021,Ot=1022,Ft=1023,Ht=1024,Ut=1025,Gt=Ft,kt=1026,Vt=1027,Wt=1028,jt=1029,qt=1030,Xt=1031,Yt=1032,Zt=1033,Jt=33776,Qt=33777,Kt=33778,$t=33779,te=35840,ee=35841,ne=35842,ie=35843,re=36196,se=37492,ae=37496,oe=37808,le=37809,ce=37810,ue=37811,he=37812,de=37813,pe=37814,fe=37815,me=37816,ge=37817,ve=37818,ye=37819,xe=37820,_e=37821,be=36492,we=37840,Me=37841,Se=37842,Te=37843,Ee=37844,Ae=37845,Le=37846,Re=37847,Ce=37848,Pe=37849,De=37850,Ie=37851,Ne=37852,ze=37853,Be=2200,Oe=2201,Fe=2202,He=2300,Ue=2301,Ge=2302,ke=2400,Ve=2401,We=2402,je=2500,qe=2501,Xe=0,Ye=1,Ze=2,Je=3e3,Qe=3001,Ke=3007,$e=3002,tn=3003,en=3004,nn=3005,rn=3006,sn=3200,an=3201,on=0,ln=1,cn=0,un=7680,hn=7681,dn=7682,pn=7683,fn=34055,mn=34056,gn=5386,vn=512,yn=513,xn=514,_n=515,bn=516,wn=517,Mn=518,Sn=519,Tn=35044,En=35048,An=35040,Ln=35045,Rn=35049,Cn=35041,Pn=35046,Dn=35050,In=35042,Nn=\"100\",zn=\"300 es\";class Bn{addEventListener(t,e){void 0===this._listeners\u0026\u0026(this._listeners={});const n=this._listeners;void 0===n[t]\u0026\u0026(n[t]=[]),-1===n[t].indexOf(e)\u0026\u0026n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]\u0026\u0026-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t\u0026\u0026n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e\u003ci;e++)n[e].call(this,t);t.target=null}}}const On=[];for(let t=0;t\u003c256;t++)On[t]=(t\u003c16?\"0\":\"\")+t.toString(16);let Fn=1234567;const Hn=Math.PI/180,Un=180/Math.PI;function Gn(){const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(On[255\u0026t]+On[t\u003e\u003e8\u0026255]+On[t\u003e\u003e16\u0026255]+On[t\u003e\u003e24\u0026255]+\"-\"+On[255\u0026e]+On[e\u003e\u003e8\u0026255]+\"-\"+On[e\u003e\u003e16\u002615|64]+On[e\u003e\u003e24\u0026255]+\"-\"+On[63\u0026n|128]+On[n\u003e\u003e8\u0026255]+\"-\"+On[n\u003e\u003e16\u0026255]+On[n\u003e\u003e24\u0026255]+On[255\u0026i]+On[i\u003e\u003e8\u0026255]+On[i\u003e\u003e16\u0026255]+On[i\u003e\u003e24\u0026255]).toUpperCase()}function kn(t,e,n){return Math.max(e,Math.min(n,t))}function Vn(t,e){return(t%e+e)%e}function Wn(t,e,n){return(1-n)*t+n*e}function jn(t){return 0==(t\u0026t-1)\u0026\u00260!==t}function qn(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function Xn(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var Yn=Object.freeze({__proto__:null,DEG2RAD:Hn,RAD2DEG:Un,generateUUID:Gn,clamp:kn,euclideanModulo:Vn,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:Wn,damp:function(t,e,n,i){return Wn(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(Vn(t,2*e)-e)},smoothstep:function(t,e,n){return t\u003c=e?0:t\u003e=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t\u003c=e?0:t\u003e=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t\u0026\u0026(Fn=t%2147483647),Fn=16807*Fn%2147483647,(Fn-1)/2147483646},degToRad:function(t){return t*Hn},radToDeg:function(t){return t*Un},isPowerOfTwo:jn,ceilPowerOfTwo:qn,floorPowerOfTwo:Xn,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),c=s((e+i)/2),u=a((e+i)/2),h=s((e-i)/2),d=a((e-i)/2),p=s((i-e)/2),f=a((i-e)/2);switch(r){case\"XYX\":t.set(o*u,l*h,l*d,o*c);break;case\"YZY\":t.set(l*d,o*u,l*h,o*c);break;case\"ZXZ\":t.set(l*h,l*d,o*u,o*c);break;case\"XZX\":t.set(o*u,l*f,l*p,o*c);break;case\"YXY\":t.set(l*p,o*u,l*f,o*c);break;case\"ZYZ\":t.set(l*f,l*p,o*u,o*c);break;default:console.warn(\"THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: \"+r)}}});class Zn{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x\u0026\u0026t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}Zn.prototype.isVector2=!0;class Jn{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],u=n[7],h=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],b=i[5],w=i[8];return r[0]=s*f+a*v+o*_,r[3]=s*m+a*y+o*b,r[6]=s*g+a*x+o*w,r[1]=l*f+c*v+u*_,r[4]=l*m+c*y+u*b,r[7]=l*g+c*x+u*w,r[2]=h*f+d*v+p*_,r[5]=h*m+d*y+p*b,r[8]=h*g+d*x+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],u=c*s-a*l,h=a*o-c*r,d=l*r-s*o,p=e*u+n*h+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=u*f,t[1]=(i*l-c*n)*f,t[2]=(a*n-i*s)*f,t[3]=h*f,t[4]=(c*e-i*o)*f,t[5]=(i*r-a*e)*f,t[6]=d*f,t[7]=(n*o-l*e)*f,t[8]=(s*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t\u003c9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n\u003c9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}let Qn;Jn.prototype.isMatrix3=!0;class Kn{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\"undefined\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===Qn\u0026\u0026(Qn=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\")),Qn.width=t.width,Qn.height=t.height;const n=Qn.getContext(\"2d\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=Qn}return e.width\u003e2048||e.height\u003e2048?(console.warn(\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\",t),e.toDataURL(\"image/jpeg\",.6)):e.toDataURL(\"image/png\")}}let $n=0;class ti extends Bn{constructor(t=ti.DEFAULT_IMAGE,e=ti.DEFAULT_MAPPING,n=dt,i=dt,r=xt,s=wt,a=Ft,o=St,l=1,c=Je){super(),Object.defineProperty(this,\"id\",{value:$n++}),this.uuid=Gn(),this.name=\"\",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=s,this.anisotropy=l,this.format=a,this.internalFormat=null,this.type=o,this.offset=new Zn(0,0),this.repeat=new Zn(1,1),this.center=new Zn(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Jn,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}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(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||\"string\"==typeof t;if(!e\u0026\u0026void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid\u0026\u0026(i.uuid=Gn()),!e\u0026\u0026void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t\u003cn;t++)i[t].isDataTexture?e.push(ei(i[t].image)):e.push(ei(i[t]))}else e=ei(i);t.images[i.uuid]={uuid:i.uuid,url:e}}n.image=i.uuid}return e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\"dispose\"})}transformUv(t){if(this.mapping!==rt)return t;if(t.applyMatrix3(this.matrix),t.x\u003c0||t.x\u003e1)switch(this.wrapS){case ht:t.x=t.x-Math.floor(t.x);break;case dt:t.x=t.x\u003c0?0:1;break;case pt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y\u003c0||t.y\u003e1)switch(this.wrapT){case ht:t.y=t.y-Math.floor(t.y);break;case dt:t.y=t.y\u003c0?0:1;break;case pt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY\u0026\u0026(t.y=1-t.y),t}set needsUpdate(t){!0===t\u0026\u0026this.version++}}function ei(t){return\"undefined\"!=typeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap\u0026\u0026t instanceof ImageBitmap?Kn.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\"THREE.Texture: Unable to serialize Texture.\"),{})}ti.DEFAULT_IMAGE=void 0,ti.DEFAULT_MAPPING=rt,ti.prototype.isTexture=!0;class ni{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){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: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e\u003c1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=t.elements,a=s[0],o=s[4],l=s[8],c=s[1],u=s[5],h=s[9],d=s[2],p=s[6],f=s[10];if(Math.abs(o-c)\u003c.01\u0026\u0026Math.abs(l-d)\u003c.01\u0026\u0026Math.abs(h-p)\u003c.01){if(Math.abs(o+c)\u003c.1\u0026\u0026Math.abs(l+d)\u003c.1\u0026\u0026Math.abs(h+p)\u003c.1\u0026\u0026Math.abs(a+u+f-3)\u003c.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(a+1)/2,s=(u+1)/2,m=(f+1)/2,g=(o+c)/4,v=(l+d)/4,y=(h+p)/4;return t\u003es\u0026\u0026t\u003em?t\u003c.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):s\u003em?s\u003c.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(s),n=g/i,r=y/i):m\u003c.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-h)*(p-h)+(l-d)*(l-d)+(c-o)*(c-o));return Math.abs(m)\u003c.001\u0026\u0026(m=1),this.x=(p-h)/m,this.y=(l-d)/m,this.z=(c-o)/m,this.w=Math.acos((a+u+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w\u003c0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x\u0026\u0026t.y===this.y\u0026\u0026t.z===this.z\u0026\u0026t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}ni.prototype.isVector4=!0;class ii extends Bn{constructor(t,e,n){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new ni(0,0,t,e),this.scissorTest=!1,this.viewport=new ni(0,0,t,e),n=n||{},this.texture=new ti(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=1,this.texture.generateMipmaps=void 0!==n.generateMipmaps\u0026\u0026n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:xt,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer\u0026\u0026n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setTexture(t){t.image={width:this.width,height:this.height,depth:this.depth},this.texture=t}setSize(t,e,n=1){this.width===t\u0026\u0026this.height===e\u0026\u0026this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.image={...this.texture.image},this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}ii.prototype.isWebGLRenderTarget=!0;class ri extends ii{constructor(t,e,n){super(t,e);const i=this.texture;this.texture=[];for(let t=0;t\u003cn;t++)this.texture[t]=i.clone()}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let i=0,r=this.texture.length;i\u003cr;i++)this.texture[i].image.width=t,this.texture[i].image.height=e,this.texture[i].image.depth=n;this.dispose()}return this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e),this}copy(t){this.dispose(),this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this.texture.length=0;for(let e=0,n=t.texture.length;e\u003cn;e++)this.texture[e]=t.texture[e].clone();return this}}ri.prototype.isWebGLMultipleRenderTargets=!0;class si extends ii{constructor(t,e,n){super(t,e,n),this.samples=4}copy(t){return super.copy.call(this,t),this.samples=t.samples,this}}si.prototype.isWebGLMultisampleRenderTarget=!0;class ai{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,r,s,a){let o=n[i+0],l=n[i+1],c=n[i+2],u=n[i+3];const h=r[s+0],d=r[s+1],p=r[s+2],f=r[s+3];if(0===a)return t[e+0]=o,t[e+1]=l,t[e+2]=c,void(t[e+3]=u);if(1===a)return t[e+0]=h,t[e+1]=d,t[e+2]=p,void(t[e+3]=f);if(u!==f||o!==h||l!==d||c!==p){let t=1-a;const e=o*h+l*d+c*p+u*f,n=e\u003e=0?1:-1,i=1-e*e;if(i\u003eNumber.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+h*r,l=l*t+d*r,c=c*t+p*r,u=u*t+f*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+u*u);o*=t,l*=t,c*=t,u*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=u}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],u=r[s],h=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*u+o*d-l*h,t[e+1]=o*p+c*h+l*u-a*d,t[e+2]=l*p+c*d+a*h-o*u,t[e+3]=c*p-a*u-o*h-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),u=a(r/2),h=o(n/2),d=o(i/2),p=o(r/2);switch(s){case\"XYZ\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\"YXZ\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\"ZXY\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\"ZYX\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\"YZX\":this._x=h*c*u+l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u-h*d*p;break;case\"XZY\":this._x=h*c*u-l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u+h*d*p;break;default:console.warn(\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \"+s)}return!1!==e\u0026\u0026this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],u=e[10],h=n+a+u;if(h\u003e0){const t=.5/Math.sqrt(h+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n\u003ea\u0026\u0026n\u003eu){const t=2*Math.sqrt(1+n-a-u);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a\u003eu){const t=2*Math.sqrt(1+a-n-u);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+u-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n\u003cNumber.EPSILON?(n=0,Math.abs(t.x)\u003eMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(kn(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a\u003c0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a\u003e=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o\u003c=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),u=Math.sin((1-e)*c)/l,h=Math.sin(e*c)/l;return this._w=s*u+this._w*h,this._x=n*u+this._x*h,this._y=i*u+this._y*h,this._z=r*u+this._z*h,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}equals(t){return t._x===this._x\u0026\u0026t._y===this._y\u0026\u0026t._z===this._z\u0026\u0026t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ai.prototype.isQuaternion=!0;class oi{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n\u0026\u0026(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t\u0026\u0026t.isEuler||console.error(\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\"),this.applyQuaternion(ci.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ci.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,u=o*i+r*n-s*e,h=-r*e-s*n-a*i;return this.x=l*o+h*-r+c*-a-u*-s,this.y=c*o+h*-s+u*-r-l*-a,this.z=u*o+h*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return li.copy(this).projectOnVector(t),this.sub(li)}reflect(t){return this.sub(li.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(kn(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x\u0026\u0026t.y===this.y\u0026\u0026t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}oi.prototype.isVector3=!0;const li=new oi,ci=new ai;class ui{constructor(t=new oi(1/0,1/0,1/0),e=new oi(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;o\u003cl;o+=3){const l=t[o],c=t[o+1],u=t[o+2];l\u003ce\u0026\u0026(e=l),c\u003cn\u0026\u0026(n=c),u\u003ci\u0026\u0026(i=u),l\u003er\u0026\u0026(r=l),c\u003es\u0026\u0026(s=c),u\u003ea\u0026\u0026(a=u)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;o\u003cl;o++){const l=t.getX(o),c=t.getY(o),u=t.getZ(o);l\u003ce\u0026\u0026(e=l),c\u003cn\u0026\u0026(n=c),u\u003ci\u0026\u0026(i=u),l\u003er\u0026\u0026(r=l),c\u003es\u0026\u0026(s=c),u\u003ea\u0026\u0026(a=u)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e\u003cn;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=di.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t){return this.makeEmpty(),this.expandByObject(t)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x\u003cthis.min.x||this.max.y\u003cthis.min.y||this.max.z\u003cthis.min.z}getCenter(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box3: .getCenter() target is now required\"),t=new oi),this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box3: .getSize() target is now required\"),t=new oi),this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t){t.updateWorldMatrix(!1,!1);const e=t.geometry;void 0!==e\u0026\u0026(null===e.boundingBox\u0026\u0026e.computeBoundingBox(),pi.copy(e.boundingBox),pi.applyMatrix4(t.matrixWorld),this.union(pi));const n=t.children;for(let t=0,e=n.length;t\u003ce;t++)this.expandByObject(n[t]);return this}containsPoint(t){return!(t.x\u003cthis.min.x||t.x\u003ethis.max.x||t.y\u003cthis.min.y||t.y\u003ethis.max.y||t.z\u003cthis.min.z||t.z\u003ethis.max.z)}containsBox(t){return this.min.x\u003c=t.min.x\u0026\u0026t.max.x\u003c=this.max.x\u0026\u0026this.min.y\u003c=t.min.y\u0026\u0026t.max.y\u003c=this.max.y\u0026\u0026this.min.z\u003c=t.min.z\u0026\u0026t.max.z\u003c=this.max.z}getParameter(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box3: .getParameter() target is now required\"),e=new oi),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x\u003cthis.min.x||t.min.x\u003ethis.max.x||t.max.y\u003cthis.min.y||t.min.y\u003ethis.max.y||t.max.z\u003cthis.min.z||t.min.z\u003ethis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,di),di.distanceToSquared(t.center)\u003c=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x\u003e0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y\u003e0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z\u003e0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e\u003c=-t.constant\u0026\u0026n\u003e=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(_i),bi.subVectors(this.max,_i),fi.subVectors(t.a,_i),mi.subVectors(t.b,_i),gi.subVectors(t.c,_i),vi.subVectors(mi,fi),yi.subVectors(gi,mi),xi.subVectors(fi,gi);let e=[0,-vi.z,vi.y,0,-yi.z,yi.y,0,-xi.z,xi.y,vi.z,0,-vi.x,yi.z,0,-yi.x,xi.z,0,-xi.x,-vi.y,vi.x,0,-yi.y,yi.x,0,-xi.y,xi.x,0];return!!Si(e,fi,mi,gi,bi)\u0026\u0026(e=[1,0,0,0,1,0,0,0,1],!!Si(e,fi,mi,gi,bi)\u0026\u0026(wi.crossVectors(vi,yi),e=[wi.x,wi.y,wi.z],Si(e,fi,mi,gi,bi)))}clampPoint(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box3: .clampPoint() target is now required\"),e=new oi),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return di.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t\u0026\u0026console.error(\"THREE.Box3: .getBoundingSphere() target is now required\"),this.getCenter(t.center),t.radius=.5*this.getSize(di).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()\u0026\u0026this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(hi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),hi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),hi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),hi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),hi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),hi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),hi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),hi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(hi)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)\u0026\u0026t.max.equals(this.max)}}ui.prototype.isBox3=!0;const hi=[new oi,new oi,new oi,new oi,new oi,new oi,new oi,new oi],di=new oi,pi=new ui,fi=new oi,mi=new oi,gi=new oi,vi=new oi,yi=new oi,xi=new oi,_i=new oi,bi=new oi,wi=new oi,Mi=new oi;function Si(t,e,n,i,r){for(let s=0,a=t.length-3;s\u003c=a;s+=3){Mi.fromArray(t,s);const a=r.x*Math.abs(Mi.x)+r.y*Math.abs(Mi.y)+r.z*Math.abs(Mi.z),o=e.dot(Mi),l=n.dot(Mi),c=i.dot(Mi);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))\u003ea)return!1}return!0}const Ti=new ui,Ei=new oi,Ai=new oi,Li=new oi;class Ri{constructor(t=new oi,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Ti.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;e\u003cr;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius\u003c0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)\u003c=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)\u003c=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))\u003c=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return void 0===e\u0026\u0026(console.warn(\"THREE.Sphere: .clampPoint() target is now required\"),e=new oi),e.copy(t),n\u003ethis.radius*this.radius\u0026\u0026(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Sphere: .getBoundingBox() target is now required\"),t=new ui),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Li.subVectors(t,this.center);const e=Li.lengthSq();if(e\u003ethis.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Li.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return Ai.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Ei.copy(t.center).add(Ai)),this.expandByPoint(Ei.copy(t.center).sub(Ai)),this}equals(t){return t.center.equals(this.center)\u0026\u0026t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Ci=new oi,Pi=new oi,Di=new oi,Ii=new oi,Ni=new oi,zi=new oi,Bi=new oi;class Oi{constructor(t=new oi,e=new oi(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Ray: .at() target is now required\"),e=new oi),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Ci)),this}closestPointToPoint(t,e){void 0===e\u0026\u0026(console.warn(\"THREE.Ray: .closestPointToPoint() target is now required\"),e=new oi),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n\u003c0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Ci.subVectors(t,this.origin).dot(this.direction);return e\u003c0?this.origin.distanceToSquared(t):(Ci.copy(this.direction).multiplyScalar(e).add(this.origin),Ci.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Pi.copy(t).add(e).multiplyScalar(.5),Di.copy(e).sub(t).normalize(),Ii.copy(this.origin).sub(Pi);const r=.5*t.distanceTo(e),s=-this.direction.dot(Di),a=Ii.dot(this.direction),o=-Ii.dot(Di),l=Ii.lengthSq(),c=Math.abs(1-s*s);let u,h,d,p;if(c\u003e0)if(u=s*o-a,h=s*a-o,p=r*c,u\u003e=0)if(h\u003e=-p)if(h\u003c=p){const t=1/c;u*=t,h*=t,d=u*(u+s*h+2*a)+h*(s*u+h+2*o)+l}else h=r,u=Math.max(0,-(s*h+a)),d=-u*u+h*(h+2*o)+l;else h=-r,u=Math.max(0,-(s*h+a)),d=-u*u+h*(h+2*o)+l;else h\u003c=-p?(u=Math.max(0,-(-s*r+a)),h=u\u003e0?-r:Math.min(Math.max(-r,-o),r),d=-u*u+h*(h+2*o)+l):h\u003c=p?(u=0,h=Math.min(Math.max(-r,-o),r),d=h*(h+2*o)+l):(u=Math.max(0,-(s*r+a)),h=u\u003e0?r:Math.min(Math.max(-r,-o),r),d=-u*u+h*(h+2*o)+l);else h=s\u003e0?-r:r,u=Math.max(0,-(s*h+a)),d=-u*u+h*(h+2*o)+l;return n\u0026\u0026n.copy(this.direction).multiplyScalar(u).add(this.origin),i\u0026\u0026i.copy(Di).multiplyScalar(h).add(Pi),d}intersectSphere(t,e){Ci.subVectors(t.center,this.origin);const n=Ci.dot(this.direction),i=Ci.dot(Ci)-n*n,r=t.radius*t.radius;if(i\u003er)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a\u003c0\u0026\u0026o\u003c0?null:a\u003c0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)\u003c=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n\u003e=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e\u003c0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,u=1/this.direction.z,h=this.origin;return l\u003e=0?(n=(t.min.x-h.x)*l,i=(t.max.x-h.x)*l):(n=(t.max.x-h.x)*l,i=(t.min.x-h.x)*l),c\u003e=0?(r=(t.min.y-h.y)*c,s=(t.max.y-h.y)*c):(r=(t.max.y-h.y)*c,s=(t.min.y-h.y)*c),n\u003es||r\u003ei?null:((r\u003en||n!=n)\u0026\u0026(n=r),(s\u003ci||i!=i)\u0026\u0026(i=s),u\u003e=0?(a=(t.min.z-h.z)*u,o=(t.max.z-h.z)*u):(a=(t.max.z-h.z)*u,o=(t.min.z-h.z)*u),n\u003eo||a\u003ei?null:((a\u003en||n!=n)\u0026\u0026(n=a),(o\u003ci||i!=i)\u0026\u0026(i=o),i\u003c0?null:this.at(n\u003e=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Ci)}intersectTriangle(t,e,n,i,r){Ni.subVectors(e,t),zi.subVectors(n,t),Bi.crossVectors(Ni,zi);let s,a=this.direction.dot(Bi);if(a\u003e0){if(i)return null;s=1}else{if(!(a\u003c0))return null;s=-1,a=-a}Ii.subVectors(this.origin,t);const o=s*this.direction.dot(zi.crossVectors(Ii,zi));if(o\u003c0)return null;const l=s*this.direction.dot(Ni.cross(Ii));if(l\u003c0)return null;if(o+l\u003ea)return null;const c=-s*Ii.dot(Bi);return c\u003c0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)\u0026\u0026t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Fi{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l,c,u,h,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=u,g[14]=h,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Fi).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Hi.setFromMatrixColumn(t,0).length(),r=1/Hi.setFromMatrixColumn(t,1).length(),s=1/Hi.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t\u0026\u0026t.isEuler||console.error(\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),u=Math.sin(r);if(\"XYZ\"===t.order){const t=s*c,n=s*u,i=a*c,r=a*u;e[0]=o*c,e[4]=-o*u,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if(\"YXZ\"===t.order){const t=o*c,n=o*u,i=l*c,r=l*u;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*u,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if(\"ZXY\"===t.order){const t=o*c,n=o*u,i=l*c,r=l*u;e[0]=t-r*a,e[4]=-s*u,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if(\"ZYX\"===t.order){const t=s*c,n=s*u,i=a*c,r=a*u;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*u,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if(\"YZX\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*u,e[8]=i*u+n,e[1]=u,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*u+i,e[10]=t-r*u}else if(\"XZY\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-u,e[8]=l*c,e[1]=t*u+r,e[5]=s*c,e[9]=n*u-i,e[2]=i*u-n,e[6]=a*c,e[10]=r*u+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Gi,t,ki)}lookAt(t,e,n){const i=this.elements;return ji.subVectors(t,e),0===ji.lengthSq()\u0026\u0026(ji.z=1),ji.normalize(),Vi.crossVectors(n,ji),0===Vi.lengthSq()\u0026\u0026(1===Math.abs(n.z)?ji.x+=1e-4:ji.z+=1e-4,ji.normalize(),Vi.crossVectors(n,ji)),Vi.normalize(),Wi.crossVectors(ji,Vi),i[0]=Vi.x,i[4]=Wi.x,i[8]=ji.x,i[1]=Vi.y,i[5]=Wi.y,i[9]=ji.y,i[2]=Vi.z,i[6]=Wi.z,i[10]=ji.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],u=n[5],h=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],b=i[0],w=i[4],M=i[8],S=i[12],T=i[1],E=i[5],A=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],N=i[7],z=i[11],B=i[15];return r[0]=s*b+a*T+o*R+l*I,r[4]=s*w+a*E+o*C+l*N,r[8]=s*M+a*A+o*P+l*z,r[12]=s*S+a*L+o*D+l*B,r[1]=c*b+u*T+h*R+d*I,r[5]=c*w+u*E+h*C+d*N,r[9]=c*M+u*A+h*P+d*z,r[13]=c*S+u*L+h*D+d*B,r[2]=p*b+f*T+m*R+g*I,r[6]=p*w+f*E+m*C+g*N,r[10]=p*M+f*A+m*P+g*z,r[14]=p*S+f*L+m*D+g*B,r[3]=v*b+y*T+x*R+_*I,r[7]=v*w+y*E+x*C+_*N,r[11]=v*M+y*A+x*P+_*z,r[15]=v*S+y*L+x*D+_*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],u=t[6],h=t[10],d=t[14];return t[3]*(+r*o*u-i*l*u-r*a*h+n*l*h+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*h+r*s*h-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*u-e*a*d-r*s*u+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*u+e*a*h+i*s*u-n*s*h+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],u=t[9],h=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=u*m*l-f*h*l+f*o*d-a*m*d-u*o*g+a*h*g,y=p*h*l-c*m*l-p*o*d+s*m*d+c*o*g-s*h*g,x=c*f*l-p*u*l+p*a*d-s*f*d-c*a*g+s*u*g,_=p*u*o-c*f*o-p*a*h+s*f*h+c*a*m-s*u*m,b=e*v+n*y+i*x+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=v*w,t[1]=(f*h*r-u*m*r-f*i*d+n*m*d+u*i*g-n*h*g)*w,t[2]=(a*m*r-f*o*r+f*i*l-n*m*l-a*i*g+n*o*g)*w,t[3]=(u*o*r-a*h*r-u*i*l+n*h*l+a*i*d-n*o*d)*w,t[4]=y*w,t[5]=(c*m*r-p*h*r+p*i*d-e*m*d-c*i*g+e*h*g)*w,t[6]=(p*o*r-s*m*r-p*i*l+e*m*l+s*i*g-e*o*g)*w,t[7]=(s*h*r-c*o*r+c*i*l-e*h*l-s*i*d+e*o*d)*w,t[8]=x*w,t[9]=(p*u*r-c*f*r-p*n*d+e*f*d+c*n*g-e*u*g)*w,t[10]=(s*f*r-p*a*r+p*n*l-e*f*l-s*n*g+e*a*g)*w,t[11]=(c*a*r-s*u*r-c*n*l+e*u*l+s*n*d-e*a*d)*w,t[12]=_*w,t[13]=(c*f*i-p*u*i+p*n*h-e*f*h-c*n*m+e*u*m)*w,t[14]=(p*a*i-s*f*i-p*n*o+e*f*o+s*n*m-e*a*m)*w,t[15]=(s*u*i-c*a*i+c*n*o-e*u*o-s*n*h+e*a*h)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,u=a+a,h=r*l,d=r*c,p=r*u,f=s*c,m=s*u,g=a*u,v=o*l,y=o*c,x=o*u,_=n.x,b=n.y,w=n.z;return i[0]=(1-(f+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*b,i[5]=(1-(h+g))*b,i[6]=(m+v)*b,i[7]=0,i[8]=(p+y)*w,i[9]=(m-v)*w,i[10]=(1-(h+f))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Hi.set(i[0],i[1],i[2]).length();const s=Hi.set(i[4],i[5],i[6]).length(),a=Hi.set(i[8],i[9],i[10]).length();this.determinant()\u003c0\u0026\u0026(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Ui.copy(this);const o=1/r,l=1/s,c=1/a;return Ui.elements[0]*=o,Ui.elements[1]*=o,Ui.elements[2]*=o,Ui.elements[4]*=l,Ui.elements[5]*=l,Ui.elements[6]*=l,Ui.elements[8]*=c,Ui.elements[9]*=c,Ui.elements[10]*=c,e.setFromRotationMatrix(Ui),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s\u0026\u0026console.warn(\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),u=(n+i)/(n-i),h=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=u,a[13]=0,a[2]=0,a[6]=0,a[10]=h,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),u=(e+t)*o,h=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-u,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-h,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t\u003c16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n\u003c16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}Fi.prototype.isMatrix4=!0;const Hi=new oi,Ui=new Fi,Gi=new oi(0,0,0),ki=new oi(1,1,1),Vi=new oi,Wi=new oi,ji=new oi,qi=new Fi,Xi=new ai;class Yi{constructor(t=0,e=0,n=0,i=Yi.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],u=i[2],h=i[6],d=i[10];switch(e=e||this._order){case\"XYZ\":this._y=Math.asin(kn(a,-1,1)),Math.abs(a)\u003c.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(h,l),this._z=0);break;case\"YXZ\":this._x=Math.asin(-kn(c,-1,1)),Math.abs(c)\u003c.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-u,r),this._z=0);break;case\"ZXY\":this._x=Math.asin(kn(h,-1,1)),Math.abs(h)\u003c.9999999?(this._y=Math.atan2(-u,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case\"ZYX\":this._y=Math.asin(-kn(u,-1,1)),Math.abs(u)\u003c.9999999?(this._x=Math.atan2(h,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case\"YZX\":this._z=Math.asin(kn(o,-1,1)),Math.abs(o)\u003c.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(a,d));break;case\"XZY\":this._z=Math.asin(-kn(s,-1,1)),Math.abs(s)\u003c.9999999?(this._x=Math.atan2(h,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn(\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \"+e)}return this._order=e,!1!==n\u0026\u0026this._onChangeCallback(),this}setFromQuaternion(t,e,n){return qi.makeRotationFromQuaternion(t),this.setFromRotationMatrix(qi,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return Xi.setFromEuler(this),this.setFromQuaternion(Xi,t)}equals(t){return t._x===this._x\u0026\u0026t._y===this._y\u0026\u0026t._z===this._z\u0026\u0026t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]\u0026\u0026(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new oi(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}Yi.prototype.isEuler=!0,Yi.DefaultOrder=\"XYZ\",Yi.RotationOrders=[\"XYZ\",\"YZX\",\"ZXY\",\"XZY\",\"YXZ\",\"ZYX\"];class Zi{constructor(){this.mask=1}set(t){this.mask=1\u003c\u003ct|0}enable(t){this.mask|=1\u003c\u003ct|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1\u003c\u003ct|0}disable(t){this.mask\u0026=~(1\u003c\u003ct|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask\u0026t.mask)}}let Ji=0;const Qi=new oi,Ki=new ai,$i=new Fi,tr=new oi,er=new oi,nr=new oi,ir=new ai,rr=new oi(1,0,0),sr=new oi(0,1,0),ar=new oi(0,0,1),or={type:\"added\"},lr={type:\"removed\"};class cr extends Bn{constructor(){super(),Object.defineProperty(this,\"id\",{value:Ji++}),this.uuid=Gn(),this.name=\"\",this.type=\"Object3D\",this.parent=null,this.children=[],this.up=cr.DefaultUp.clone();const t=new oi,e=new Yi,n=new ai,i=new oi(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Fi},normalMatrix:{value:new Jn}}),this.matrix=new Fi,this.matrixWorld=new Fi,this.matrixAutoUpdate=cr.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new Zi,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Ki.setFromAxisAngle(t,e),this.quaternion.multiply(Ki),this}rotateOnWorldAxis(t,e){return Ki.setFromAxisAngle(t,e),this.quaternion.premultiply(Ki),this}rotateX(t){return this.rotateOnAxis(rr,t)}rotateY(t){return this.rotateOnAxis(sr,t)}rotateZ(t){return this.rotateOnAxis(ar,t)}translateOnAxis(t,e){return Qi.copy(t).applyQuaternion(this.quaternion),this.position.add(Qi.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(rr,t)}translateY(t){return this.translateOnAxis(sr,t)}translateZ(t){return this.translateOnAxis(ar,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4($i.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?tr.copy(t):tr.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),er.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?$i.lookAt(er,tr,this.up):$i.lookAt(tr,er,this.up),this.quaternion.setFromRotationMatrix($i),i\u0026\u0026($i.extractRotation(i.matrixWorld),Ki.setFromRotationMatrix($i),this.quaternion.premultiply(Ki.invert()))}add(t){if(arguments.length\u003e1){for(let t=0;t\u003carguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",t),this):(t\u0026\u0026t.isObject3D?(null!==t.parent\u0026\u0026t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(or)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",t),this)}remove(t){if(arguments.length\u003e1){for(let t=0;t\u003carguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e\u0026\u0026(t.parent=null,this.children.splice(e,1),t.dispatchEvent(lr)),this}removeFromParent(){const t=this.parent;return null!==t\u0026\u0026t.remove(this),this}clear(){for(let t=0;t\u003cthis.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(lr)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),$i.copy(this.matrixWorld).invert(),null!==t.parent\u0026\u0026(t.parent.updateWorldMatrix(!0,!1),$i.multiply(t.parent.matrixWorld)),t.applyMatrix4($i),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\"id\",t)}getObjectByName(t){return this.getObjectByProperty(\"name\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n\u003ci;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldPosition() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldQuaternion() target is now required\"),t=new ai),this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(er,t,nr),t}getWorldScale(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldScale() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(er,ir,t),t}getWorldDirection(t){void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldDirection() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e\u0026\u0026(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)\u0026\u0026(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t\u0026\u0026null!==n\u0026\u0026n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e\u003cn;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\"string\"==typeof t,n={};e\u0026\u0026(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{}},n.metadata={version:4.5,type:\"Object\",generator:\"Object3D.toJSON\"});const i={};function r(e,n){return void 0===e[n.uuid]\u0026\u0026(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\"\"!==this.name\u0026\u0026(i.name=this.name),!0===this.castShadow\u0026\u0026(i.castShadow=!0),!0===this.receiveShadow\u0026\u0026(i.receiveShadow=!0),!1===this.visible\u0026\u0026(i.visible=!1),!1===this.frustumCulled\u0026\u0026(i.frustumCulled=!1),0!==this.renderOrder\u0026\u0026(i.renderOrder=this.renderOrder),\"{}\"!==JSON.stringify(this.userData)\u0026\u0026(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate\u0026\u0026(i.matrixAutoUpdate=!1),this.isInstancedMesh\u0026\u0026(i.type=\"InstancedMesh\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor\u0026\u0026(i.instanceColor=this.instanceColor.toJSON())),this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e\u0026\u0026void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e\u003ci;e++){const i=n[e];r(t.shapes,i)}else r(t.shapes,n)}}if(this.isSkinnedMesh\u0026\u0026(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton\u0026\u0026(r(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n\u003ci;n++)e.push(r(t.materials,this.material[n]));i.material=e}else i.material=r(t.materials,this.material);if(this.children.length\u003e0){i.children=[];for(let e=0;e\u003cthis.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length\u003e0){i.animations=[];for(let e=0;e\u003cthis.animations.length;e++){const n=this.animations[e];i.animations.push(r(t.animations,n))}}if(e){const e=s(t.geometries),i=s(t.materials),r=s(t.textures),a=s(t.images),o=s(t.shapes),l=s(t.skeletons),c=s(t.animations);e.length\u003e0\u0026\u0026(n.geometries=e),i.length\u003e0\u0026\u0026(n.materials=i),r.length\u003e0\u0026\u0026(n.textures=r),a.length\u003e0\u0026\u0026(n.images=a),o.length\u003e0\u0026\u0026(n.shapes=o),l.length\u003e0\u0026\u0026(n.skeletons=l),c.length\u003e0\u0026\u0026(n.animations=c)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e\u003ct.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}cr.DefaultUp=new oi(0,1,0),cr.DefaultMatrixAutoUpdate=!0,cr.prototype.isObject3D=!0;const ur=new oi,hr=new oi,dr=new Jn;class pr{constructor(t=new oi(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=ur.subVectors(n,e).cross(hr.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Plane: .projectPoint() target is now required\"),e=new oi),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){void 0===e\u0026\u0026(console.warn(\"THREE.Plane: .intersectLine() target is now required\"),e=new oi);const n=t.delta(ur),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r\u003c0||r\u003e1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e\u003c0\u0026\u0026n\u003e0||n\u003c0\u0026\u0026e\u003e0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Plane: .coplanarPoint() target is now required\"),t=new oi),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||dr.getNormalMatrix(t),i=this.coplanarPoint(ur).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)\u0026\u0026t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}pr.prototype.isPlane=!0;const fr=new oi,mr=new oi,gr=new oi,vr=new oi,yr=new oi,xr=new oi,_r=new oi,br=new oi,wr=new oi,Mr=new oi;class Sr{constructor(t=new oi,e=new oi,n=new oi){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){void 0===i\u0026\u0026(console.warn(\"THREE.Triangle: .getNormal() target is now required\"),i=new oi),i.subVectors(n,e),fr.subVectors(t,e),i.cross(fr);const r=i.lengthSq();return r\u003e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){fr.subVectors(i,e),mr.subVectors(n,e),gr.subVectors(t,e);const s=fr.dot(fr),a=fr.dot(mr),o=fr.dot(gr),l=mr.dot(mr),c=mr.dot(gr),u=s*l-a*a;if(void 0===r\u0026\u0026(console.warn(\"THREE.Triangle: .getBarycoord() target is now required\"),r=new oi),0===u)return r.set(-2,-1,-1);const h=1/u,d=(l*o-a*c)*h,p=(s*c-a*o)*h;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,vr),vr.x\u003e=0\u0026\u0026vr.y\u003e=0\u0026\u0026vr.x+vr.y\u003c=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,vr),o.set(0,0),o.addScaledVector(r,vr.x),o.addScaledVector(s,vr.y),o.addScaledVector(a,vr.z),o}static isFrontFacing(t,e,n,i){return fr.subVectors(n,e),mr.subVectors(t,e),fr.cross(mr).dot(i)\u003c0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return fr.subVectors(this.c,this.b),mr.subVectors(this.a,this.b),.5*fr.cross(mr).length()}getMidpoint(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Triangle: .getMidpoint() target is now required\"),t=new oi),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Sr.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Triangle: .getPlane() target is now required\"),t=new pr),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Sr.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Sr.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Sr.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Sr.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e\u0026\u0026(console.warn(\"THREE.Triangle: .closestPointToPoint() target is now required\"),e=new oi);const n=this.a,i=this.b,r=this.c;let s,a;yr.subVectors(i,n),xr.subVectors(r,n),br.subVectors(t,n);const o=yr.dot(br),l=xr.dot(br);if(o\u003c=0\u0026\u0026l\u003c=0)return e.copy(n);wr.subVectors(t,i);const c=yr.dot(wr),u=xr.dot(wr);if(c\u003e=0\u0026\u0026u\u003c=c)return e.copy(i);const h=o*u-c*l;if(h\u003c=0\u0026\u0026o\u003e=0\u0026\u0026c\u003c=0)return s=o/(o-c),e.copy(n).addScaledVector(yr,s);Mr.subVectors(t,r);const d=yr.dot(Mr),p=xr.dot(Mr);if(p\u003e=0\u0026\u0026d\u003c=p)return e.copy(r);const f=d*l-o*p;if(f\u003c=0\u0026\u0026l\u003e=0\u0026\u0026p\u003c=0)return a=l/(l-p),e.copy(n).addScaledVector(xr,a);const m=c*p-d*u;if(m\u003c=0\u0026\u0026u-c\u003e=0\u0026\u0026d-p\u003e=0)return _r.subVectors(r,i),a=(u-c)/(u-c+(d-p)),e.copy(i).addScaledVector(_r,a);const g=1/(m+f+h);return s=f*g,a=h*g,e.copy(n).addScaledVector(yr,s).addScaledVector(xr,a)}equals(t){return t.a.equals(this.a)\u0026\u0026t.b.equals(this.b)\u0026\u0026t.c.equals(this.c)}}let Tr=0;class Er extends Bn{constructor(){super(),Object.defineProperty(this,\"id\",{value:Tr++}),this.uuid=Gn(),this.name=\"\",this.type=\"Material\",this.fog=!0,this.blending=_,this.side=f,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=N,this.blendDst=z,this.blendEquation=T,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=W,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Sn,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=un,this.stencilZFail=un,this.stencilZPass=un,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}onBuild(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\"THREE.Material: '\"+e+\"' parameter is undefined.\");continue}if(\"shading\"===e){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=n===v;continue}const i=this[e];void 0!==i?i\u0026\u0026i.isColor?i.set(n):i\u0026\u0026i.isVector3\u0026\u0026n\u0026\u0026n.isVector3?i.copy(n):this[e]=n:console.warn(\"THREE.\"+this.type+\": '\"+e+\"' is not a property of this material.\")}}toJSON(t){const e=void 0===t||\"string\"==typeof t;e\u0026\u0026(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\"Material\",generator:\"Material.toJSON\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\"\"!==this.name\u0026\u0026(n.name=this.name),this.color\u0026\u0026this.color.isColor\u0026\u0026(n.color=this.color.getHex()),void 0!==this.roughness\u0026\u0026(n.roughness=this.roughness),void 0!==this.metalness\u0026\u0026(n.metalness=this.metalness),this.sheen\u0026\u0026this.sheen.isColor\u0026\u0026(n.sheen=this.sheen.getHex()),this.emissive\u0026\u0026this.emissive.isColor\u0026\u0026(n.emissive=this.emissive.getHex()),this.emissiveIntensity\u0026\u00261!==this.emissiveIntensity\u0026\u0026(n.emissiveIntensity=this.emissiveIntensity),this.specular\u0026\u0026this.specular.isColor\u0026\u0026(n.specular=this.specular.getHex()),void 0!==this.shininess\u0026\u0026(n.shininess=this.shininess),void 0!==this.clearcoat\u0026\u0026(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness\u0026\u0026(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap\u0026\u0026this.clearcoatMap.isTexture\u0026\u0026(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap\u0026\u0026this.clearcoatRoughnessMap.isTexture\u0026\u0026(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap\u0026\u0026this.clearcoatNormalMap.isTexture\u0026\u0026(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map\u0026\u0026this.map.isTexture\u0026\u0026(n.map=this.map.toJSON(t).uuid),this.matcap\u0026\u0026this.matcap.isTexture\u0026\u0026(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap\u0026\u0026this.alphaMap.isTexture\u0026\u0026(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap\u0026\u0026this.lightMap.isTexture\u0026\u0026(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap\u0026\u0026this.aoMap.isTexture\u0026\u0026(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap\u0026\u0026this.bumpMap.isTexture\u0026\u0026(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap\u0026\u0026this.normalMap.isTexture\u0026\u0026(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap\u0026\u0026this.displacementMap.isTexture\u0026\u0026(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap\u0026\u0026this.roughnessMap.isTexture\u0026\u0026(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap\u0026\u0026this.metalnessMap.isTexture\u0026\u0026(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap\u0026\u0026this.emissiveMap.isTexture\u0026\u0026(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap\u0026\u0026this.specularMap.isTexture\u0026\u0026(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap\u0026\u0026this.envMap.isTexture\u0026\u0026(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine\u0026\u0026(n.combine=this.combine)),void 0!==this.envMapIntensity\u0026\u0026(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity\u0026\u0026(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio\u0026\u0026(n.refractionRatio=this.refractionRatio),this.gradientMap\u0026\u0026this.gradientMap.isTexture\u0026\u0026(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission\u0026\u0026(n.transmission=this.transmission),this.transmissionMap\u0026\u0026this.transmissionMap.isTexture\u0026\u0026(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness\u0026\u0026(n.thickness=this.thickness),this.thicknessMap\u0026\u0026this.thicknessMap.isTexture\u0026\u0026(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance\u0026\u0026(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor\u0026\u0026(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size\u0026\u0026(n.size=this.size),null!==this.shadowSide\u0026\u0026(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation\u0026\u0026(n.sizeAttenuation=this.sizeAttenuation),this.blending!==_\u0026\u0026(n.blending=this.blending),this.side!==f\u0026\u0026(n.side=this.side),this.vertexColors\u0026\u0026(n.vertexColors=!0),this.opacity\u003c1\u0026\u0026(n.opacity=this.opacity),!0===this.transparent\u0026\u0026(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation\u0026\u00260!==this.rotation\u0026\u0026(n.rotation=this.rotation),!0===this.polygonOffset\u0026\u0026(n.polygonOffset=!0),0!==this.polygonOffsetFactor\u0026\u0026(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits\u0026\u0026(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth\u0026\u00261!==this.linewidth\u0026\u0026(n.linewidth=this.linewidth),void 0!==this.dashSize\u0026\u0026(n.dashSize=this.dashSize),void 0!==this.gapSize\u0026\u0026(n.gapSize=this.gapSize),void 0!==this.scale\u0026\u0026(n.scale=this.scale),!0===this.dithering\u0026\u0026(n.dithering=!0),this.alphaTest\u003e0\u0026\u0026(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage\u0026\u0026(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha\u0026\u0026(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe\u0026\u0026(n.wireframe=this.wireframe),this.wireframeLinewidth\u003e1\u0026\u0026(n.wireframeLinewidth=this.wireframeLinewidth),\"round\"!==this.wireframeLinecap\u0026\u0026(n.wireframeLinecap=this.wireframeLinecap),\"round\"!==this.wireframeLinejoin\u0026\u0026(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets\u0026\u0026(n.morphTargets=!0),!0===this.morphNormals\u0026\u0026(n.morphNormals=!0),!0===this.flatShading\u0026\u0026(n.flatShading=this.flatShading),!1===this.visible\u0026\u0026(n.visible=!1),!1===this.toneMapped\u0026\u0026(n.toneMapped=!1),\"{}\"!==JSON.stringify(this.userData)\u0026\u0026(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length\u003e0\u0026\u0026(n.textures=e),r.length\u003e0\u0026\u0026(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}set needsUpdate(t){!0===t\u0026\u0026this.version++}}Er.prototype.isMaterial=!0;const Ar={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},Lr={h:0,s:0,l:0},Rr={h:0,s:0,l:0};function Cr(t,e,n){return n\u003c0\u0026\u0026(n+=1),n\u003e1\u0026\u0026(n-=1),n\u003c1/6?t+6*(e-t)*n:n\u003c.5?e:n\u003c2/3?t+6*(e-t)*(2/3-n):t}function Pr(t){return t\u003c.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Dr(t){return t\u003c.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Ir{constructor(t,e,n){return void 0===e\u0026\u0026void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t\u0026\u0026t.isColor?this.copy(t):\"number\"==typeof t?this.setHex(t):\"string\"==typeof t\u0026\u0026this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t\u003e\u003e16\u0026255)/255,this.g=(t\u003e\u003e8\u0026255)/255,this.b=(255\u0026t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=Vn(t,1),e=kn(e,0,1),n=kn(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n\u003c=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Cr(r,i,t+1/3),this.g=Cr(r,i,t),this.b=Cr(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e\u0026\u0026parseFloat(e)\u003c1\u0026\u0026console.warn(\"THREE.Color: Alpha component of \"+t+\" will be ignored.\")}let n;if(n=/^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case\"rgb\":case\"rgba\":if(t=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case\"hsl\":case\"hsla\":if(t=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\\#([A-Fa-f\\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t\u0026\u0026t.length\u003e0?this.setColorName(t):this}setColorName(t){const e=Ar[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn(\"THREE.Color: Unknown color \"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e\u003e0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Pr(t.r),this.g=Pr(t.g),this.b=Pr(t.b),this}copyLinearToSRGB(t){return this.r=Dr(t.r),this.g=Dr(t.g),this.b=Dr(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r\u003c\u003c16^255*this.g\u003c\u003c8^255*this.b\u003c\u003c0}getHexString(){return(\"000000\"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t\u0026\u0026(console.warn(\"THREE.Color: .getHSL() target is now required\"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),s=Math.min(e,n,i);let a,o;const l=(s+r)/2;if(s===r)a=0,o=0;else{const t=r-s;switch(o=l\u003c=.5?t/(r+s):t/(2-r-s),r){case e:a=(n-i)/t+(n\u003ci?6:0);break;case n:a=(i-e)/t+2;break;case i:a=(e-n)/t+4}a/=6}return t.h=a,t.s=o,t.l=l,t}getStyle(){return\"rgb(\"+(255*this.r|0)+\",\"+(255*this.g|0)+\",\"+(255*this.b|0)+\")\"}offsetHSL(t,e,n){return this.getHSL(Lr),Lr.h+=t,Lr.s+=e,Lr.l+=n,this.setHSL(Lr.h,Lr.s,Lr.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(Lr),t.getHSL(Rr);const n=Wn(Lr.h,Rr.h,e),i=Wn(Lr.s,Rr.s,e),r=Wn(Lr.l,Rr.l,e);return this.setHSL(n,i,r),this}equals(t){return t.r===this.r\u0026\u0026t.g===this.g\u0026\u0026t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized\u0026\u0026(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}Ir.NAMES=Ar,Ir.prototype.isColor=!0,Ir.prototype.r=1,Ir.prototype.g=1,Ir.prototype.b=1;class Nr extends Er{constructor(t){super(),this.type=\"MeshBasicMaterial\",this.color=new Ir(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.combine=Z,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this}}Nr.prototype.isMeshBasicMaterial=!0;const zr=new oi,Br=new Zn;class Or{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.name=\"\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=Tn,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t\u0026\u0026this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i\u003cr;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyColorsArray(): color is undefined\",i),r=new Ir),e[n++]=r.r,e[n++]=r.g,e[n++]=r.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\",i),r=new Zn),e[n++]=r.x,e[n++]=r.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\",i),r=new oi),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\",i),r=new ni),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z,e[n++]=r.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e\u003cn;e++)Br.fromBufferAttribute(this,e),Br.applyMatrix3(t),this.setXY(e,Br.x,Br.y);else if(3===this.itemSize)for(let e=0,n=this.count;e\u003cn;e++)zr.fromBufferAttribute(this,e),zr.applyMatrix3(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e\u003cn;e++)zr.x=this.getX(e),zr.y=this.getY(e),zr.z=this.getZ(e),zr.applyMatrix4(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e\u003cn;e++)zr.x=this.getX(e),zr.y=this.getY(e),zr.z=this.getZ(e),zr.applyNormalMatrix(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}transformDirection(t){for(let e=0,n=this.count;e\u003cn;e++)zr.x=this.getX(e),zr.y=this.getY(e),zr.z=this.getZ(e),zr.transformDirection(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\"\"!==this.name\u0026\u0026(t.name=this.name),this.usage!==Tn\u0026\u0026(t.usage=this.usage),0===this.updateRange.offset\u0026\u0026-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}Or.prototype.isBufferAttribute=!0;class Fr extends Or{constructor(t,e,n){super(new Int8Array(t),e,n)}}class Hr extends Or{constructor(t,e,n){super(new Uint8Array(t),e,n)}}class Ur extends Or{constructor(t,e,n){super(new Uint8ClampedArray(t),e,n)}}class Gr extends Or{constructor(t,e,n){super(new Int16Array(t),e,n)}}class kr extends Or{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class Vr extends Or{constructor(t,e,n){super(new Int32Array(t),e,n)}}class Wr extends Or{constructor(t,e,n){super(new Uint32Array(t),e,n)}}class jr extends Or{constructor(t,e,n){super(new Uint16Array(t),e,n)}}jr.prototype.isFloat16BufferAttribute=!0;class qr extends Or{constructor(t,e,n){super(new Float32Array(t),e,n)}}class Xr extends Or{constructor(t,e,n){super(new Float64Array(t),e,n)}}function Yr(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;n\u003ci;++n)t[n]\u003ee\u0026\u0026(e=t[n]);return e}const Zr={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Jr(t,e){return new Zr[t](e)}let Qr=0;const Kr=new Fi,$r=new cr,ts=new oi,es=new ui,ns=new ui,is=new oi;class rs extends Bn{constructor(){super(),Object.defineProperty(this,\"id\",{value:Qr++}),this.uuid=Gn(),this.name=\"\",this.type=\"BufferGeometry\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Yr(t)\u003e65535?Wr:kr)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e\u0026\u0026(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new Jn).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i\u0026\u0026(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox\u0026\u0026this.computeBoundingBox(),null!==this.boundingSphere\u0026\u0026this.computeBoundingSphere(),this}applyQuaternion(t){return Kr.makeRotationFromQuaternion(t),this.applyMatrix4(Kr),this}rotateX(t){return Kr.makeRotationX(t),this.applyMatrix4(Kr),this}rotateY(t){return Kr.makeRotationY(t),this.applyMatrix4(Kr),this}rotateZ(t){return Kr.makeRotationZ(t),this.applyMatrix4(Kr),this}translate(t,e,n){return Kr.makeTranslation(t,e,n),this.applyMatrix4(Kr),this}scale(t,e,n){return Kr.makeScale(t,e,n),this.applyMatrix4(Kr),this}lookAt(t){return $r.lookAt(t),$r.updateMatrix(),this.applyMatrix4($r.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ts).negate(),this.translate(ts.x,ts.y,ts.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\"position\",new qr(e,3)),this}computeBoundingBox(){null===this.boundingBox\u0026\u0026(this.boundingBox=new ui);const t=this.attributes.position,e=this.morphAttributes.position;if(t\u0026\u0026t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingBox.set(new oi(-1/0,-1/0,-1/0),new oi(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];es.setFromBufferAttribute(n),this.morphTargetsRelative?(is.addVectors(this.boundingBox.min,es.min),this.boundingBox.expandByPoint(is),is.addVectors(this.boundingBox.max,es.max),this.boundingBox.expandByPoint(is)):(this.boundingBox.expandByPoint(es.min),this.boundingBox.expandByPoint(es.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere\u0026\u0026(this.boundingSphere=new Ri);const t=this.attributes.position,e=this.morphAttributes.position;if(t\u0026\u0026t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingSphere.set(new oi,1/0);if(t){const n=this.boundingSphere.center;if(es.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];ns.setFromBufferAttribute(n),this.morphTargetsRelative?(is.addVectors(es.min,ns.min),es.expandByPoint(is),is.addVectors(es.max,ns.max),es.expandByPoint(is)):(es.expandByPoint(ns.min),es.expandByPoint(ns.max))}es.getCenter(n);let i=0;for(let e=0,r=t.count;e\u003cr;e++)is.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(is));if(e)for(let r=0,s=e.length;r\u003cs;r++){const s=e[r],a=this.morphTargetsRelative;for(let e=0,r=s.count;e\u003cr;e++)is.fromBufferAttribute(s,e),a\u0026\u0026(ts.fromBufferAttribute(t,e),is.add(ts)),i=Math.max(i,n.distanceToSquared(is))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}computeFaceNormals(){}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\");const n=t.array,i=e.position.array,r=e.normal.array,s=e.uv.array,a=i.length/3;void 0===e.tangent\u0026\u0026this.setAttribute(\"tangent\",new Or(new Float32Array(4*a),4));const o=e.tangent.array,l=[],c=[];for(let t=0;t\u003ca;t++)l[t]=new oi,c[t]=new oi;const u=new oi,h=new oi,d=new oi,p=new Zn,f=new Zn,m=new Zn,g=new oi,v=new oi;function y(t,e,n){u.fromArray(i,3*t),h.fromArray(i,3*e),d.fromArray(i,3*n),p.fromArray(s,2*t),f.fromArray(s,2*e),m.fromArray(s,2*n),h.sub(u),d.sub(u),f.sub(p),m.sub(p);const r=1/(f.x*m.y-m.x*f.y);isFinite(r)\u0026\u0026(g.copy(h).multiplyScalar(m.y).addScaledVector(d,-f.y).multiplyScalar(r),v.copy(d).multiplyScalar(f.x).addScaledVector(h,-m.x).multiplyScalar(r),l[t].add(g),l[e].add(g),l[n].add(g),c[t].add(v),c[e].add(v),c[n].add(v))}let x=this.groups;0===x.length\u0026\u0026(x=[{start:0,count:n.length}]);for(let t=0,e=x.length;t\u003ce;++t){const e=x[t],i=e.start;for(let t=i,r=i+e.count;t\u003cr;t+=3)y(n[t+0],n[t+1],n[t+2])}const _=new oi,b=new oi,w=new oi,M=new oi;function S(t){w.fromArray(r,3*t),M.copy(w);const e=l[t];_.copy(e),_.sub(w.multiplyScalar(w.dot(e))).normalize(),b.crossVectors(M,e);const n=b.dot(c[t])\u003c0?-1:1;o[4*t]=_.x,o[4*t+1]=_.y,o[4*t+2]=_.z,o[4*t+3]=n}for(let t=0,e=x.length;t\u003ce;++t){const e=x[t],i=e.start;for(let t=i,r=i+e.count;t\u003cr;t+=3)S(n[t+0]),S(n[t+1]),S(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\"position\");if(void 0!==e){let n=this.getAttribute(\"normal\");if(void 0===n)n=new Or(new Float32Array(3*e.count),3),this.setAttribute(\"normal\",n);else for(let t=0,e=n.count;t\u003ce;t++)n.setXYZ(t,0,0,0);const i=new oi,r=new oi,s=new oi,a=new oi,o=new oi,l=new oi,c=new oi,u=new oi;if(t)for(let h=0,d=t.count;h\u003cd;h+=3){const d=t.getX(h+0),p=t.getX(h+1),f=t.getX(h+2);i.fromBufferAttribute(e,d),r.fromBufferAttribute(e,p),s.fromBufferAttribute(e,f),c.subVectors(s,r),u.subVectors(i,r),c.cross(u),a.fromBufferAttribute(n,d),o.fromBufferAttribute(n,p),l.fromBufferAttribute(n,f),a.add(c),o.add(c),l.add(c),n.setXYZ(d,a.x,a.y,a.z),n.setXYZ(p,o.x,o.y,o.z),n.setXYZ(f,l.x,l.y,l.z)}else for(let t=0,a=e.count;t\u003ca;t+=3)i.fromBufferAttribute(e,t+0),r.fromBufferAttribute(e,t+1),s.fromBufferAttribute(e,t+2),c.subVectors(s,r),u.subVectors(i,r),c.cross(u),n.setXYZ(t+0,c.x,c.y,c.z),n.setXYZ(t+1,c.x,c.y,c.z),n.setXYZ(t+2,c.x,c.y,c.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\",t);void 0===e\u0026\u0026(e=0,console.warn(\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const r=n[i].array,s=t.attributes[i],a=s.array,o=s.itemSize*e,l=Math.min(a.length,r.length-o);for(let t=0,e=o;t\u003cl;t++,e++)r[e]=a[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e\u003cn;e++)is.fromBufferAttribute(t,e),is.normalize(),t.setXYZ(e,is.x,is.y,is.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,r=t.normalized,s=new n.constructor(e.length*i);let a=0,o=0;for(let t=0,r=e.length;t\u003cr;t++){a=e[t]*i;for(let t=0;t\u003ci;t++)s[o++]=n[a++]}return new Or(s,i,r)}if(null===this.index)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\"),this;const e=new rs,n=this.index.array,i=this.attributes;for(const r in i){const s=t(i[r],n);e.setAttribute(r,s)}const r=this.morphAttributes;for(const i in r){const s=[],a=r[i];for(let e=0,i=a.length;e\u003ci;e++){const i=t(a[e],n);s.push(i)}e.morphAttributes[i]=s}e.morphTargetsRelative=this.morphTargetsRelative;const s=this.groups;for(let t=0,n=s.length;t\u003cn;t++){const n=s[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};if(t.uuid=this.uuid,t.type=this.type,\"\"!==this.name\u0026\u0026(t.name=this.name),Object.keys(this.userData).length\u003e0\u0026\u0026(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]\u0026\u0026(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e\u0026\u0026(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e\u003ci;e++){const i=n[e];s.push(i.toJSON(t.data))}s.length\u003e0\u0026\u0026(i[e]=s,r=!0)}r\u0026\u0026(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length\u003e0\u0026\u0026(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a\u0026\u0026(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new rs).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n\u0026\u0026this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t\u003cr;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const s=t.groups;for(let t=0,e=s.length;t\u003ce;t++){const e=s[t];this.addGroup(e.start,e.count,e.materialIndex)}const a=t.boundingBox;null!==a\u0026\u0026(this.boundingBox=a.clone());const o=t.boundingSphere;return null!==o\u0026\u0026(this.boundingSphere=o.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}rs.prototype.isBufferGeometry=!0;const ss=new Fi,as=new Oi,os=new Ri,ls=new oi,cs=new oi,us=new oi,hs=new oi,ds=new oi,ps=new oi,fs=new oi,ms=new oi,gs=new oi,vs=new Zn,ys=new Zn,xs=new Zn,_s=new oi,bs=new oi;class ws extends cr{constructor(t=new rs,e=new Nr){super(),this.type=\"Mesh\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences\u0026\u0026(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary\u0026\u0026(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),os.copy(n.boundingSphere),os.applyMatrix4(r),!1===t.ray.intersectsSphere(os))return;if(ss.copy(r).invert(),as.copy(t.ray).applyMatrix4(ss),null!==n.boundingBox\u0026\u0026!1===as.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,u=n.attributes.uv2,h=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=h.length;n\u003cp;n++){const p=h[n],f=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(p.start+p.count,d.start+d.count);n\u003ci;n+=3){const i=r.getX(n),h=r.getX(n+1),d=r.getX(n+2);s=Ms(this,f,t,as,a,o,l,c,u,i,h,d),s\u0026\u0026(s.faceIndex=Math.floor(n/3),s.face.materialIndex=p.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),h=Math.min(r.count,d.start+d.count);n\u003ch;n+=3){const h=r.getX(n),d=r.getX(n+1),p=r.getX(n+2);s=Ms(this,i,t,as,a,o,l,c,u,h,d,p),s\u0026\u0026(s.faceIndex=Math.floor(n/3),e.push(s))}}else if(void 0!==a)if(Array.isArray(i))for(let n=0,r=h.length;n\u003cr;n++){const r=h[n],p=i[r.materialIndex];for(let n=Math.max(r.start,d.start),i=Math.min(r.start+r.count,d.start+d.count);n\u003ci;n+=3){s=Ms(this,p,t,as,a,o,l,c,u,n,n+1,n+2),s\u0026\u0026(s.faceIndex=Math.floor(n/3),s.face.materialIndex=r.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),r=Math.min(a.count,d.start+d.count);n\u003cr;n+=3){s=Ms(this,i,t,as,a,o,l,c,u,n,n+1,n+2),s\u0026\u0026(s.faceIndex=Math.floor(n/3),e.push(s))}}}else n.isGeometry\u0026\u0026console.error(\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}function Ms(t,e,n,i,r,s,a,o,l,c,u,h){ls.fromBufferAttribute(r,c),cs.fromBufferAttribute(r,u),us.fromBufferAttribute(r,h);const d=t.morphTargetInfluences;if(e.morphTargets\u0026\u0026s\u0026\u0026d){fs.set(0,0,0),ms.set(0,0,0),gs.set(0,0,0);for(let t=0,e=s.length;t\u003ce;t++){const e=d[t],n=s[t];0!==e\u0026\u0026(hs.fromBufferAttribute(n,c),ds.fromBufferAttribute(n,u),ps.fromBufferAttribute(n,h),a?(fs.addScaledVector(hs,e),ms.addScaledVector(ds,e),gs.addScaledVector(ps,e)):(fs.addScaledVector(hs.sub(ls),e),ms.addScaledVector(ds.sub(cs),e),gs.addScaledVector(ps.sub(us),e)))}ls.add(fs),cs.add(ms),us.add(gs)}t.isSkinnedMesh\u0026\u0026(t.boneTransform(c,ls),t.boneTransform(u,cs),t.boneTransform(h,us));const p=function(t,e,n,i,r,s,a,o){let l;if(l=e.side===m?i.intersectTriangle(a,s,r,!0,o):i.intersectTriangle(r,s,a,e.side!==g,o),null===l)return null;bs.copy(o),bs.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(bs);return c\u003cn.near||c\u003en.far?null:{distance:c,point:bs.clone(),object:t}}(t,e,n,i,ls,cs,us,_s);if(p){o\u0026\u0026(vs.fromBufferAttribute(o,c),ys.fromBufferAttribute(o,u),xs.fromBufferAttribute(o,h),p.uv=Sr.getUV(_s,ls,cs,us,vs,ys,xs,new Zn)),l\u0026\u0026(vs.fromBufferAttribute(l,c),ys.fromBufferAttribute(l,u),xs.fromBufferAttribute(l,h),p.uv2=Sr.getUV(_s,ls,cs,us,vs,ys,xs,new Zn));const t={a:c,b:u,c:h,normal:new oi,materialIndex:0};Sr.getNormal(ls,cs,us,t.normal),p.face=t}return p}ws.prototype.isMesh=!0;class Ss extends rs{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type=\"BoxGeometry\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],u=[];let h=0,d=0;function p(t,e,n,i,r,s,p,f,m,g,v){const y=s/m,x=p/g,_=s/2,b=p/2,w=f/2,M=m+1,S=g+1;let T=0,E=0;const A=new oi;for(let s=0;s\u003cS;s++){const a=s*x-b;for(let o=0;o\u003cM;o++){const h=o*y-_;A[t]=h*i,A[e]=a*r,A[n]=w,l.push(A.x,A.y,A.z),A[t]=0,A[e]=0,A[n]=f\u003e0?1:-1,c.push(A.x,A.y,A.z),u.push(o/m),u.push(1-s/g),T+=1}}for(let t=0;t\u003cg;t++)for(let e=0;e\u003cm;e++){const n=h+e+M*t,i=h+e+M*(t+1),r=h+(e+1)+M*(t+1),s=h+(e+1)+M*t;o.push(n,i,s),o.push(i,r,s),E+=6}a.addGroup(d,E,v),d+=E,h+=T}p(\"z\",\"y\",\"x\",-1,-1,n,e,t,s,r,0),p(\"z\",\"y\",\"x\",1,-1,n,e,-t,s,r,1),p(\"x\",\"z\",\"y\",1,1,t,n,e,i,s,2),p(\"x\",\"z\",\"y\",1,-1,t,n,-e,i,s,3),p(\"x\",\"y\",\"z\",1,-1,t,e,n,i,r,4),p(\"x\",\"y\",\"z\",-1,-1,t,e,-n,i,r,5),this.setIndex(o),this.setAttribute(\"position\",new qr(l,3)),this.setAttribute(\"normal\",new qr(c,3)),this.setAttribute(\"uv\",new qr(u,2))}}function Ts(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const r=t[n][i];r\u0026\u0026(r.isColor||r.isMatrix3||r.isMatrix4||r.isVector2||r.isVector3||r.isVector4||r.isTexture||r.isQuaternion)?e[n][i]=r.clone():Array.isArray(r)?e[n][i]=r.slice():e[n][i]=r}}return e}function Es(t){const e={};for(let n=0;n\u003ct.length;n++){const i=Ts(t[n]);for(const t in i)e[t]=i[t]}return e}const As={clone:Ts,merge:Es};class Ls extends Er{constructor(t){super(),this.type=\"ShaderMaterial\",this.defines={},this.uniforms={},this.vertexShader=\"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\",this.fragmentShader=\"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==t\u0026\u0026(void 0!==t.attributes\u0026\u0026console.error(\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=Ts(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i\u0026\u0026i.isTexture?e.uniforms[n]={type:\"t\",value:i.toJSON(t).uuid}:i\u0026\u0026i.isColor?e.uniforms[n]={type:\"c\",value:i.getHex()}:i\u0026\u0026i.isVector2?e.uniforms[n]={type:\"v2\",value:i.toArray()}:i\u0026\u0026i.isVector3?e.uniforms[n]={type:\"v3\",value:i.toArray()}:i\u0026\u0026i.isVector4?e.uniforms[n]={type:\"v4\",value:i.toArray()}:i\u0026\u0026i.isMatrix3?e.uniforms[n]={type:\"m3\",value:i.toArray()}:i\u0026\u0026i.isMatrix4?e.uniforms[n]={type:\"m4\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length\u003e0\u0026\u0026(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]\u0026\u0026(n[t]=!0);return Object.keys(n).length\u003e0\u0026\u0026(e.extensions=n),e}}Ls.prototype.isShaderMaterial=!0;class Rs extends cr{constructor(){super(),this.type=\"Camera\",this.matrixWorldInverse=new Fi,this.projectionMatrix=new Fi,this.projectionMatrixInverse=new Fi}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){void 0===t\u0026\u0026(console.warn(\"THREE.Camera: .getWorldDirection() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}Rs.prototype.isCamera=!0;class Cs extends Rs{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\"PerspectiveCamera\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*Un*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*Hn*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*Un*Math.atan(Math.tan(.5*Hn*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*Hn*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view\u0026\u0026this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a\u0026\u0026(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view\u0026\u0026(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}Cs.prototype.isPerspectiveCamera=!0;class Ps extends cr{constructor(t,e,n){if(super(),this.type=\"CubeCamera\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\");this.renderTarget=n;const i=new Cs(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new oi(1,0,0)),this.add(i);const r=new Cs(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new oi(-1,0,0)),this.add(r);const s=new Cs(90,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new oi(0,1,0)),this.add(s);const a=new Cs(90,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new oi(0,-1,0)),this.add(a);const o=new Cs(90,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new oi(0,0,1)),this.add(o);const l=new Cs(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new oi(0,0,-1)),this.add(l)}update(t,e){null===this.parent\u0026\u0026this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.xr.enabled,u=t.getRenderTarget();t.xr.enabled=!1;const h=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=h,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(u),t.xr.enabled=c}}class Ds extends ti{constructor(t,e,n,i,r,s,a,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:st,n,i,r,s,a=void 0!==a?a:Ot,o,l,c),this._needsFlipEnvMap=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}Ds.prototype.isCubeTexture=!0;class Is extends ii{constructor(t,e,n){Number.isInteger(e)\u0026\u0026(console.warn(\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\"),e=n),super(t,t,e),e=e||{},this.texture=new Ds(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.generateMipmaps=void 0!==e.generateMipmaps\u0026\u0026e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:xt,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=Ft,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\"\\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 \u003cbegin_vertex\u003e\\n\\t\\t\\t\\t\\t#include \u003cproject_vertex\u003e\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t\",fragmentShader:\"\\n\\n\\t\\t\\t\\tuniform sampler2D tEquirect;\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\t#include \u003ccommon\u003e\\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\"},i=new Ss(5,5,5),r=new Ls({name:\"CubemapFromEquirect\",uniforms:Ts(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:m,blending:x});r.uniforms.tEquirect.value=e;const s=new ws(i,r),a=e.minFilter;e.minFilter===wt\u0026\u0026(e.minFilter=xt);return new Ps(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r\u003c6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}Is.prototype.isWebGLCubeRenderTarget=!0;const Ns=new Ri,zs=new oi;class Bs{constructor(t=new pr,e=new pr,n=new pr,i=new pr,r=new pr,s=new pr){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n\u003c6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],u=n[7],h=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,u-o,f-h,y-m).normalize(),e[1].setComponents(a+i,u+o,f+h,y+m).normalize(),e[2].setComponents(a+r,u+l,f+d,y+g).normalize(),e[3].setComponents(a-r,u-l,f-d,y-g).normalize(),e[4].setComponents(a-s,u-c,f-p,y-v).normalize(),e[5].setComponents(a+s,u+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere\u0026\u0026e.computeBoundingSphere(),Ns.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Ns)}intersectsSprite(t){return Ns.center.set(0,0,0),Ns.radius=.7071067811865476,Ns.applyMatrix4(t.matrixWorld),this.intersectsSphere(Ns)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t\u003c6;t++){if(e[t].distanceToPoint(n)\u003ci)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n\u003c6;n++){const i=e[n];if(zs.x=i.normal.x\u003e0?t.max.x:t.min.x,zs.y=i.normal.y\u003e0?t.max.y:t.min.y,zs.z=i.normal.z\u003e0?t.max.z:t.min.z,i.distanceToPoint(zs)\u003c0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n\u003c6;n++)if(e[n].distanceToPoint(t)\u003c0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Os(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e\u0026\u0026null!==n\u0026\u0026(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function Fs(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute\u0026\u0026(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute\u0026\u0026(e=e.data);const n=i.get(e);n\u0026\u0026(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version\u003ce.version)\u0026\u0026i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute\u0026\u0026(e=e.data);const s=i.get(e);void 0===s?i.set(e,function(e,i){const r=e.array,s=e.usage,a=t.createBuffer();t.bindBuffer(i,a),t.bufferData(i,r,s),e.onUploadCallback();let o=5126;return r instanceof Float32Array?o=5126:r instanceof Float64Array?console.warn(\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\"):r instanceof Uint16Array?e.isFloat16BufferAttribute?n?o=5131:console.warn(\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\"):o=5123:r instanceof Int16Array?o=5122:r instanceof Uint32Array?o=5125:r instanceof Int32Array?o=5124:r instanceof Int8Array?o=5120:(r instanceof Uint8Array||r instanceof Uint8ClampedArray)\u0026\u0026(o=5121),{buffer:a,type:o,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}(e,r)):s.version\u003ce.version\u0026\u0026(!function(e,i,r){const s=i.array,a=i.updateRange;t.bindBuffer(r,e),-1===a.count?t.bufferSubData(r,0,s):(n?t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s,a.offset,a.count):t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s.subarray(a.offset,a.offset+a.count)),a.count=-1)}(s.buffer,e,r),s.version=e.version)}}}class Hs extends rs{constructor(t=1,e=1,n=1,i=1){super(),this.type=\"PlaneGeometry\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const r=t/2,s=e/2,a=Math.floor(n),o=Math.floor(i),l=a+1,c=o+1,u=t/a,h=e/o,d=[],p=[],f=[],m=[];for(let t=0;t\u003cc;t++){const e=t*h-s;for(let n=0;n\u003cl;n++){const i=n*u-r;p.push(i,-e,0),f.push(0,0,1),m.push(n/a),m.push(1-t/o)}}for(let t=0;t\u003co;t++)for(let e=0;e\u003ca;e++){const n=e+l*t,i=e+l*(t+1),r=e+1+l*(t+1),s=e+1+l*t;d.push(n,i,s),d.push(i,r,s)}this.setIndex(d),this.setAttribute(\"position\",new qr(p,3)),this.setAttribute(\"normal\",new qr(f,3)),this.setAttribute(\"uv\",new qr(m,2))}}const Us={alphamap_fragment:\"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\",alphamap_pars_fragment:\"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",alphatest_fragment:\"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a \u003c ALPHATEST ) discard;\\n#endif\",aomap_fragment:\"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\",aomap_pars_fragment:\"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\",begin_vertex:\"vec3 transformed = vec3( position );\",beginnormal_vertex:\"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\",bsdfs:\"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\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\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance \u003e 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance \u003e 0.0 \u0026\u0026 decayExponent \u003e 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_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}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * 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 \u003e 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 ] ) \u003c 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}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\",bumpmap_pars_fragment:\"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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\",clipping_planes_fragment:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES \u003c NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i \u003c NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) \u0026\u0026 clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\",clipping_planes_pars_fragment:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\",clipping_planes_pars_vertex:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvarying vec3 vClipPosition;\\n#endif\",clipping_planes_vertex:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\",color_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\",color_pars_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_pars_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_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\",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; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\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};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\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}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\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}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\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}\",cube_uv_reflection_fragment:\"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.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 \u003e absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x \u003e absDirection.y )\\n\\t\\t\\t\\tface = direction.x \u003e 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y \u003e 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z \u003e absDirection.y )\\n\\t\\t\\t\\tface = direction.z \u003e 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y \u003e 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\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face \u003e 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\\tif ( mipInt \u003c cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness \u003e= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness \u003e= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness \u003e= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness \u003e= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\\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\",defaultnormal_vertex:\"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\",displacementmap_pars_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\",displacementmap_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\",emissivemap_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\",emissivemap_pars_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\",encodings_fragment:\"gl_FragColor = linearToOutputTexel( gl_FragColor );\",encodings_pars_fragment:\"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( 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}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\",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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\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\",envmap_common_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\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\",envmap_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\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\",envmap_pars_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\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\",envmap_physical_pars_fragment:\"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\",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\",fog_vertex:\"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\",fog_pars_vertex:\"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\",fog_fragment:\"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\",fog_pars_fragment:\"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\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\",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 texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x \u003c 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\",lightmap_fragment:\"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\",lightmap_pars_fragment:\"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\",lights_lambert_vertex:\"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\",lights_pars_begin:\"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\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 GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS \u003e 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS \u003e 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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS \u003e 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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos \u003e spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS \u003e 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 \u003e 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 GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\",lights_toon_fragment:\"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\",lights_toon_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\",lights_phong_fragment:\"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\",lights_phong_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\",lights_physical_fragment:\"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), rawDiffuseColor, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), rawDiffuseColor, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\",lights_physical_pars_fragment:\"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS \u003e 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\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.specularRoughness;\\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * 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}\",lights_fragment_begin:\"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_SPOT_LIGHT_SHADOWS \u003e 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, 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\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS \u003e 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\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\",lights_fragment_maps:\"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD ) \u0026\u0026 defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) \u0026\u0026 defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\",lights_fragment_end:\"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\",logdepthbuf_fragment:\"#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\",logdepthbuf_pars_fragment:\"#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\",logdepthbuf_pars_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\",logdepthbuf_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\",map_fragment:\"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\",map_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\",map_particle_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\",map_particle_pars_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",metalnessmap_fragment:\"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\",metalnessmap_pars_fragment:\"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\",morphnormal_vertex:\"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\",morphtarget_pars_vertex:\"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\",morphtarget_vertex:\"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\",normal_fragment_begin:\"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\",normal_fragment_maps:\"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\",normalmap_pars_fragment:\"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) \u0026\u0026 ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\",clearcoat_normal_fragment_begin:\"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\",clearcoat_normal_fragment_maps:\"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\",clearcoat_pars_fragment:\"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\",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.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( 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( 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 linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\",premultiplied_alpha_fragment:\"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\",project_vertex:\"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\",dithering_fragment:\"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\",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\",roughnessmap_fragment:\"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\",roughnessmap_pars_fragment:\"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\",shadowmap_pars_fragment:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 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 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 \u003e 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\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 \u003e 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 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 shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x \u003e= 0.0, shadowCoord.x \u003c= 1.0, shadowCoord.y \u003e= 0.0, shadowCoord.y \u003c= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z \u003c= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\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 shadow;\\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 \u003e= almostOne ) {\\n\\t\\t\\tif ( v.z \u003e 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x \u003e= 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 \u003e= 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 shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\",shadowmap_pars_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 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 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 \u003e 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\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 \u003e 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 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\",shadowmap_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0 || NUM_SPOT_LIGHT_SHADOWS \u003e 0 || NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\",shadowmask_pars_fragment:\"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, 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 \u003e 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, 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}\",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\",skinning_pars_vertex:\"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\",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\",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\",specularmap_fragment:\"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\",specularmap_pars_fragment:\"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\",tonemapping_fragment:\"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\",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 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}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\",transmission_fragment:\"#ifdef USE_TRANSMISSION\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSNMAP\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n\\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\\n\\tvec3 f0 = vec3( pow( ior - 1.0, 2.0 ) / pow( ior + 1.0, 2.0 ) );\\n\\tvec3 f90 = vec3( 1.0 );\\n\\tvec3 f_transmission = totalTransmission * getIBLVolumeRefraction(\\n\\t\\tnormal, v, viewDir, roughnessFactor, diffuseColor.rgb, f0, f90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationColor, attenuationDistance);\\n\\tdiffuseColor.rgb = mix( diffuseColor.rgb, f_transmission, totalTransmission );\\n#endif\",transmission_pars_fragment:\"#ifdef USE_TRANSMISSION\\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 vec4 vWorldPosition;\\n\\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, 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(float roughness, float ior) {\\n\\t\\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\\n\\t}\\n\\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\\n\\t\\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\\n\\t\\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\\n\\t}\\n\\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\\n\\t\\tif (attenuationDistance == 0.0) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, vec3 viewDir, float perceptualRoughness, vec3 baseColor, vec3 f0, vec3 f90,\\n\\t\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec3 attenuationColor, float attenuationDistance) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\\n\\t\\tfloat NdotV = saturate(dot(n, viewDir));\\n\\t\\tvec2 brdf = integrateSpecularBRDF(NdotV, perceptualRoughness);\\n\\t\\tvec3 specularColor = f0 * brdf.x + f90 * brdf.y;\\n\\t\\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\\n\\t}\\n#endif\",uv_pars_fragment:\"#if ( defined( USE_UV ) \u0026\u0026 ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\",uv_pars_vertex:\"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\",uv_vertex:\"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\",uv2_pars_fragment:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\",uv2_pars_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\",uv2_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\",worldpos_vertex:\"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\",background_frag:\"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",background_vert:\"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}\",cube_frag:\"#include \u003cenvmap_common_pars_fragment\u003e\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \u003ccube_uv_reflection_fragment\u003e\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",cube_vert:\"varying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\tgl_Position.z = gl_Position.w;\\n}\",depth_frag:\"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003clogdepthbuf_fragment\u003e\\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#endif\\n}\",depth_vert:\"#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \u003cbeginnormal_vertex\u003e\\n\\t\\t#include \u003cmorphnormal_vertex\u003e\\n\\t\\t#include \u003cskinnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\",distanceRGBA_frag:\"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main () {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\",distanceRGBA_vert:\"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \u003cbeginnormal_vertex\u003e\\n\\t\\t#include \u003cmorphnormal_vertex\u003e\\n\\t\\t#include \u003cskinnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvWorldPosition = worldPosition.xyz;\\n}\",equirect_frag:\"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",equirect_vert:\"varying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n}\",linedashed_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tif ( mod( vLineDistance, totalSize ) \u003e dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n}\",linedashed_vert:\"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshbasic_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \u003caomap_fragment\u003e\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshbasic_vert:\"#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_ENVMAP\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshlambert_frag:\"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cshadowmask_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \u003clightmap_fragment\u003e\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshlambert_vert:\"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003clights_lambert_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshmatcap_frag:\"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\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\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshmatcap_vert:\"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n}\",meshtoon_frag:\"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cgradientmap_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003clights_toon_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#include \u003clights_toon_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshtoon_vert:\"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshphong_frag:\"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003clights_phong_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#include \u003clights_phong_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshphong_vert:\"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshphysical_frag:\"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform vec3 attenuationColor;\\n\\tuniform float attenuationDistance;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#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#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003ctransmission_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_physical_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003clights_physical_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003cclearcoat_pars_fragment\u003e\\n#include \u003croughnessmap_pars_fragment\u003e\\n#include \u003cmetalnessmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\n\\t\\tfloat thicknessFactor = thickness;\\n\\t#endif\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003croughnessmap_fragment\u003e\\n\\t#include \u003cmetalnessmap_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cclearcoat_normal_fragment_begin\u003e\\n\\t#include \u003cclearcoat_normal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\tvec3 rawDiffuseColor = diffuseColor.rgb;\\n\\t#include \u003ctransmission_fragment\u003e\\n\\t#include \u003clights_physical_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshphysical_vert:\"#define STANDARD\\nvarying vec3 vViewPosition;\\n#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#ifdef USE_TRANSMISSION\\n\\tvarying vec4 vWorldPosition;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#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\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition;\\n#endif\\n}\",normal_frag:\"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\",normal_vert:\"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#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\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\",points_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cmap_particle_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_particle_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n}\",points_vert:\"uniform float size;\\nuniform float scale;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\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 \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",shadow_frag:\"uniform vec3 color;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cshadowmask_pars_fragment\u003e\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n}\",shadow_vert:\"#include \u003ccommon\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",sprite_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n}\",sprite_vert:\"uniform float rotation;\\nuniform vec2 center;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\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 \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\"},Gs={common:{diffuse:{value:new Ir(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Jn},uv2Transform:{value:new Jn},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Zn(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Ir(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Ir(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Jn}},sprite:{diffuse:{value:new Ir(16777215)},opacity:{value:1},center:{value:new Zn(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Jn}}},ks={basic:{uniforms:Es([Gs.common,Gs.specularmap,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.fog]),vertexShader:Us.meshbasic_vert,fragmentShader:Us.meshbasic_frag},lambert:{uniforms:Es([Gs.common,Gs.specularmap,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)}}]),vertexShader:Us.meshlambert_vert,fragmentShader:Us.meshlambert_frag},phong:{uniforms:Es([Gs.common,Gs.specularmap,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)},specular:{value:new Ir(1118481)},shininess:{value:30}}]),vertexShader:Us.meshphong_vert,fragmentShader:Us.meshphong_frag},standard:{uniforms:Es([Gs.common,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.roughnessmap,Gs.metalnessmap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Us.meshphysical_vert,fragmentShader:Us.meshphysical_frag},toon:{uniforms:Es([Gs.common,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.gradientmap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)}}]),vertexShader:Us.meshtoon_vert,fragmentShader:Us.meshtoon_frag},matcap:{uniforms:Es([Gs.common,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.fog,{matcap:{value:null}}]),vertexShader:Us.meshmatcap_vert,fragmentShader:Us.meshmatcap_frag},points:{uniforms:Es([Gs.points,Gs.fog]),vertexShader:Us.points_vert,fragmentShader:Us.points_frag},dashed:{uniforms:Es([Gs.common,Gs.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Us.linedashed_vert,fragmentShader:Us.linedashed_frag},depth:{uniforms:Es([Gs.common,Gs.displacementmap]),vertexShader:Us.depth_vert,fragmentShader:Us.depth_frag},normal:{uniforms:Es([Gs.common,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,{opacity:{value:1}}]),vertexShader:Us.normal_vert,fragmentShader:Us.normal_frag},sprite:{uniforms:Es([Gs.sprite,Gs.fog]),vertexShader:Us.sprite_vert,fragmentShader:Us.sprite_frag},background:{uniforms:{uvTransform:{value:new Jn},t2D:{value:null}},vertexShader:Us.background_vert,fragmentShader:Us.background_frag},cube:{uniforms:Es([Gs.envmap,{opacity:{value:1}}]),vertexShader:Us.cube_vert,fragmentShader:Us.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Us.equirect_vert,fragmentShader:Us.equirect_frag},distanceRGBA:{uniforms:Es([Gs.common,Gs.displacementmap,{referencePosition:{value:new oi},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Us.distanceRGBA_vert,fragmentShader:Us.distanceRGBA_frag},shadow:{uniforms:Es([Gs.lights,Gs.fog,{color:{value:new Ir(0)},opacity:{value:1}}]),vertexShader:Us.shadow_vert,fragmentShader:Us.shadow_frag}};function Vs(t,e,n,i,r){const s=new Ir(0);let a,o,l=0,c=null,u=0,h=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return s},setClearColor:function(t,e=1){s.set(t),l=e,d(s,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(s,l)},render:function(n,r){let p=!1,g=!0===r.isScene?r.background:null;g\u0026\u0026g.isTexture\u0026\u0026(g=e.get(g));const v=t.xr,y=v.getSession\u0026\u0026v.getSession();y\u0026\u0026\"additive\"===y.environmentBlendMode\u0026\u0026(g=null),null===g?d(s,l):g\u0026\u0026g.isColor\u0026\u0026(d(g,1),p=!0),(t.autoClear||p)\u0026\u0026t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),g\u0026\u0026(g.isCubeTexture||g.mapping===ct)?(void 0===o\u0026\u0026(o=new ws(new Ss(1,1,1),new Ls({name:\"BackgroundCubeMaterial\",uniforms:Ts(ks.cube.uniforms),vertexShader:ks.cube.vertexShader,fragmentShader:ks.cube.fragmentShader,side:m,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\"normal\"),o.geometry.deleteAttribute(\"uv\"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,\"envMap\",{get:function(){return this.uniforms.envMap.value}}),i.update(o)),o.material.uniforms.envMap.value=g,o.material.uniforms.flipEnvMap.value=g.isCubeTexture\u0026\u0026g._needsFlipEnvMap?-1:1,c===g\u0026\u0026u===g.version\u0026\u0026h===t.toneMapping||(o.material.needsUpdate=!0,c=g,u=g.version,h=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):g\u0026\u0026g.isTexture\u0026\u0026(void 0===a\u0026\u0026(a=new ws(new Hs(2,2),new Ls({name:\"BackgroundMaterial\",uniforms:Ts(ks.background.uniforms),vertexShader:ks.background.vertexShader,fragmentShader:ks.background.fragmentShader,side:f,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute(\"normal\"),Object.defineProperty(a.material,\"map\",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=g,!0===g.matrixAutoUpdate\u0026\u0026g.updateMatrix(),a.material.uniforms.uvTransform.value.copy(g.matrix),c===g\u0026\u0026u===g.version\u0026\u0026h===t.toneMapping||(a.material.needsUpdate=!0,c=g,u=g.version,h=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function Ws(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get(\"OES_vertex_array_object\"),a=i.isWebGL2||null!==s,o={},l=d(null);let c=l;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function h(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t\u003cr;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function p(){const t=c.newAttributes;for(let e=0,n=t.length;e\u003cn;e++)t[e]=0}function f(t){m(t,0)}function m(n,r){const s=c.newAttributes,a=c.enabledAttributes,o=c.attributeDivisors;if(s[n]=1,0===a[n]\u0026\u0026(t.enableVertexAttribArray(n),a[n]=1),o[n]!==r){(i.isWebGL2?t:e.get(\"ANGLE_instanced_arrays\"))[i.isWebGL2?\"vertexAttribDivisor\":\"vertexAttribDivisorANGLE\"](n,r),o[n]=r}}function g(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,r=n.length;i\u003cr;i++)n[i]!==e[i]\u0026\u0026(t.disableVertexAttribArray(i),n[i]=0)}function v(e,n,r,s,a,o){!0!==i.isWebGL2||5124!==r\u0026\u00265125!==r?t.vertexAttribPointer(e,n,r,s,a,o):t.vertexAttribIPointer(e,n,r,a,o)}function y(){x(),c!==l\u0026\u0026(c=l,u(c.object))}function x(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(r,l,h,y,x){let _=!1;if(a){const e=function(e,n,r){const a=!0===r.wireframe;let l=o[e.id];void 0===l\u0026\u0026(l={},o[e.id]=l);let c=l[n.id];void 0===c\u0026\u0026(c={},l[n.id]=c);let u=c[a];void 0===u\u0026\u0026(u=d(i.isWebGL2?t.createVertexArray():s.createVertexArrayOES()),c[a]=u);return u}(y,h,l);c!==e\u0026\u0026(c=e,u(c.object)),_=function(t,e){const n=c.attributes,i=t.attributes;let r=0;for(const t in i){const e=n[t],s=i[t];if(void 0===e)return!0;if(e.attribute!==s)return!0;if(e.data!==s.data)return!0;r++}return c.attributesNum!==r||c.index!==e}(y,x),_\u0026\u0026function(t,e){const n={},i=t.attributes;let r=0;for(const t in i){const e=i[t],s={};s.attribute=e,e.data\u0026\u0026(s.data=e.data),n[t]=s,r++}c.attributes=n,c.attributesNum=r,c.index=e}(y,x)}else{const t=!0===l.wireframe;c.geometry===y.id\u0026\u0026c.program===h.id\u0026\u0026c.wireframe===t||(c.geometry=y.id,c.program=h.id,c.wireframe=t,_=!0)}!0===r.isInstancedMesh\u0026\u0026(_=!0),null!==x\u0026\u0026n.update(x,34963),_\u0026\u0026(!function(r,s,a,o){if(!1===i.isWebGL2\u0026\u0026(r.isInstancedMesh||o.isInstancedBufferGeometry)\u0026\u0026null===e.get(\"ANGLE_instanced_arrays\"))return;p();const l=o.attributes,c=a.getAttributes(),u=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i\u003e=0){const s=l[e];if(void 0!==s){const e=s.normalized,r=s.itemSize,a=n.get(s);if(void 0===a)continue;const l=a.buffer,c=a.type,u=a.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,a=n.stride,h=s.offset;n\u0026\u0026n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===o._maxInstanceCount\u0026\u0026(o._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,a*u,h*u)}else s.isInstancedBufferAttribute?(m(i,s.meshPerAttribute),void 0===o._maxInstanceCount\u0026\u0026(o._maxInstanceCount=s.meshPerAttribute*s.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if(\"instanceMatrix\"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const s=e.buffer,a=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i+0,4,a,!1,64,0),t.vertexAttribPointer(i+1,4,a,!1,64,16),t.vertexAttribPointer(i+2,4,a,!1,64,32),t.vertexAttribPointer(i+3,4,a,!1,64,48)}else if(\"instanceColor\"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const s=e.buffer,a=e.type;m(i,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i,3,a,!1,12,0)}else if(void 0!==u){const n=u[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,h,y),null!==x\u0026\u0026t.bindBuffer(34963,n.get(x).buffer))},reset:y,resetDefaultState:x,dispose:function(){y();for(const t in o){const e=o[t];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete o[t]}},releaseStatesOfGeometry:function(t){if(void 0===o[t.id])return;const e=o[t.id];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete o[t.id]},releaseStatesOfProgram:function(t){for(const e in o){const n=o[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)h(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function js(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,a,o){if(0===o)return;let l,c;if(r)l=t,c=\"drawArraysInstanced\";else if(l=e.get(\"ANGLE_instanced_arrays\"),c=\"drawArraysInstancedANGLE\",null===l)return void console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");l[c](s,i,a,o),n.update(a,s,o)}}function qs(t,e,n){let i;function r(e){if(\"highp\"===e){if(t.getShaderPrecisionFormat(35633,36338).precision\u003e0\u0026\u0026t.getShaderPrecisionFormat(35632,36338).precision\u003e0)return\"highp\";e=\"mediump\"}return\"mediump\"===e\u0026\u0026t.getShaderPrecisionFormat(35633,36337).precision\u003e0\u0026\u0026t.getShaderPrecisionFormat(35632,36337).precision\u003e0?\"mediump\":\"lowp\"}const s=\"undefined\"!=typeof WebGL2RenderingContext\u0026\u0026t instanceof WebGL2RenderingContext||\"undefined\"!=typeof WebGL2ComputeRenderingContext\u0026\u0026t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:\"highp\";const o=r(a);o!==a\u0026\u0026(console.warn(\"THREE.WebGLRenderer:\",a,\"not supported, using\",o,\"instead.\"),a=o);const l=s||e.has(\"WEBGL_draw_buffers\"),c=!0===n.logarithmicDepthBuffer,u=t.getParameter(34930),h=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),f=t.getParameter(34921),m=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=h\u003e0,x=s||e.has(\"OES_texture_float\");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\"EXT_texture_filter_anisotropic\")){const n=e.get(\"EXT_texture_filter_anisotropic\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:u,maxVertexTextures:h,maxTextureSize:d,maxCubemapSize:p,maxAttributes:f,maxVertexUniforms:m,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y\u0026\u0026x,maxSamples:s?t.getParameter(36183):0}}function Xs(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new pr,o=new Jn,l={value:null,needsUpdate:!1};function c(){l.value!==n\u0026\u0026(l.value=n,l.needsUpdate=i\u003e0),e.numPlanes=i,e.numIntersection=0}function u(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length\u003ce)\u0026\u0026(c=new Float32Array(e));for(let e=0,n=i;e!==s;++e,n+=4)a.copy(t[e]).applyMatrix4(r,o),a.normal.toArray(c,n),c[n+3]=a.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=s,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,s){const a=0!==t.length||e||0!==i||r;return r=e,n=u(t,s,0),i=t.length,a},this.beginShadows=function(){s=!0,u(null)},this.endShadows=function(){s=!1,c()},this.setState=function(e,a,o){const h=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,f=t.get(e);if(!r||null===h||0===h.length||s\u0026\u0026!p)s?u(null):c();else{const t=s?0:i,e=4*t;let r=f.clippingState||null;l.value=r,r=u(h,a,e,o);for(let t=0;t!==e;++t)r[t]=n[t];f.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function Ys(t){let e=new WeakMap;function n(t,e){return e===ot?t.mapping=st:e===lt\u0026\u0026(t.mapping=at),t}function i(t){const n=t.target;n.removeEventListener(\"dispose\",i);const r=e.get(n);void 0!==r\u0026\u0026(e.delete(n),r.dispose())}return{get:function(r){if(r\u0026\u0026r.isTexture){const s=r.mapping;if(s===ot||s===lt){if(e.has(r)){return n(e.get(r).texture,r.mapping)}{const s=r.image;if(s\u0026\u0026s.height\u003e0){const a=t.getRenderTarget(),o=new Is(s.height/2);return o.fromEquirectangularTexture(t,r),e.set(r,o),t.setRenderTarget(a),r.addEventListener(\"dispose\",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function Zs(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\"WEBGL_depth_texture\":i=t.getExtension(\"WEBGL_depth_texture\")||t.getExtension(\"MOZ_WEBGL_depth_texture\")||t.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case\"EXT_texture_filter_anisotropic\":i=t.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case\"WEBGL_compressed_texture_s3tc\":i=t.getExtension(\"WEBGL_compressed_texture_s3tc\")||t.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case\"WEBGL_compressed_texture_pvrtc\":i=t.getExtension(\"WEBGL_compressed_texture_pvrtc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\"EXT_color_buffer_float\"):(n(\"WEBGL_depth_texture\"),n(\"OES_texture_float\"),n(\"OES_texture_half_float\"),n(\"OES_texture_half_float_linear\"),n(\"OES_standard_derivatives\"),n(\"OES_element_index_uint\"),n(\"OES_vertex_array_object\"),n(\"ANGLE_instanced_arrays\")),n(\"OES_texture_float_linear\"),n(\"EXT_color_buffer_half_float\")},get:function(t){const e=n(t);return null===e\u0026\u0026console.warn(\"THREE.WebGLRenderer: \"+t+\" extension not supported.\"),e}}}function Js(t,e,n,i){const r={},s=new WeakMap;function a(t){const o=t.target;null!==o.index\u0026\u0026e.remove(o.index);for(const t in o.attributes)e.remove(o.attributes[t]);o.removeEventListener(\"dispose\",a),delete r[o.id];const l=s.get(o);l\u0026\u0026(e.remove(l),s.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry\u0026\u0026delete o._maxInstanceCount,n.memory.geometries--}function o(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e\u003ci;e+=3){const i=t[e+0],r=t[e+1],s=t[e+2];n.push(i,r,r,s,s,i)}}else{const t=r.array;a=r.version;for(let e=0,i=t.length/3-1;e\u003ci;e+=3){const t=e+0,i=e+1,r=e+2;n.push(t,i,i,r,r,t)}}const o=new(Yr(n)\u003e65535?Wr:kr)(n,1);o.version=a;const l=s.get(t);l\u0026\u0026e.remove(l),s.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener(\"dispose\",a),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t\u003ci;t++)e.update(n[t],34962)}},getWireframeAttribute:function(t){const e=s.get(t);if(e){const n=t.index;null!==n\u0026\u0026e.version\u003cn.version\u0026\u0026o(t)}else o(t);return s.get(t)}}}function Qs(t,e,n,i){const r=i.isWebGL2;let s,a,o;this.setMode=function(t){s=t},this.setIndex=function(t){a=t.type,o=t.bytesPerElement},this.render=function(e,i){t.drawElements(s,i,a,e*o),n.update(i,s,1)},this.renderInstances=function(i,l,c){if(0===c)return;let u,h;if(r)u=t,h=\"drawElementsInstanced\";else if(u=e.get(\"ANGLE_instanced_arrays\"),h=\"drawElementsInstancedANGLE\",null===u)return void console.error(\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");u[h](s,l,a,i*o,c),n.update(l,s,c)}}function Ks(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(t,n,i){switch(e.calls++,n){case 4:e.triangles+=i*(t/3);break;case 1:e.lines+=i*(t/2);break;case 3:e.lines+=i*(t-1);break;case 2:e.lines+=i*t;break;case 0:e.points+=i*t;break;default:console.error(\"THREE.WebGLInfo: Unknown draw mode:\",n)}}}}function $s(t,e){return t[0]-e[0]}function ta(t,e){return Math.abs(e[1])-Math.abs(t[1])}function ea(t){const e={},n=new Float32Array(8),i=[];for(let t=0;t\u003c8;t++)i[t]=[t,0];return{update:function(r,s,a,o){const l=r.morphTargetInfluences,c=void 0===l?0:l.length;let u=e[s.id];if(void 0===u){u=[];for(let t=0;t\u003cc;t++)u[t]=[t,0];e[s.id]=u}for(let t=0;t\u003cc;t++){const e=u[t];e[0]=t,e[1]=l[t]}u.sort(ta);for(let t=0;t\u003c8;t++)t\u003cc\u0026\u0026u[t][1]?(i[t][0]=u[t][0],i[t][1]=u[t][1]):(i[t][0]=Number.MAX_SAFE_INTEGER,i[t][1]=0);i.sort($s);const h=a.morphTargets\u0026\u0026s.morphAttributes.position,d=a.morphNormals\u0026\u0026s.morphAttributes.normal;let p=0;for(let t=0;t\u003c8;t++){const e=i[t],r=e[0],a=e[1];r!==Number.MAX_SAFE_INTEGER\u0026\u0026a?(h\u0026\u0026s.getAttribute(\"morphTarget\"+t)!==h[r]\u0026\u0026s.setAttribute(\"morphTarget\"+t,h[r]),d\u0026\u0026s.getAttribute(\"morphNormal\"+t)!==d[r]\u0026\u0026s.setAttribute(\"morphNormal\"+t,d[r]),n[t]=a,p+=a):(h\u0026\u0026!0===s.hasAttribute(\"morphTarget\"+t)\u0026\u0026s.deleteAttribute(\"morphTarget\"+t),d\u0026\u0026!0===s.hasAttribute(\"morphNormal\"+t)\u0026\u0026s.deleteAttribute(\"morphNormal\"+t),n[t]=0)}const f=s.morphTargetsRelative?1:1-p;o.getUniforms().setValue(t,\"morphTargetBaseInfluence\",f),o.getUniforms().setValue(t,\"morphTargetInfluences\",n)}}}function na(t,e,n,i){let r=new WeakMap;function s(t){const e=t.target;e.removeEventListener(\"dispose\",s),n.remove(e.instanceMatrix),null!==e.instanceColor\u0026\u0026n.remove(e.instanceColor)}return{update:function(t){const a=i.render.frame,o=t.geometry,l=e.get(t,o);return r.get(l)!==a\u0026\u0026(e.update(l),r.set(l,a)),t.isInstancedMesh\u0026\u0026(!1===t.hasEventListener(\"dispose\",s)\u0026\u0026t.addEventListener(\"dispose\",s),n.update(t.instanceMatrix,34962),null!==t.instanceColor\u0026\u0026n.update(t.instanceColor,34962)),l},dispose:function(){r=new WeakMap}}}ks.physical={uniforms:Es([ks.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new Zn(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new Ir(0)},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new Zn},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new Ir(0)}}]),vertexShader:Us.meshphysical_vert,fragmentShader:Us.meshphysical_frag};class ia extends ti{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=ft,this.minFilter=ft,this.wrapR=dt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}ia.prototype.isDataTexture2DArray=!0;class ra extends ti{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=ft,this.minFilter=ft,this.wrapR=dt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}ra.prototype.isDataTexture3D=!0;const sa=new ti,aa=new ia,oa=new ra,la=new Ds,ca=[],ua=[],ha=new Float32Array(16),da=new Float32Array(9),pa=new Float32Array(4);function fa(t,e,n){const i=t[0];if(i\u003c=0||i\u003e0)return t;const r=e*n;let s=ca[r];if(void 0===s\u0026\u0026(s=new Float32Array(r),ca[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function ma(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n\u003ci;n++)if(t[n]!==e[n])return!1;return!0}function ga(t,e){for(let n=0,i=e.length;n\u003ci;n++)t[n]=e[n]}function va(t,e){let n=ua[e];void 0===n\u0026\u0026(n=new Int32Array(e),ua[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function ya(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1f(this.addr,e),n[0]=e)}function xa(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(ma(n,e))return;t.uniform2fv(this.addr,e),ga(n,e)}}function _a(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y\u0026\u0026n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r\u0026\u0026n[1]===e.g\u0026\u0026n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(ma(n,e))return;t.uniform3fv(this.addr,e),ga(n,e)}}function ba(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y\u0026\u0026n[2]===e.z\u0026\u0026n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(ma(n,e))return;t.uniform4fv(this.addr,e),ga(n,e)}}function wa(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ma(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),ga(n,e)}else{if(ma(n,i))return;pa.set(i),t.uniformMatrix2fv(this.addr,!1,pa),ga(n,i)}}function Ma(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ma(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),ga(n,e)}else{if(ma(n,i))return;da.set(i),t.uniformMatrix3fv(this.addr,!1,da),ga(n,i)}}function Sa(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ma(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),ga(n,e)}else{if(ma(n,i))return;ha.set(i),t.uniformMatrix4fv(this.addr,!1,ha),ga(n,i)}}function Ta(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1i(this.addr,e),n[0]=e)}function Ea(t,e){const n=this.cache;ma(n,e)||(t.uniform2iv(this.addr,e),ga(n,e))}function Aa(t,e){const n=this.cache;ma(n,e)||(t.uniform3iv(this.addr,e),ga(n,e))}function La(t,e){const n=this.cache;ma(n,e)||(t.uniform4iv(this.addr,e),ga(n,e))}function Ra(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1ui(this.addr,e),n[0]=e)}function Ca(t,e){const n=this.cache;ma(n,e)||(t.uniform2uiv(this.addr,e),ga(n,e))}function Pa(t,e){const n=this.cache;ma(n,e)||(t.uniform3uiv(this.addr,e),ga(n,e))}function Da(t,e){const n=this.cache;ma(n,e)||(t.uniform4uiv(this.addr,e),ga(n,e))}function Ia(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTexture2D(e||sa,r)}function Na(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTexture3D(e||oa,r)}function za(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTextureCube(e||la,r)}function Ba(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTexture2DArray(e||aa,r)}function Oa(t,e){t.uniform1fv(this.addr,e)}function Fa(t,e){const n=fa(e,this.size,2);t.uniform2fv(this.addr,n)}function Ha(t,e){const n=fa(e,this.size,3);t.uniform3fv(this.addr,n)}function Ua(t,e){const n=fa(e,this.size,4);t.uniform4fv(this.addr,n)}function Ga(t,e){const n=fa(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function ka(t,e){const n=fa(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function Va(t,e){const n=fa(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function Wa(t,e){t.uniform1iv(this.addr,e)}function ja(t,e){t.uniform2iv(this.addr,e)}function qa(t,e){t.uniform3iv(this.addr,e)}function Xa(t,e){t.uniform4iv(this.addr,e)}function Ya(t,e){t.uniform1uiv(this.addr,e)}function Za(t,e){t.uniform2uiv(this.addr,e)}function Ja(t,e){t.uniform3uiv(this.addr,e)}function Qa(t,e){t.uniform4uiv(this.addr,e)}function Ka(t,e,n){const i=e.length,r=va(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTexture2D(e[t]||sa,r[t])}function $a(t,e,n){const i=e.length,r=va(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTextureCube(e[t]||la,r[t])}function to(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return ya;case 35664:return xa;case 35665:return _a;case 35666:return ba;case 35674:return wa;case 35675:return Ma;case 35676:return Sa;case 5124:case 35670:return Ta;case 35667:case 35671:return Ea;case 35668:case 35672:return Aa;case 35669:case 35673:return La;case 5125:return Ra;case 36294:return Ca;case 36295:return Pa;case 36296:return Da;case 35678:case 36198:case 36298:case 36306:case 35682:return Ia;case 35679:case 36299:case 36307:return Na;case 35680:case 36300:case 36308:case 36293:return za;case 36289:case 36303:case 36311:case 36292:return Ba}}(e.type)}function eo(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return Oa;case 35664:return Fa;case 35665:return Ha;case 35666:return Ua;case 35674:return Ga;case 35675:return ka;case 35676:return Va;case 5124:case 35670:return Wa;case 35667:case 35671:return ja;case 35668:case 35672:return qa;case 35669:case 35673:return Xa;case 5125:return Ya;case 36294:return Za;case 36295:return Ja;case 36296:return Qa;case 35678:case 36198:case 36298:case 36306:case 35682:return Ka;case 35680:case 36300:case 36308:case 36293:return $a}}(e.type)}function no(t){this.id=t,this.seq=[],this.map={}}eo.prototype.updateCache=function(t){const e=this.cache;t instanceof Float32Array\u0026\u0026e.length!==t.length\u0026\u0026(this.cache=new Float32Array(t.length)),ga(e,t)},no.prototype.setValue=function(t,e,n){const i=this.seq;for(let r=0,s=i.length;r!==s;++r){const s=i[r];s.setValue(t,e[s.id],n)}};const io=/(\\w+)(\\])?(\\[|\\.)?/g;function ro(t,e){t.seq.push(e),t.map[e.id]=e}function so(t,e,n){const i=t.name,r=i.length;for(io.lastIndex=0;;){const s=io.exec(i),a=io.lastIndex;let o=s[1];const l=\"]\"===s[2],c=s[3];if(l\u0026\u0026(o|=0),void 0===c||\"[\"===c\u0026\u0026a+2===r){ro(n,void 0===c?new to(o,t,e):new eo(o,t,e));break}{let t=n.map[o];void 0===t\u0026\u0026(t=new no(o),ro(n,t)),n=t}}}function ao(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,35718);for(let i=0;i\u003cn;++i){const n=t.getActiveUniform(e,i);so(n,t.getUniformLocation(e,n.name),this)}}function oo(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}ao.prototype.setValue=function(t,e,n,i){const r=this.map[e];void 0!==r\u0026\u0026r.setValue(t,n,i)},ao.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i\u0026\u0026this.setValue(t,n,i)},ao.upload=function(t,e,n,i){for(let r=0,s=e.length;r!==s;++r){const s=e[r],a=n[s.id];!1!==a.needsUpdate\u0026\u0026s.setValue(t,a.value,i)}},ao.seqWithValue=function(t,e){const n=[];for(let i=0,r=t.length;i!==r;++i){const r=t[i];r.id in e\u0026\u0026n.push(r)}return n};let lo=0;function co(t){switch(t){case Je:return[\"Linear\",\"( value )\"];case Qe:return[\"sRGB\",\"( value )\"];case $e:return[\"RGBE\",\"( value )\"];case en:return[\"RGBM\",\"( value, 7.0 )\"];case nn:return[\"RGBM\",\"( value, 16.0 )\"];case rn:return[\"RGBD\",\"( value, 256.0 )\"];case Ke:return[\"Gamma\",\"( value, float( GAMMA_FACTOR ) )\"];case tn:return[\"LogLuv\",\"( value )\"];default:return console.warn(\"THREE.WebGLProgram: Unsupported encoding:\",t),[\"Linear\",\"( value )\"]}}function uo(t,e,n){const i=t.getShaderParameter(e,35713),r=t.getShaderInfoLog(e).trim();if(i\u0026\u0026\"\"===r)return\"\";return\"THREE.WebGLShader: gl.getShaderInfoLog() \"+n+\"\\n\"+r+function(t){const e=t.split(\"\\n\");for(let t=0;t\u003ce.length;t++)e[t]=t+1+\": \"+e[t];return e.join(\"\\n\")}(t.getShaderSource(e))}function ho(t,e){const n=co(e);return\"vec4 \"+t+\"( vec4 value ) { return \"+n[0]+\"ToLinear\"+n[1]+\"; }\"}function po(t,e){const n=co(e);return\"vec4 \"+t+\"( vec4 value ) { return LinearTo\"+n[0]+n[1]+\"; }\"}function fo(t,e){let n;switch(e){case $:n=\"Linear\";break;case tt:n=\"Reinhard\";break;case et:n=\"OptimizedCineon\";break;case nt:n=\"ACESFilmic\";break;case it:n=\"Custom\";break;default:console.warn(\"THREE.WebGLProgram: Unsupported toneMapping:\",e),n=\"Linear\"}return\"vec3 \"+t+\"( vec3 color ) { return \"+n+\"ToneMapping( color ); }\"}function mo(t){return\"\"!==t}function go(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function vo(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const yo=/^[ \\t]*#include +\u003c([\\w\\d./]+)\u003e/gm;function xo(t){return t.replace(yo,_o)}function _o(t,e){const n=Us[e];if(void 0===n)throw new Error(\"Can not resolve #include \u003c\"+e+\"\u003e\");return xo(n)}const bo=/#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i \u003c (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g,wo=/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*\u003c\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;function Mo(t){return t.replace(wo,To).replace(bo,So)}function So(t,e,n,i){return console.warn(\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\"),To(t,e,n,i)}function To(t,e,n,i){let r=\"\";for(let t=parseInt(e);t\u003cparseInt(n);t++)r+=i.replace(/\\[\\s*i\\s*\\]/g,\"[ \"+t+\" ]\").replace(/UNROLLED_LOOP_INDEX/g,t);return r}function Eo(t){let e=\"precision \"+t.precision+\" float;\\nprecision \"+t.precision+\" int;\";return\"highp\"===t.precision?e+=\"\\n#define HIGH_PRECISION\":\"mediump\"===t.precision?e+=\"\\n#define MEDIUM_PRECISION\":\"lowp\"===t.precision\u0026\u0026(e+=\"\\n#define LOW_PRECISION\"),e}function Ao(t,e,n,i){const r=t.getContext(),s=n.defines;let a=n.vertexShader,o=n.fragmentShader;const l=function(t){let e=\"SHADOWMAP_TYPE_BASIC\";return t.shadowMapType===h?e=\"SHADOWMAP_TYPE_PCF\":t.shadowMapType===d?e=\"SHADOWMAP_TYPE_PCF_SOFT\":t.shadowMapType===p\u0026\u0026(e=\"SHADOWMAP_TYPE_VSM\"),e}(n),c=function(t){let e=\"ENVMAP_TYPE_CUBE\";if(t.envMap)switch(t.envMapMode){case st:case at:e=\"ENVMAP_TYPE_CUBE\";break;case ct:case ut:e=\"ENVMAP_TYPE_CUBE_UV\"}return e}(n),u=function(t){let e=\"ENVMAP_MODE_REFLECTION\";if(t.envMap)switch(t.envMapMode){case at:case ut:e=\"ENVMAP_MODE_REFRACTION\"}return e}(n),f=function(t){let e=\"ENVMAP_BLENDING_NONE\";if(t.envMap)switch(t.combine){case Z:e=\"ENVMAP_BLENDING_MULTIPLY\";break;case J:e=\"ENVMAP_BLENDING_MIX\";break;case Q:e=\"ENVMAP_BLENDING_ADD\"}return e}(n),m=t.gammaFactor\u003e0?t.gammaFactor:1,g=n.isWebGL2?\"\":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\"physical\"===t.shaderID?\"#extension GL_OES_standard_derivatives : enable\":\"\",(t.extensionFragDepth||t.logarithmicDepthBuffer)\u0026\u0026t.rendererExtensionFragDepth?\"#extension GL_EXT_frag_depth : enable\":\"\",t.extensionDrawBuffers\u0026\u0026t.rendererExtensionDrawBuffers?\"#extension GL_EXT_draw_buffers : require\":\"\",(t.extensionShaderTextureLOD||t.envMap||t.transmission\u003e0)\u0026\u0026t.rendererExtensionShaderTextureLod?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter(mo).join(\"\\n\")}(n),v=function(t){const e=[];for(const n in t){const i=t[n];!1!==i\u0026\u0026e.push(\"#define \"+n+\" \"+i)}return e.join(\"\\n\")}(s),y=r.createProgram();let x,_,b=n.glslVersion?\"#version \"+n.glslVersion+\"\\n\":\"\";n.isRawShaderMaterial?(x=[v].filter(mo).join(\"\\n\"),x.length\u003e0\u0026\u0026(x+=\"\\n\"),_=[g,v].filter(mo).join(\"\\n\"),_.length\u003e0\u0026\u0026(_+=\"\\n\")):(x=[Eo(n),\"#define SHADER_NAME \"+n.shaderName,v,n.instancing?\"#define USE_INSTANCING\":\"\",n.instancingColor?\"#define USE_INSTANCING_COLOR\":\"\",n.supportsVertexTextures?\"#define VERTEX_TEXTURES\":\"\",\"#define GAMMA_FACTOR \"+m,\"#define MAX_BONES \"+n.maxBones,n.useFog\u0026\u0026n.fog?\"#define USE_FOG\":\"\",n.useFog\u0026\u0026n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+u:\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.displacementMap\u0026\u0026n.supportsVertexTextures?\"#define USE_DISPLACEMENTMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.skinning?\"#define USE_SKINNING\":\"\",n.useVertexTexture?\"#define BONE_TEXTURE\":\"\",n.morphTargets?\"#define USE_MORPHTARGETS\":\"\",n.morphNormals\u0026\u0026!1===n.flatShading?\"#define USE_MORPHNORMALS\":\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer\u0026\u0026n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",\"#ifdef USE_INSTANCING\",\"\\tattribute mat4 instanceMatrix;\",\"#endif\",\"#ifdef USE_INSTANCING_COLOR\",\"\\tattribute vec3 instanceColor;\",\"#endif\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_TANGENT\",\"\\tattribute vec4 tangent;\",\"#endif\",\"#if defined( USE_COLOR_ALPHA )\",\"\\tattribute vec4 color;\",\"#elif defined( USE_COLOR )\",\"\\tattribute vec3 color;\",\"#endif\",\"#ifdef USE_MORPHTARGETS\",\"\\tattribute vec3 morphTarget0;\",\"\\tattribute vec3 morphTarget1;\",\"\\tattribute vec3 morphTarget2;\",\"\\tattribute vec3 morphTarget3;\",\"\\t#ifdef USE_MORPHNORMALS\",\"\\t\\tattribute vec3 morphNormal0;\",\"\\t\\tattribute vec3 morphNormal1;\",\"\\t\\tattribute vec3 morphNormal2;\",\"\\t\\tattribute vec3 morphNormal3;\",\"\\t#else\",\"\\t\\tattribute vec3 morphTarget4;\",\"\\t\\tattribute vec3 morphTarget5;\",\"\\t\\tattribute vec3 morphTarget6;\",\"\\t\\tattribute vec3 morphTarget7;\",\"\\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\\tattribute vec4 skinIndex;\",\"\\tattribute vec4 skinWeight;\",\"#endif\",\"\\n\"].filter(mo).join(\"\\n\"),_=[g,Eo(n),\"#define SHADER_NAME \"+n.shaderName,v,n.alphaTest?\"#define ALPHATEST \"+n.alphaTest+(n.alphaTest%1?\"\":\".0\"):\"\",\"#define GAMMA_FACTOR \"+m,n.useFog\u0026\u0026n.fog?\"#define USE_FOG\":\"\",n.useFog\u0026\u0026n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.matcap?\"#define USE_MATCAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+c:\"\",n.envMap?\"#define \"+u:\"\",n.envMap?\"#define \"+f:\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.sheen?\"#define USE_SHEEN\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors||n.instancingColor?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.gradientMap?\"#define USE_GRADIENTMAP\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",n.physicallyCorrectLights?\"#define PHYSICALLY_CORRECT_LIGHTS\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer\u0026\u0026n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",(n.extensionShaderTextureLOD||n.envMap)\u0026\u0026n.rendererExtensionShaderTextureLod?\"#define TEXTURE_LOD_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",n.toneMapping!==K?\"#define TONE_MAPPING\":\"\",n.toneMapping!==K?Us.tonemapping_pars_fragment:\"\",n.toneMapping!==K?fo(\"toneMapping\",n.toneMapping):\"\",n.dithering?\"#define DITHERING\":\"\",Us.encodings_pars_fragment,n.map?ho(\"mapTexelToLinear\",n.mapEncoding):\"\",n.matcap?ho(\"matcapTexelToLinear\",n.matcapEncoding):\"\",n.envMap?ho(\"envMapTexelToLinear\",n.envMapEncoding):\"\",n.emissiveMap?ho(\"emissiveMapTexelToLinear\",n.emissiveMapEncoding):\"\",n.lightMap?ho(\"lightMapTexelToLinear\",n.lightMapEncoding):\"\",po(\"linearToOutputTexel\",n.outputEncoding),n.depthPacking?\"#define DEPTH_PACKING \"+n.depthPacking:\"\",\"\\n\"].filter(mo).join(\"\\n\")),a=xo(a),a=go(a,n),a=vo(a,n),o=xo(o),o=go(o,n),o=vo(o,n),a=Mo(a),o=Mo(o),n.isWebGL2\u0026\u0026!0!==n.isRawShaderMaterial\u0026\u0026(b=\"#version 300 es\\n\",x=[\"#define attribute in\",\"#define varying out\",\"#define texture2D texture\"].join(\"\\n\")+\"\\n\"+x,_=[\"#define varying in\",n.glslVersion===zn?\"\":\"out highp vec4 pc_fragColor;\",n.glslVersion===zn?\"\":\"#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\"+_);const w=b+_+o,M=oo(r,35633,b+x+a),S=oo(r,35632,w);if(r.attachShader(y,M),r.attachShader(y,S),void 0!==n.index0AttributeName?r.bindAttribLocation(y,0,n.index0AttributeName):!0===n.morphTargets\u0026\u0026r.bindAttribLocation(y,0,\"position\"),r.linkProgram(y),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(y).trim(),e=r.getShaderInfoLog(M).trim(),n=r.getShaderInfoLog(S).trim();let i=!0,s=!0;if(!1===r.getProgramParameter(y,35714)){i=!1;const e=uo(r,M,\"vertex\"),n=uo(r,S,\"fragment\");console.error(\"THREE.WebGLProgram: shader error: \",r.getError(),\"35715\",r.getProgramParameter(y,35715),\"gl.getProgramInfoLog\",t,e,n)}else\"\"!==t?console.warn(\"THREE.WebGLProgram: gl.getProgramInfoLog()\",t):\"\"!==e\u0026\u0026\"\"!==n||(s=!1);s\u0026\u0026(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:x},fragmentShader:{log:n,prefix:_}})}let T,E;return r.deleteShader(M),r.deleteShader(S),this.getUniforms=function(){return void 0===T\u0026\u0026(T=new ao(r,y)),T},this.getAttributes=function(){return void 0===E\u0026\u0026(E=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r\u003ci;r++){const i=t.getActiveAttrib(e,r).name;n[i]=t.getAttribLocation(e,i)}return n}(r,y)),E},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(y),this.program=void 0},this.name=n.shaderName,this.id=lo++,this.cacheKey=e,this.usedTimes=1,this.program=y,this.vertexShader=M,this.fragmentShader=S,this}function Lo(t,e,n,i,r,s){const a=[],o=i.isWebGL2,l=i.logarithmicDepthBuffer,c=i.floatVertexTextures,u=i.maxVertexUniforms,h=i.vertexTextures;let d=i.precision;const p={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\"},f=[\"precision\",\"isWebGL2\",\"supportsVertexTextures\",\"outputEncoding\",\"instancing\",\"instancingColor\",\"map\",\"mapEncoding\",\"matcap\",\"matcapEncoding\",\"envMap\",\"envMapMode\",\"envMapEncoding\",\"envMapCubeUV\",\"lightMap\",\"lightMapEncoding\",\"aoMap\",\"emissiveMap\",\"emissiveMapEncoding\",\"bumpMap\",\"normalMap\",\"objectSpaceNormalMap\",\"tangentSpaceNormalMap\",\"clearcoatMap\",\"clearcoatRoughnessMap\",\"clearcoatNormalMap\",\"displacementMap\",\"specularMap\",\"roughnessMap\",\"metalnessMap\",\"gradientMap\",\"alphaMap\",\"combine\",\"vertexColors\",\"vertexAlphas\",\"vertexTangents\",\"vertexUvs\",\"uvsVertexOnly\",\"fog\",\"useFog\",\"fogExp2\",\"flatShading\",\"sizeAttenuation\",\"logarithmicDepthBuffer\",\"skinning\",\"maxBones\",\"useVertexTexture\",\"morphTargets\",\"morphNormals\",\"premultipliedAlpha\",\"numDirLights\",\"numPointLights\",\"numSpotLights\",\"numHemiLights\",\"numRectAreaLights\",\"numDirLightShadows\",\"numPointLightShadows\",\"numSpotLightShadows\",\"shadowMapEnabled\",\"shadowMapType\",\"toneMapping\",\"physicallyCorrectLights\",\"alphaTest\",\"doubleSided\",\"flipSided\",\"numClippingPlanes\",\"numClipIntersection\",\"depthPacking\",\"dithering\",\"sheen\",\"transmission\",\"transmissionMap\",\"thicknessMap\"];function v(t){let e;return t\u0026\u0026t.isTexture?e=t.encoding:t\u0026\u0026t.isWebGLRenderTarget?(console.warn(\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\"),e=t.texture.encoding):e=Je,e}return{getParameters:function(r,a,f,y,x){const _=y.fog,b=r.isMeshStandardMaterial?y.environment:null,w=e.get(r.envMap||b),M=p[r.type],S=x.isSkinnedMesh?function(t){const e=t.skeleton.bones;if(c)return 1024;{const t=u,n=Math.floor((t-20)/4),i=Math.min(n,e.length);return i\u003ce.length?(console.warn(\"THREE.WebGLRenderer: Skeleton has \"+e.length+\" bones. This GPU supports \"+i+\".\"),0):i}}(x):0;let T,E;if(null!==r.precision\u0026\u0026(d=i.getMaxPrecision(r.precision),d!==r.precision\u0026\u0026console.warn(\"THREE.WebGLProgram.getParameters:\",r.precision,\"not supported, using\",d,\"instead.\")),M){const t=ks[M];T=t.vertexShader,E=t.fragmentShader}else T=r.vertexShader,E=r.fragmentShader;const A=t.getRenderTarget();return{isWebGL2:o,shaderID:M,shaderName:r.type,vertexShader:T,fragmentShader:E,defines:r.defines,isRawShaderMaterial:!0===r.isRawShaderMaterial,glslVersion:r.glslVersion,precision:d,instancing:!0===x.isInstancedMesh,instancingColor:!0===x.isInstancedMesh\u0026\u0026null!==x.instanceColor,supportsVertexTextures:h,outputEncoding:null!==A?v(A.texture):t.outputEncoding,map:!!r.map,mapEncoding:v(r.map),matcap:!!r.matcap,matcapEncoding:v(r.matcap),envMap:!!w,envMapMode:w\u0026\u0026w.mapping,envMapEncoding:v(w),envMapCubeUV:!!w\u0026\u0026(w.mapping===ct||w.mapping===ut),lightMap:!!r.lightMap,lightMapEncoding:v(r.lightMap),aoMap:!!r.aoMap,emissiveMap:!!r.emissiveMap,emissiveMapEncoding:v(r.emissiveMap),bumpMap:!!r.bumpMap,normalMap:!!r.normalMap,objectSpaceNormalMap:r.normalMapType===ln,tangentSpaceNormalMap:r.normalMapType===on,clearcoatMap:!!r.clearcoatMap,clearcoatRoughnessMap:!!r.clearcoatRoughnessMap,clearcoatNormalMap:!!r.clearcoatNormalMap,displacementMap:!!r.displacementMap,roughnessMap:!!r.roughnessMap,metalnessMap:!!r.metalnessMap,specularMap:!!r.specularMap,alphaMap:!!r.alphaMap,gradientMap:!!r.gradientMap,sheen:!!r.sheen,transmission:!!r.transmission,transmissionMap:!!r.transmissionMap,thicknessMap:!!r.thicknessMap,combine:r.combine,vertexTangents:r.normalMap\u0026\u0026r.vertexTangents,vertexColors:r.vertexColors,vertexAlphas:!0===r.vertexColors\u0026\u0026x.geometry\u0026\u0026x.geometry.attributes.color\u0026\u00264===x.geometry.attributes.color.itemSize,vertexUvs:!!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatMap||r.clearcoatRoughnessMap||r.clearcoatNormalMap||r.displacementMap||r.transmission||r.transmissionMap||r.thicknessMap),uvsVertexOnly:!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatNormalMap||r.transmission||r.transmissionMap||r.thicknessMap||!r.displacementMap),fog:!!_,useFog:r.fog,fogExp2:_\u0026\u0026_.isFogExp2,flatShading:!!r.flatShading,sizeAttenuation:r.sizeAttenuation,logarithmicDepthBuffer:l,skinning:!0===x.isSkinnedMesh\u0026\u0026S\u003e0,maxBones:S,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled\u0026\u0026f.length\u003e0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:K,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:r.side===g,flipSided:r.side===m,depthPacking:void 0!==r.depthPacking\u0026\u0026r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions\u0026\u0026r.extensions.derivatives,extensionFragDepth:r.extensions\u0026\u0026r.extensions.fragDepth,extensionDrawBuffers:r.extensions\u0026\u0026r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions\u0026\u0026r.extensions.shaderTextureLOD,rendererExtensionFragDepth:o||n.has(\"EXT_frag_depth\"),rendererExtensionDrawBuffers:o||n.has(\"WEBGL_draw_buffers\"),rendererExtensionShaderTextureLod:o||n.has(\"EXT_shader_texture_lod\"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t\u003cf.length;t++)n.push(e[f[t]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=p[t.type];let n;if(e){const t=ks[e];n=As.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=a.length;t\u003ce;t++){const e=a[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i\u0026\u0026(i=new Ao(t,n,e,r),a.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=a.indexOf(t);a[e]=a[a.length-1],a.pop(),t.destroy()}},programs:a}}function Ro(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n\u0026\u0026(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function Co(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function Po(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function Do(t){const e=[];let n=0;const i=[],r=[],s=[],a={id:-1};function o(i,r,s,o,l,c){let u=e[n];const h=t.get(s);return void 0===u?(u={id:i.id,object:i,geometry:r,material:s,program:h.program||a,groupOrder:o,renderOrder:i.renderOrder,z:l,group:c},e[n]=u):(u.id=i.id,u.object=i,u.geometry=r,u.material=s,u.program=h.program||a,u.groupOrder=o,u.renderOrder=i.renderOrder,u.z=l,u.group=c),n++,u}return{opaque:i,transmissive:r,transparent:s,init:function(){n=0,i.length=0,r.length=0,s.length=0},push:function(t,e,n,a,l,c){const u=o(t,e,n,a,l,c);n.transmission\u003e0?r.push(u):!0===n.transparent?s.push(u):i.push(u)},unshift:function(t,e,n,a,l,c){const u=o(t,e,n,a,l,c);n.transmission\u003e0?r.unshift(u):!0===n.transparent?s.unshift(u):i.unshift(u)},finish:function(){for(let t=n,i=e.length;t\u003ci;t++){const n=e[t];if(null===n.id)break;n.id=null,n.object=null,n.geometry=null,n.material=null,n.program=null,n.group=null}},sort:function(t,e){i.length\u003e1\u0026\u0026i.sort(t||Co),r.length\u003e1\u0026\u0026r.sort(e||Po),s.length\u003e1\u0026\u0026s.sort(e||Po)}}}function Io(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new Do(t),e.set(n,[r])):i\u003e=e.get(n).length?(r=new Do(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function No(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":n={direction:new oi,color:new Ir};break;case\"SpotLight\":n={position:new oi,direction:new oi,color:new Ir,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\"PointLight\":n={position:new oi,color:new Ir,distance:0,decay:0};break;case\"HemisphereLight\":n={direction:new oi,skyColor:new Ir,groundColor:new Ir};break;case\"RectAreaLight\":n={color:new Ir,position:new oi,halfWidth:new oi,halfHeight:new oi}}return t[e.id]=n,n}}}let zo=0;function Bo(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Oo(t,e){const n=new No,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":case\"SpotLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Zn};break;case\"PointLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Zn,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t\u003c9;t++)r.probe.push(new oi);const s=new oi,a=new Fi,o=new Fi;return{setup:function(s){let a=0,o=0,l=0;for(let t=0;t\u003c9;t++)r.probe[t].set(0,0,0);let c=0,u=0,h=0,d=0,p=0,f=0,m=0,g=0;s.sort(Bo);for(let t=0,e=s.length;t\u003ce;t++){const e=s[t],v=e.color,y=e.intensity,x=e.distance,_=e.shadow\u0026\u0026e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)a+=v.r*y,o+=v.g*y,l+=v.b*y;else if(e.isLightProbe)for(let t=0;t\u003c9;t++)r.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.directionalShadow[c]=n,r.directionalShadowMap[c]=_,r.directionalShadowMatrix[c]=e.shadow.matrix,f++}r.directional[c]=t,c++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(v).multiplyScalar(y),t.distance=x,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.spotShadow[h]=n,r.spotShadowMap[h]=_,r.spotShadowMatrix[h]=e.shadow.matrix,g++}r.spot[h]=t,h++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(v).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),r.rectArea[d]=t,d++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,r.pointShadow[u]=n,r.pointShadowMap[u]=_,r.pointShadowMatrix[u]=e.shadow.matrix,m++}r.point[u]=t,u++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y),t.groundColor.copy(e.groundColor).multiplyScalar(y),r.hemi[p]=t,p++}}d\u003e0\u0026\u0026(e.isWebGL2||!0===t.has(\"OES_texture_float_linear\")?(r.rectAreaLTC1=Gs.LTC_FLOAT_1,r.rectAreaLTC2=Gs.LTC_FLOAT_2):!0===t.has(\"OES_texture_half_float_linear\")?(r.rectAreaLTC1=Gs.LTC_HALF_1,r.rectAreaLTC2=Gs.LTC_HALF_2):console.error(\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\")),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=l;const v=r.hash;v.directionalLength===c\u0026\u0026v.pointLength===u\u0026\u0026v.spotLength===h\u0026\u0026v.rectAreaLength===d\u0026\u0026v.hemiLength===p\u0026\u0026v.numDirectionalShadows===f\u0026\u0026v.numPointShadows===m\u0026\u0026v.numSpotShadows===g||(r.directional.length=c,r.spot.length=h,r.rectArea.length=d,r.point.length=u,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=u,v.spotLength=h,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=zo++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,u=0;const h=e.matrixWorldInverse;for(let e=0,d=t.length;e\u003cd;e++){const d=t[e];if(d.isDirectionalLight){const t=r.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),n++}else if(d.isSpotLight){const t=r.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),l++}else if(d.isRectAreaLight){const t=r.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),o.identity(),a.copy(d.matrixWorld),a.premultiply(h),o.extractRotation(a),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(o),t.halfHeight.applyMatrix4(o),c++}else if(d.isPointLight){const t=r.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),i++}else if(d.isHemisphereLight){const t=r.hemi[u];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(h),t.direction.normalize(),u++}}},state:r}}function Fo(t,e){const n=new Oo(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(){n.setup(i)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function Ho(t,e){let n=new WeakMap;return{get:function(i,r=0){let s;return!1===n.has(i)?(s=new Fo(t,e),n.set(i,[s])):r\u003e=n.get(i).length?(s=new Fo(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class Uo extends Er{constructor(t){super(),this.type=\"MeshDepthMaterial\",this.depthPacking=sn,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Uo.prototype.isMeshDepthMaterial=!0;class Go extends Er{constructor(t){super(),this.type=\"MeshDistanceMaterial\",this.referencePosition=new oi,this.nearDistance=1,this.farDistance=1e3,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Go.prototype.isMeshDistanceMaterial=!0;function ko(t,e,n){let i=new Bs;const r=new Zn,s=new Zn,a=new ni,o=[],l=[],c={},u=n.maxTextureSize,d={0:m,1:f,2:g},v=new Ls({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new Zn},radius:{value:4}},vertexShader:\"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\",fragmentShader:\"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \u003cpacking\u003e\\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i \u003c 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 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, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\"}),y=v.clone();y.defines.HORIZONTAL_PASS=1;const _=new rs;_.setAttribute(\"position\",new Or(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const b=new ws(_,v),w=this;function M(n,i){const r=e.update(b);v.uniforms.shadow_pass.value=n.map.texture,v.uniforms.resolution.value=n.mapSize,v.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,v,b,null),y.uniforms.shadow_pass.value=n.mapPass.texture,y.uniforms.resolution.value=n.mapSize,y.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,y,b,null)}function S(t){const e=t\u003c\u003c0;let n=o[e];return void 0===n\u0026\u0026(n=new Uo({depthPacking:an,morphTargets:t}),o[e]=n),n}function T(t){const e=t\u003c\u003c0;let n=l[e];return void 0===n\u0026\u0026(n=new Go({morphTargets:t}),l[e]=n),n}function E(e,n,i,r,s,a,o){let l=null,u=S,h=e.customDepthMaterial;if(!0===r.isPointLight\u0026\u0026(u=T,h=e.customDistanceMaterial),void 0===h){let t=!1;!0===i.morphTargets\u0026\u0026(t=n.morphAttributes\u0026\u0026n.morphAttributes.position\u0026\u0026n.morphAttributes.position.length\u003e0),l=u(t)}else l=h;if(t.localClippingEnabled\u0026\u0026!0===i.clipShadows\u0026\u00260!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n\u0026\u0026(n={},c[t]=n);let r=n[e];void 0===r\u0026\u0026(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=o===p?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:d[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight\u0026\u0026!0===l.isMeshDistanceMaterial\u0026\u0026(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=s,l.farDistance=a),l}function A(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)\u0026\u0026(n.isMesh||n.isLine||n.isPoints)\u0026\u0026(n.castShadow||n.receiveShadow\u0026\u0026o===p)\u0026\u0026(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;l\u003cc;l++){const c=e[l],u=r[c.materialIndex];if(u\u0026\u0026u.visible){const e=E(n,i,u,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,c)}}}else if(r.visible){const e=E(n,i,r,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t\u003ce;t++)A(l[t],r,s,a,o)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=h,this.render=function(e,n,o){if(!1===w.enabled)return;if(!1===w.autoUpdate\u0026\u0026!1===w.needsUpdate)return;if(0===e.length)return;const l=t.getRenderTarget(),c=t.getActiveCubeFace(),h=t.getActiveMipmapLevel(),d=t.state;d.setBlending(x),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(let l=0,c=e.length;l\u003cc;l++){const c=e[l],h=c.shadow;if(void 0===h){console.warn(\"THREE.WebGLShadowMap:\",c,\"has no shadow.\");continue}if(!1===h.autoUpdate\u0026\u0026!1===h.needsUpdate)continue;r.copy(h.mapSize);const f=h.getFrameExtents();if(r.multiply(f),s.copy(h.mapSize),(r.x\u003eu||r.y\u003eu)\u0026\u0026(r.x\u003eu\u0026\u0026(s.x=Math.floor(u/f.x),r.x=s.x*f.x,h.mapSize.x=s.x),r.y\u003eu\u0026\u0026(s.y=Math.floor(u/f.y),r.y=s.y*f.y,h.mapSize.y=s.y)),null===h.map\u0026\u0026!h.isPointLightShadow\u0026\u0026this.type===p){const t={minFilter:xt,magFilter:xt,format:Ft};h.map=new ii(r.x,r.y,t),h.map.texture.name=c.name+\".shadowMap\",h.mapPass=new ii(r.x,r.y,t),h.camera.updateProjectionMatrix()}if(null===h.map){const t={minFilter:ft,magFilter:ft,format:Ft};h.map=new ii(r.x,r.y,t),h.map.texture.name=c.name+\".shadowMap\",h.camera.updateProjectionMatrix()}t.setRenderTarget(h.map),t.clear();const m=h.getViewportCount();for(let t=0;t\u003cm;t++){const e=h.getViewport(t);a.set(s.x*e.x,s.y*e.y,s.x*e.z,s.y*e.w),d.viewport(a),h.updateMatrices(c,t),i=h.getFrustum(),A(n,o,h.camera,c,this.type)}h.isPointLightShadow||this.type!==p||M(h,o),h.needsUpdate=!1}w.needsUpdate=!1,t.setRenderTarget(l,c,h)}}function Vo(t,e,n){const i=n.isWebGL2;const r=new function(){let e=!1;const n=new ni;let i=null;const r=new ni(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,s,a,o){!0===o\u0026\u0026(e*=a,i*=a,s*=a),n.set(e,i,s,a),!1===r.equals(n)\u0026\u0026(t.clearColor(e,i,s,a),r.copy(n))},reset:function(){e=!1,i=null,r.set(-1,0,0,0)}}},s=new function(){let e=!1,n=null,i=null,r=null;return{setTest:function(t){t?yt(2929):xt(2929)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case G:t.depthFunc(512);break;case k:t.depthFunc(519);break;case V:t.depthFunc(513);break;case W:t.depthFunc(515);break;case j:t.depthFunc(514);break;case q:t.depthFunc(518);break;case X:t.depthFunc(516);break;case Y:t.depthFunc(517);break;default:t.depthFunc(515)}else t.depthFunc(515);i=e}},setLocked:function(t){e=t},setClear:function(e){r!==e\u0026\u0026(t.clearDepth(e),r=e)},reset:function(){e=!1,n=null,i=null,r=null}}},c=new function(){let e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null;return{setTest:function(t){e||(t?yt(2960):xt(2960))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,a){i===e\u0026\u0026r===n\u0026\u0026s===a||(t.stencilFunc(e,n,a),i=e,r=n,s=a)},setOp:function(e,n,i){a===e\u0026\u0026o===n\u0026\u0026l===i||(t.stencilOp(e,n,i),a=e,o=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e\u0026\u0026(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null}}};let u={},h=null,d={},p=null,f=!1,v=null,y=null,Z=null,J=null,Q=null,K=null,$=null,tt=!1,et=null,nt=null,it=null,rt=null,st=null;const at=t.getParameter(35661);let ot=!1,lt=0;const ct=t.getParameter(7938);-1!==ct.indexOf(\"WebGL\")?(lt=parseFloat(/^WebGL (\\d)/.exec(ct)[1]),ot=lt\u003e=1):-1!==ct.indexOf(\"OpenGL ES\")\u0026\u0026(lt=parseFloat(/^OpenGL ES (\\d)/.exec(ct)[1]),ot=lt\u003e=2);let ut=null,ht={};const dt=t.getParameter(3088),pt=t.getParameter(2978),ft=(new ni).fromArray(dt),mt=(new ni).fromArray(pt);function gt(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;e\u003ci;e++)t.texImage2D(n+e,0,6408,1,1,0,6408,5121,r);return s}const vt={};function yt(e){!0!==u[e]\u0026\u0026(t.enable(e),u[e]=!0)}function xt(e){!1!==u[e]\u0026\u0026(t.disable(e),u[e]=!1)}vt[3553]=gt(3553,3553,1),vt[34067]=gt(34067,34069,6),r.setClear(0,0,0,1),s.setClear(1),c.setClear(0),yt(2929),s.setFunc(W),Mt(!1),St(o),yt(2884),wt(x);const _t={[T]:32774,[E]:32778,[A]:32779};if(i)_t[L]=32775,_t[R]=32776;else{const t=e.get(\"EXT_blend_minmax\");null!==t\u0026\u0026(_t[L]=t.MIN_EXT,_t[R]=t.MAX_EXT)}const bt={[C]:0,[P]:1,[D]:768,[N]:770,[U]:776,[F]:774,[B]:772,[I]:769,[z]:771,[H]:775,[O]:773};function wt(e,n,i,r,s,a,o,l){if(e!==x){if(!1===f\u0026\u0026(yt(3042),f=!0),e===S)s=s||n,a=a||i,o=o||r,n===y\u0026\u0026s===Q||(t.blendEquationSeparate(_t[n],_t[s]),y=n,Q=s),i===Z\u0026\u0026r===J\u0026\u0026a===K\u0026\u0026o===$||(t.blendFuncSeparate(bt[i],bt[r],bt[a],bt[o]),Z=i,J=r,K=a,$=o),v=e,tt=null;else if(e!==v||l!==tt){if(y===T\u0026\u0026Q===T||(t.blendEquation(32774),y=T,Q=T),l)switch(e){case _:t.blendFuncSeparate(1,771,1,771);break;case b:t.blendFunc(1,1);break;case w:t.blendFuncSeparate(0,0,769,771);break;case M:t.blendFuncSeparate(0,768,0,770);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}else switch(e){case _:t.blendFuncSeparate(770,771,1,771);break;case b:t.blendFunc(770,1);break;case w:t.blendFunc(0,769);break;case M:t.blendFunc(0,768);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}Z=null,J=null,K=null,$=null,v=e,tt=l}}else!0===f\u0026\u0026(xt(3042),f=!1)}function Mt(e){et!==e\u0026\u0026(e?t.frontFace(2304):t.frontFace(2305),et=e)}function St(e){e!==a?(yt(2884),e!==nt\u0026\u0026(e===o?t.cullFace(1029):e===l?t.cullFace(1028):t.cullFace(1032))):xt(2884),nt=e}function Tt(e,n,i){e?(yt(32823),rt===n\u0026\u0026st===i||(t.polygonOffset(n,i),rt=n,st=i)):xt(32823)}function Et(e){void 0===e\u0026\u0026(e=33984+at-1),ut!==e\u0026\u0026(t.activeTexture(e),ut=e)}return{buffers:{color:r,depth:s,stencil:c},enable:yt,disable:xt,bindFramebuffer:function(e,n){return null===n\u0026\u0026null!==h\u0026\u0026(n=h),d[e]!==n\u0026\u0026(t.bindFramebuffer(e,n),d[e]=n,i\u0026\u0026(36009===e\u0026\u0026(d[36160]=n),36160===e\u0026\u0026(d[36009]=n)),!0)},bindXRFramebuffer:function(e){e!==h\u0026\u0026(t.bindFramebuffer(36160,e),h=e)},useProgram:function(e){return p!==e\u0026\u0026(t.useProgram(e),p=e,!0)},setBlending:wt,setMaterial:function(t,e){t.side===g?xt(2884):yt(2884);let n=t.side===m;e\u0026\u0026(n=!n),Mt(n),t.blending===_\u0026\u0026!1===t.transparent?wt(x):wt(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha),s.setFunc(t.depthFunc),s.setTest(t.depthTest),s.setMask(t.depthWrite),r.setMask(t.colorWrite);const i=t.stencilWrite;c.setTest(i),i\u0026\u0026(c.setMask(t.stencilWriteMask),c.setFunc(t.stencilFunc,t.stencilRef,t.stencilFuncMask),c.setOp(t.stencilFail,t.stencilZFail,t.stencilZPass)),Tt(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits),!0===t.alphaToCoverage?yt(32926):xt(32926)},setFlipSided:Mt,setCullFace:St,setLineWidth:function(e){e!==it\u0026\u0026(ot\u0026\u0026t.lineWidth(e),it=e)},setPolygonOffset:Tt,setScissorTest:function(t){t?yt(3089):xt(3089)},activeTexture:Et,bindTexture:function(e,n){null===ut\u0026\u0026Et();let i=ht[ut];void 0===i\u0026\u0026(i={type:void 0,texture:void 0},ht[ut]=i),i.type===e\u0026\u0026i.texture===n||(t.bindTexture(e,n||vt[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=ht[ut];void 0!==e\u0026\u0026void 0!==e.type\u0026\u0026(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},scissor:function(e){!1===ft.equals(e)\u0026\u0026(t.scissor(e.x,e.y,e.z,e.w),ft.copy(e))},viewport:function(e){!1===mt.equals(e)\u0026\u0026(t.viewport(e.x,e.y,e.z,e.w),mt.copy(e))},reset:function(){t.disable(3042),t.disable(2884),t.disable(2929),t.disable(32823),t.disable(3089),t.disable(2960),t.disable(32926),t.blendEquation(32774),t.blendFunc(1,0),t.blendFuncSeparate(1,0,1,0),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(513),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(519,0,4294967295),t.stencilOp(7680,7680,7680),t.clearStencil(0),t.cullFace(1029),t.frontFace(2305),t.polygonOffset(0,0),t.activeTexture(33984),t.bindFramebuffer(36160,null),!0===i\u0026\u0026(t.bindFramebuffer(36009,null),t.bindFramebuffer(36008,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),u={},ut=null,ht={},h=null,d={},p=null,f=!1,v=null,y=null,Z=null,J=null,Q=null,K=null,$=null,tt=!1,et=null,nt=null,it=null,rt=null,st=null,ft.set(0,0,t.canvas.width,t.canvas.height),mt.set(0,0,t.canvas.width,t.canvas.height),r.reset(),s.reset(),c.reset()}}}function Wo(t,e,n,i,r,s,a){const o=r.isWebGL2,l=r.maxTextures,c=r.maxCubemapSize,u=r.maxTextureSize,h=r.maxSamples,d=new WeakMap;let p,f=!1;try{f=\"undefined\"!=typeof OffscreenCanvas\u0026\u0026null!==new OffscreenCanvas(1,1).getContext(\"2d\")}catch(t){}function m(t,e){return f?new OffscreenCanvas(t,e):document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\")}function g(t,e,n,i){let r=1;if((t.width\u003ei||t.height\u003ei)\u0026\u0026(r=i/Math.max(t.width,t.height)),r\u003c1||!0===e){if(\"undefined\"!=typeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap\u0026\u0026t instanceof ImageBitmap){const i=e?Xn:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===p\u0026\u0026(p=m(s,a));const o=n?m(s,a):p;o.width=s,o.height=a;return o.getContext(\"2d\").drawImage(t,0,0,s,a),console.warn(\"THREE.WebGLRenderer: Texture has been resized from (\"+t.width+\"x\"+t.height+\") to (\"+s+\"x\"+a+\").\"),o}return\"data\"in t\u0026\u0026console.warn(\"THREE.WebGLRenderer: Image in DataTexture is too big (\"+t.width+\"x\"+t.height+\").\"),t}return t}function v(t){return jn(t.width)\u0026\u0026jn(t.height)}function y(t,e){return t.generateMipmaps\u0026\u0026e\u0026\u0026t.minFilter!==ft\u0026\u0026t.minFilter!==xt}function x(e,n,r,s){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s))}function _(n,i,r){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\"+n+\"'\")}let s=i;return 6403===i\u0026\u0026(5126===r\u0026\u0026(s=33326),5131===r\u0026\u0026(s=33325),5121===r\u0026\u0026(s=33321)),6407===i\u0026\u0026(5126===r\u0026\u0026(s=34837),5131===r\u0026\u0026(s=34843),5121===r\u0026\u0026(s=32849)),6408===i\u0026\u0026(5126===r\u0026\u0026(s=34836),5131===r\u0026\u0026(s=34842),5121===r\u0026\u0026(s=32856)),33325!==s\u0026\u002633326!==s\u0026\u002634842!==s\u0026\u002634836!==s||e.get(\"EXT_color_buffer_float\"),s}function b(t){return t===ft||t===mt||t===vt?9728:9729}function w(e){const n=e.target;n.removeEventListener(\"dispose\",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture\u0026\u0026d.delete(n),a.memory.textures--}function M(e){const n=e.target;n.removeEventListener(\"dispose\",M),function(e){const n=e.texture,r=i.get(e),s=i.get(n);if(!e)return;void 0!==s.__webglTexture\u0026\u0026(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture\u0026\u0026e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e\u003c6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer\u0026\u0026t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e\u003cr;e++){const r=i.get(n[e]);r.__webglTexture\u0026\u0026(t.deleteTexture(r.__webglTexture),a.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}let S=0;function T(t,e){const r=i.get(t);if(t.isVideoTexture\u0026\u0026function(t){const e=a.render.frame;d.get(t)!==e\u0026\u0026(d.set(t,e),t.update())}(t),t.version\u003e0\u0026\u0026r.__version!==t.version){const n=t.image;if(void 0===n)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is undefined\");else{if(!1!==n.complete)return void P(r,t,e);console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function E(e,r){const a=i.get(e);e.version\u003e0\u0026\u0026a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;C(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const a=i\u0026\u0026(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]\u0026\u0026i.image[0].isDataTexture,u=[];for(let t=0;t\u003c6;t++)u[t]=a||l?l?i.image[t].image:i.image[t]:g(i.image[t],!1,!0,c);const h=u[0],d=v(h)||o,p=s.convert(i.format),f=s.convert(i.type),m=_(i.internalFormat,p,f);let b;if(R(34067,i,d),a){for(let t=0;t\u003c6;t++){b=u[t].mipmaps;for(let e=0;e\u003cb.length;e++){const r=b[e];i.format!==Ft\u0026\u0026i.format!==Ot?null!==p?n.compressedTexImage2D(34069+t,e,m,r.width,r.height,0,r.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):n.texImage2D(34069+t,e,m,r.width,r.height,0,p,f,r.data)}}e.__maxMipLevel=b.length-1}else{b=i.mipmaps;for(let t=0;t\u003c6;t++)if(l){n.texImage2D(34069+t,0,m,u[t].width,u[t].height,0,p,f,u[t].data);for(let e=0;e\u003cb.length;e++){const i=b[e].image[t].image;n.texImage2D(34069+t,e+1,m,i.width,i.height,0,p,f,i.data)}}else{n.texImage2D(34069+t,0,m,p,f,u[t]);for(let e=0;e\u003cb.length;e++){const i=b[e];n.texImage2D(34069+t,e+1,m,p,f,i.image[t])}}e.__maxMipLevel=b.length}y(i,d)\u0026\u0026x(34067,i,h.width,h.height);e.__version=i.version,i.onUpdate\u0026\u0026i.onUpdate(i)}(a,e,r):(n.activeTexture(33984+r),n.bindTexture(34067,a.__webglTexture))}const A={[ht]:10497,[dt]:33071,[pt]:33648},L={[ft]:9728,[mt]:9984,[vt]:9986,[xt]:9729,[_t]:9985,[wt]:9987};function R(n,s,a){if(a?(t.texParameteri(n,10242,A[s.wrapS]),t.texParameteri(n,10243,A[s.wrapT]),32879!==n\u0026\u002635866!==n||t.texParameteri(n,32882,A[s.wrapR]),t.texParameteri(n,10240,L[s.magFilter]),t.texParameteri(n,10241,L[s.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n\u0026\u002635866!==n||t.texParameteri(n,32882,33071),s.wrapS===dt\u0026\u0026s.wrapT===dt||console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\"),t.texParameteri(n,10240,b(s.magFilter)),t.texParameteri(n,10241,b(s.minFilter)),s.minFilter!==ft\u0026\u0026s.minFilter!==xt\u0026\u0026console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\")),!0===e.has(\"EXT_texture_filter_anisotropic\")){const a=e.get(\"EXT_texture_filter_anisotropic\");if(s.type===Ct\u0026\u0026!1===e.has(\"OES_texture_float_linear\"))return;if(!1===o\u0026\u0026s.type===Pt\u0026\u0026!1===e.has(\"OES_texture_half_float_linear\"))return;(s.anisotropy\u003e1||i.get(s).__currentAnisotropy)\u0026\u0026(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function C(e,n){void 0===e.__webglInit\u0026\u0026(e.__webglInit=!0,n.addEventListener(\"dispose\",w),e.__webglTexture=t.createTexture(),a.memory.textures++)}function P(e,i,r){let a=3553;i.isDataTexture2DArray\u0026\u0026(a=35866),i.isDataTexture3D\u0026\u0026(a=32879),C(e,i),n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!o\u0026\u0026(t.wrapS!==dt||t.wrapT!==dt||t.minFilter!==ft\u0026\u0026t.minFilter!==xt)}(i)\u0026\u0026!1===v(i.image),c=g(i.image,l,!1,u),h=v(c)||o,d=s.convert(i.format);let p,f=s.convert(i.type),m=_(i.internalFormat,d,f);R(a,i,h);const b=i.mipmaps;if(i.isDepthTexture)m=6402,o?m=i.type===Ct?36012:i.type===Rt?33190:i.type===zt?35056:33189:i.type===Ct\u0026\u0026console.error(\"WebGLRenderer: Floating point depth texture requires WebGL2.\"),i.format===kt\u0026\u00266402===m\u0026\u0026i.type!==At\u0026\u0026i.type!==Rt\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),i.type=At,f=s.convert(i.type)),i.format===Vt\u0026\u00266402===m\u0026\u0026(m=34041,i.type!==zt\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),i.type=zt,f=s.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(b.length\u003e0\u0026\u0026h){for(let t=0,e=b.length;t\u003ce;t++)p=b[t],n.texImage2D(3553,t,m,p.width,p.height,0,d,f,p.data);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,c.width,c.height,0,d,f,c.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(let t=0,e=b.length;t\u003ce;t++)p=b[t],i.format!==Ft\u0026\u0026i.format!==Ot?null!==d?n.compressedTexImage2D(3553,t,m,p.width,p.height,0,p.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):n.texImage2D(3553,t,m,p.width,p.height,0,d,f,p.data);e.__maxMipLevel=b.length-1}else if(i.isDataTexture2DArray)n.texImage3D(35866,0,m,c.width,c.height,c.depth,0,d,f,c.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)n.texImage3D(32879,0,m,c.width,c.height,c.depth,0,d,f,c.data),e.__maxMipLevel=0;else if(b.length\u003e0\u0026\u0026h){for(let t=0,e=b.length;t\u003ce;t++)p=b[t],n.texImage2D(3553,t,m,d,f,p);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,d,f,c),e.__maxMipLevel=0;y(i,h)\u0026\u0026x(a,i,c.width,c.height),e.__version=i.version,i.onUpdate\u0026\u0026i.onUpdate(i)}function D(e,r,a,o,l){const c=s.convert(a.format),u=s.convert(a.type),h=_(a.internalFormat,c,u);32879===l||35866===l?n.texImage3D(l,0,h,r.width,r.height,r.depth,0,c,u,null):n.texImage2D(l,0,h,r.width,r.height,0,c,u,null),n.bindFramebuffer(36160,e),t.framebufferTexture2D(36160,o,l,i.get(a).__webglTexture,0),n.bindFramebuffer(36160,null)}function I(e,n,i){if(t.bindRenderbuffer(36161,e),n.depthBuffer\u0026\u0026!n.stencilBuffer){let r=33189;if(i){const e=n.depthTexture;e\u0026\u0026e.isDepthTexture\u0026\u0026(e.type===Ct?r=36012:e.type===Rt\u0026\u0026(r=33190));const i=z(n);t.renderbufferStorageMultisample(36161,i,r,n.width,n.height)}else t.renderbufferStorage(36161,r,n.width,n.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(n.depthBuffer\u0026\u0026n.stencilBuffer){if(i){const e=z(n);t.renderbufferStorageMultisample(36161,e,35056,n.width,n.height)}else t.renderbufferStorage(36161,34041,n.width,n.height);t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,r=s.convert(e.format),a=s.convert(e.type),o=_(e.internalFormat,r,a);if(i){const e=z(n);t.renderbufferStorageMultisample(36161,e,o,n.width,n.height)}else t.renderbufferStorage(36161,o,n.width,n.height)}t.bindRenderbuffer(36161,null)}function N(e){const r=i.get(e),s=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(s)throw new Error(\"target.depthTexture not supported in Cube render targets\");!function(e,r){if(r\u0026\u0026r.isWebGLCubeRenderTarget)throw new Error(\"Depth Texture with cube render targets is not supported\");if(n.bindFramebuffer(36160,e),!r.depthTexture||!r.depthTexture.isDepthTexture)throw new Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");i.get(r.depthTexture).__webglTexture\u0026\u0026r.depthTexture.image.width===r.width\u0026\u0026r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),T(r.depthTexture,0);const s=i.get(r.depthTexture).__webglTexture;if(r.depthTexture.format===kt)t.framebufferTexture2D(36160,36096,3553,s,0);else{if(r.depthTexture.format!==Vt)throw new Error(\"Unknown depthTexture format\");t.framebufferTexture2D(36160,33306,3553,s,0)}}(r.__webglFramebuffer,e)}else if(s){r.__webglDepthbuffer=[];for(let i=0;i\u003c6;i++)n.bindFramebuffer(36160,r.__webglFramebuffer[i]),r.__webglDepthbuffer[i]=t.createRenderbuffer(),I(r.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(36160,r.__webglFramebuffer),r.__webglDepthbuffer=t.createRenderbuffer(),I(r.__webglDepthbuffer,e,!1);n.bindFramebuffer(36160,null)}function z(t){return o\u0026\u0026t.isWebGLMultisampleRenderTarget?Math.min(h,t.samples):0}let B=!1,O=!1;this.allocateTextureUnit=function(){const t=S;return t\u003e=l\u0026\u0026console.warn(\"THREE.WebGLTextures: Trying to use \"+t+\" texture units while this GPU supports only \"+l),S+=1,t},this.resetTextureUnits=function(){S=0},this.setTexture2D=T,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version\u003e0\u0026\u0026r.__version!==t.version?P(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version\u003e0\u0026\u0026r.__version!==t.version?P(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=E,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),u=i.get(l);e.addEventListener(\"dispose\",M),!0!==e.isWebGLMultipleRenderTargets\u0026\u0026(u.__webglTexture=t.createTexture(),u.__version=l.version,a.memory.textures++);const h=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,f=l.isDataTexture3D||l.isDataTexture2DArray,m=v(e)||o;if(!o||l.format!==Ot||l.type!==Ct\u0026\u0026l.type!==Pt||(l.format=Ft,console.warn(\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\")),h){c.__webglFramebuffer=[];for(let e=0;e\u003c6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;e\u003cr;e++){const r=i.get(n[e]);void 0===r.__webglTexture\u0026\u0026(r.__webglTexture=t.createTexture(),a.memory.textures++)}}else console.warn(\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\");else if(p)if(o){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,c.__webglColorRenderbuffer);const i=s.convert(l.format),r=s.convert(l.type),a=_(l.internalFormat,i,r),o=z(e);t.renderbufferStorageMultisample(36161,o,a,e.width,e.height),n.bindFramebuffer(36160,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,c.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer\u0026\u0026(c.__webglDepthRenderbuffer=t.createRenderbuffer(),I(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}else console.warn(\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\");if(h){n.bindTexture(34067,u.__webglTexture),R(34067,l,m);for(let t=0;t\u003c6;t++)D(c.__webglFramebuffer[t],e,l,36064,34069+t);y(l,m)\u0026\u0026x(34067,l,e.width,e.height),n.bindTexture(34067,null)}else if(d){const t=e.texture;for(let r=0,s=t.length;r\u003cs;r++){const s=t[r],a=i.get(s);n.bindTexture(3553,a.__webglTexture),R(3553,s,m),D(c.__webglFramebuffer,e,s,36064+r,3553),y(s,m)\u0026\u0026x(3553,s,e.width,e.height)}n.bindTexture(3553,null)}else{let t=3553;if(f)if(o){t=l.isDataTexture3D?32879:35866}else console.warn(\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\");n.bindTexture(t,u.__webglTexture),R(t,l,m),D(c.__webglFramebuffer,e,l,36064,t),y(l,m)\u0026\u0026x(3553,l,e.width,e.height),n.bindTexture(3553,null)}e.depthBuffer\u0026\u0026N(e)},this.updateRenderTargetMipmap=function(t){const e=v(t)||o,r=!0===t.isWebGLMultipleRenderTargets?t.texture:[t.texture];for(let s=0,a=r.length;s\u003ca;s++){const a=r[s];if(y(a,e)){const e=t.isWebGLCubeRenderTarget?34067:3553,r=i.get(a).__webglTexture;n.bindTexture(e,r),x(e,a,t.width,t.height),n.bindTexture(e,null)}}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(o){const r=e.width,s=e.height;let a=16384;e.depthBuffer\u0026\u0026(a|=256),e.stencilBuffer\u0026\u0026(a|=1024);const o=i.get(e);n.bindFramebuffer(36008,o.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,o.__webglFramebuffer),t.blitFramebuffer(0,0,r,s,0,0,r,s,a,9728),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,o.__webglMultisampledFramebuffer)}else console.warn(\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\")},this.safeSetTexture2D=function(t,e){t\u0026\u0026t.isWebGLRenderTarget\u0026\u0026(!1===B\u0026\u0026(console.warn(\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\"),B=!0),t=t.texture),T(t,e)},this.safeSetTextureCube=function(t,e){t\u0026\u0026t.isWebGLCubeRenderTarget\u0026\u0026(!1===O\u0026\u0026(console.warn(\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\"),O=!0),t=t.texture),E(t,e)}}function jo(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===St)return 5121;if(t===Dt)return 32819;if(t===It)return 32820;if(t===Nt)return 33635;if(t===Tt)return 5120;if(t===Et)return 5122;if(t===At)return 5123;if(t===Lt)return 5124;if(t===Rt)return 5125;if(t===Ct)return 5126;if(t===Pt)return i?5131:(n=e.get(\"OES_texture_half_float\"),null!==n?n.HALF_FLOAT_OES:null);if(t===Bt)return 6406;if(t===Ot)return 6407;if(t===Ft)return 6408;if(t===Ht)return 6409;if(t===Ut)return 6410;if(t===kt)return 6402;if(t===Vt)return 34041;if(t===Wt)return 6403;if(t===jt)return 36244;if(t===qt)return 33319;if(t===Xt)return 33320;if(t===Yt)return 36248;if(t===Zt)return 36249;if(t===Jt||t===Qt||t===Kt||t===$t){if(n=e.get(\"WEBGL_compressed_texture_s3tc\"),null===n)return null;if(t===Jt)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===Qt)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===Kt)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===$t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(t===te||t===ee||t===ne||t===ie){if(n=e.get(\"WEBGL_compressed_texture_pvrtc\"),null===n)return null;if(t===te)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===ee)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===ne)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===ie)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(t===re)return n=e.get(\"WEBGL_compressed_texture_etc1\"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((t===se||t===ae)\u0026\u0026(n=e.get(\"WEBGL_compressed_texture_etc\"),null!==n)){if(t===se)return n.COMPRESSED_RGB8_ETC2;if(t===ae)return n.COMPRESSED_RGBA8_ETC2_EAC}return t===oe||t===le||t===ce||t===ue||t===he||t===de||t===pe||t===fe||t===me||t===ge||t===ve||t===ye||t===xe||t===_e||t===we||t===Me||t===Se||t===Te||t===Ee||t===Ae||t===Le||t===Re||t===Ce||t===Pe||t===De||t===Ie||t===Ne||t===ze?(n=e.get(\"WEBGL_compressed_texture_astc\"),null!==n?t:null):t===be?(n=e.get(\"EXT_texture_compression_bptc\"),null!==n?t:null):t===zt?i?34042:(n=e.get(\"WEBGL_depth_texture\"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class qo extends Cs{constructor(t=[]){super(),this.cameras=t}}qo.prototype.isArrayCamera=!0;class Xo extends cr{constructor(){super(),this.type=\"Group\"}}Xo.prototype.isGroup=!0;const Yo={type:\"move\"};class Zo{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand\u0026\u0026(this._hand=new Xo,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay\u0026\u0026(this._targetRay=new Xo,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new oi,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new oi),this._targetRay}getGripSpace(){return null===this._grip\u0026\u0026(this._grip=new Xo,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new oi,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new oi),this._grip}dispatchEvent(t){return null!==this._targetRay\u0026\u0026this._targetRay.dispatchEvent(t),null!==this._grip\u0026\u0026this._grip.dispatchEvent(t),null!==this._hand\u0026\u0026this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\"disconnected\",data:t}),null!==this._targetRay\u0026\u0026(this._targetRay.visible=!1),null!==this._grip\u0026\u0026(this._grip.visible=!1),null!==this._hand\u0026\u0026(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(t\u0026\u0026\"visible-blurred\"!==e.session.visibilityState)if(null!==a\u0026\u0026(i=e.getPose(t.targetRaySpace,n),null!==i\u0026\u0026(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(Yo))),l\u0026\u0026t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new Xo;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t\u0026\u0026(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints[\"index-finger-tip\"],r=l.joints[\"thumb-tip\"],a=i.position.distanceTo(r.position),o=.02,c=.005;l.inputState.pinching\u0026\u0026a\u003eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\"pinchend\",handedness:t.handedness,target:this})):!l.inputState.pinching\u0026\u0026a\u003c=o-c\u0026\u0026(l.inputState.pinching=!0,this.dispatchEvent({type:\"pinchstart\",handedness:t.handedness,target:this}))}else null!==o\u0026\u0026t.gripSpace\u0026\u0026(r=e.getPose(t.gripSpace,n),null!==r\u0026\u0026(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a\u0026\u0026(a.visible=null!==i),null!==o\u0026\u0026(o.visible=null!==r),null!==l\u0026\u0026(l.visible=null!==s),this}}class Jo extends Bn{constructor(t,e){super();const n=this,i=t.state;let r=null,s=1,a=null,o=\"local-floor\",l=null;const c=[],u=new Map,h=new Cs;h.layers.enable(1),h.viewport=new ni;const d=new Cs;d.layers.enable(2),d.viewport=new ni;const p=[h,d],f=new qo;f.layers.enable(1),f.layers.enable(2);let m=null,g=null;function v(t){const e=u.get(t.inputSource);e\u0026\u0026e.dispatchEvent({type:t.type,data:t.inputSource})}function y(){u.forEach((function(t,e){t.disconnect(e)})),u.clear(),m=null,g=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:\"sessionend\"})}function x(t){const e=r.inputSources;for(let t=0;t\u003cc.length;t++)u.set(e[t],c[t]);for(let e=0;e\u003ct.removed.length;e++){const n=t.removed[e],i=u.get(n);i\u0026\u0026(i.dispatchEvent({type:\"disconnected\",data:n}),u.delete(n))}for(let e=0;e\u003ct.added.length;e++){const n=t.added[e],i=u.get(n);i\u0026\u0026i.dispatchEvent({type:\"connected\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=c[t];return void 0===e\u0026\u0026(e=new Zo,c[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=c[t];return void 0===e\u0026\u0026(e=new Zo,c[t]=e),e.getGripSpace()},this.getHand=function(t){let e=c[t];return void 0===e\u0026\u0026(e=new Zo,c[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){s=t,!0===n.isPresenting\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\")},this.setReferenceSpaceType=function(t){o=t,!0===n.isPresenting\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change reference space type while presenting.\")},this.getReferenceSpace=function(){return a},this.getSession=function(){return r},this.setSession=async function(t){if(r=t,null!==r){r.addEventListener(\"select\",v),r.addEventListener(\"selectstart\",v),r.addEventListener(\"selectend\",v),r.addEventListener(\"squeeze\",v),r.addEventListener(\"squeezestart\",v),r.addEventListener(\"squeezeend\",v),r.addEventListener(\"end\",y),r.addEventListener(\"inputsourceschange\",x);const t=e.getContextAttributes();!0!==t.xrCompatible\u0026\u0026await e.makeXRCompatible();const i={antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:s},l=new XRWebGLLayer(r,e,i);r.updateRenderState({baseLayer:l}),a=await r.requestReferenceSpace(o),S.setContext(r),S.start(),n.isPresenting=!0,n.dispatchEvent({type:\"sessionstart\"})}};const _=new oi,b=new oi;function w(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===r)return;f.near=d.near=h.near=t.near,f.far=d.far=h.far=t.far,m===f.near\u0026\u0026g===f.far||(r.updateRenderState({depthNear:f.near,depthFar:f.far}),m=f.near,g=f.far);const e=t.parent,n=f.cameras;w(f,e);for(let t=0;t\u003cn.length;t++)w(n[t],e);t.matrixWorld.copy(f.matrixWorld),t.matrix.copy(f.matrix),t.matrix.decompose(t.position,t.quaternion,t.scale);const i=t.children;for(let t=0,e=i.length;t\u003ce;t++)i[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){_.setFromMatrixPosition(e.matrixWorld),b.setFromMatrixPosition(n.matrixWorld);const i=_.distanceTo(b),r=e.projectionMatrix.elements,s=n.projectionMatrix.elements,a=r[14]/(r[10]-1),o=r[14]/(r[10]+1),l=(r[9]+1)/r[5],c=(r[9]-1)/r[5],u=(r[8]-1)/r[0],h=(s[8]+1)/s[0],d=a*u,p=a*h,f=i/(-u+h),m=f*-u;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(f),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const g=a+f,v=o+f,y=d-m,x=p+(i-m),w=l*o/v*g,M=c*o/v*g;t.projectionMatrix.makePerspective(y,x,w,M,g,v)}(f,h,d):f.projectionMatrix.copy(h.projectionMatrix)},this.getCamera=function(){return f};let M=null;const S=new Os;S.setAnimationLoop((function(t,e){if(l=e.getViewerPose(a),null!==l){const t=l.views,e=r.renderState.baseLayer;i.bindXRFramebuffer(e.framebuffer);let n=!1;t.length!==f.cameras.length\u0026\u0026(f.cameras.length=0,n=!0);for(let i=0;i\u003ct.length;i++){const r=t[i],s=e.getViewport(r),a=p[i];a.matrix.fromArray(r.transform.matrix),a.projectionMatrix.fromArray(r.projectionMatrix),a.viewport.set(s.x,s.y,s.width,s.height),0===i\u0026\u0026f.matrix.copy(a.matrix),!0===n\u0026\u0026f.cameras.push(a)}}const n=r.inputSources;for(let t=0;t\u003cc.length;t++){const i=c[t],r=n[t];i.update(r,e,a)}M\u0026\u0026M(t,e)})),this.setAnimationLoop=function(t){M=t},this.dispose=function(){}}}function Qo(t){function e(e,n){e.opacity.value=n.opacity,n.color\u0026\u0026e.diffuse.value.copy(n.color),n.emissive\u0026\u0026e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map\u0026\u0026(e.map.value=n.map),n.alphaMap\u0026\u0026(e.alphaMap.value=n.alphaMap),n.specularMap\u0026\u0026(e.specularMap.value=n.specularMap);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture\u0026\u0026i._needsFlipEnvMap?-1:1,e.reflectivity.value=n.reflectivity,e.refractionRatio.value=n.refractionRatio;const r=t.get(i).__maxMipLevel;void 0!==r\u0026\u0026(e.maxMipLevel.value=r)}let r,s;n.lightMap\u0026\u0026(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap\u0026\u0026(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?r=n.map:n.specularMap?r=n.specularMap:n.displacementMap?r=n.displacementMap:n.normalMap?r=n.normalMap:n.bumpMap?r=n.bumpMap:n.roughnessMap?r=n.roughnessMap:n.metalnessMap?r=n.metalnessMap:n.alphaMap?r=n.alphaMap:n.emissiveMap?r=n.emissiveMap:n.clearcoatMap?r=n.clearcoatMap:n.clearcoatNormalMap?r=n.clearcoatNormalMap:n.clearcoatRoughnessMap\u0026\u0026(r=n.clearcoatRoughnessMap),void 0!==r\u0026\u0026(r.isWebGLRenderTarget\u0026\u0026(r=r.texture),!0===r.matrixAutoUpdate\u0026\u0026r.updateMatrix(),e.uvTransform.value.copy(r.matrix)),n.aoMap?s=n.aoMap:n.lightMap\u0026\u0026(s=n.lightMap),void 0!==s\u0026\u0026(s.isWebGLRenderTarget\u0026\u0026(s=s.texture),!0===s.matrixAutoUpdate\u0026\u0026s.updateMatrix(),e.uv2Transform.value.copy(s.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap\u0026\u0026(e.roughnessMap.value=n.roughnessMap),n.metalnessMap\u0026\u0026(e.metalnessMap.value=n.metalnessMap),n.emissiveMap\u0026\u0026(e.emissiveMap.value=n.emissiveMap),n.bumpMap\u0026\u0026(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,n.side===m\u0026\u0026(e.bumpScale.value*=-1)),n.normalMap\u0026\u0026(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),n.side===m\u0026\u0026e.normalScale.value.negate()),n.displacementMap\u0026\u0026(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap\u0026\u0026(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2\u0026\u0026(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,a){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap\u0026\u0026(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap\u0026\u0026(t.gradientMap.value=e.gradientMap);e.emissiveMap\u0026\u0026(t.emissiveMap.value=e.emissiveMap);e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap\u0026\u0026(t.emissiveMap.value=e.emissiveMap);e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.reflectivity.value=e.reflectivity,t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.sheen\u0026\u0026t.sheen.value.copy(e.sheen);e.clearcoatMap\u0026\u0026(t.clearcoatMap.value=e.clearcoatMap);e.clearcoatRoughnessMap\u0026\u0026(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap);e.clearcoatNormalMap\u0026\u0026(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,e.side===m\u0026\u0026t.clearcoatNormalScale.value.negate());t.transmission.value=e.transmission,e.transmissionMap\u0026\u0026(t.transmissionMap.value=e.transmissionMap);e.transmission\u003e0\u0026\u0026(t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height));t.thickness.value=e.thickness,e.thicknessMap\u0026\u0026(t.thicknessMap.value=e.thicknessMap);t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor)}(t,i,a):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap\u0026\u0026(t.matcap.value=e.matcap);e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial\u0026\u0026function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map\u0026\u0026(t.map.value=e.map);e.alphaMap\u0026\u0026(t.alphaMap.value=e.alphaMap);let r;e.map?r=e.map:e.alphaMap\u0026\u0026(r=e.alphaMap);void 0!==r\u0026\u0026(!0===r.matrixAutoUpdate\u0026\u0026r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map\u0026\u0026(t.map.value=e.map);e.alphaMap\u0026\u0026(t.alphaMap.value=e.alphaMap);let n;e.map?n=e.map:e.alphaMap\u0026\u0026(n=e.alphaMap);void 0!==n\u0026\u0026(!0===n.matrixAutoUpdate\u0026\u0026n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial\u0026\u0026(i.uniformsNeedUpdate=!1)}}}function Ko(t){const e=void 0!==(t=t||{}).canvas?t.canvas:function(){const t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");return t.style.display=\"block\",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha\u0026\u0026t.alpha,r=void 0===t.depth||t.depth,s=void 0===t.stencil||t.stencil,a=void 0!==t.antialias\u0026\u0026t.antialias,o=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer\u0026\u0026t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:\"default\",u=void 0!==t.failIfMajorPerformanceCaveat\u0026\u0026t.failIfMajorPerformanceCaveat;let h=null,d=null;const p=[],f=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=Je,this.physicallyCorrectLights=!1,this.toneMapping=K,this.toneMappingExposure=1;const m=this;let g=!1,v=0,y=0,x=null,_=-1,b=null;const w=new ni,M=new ni;let S=null,T=e.width,E=e.height,A=1,L=null,R=null;const C=new ni(0,0,T,E),P=new ni(0,0,T,E);let D=!1;const I=[],N=new Bs;let z=!1,B=!1,O=null;const F=new Fi,H=new oi,U={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function G(){return null===x?A:1}let k,V,W,j,q,X,Y,Z,J,Q,$,tt,et,nt,it,rt,st,at,ot,lt,ct,ut,ht=n;function pt(t,n){for(let i=0;i\u003ct.length;i++){const r=t[i],s=e.getContext(r,n);if(null!==s)return s}return null}try{const t={alpha:i,depth:r,stencil:s,antialias:a,premultipliedAlpha:o,preserveDrawingBuffer:l,powerPreference:c,failIfMajorPerformanceCaveat:u};if(e.addEventListener(\"webglcontextlost\",vt,!1),e.addEventListener(\"webglcontextrestored\",yt,!1),null===ht){const e=[\"webgl2\",\"webgl\",\"experimental-webgl\"];if(!0===m.isWebGL1Renderer\u0026\u0026e.shift(),ht=pt(e,t),null===ht)throw pt(e)?new Error(\"Error creating WebGL context with your selected attributes.\"):new Error(\"Error creating WebGL context.\")}void 0===ht.getShaderPrecisionFormat\u0026\u0026(ht.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\"THREE.WebGLRenderer: \"+t.message),t}function mt(){k=new Zs(ht),V=new qs(ht,k,t),k.init(V),ct=new jo(ht,k,V),W=new Vo(ht,k,V),I[0]=1029,j=new Ks(ht),q=new Ro,X=new Wo(ht,k,W,q,V,ct,j),Y=new Ys(m),Z=new Fs(ht,V),ut=new Ws(ht,k,Z,V),J=new Js(ht,Z,j,ut),Q=new na(ht,J,Z,j),at=new ea(ht),it=new Xs(q),$=new Lo(m,Y,k,V,ut,it),tt=new Qo(q),et=new Io(q),nt=new Ho(k,V),st=new Vs(m,Y,W,Q,o),rt=new ko(m,Q,V),ot=new js(ht,k,j,V),lt=new Qs(ht,k,j,V),j.programs=$.programs,m.capabilities=V,m.extensions=k,m.properties=q,m.renderLists=et,m.shadowMap=rt,m.state=W,m.info=j}mt();const gt=new Jo(m,ht);function vt(t){t.preventDefault(),console.log(\"THREE.WebGLRenderer: Context Lost.\"),g=!0}function yt(){console.log(\"THREE.WebGLRenderer: Context Restored.\"),g=!1;const t=j.autoReset,e=rt.enabled,n=rt.autoUpdate,i=rt.needsUpdate,r=rt.type;mt(),j.autoReset=t,rt.enabled=e,rt.autoUpdate=n,rt.needsUpdate=i,rt.type=r}function xt(t){const e=t.target;e.removeEventListener(\"dispose\",xt),function(t){(function(t){const e=q.get(t).programs;void 0!==e\u0026\u0026e.forEach((function(t){$.releaseProgram(t)}))})(t),q.remove(t)}(e)}this.xr=gt,this.getContext=function(){return ht},this.getContextAttributes=function(){return ht.getContextAttributes()},this.forceContextLoss=function(){const t=k.get(\"WEBGL_lose_context\");t\u0026\u0026t.loseContext()},this.forceContextRestore=function(){const t=k.get(\"WEBGL_lose_context\");t\u0026\u0026t.restoreContext()},this.getPixelRatio=function(){return A},this.setPixelRatio=function(t){void 0!==t\u0026\u0026(A=t,this.setSize(T,E,!1))},this.getSize=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getsize() now requires a Vector2 as an argument\"),t=new Zn),t.set(T,E)},this.setSize=function(t,n,i){gt.isPresenting?console.warn(\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\"):(T=t,E=n,e.width=Math.floor(t*A),e.height=Math.floor(n*A),!1!==i\u0026\u0026(e.style.width=t+\"px\",e.style.height=n+\"px\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument\"),t=new Zn),t.set(T*A,E*A).floor()},this.setDrawingBufferSize=function(t,n,i){T=t,E=n,A=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument\"),t=new ni),t.copy(w)},this.getViewport=function(t){return t.copy(C)},this.setViewport=function(t,e,n,i){t.isVector4?C.set(t.x,t.y,t.z,t.w):C.set(t,e,n,i),W.viewport(w.copy(C).multiplyScalar(A).floor())},this.getScissor=function(t){return t.copy(P)},this.setScissor=function(t,e,n,i){t.isVector4?P.set(t.x,t.y,t.z,t.w):P.set(t,e,n,i),W.scissor(M.copy(P).multiplyScalar(A).floor())},this.getScissorTest=function(){return D},this.setScissorTest=function(t){W.setScissorTest(D=t)},this.setOpaqueSort=function(t){L=t},this.setTransparentSort=function(t){R=t},this.getClearColor=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getClearColor() now requires a Color as an argument\"),t=new Ir),t.copy(st.getClearColor())},this.setClearColor=function(){st.setClearColor.apply(st,arguments)},this.getClearAlpha=function(){return st.getClearAlpha()},this.setClearAlpha=function(){st.setClearAlpha.apply(st,arguments)},this.clear=function(t,e,n){let i=0;(void 0===t||t)\u0026\u0026(i|=16384),(void 0===e||e)\u0026\u0026(i|=256),(void 0===n||n)\u0026\u0026(i|=1024),ht.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\"webglcontextlost\",vt,!1),e.removeEventListener(\"webglcontextrestored\",yt,!1),et.dispose(),nt.dispose(),q.dispose(),Y.dispose(),Q.dispose(),ut.dispose(),gt.dispose(),gt.removeEventListener(\"sessionstart\",bt),gt.removeEventListener(\"sessionend\",Mt),O\u0026\u0026(O.dispose(),O=null),Tt.stop()},this.renderBufferImmediate=function(t,e){ut.initAttributes();const n=q.get(t);t.hasPositions\u0026\u0026!n.position\u0026\u0026(n.position=ht.createBuffer()),t.hasNormals\u0026\u0026!n.normal\u0026\u0026(n.normal=ht.createBuffer()),t.hasUvs\u0026\u0026!n.uv\u0026\u0026(n.uv=ht.createBuffer()),t.hasColors\u0026\u0026!n.color\u0026\u0026(n.color=ht.createBuffer());const i=e.getAttributes();t.hasPositions\u0026\u0026(ht.bindBuffer(34962,n.position),ht.bufferData(34962,t.positionArray,35048),ut.enableAttribute(i.position),ht.vertexAttribPointer(i.position,3,5126,!1,0,0)),t.hasNormals\u0026\u0026(ht.bindBuffer(34962,n.normal),ht.bufferData(34962,t.normalArray,35048),ut.enableAttribute(i.normal),ht.vertexAttribPointer(i.normal,3,5126,!1,0,0)),t.hasUvs\u0026\u0026(ht.bindBuffer(34962,n.uv),ht.bufferData(34962,t.uvArray,35048),ut.enableAttribute(i.uv),ht.vertexAttribPointer(i.uv,2,5126,!1,0,0)),t.hasColors\u0026\u0026(ht.bindBuffer(34962,n.color),ht.bufferData(34962,t.colorArray,35048),ut.enableAttribute(i.color),ht.vertexAttribPointer(i.color,3,5126,!1,0,0)),ut.disableUnusedAttributes(),ht.drawArrays(4,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,n,i,r,s){null===e\u0026\u0026(e=U);const a=r.isMesh\u0026\u0026r.matrixWorld.determinant()\u003c0,o=Dt(t,e,i,r);W.setMaterial(i,a);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let u,h=1;!0===i.wireframe\u0026\u0026(l=J.getWireframeAttribute(n),h=2),(i.morphTargets||i.morphNormals)\u0026\u0026at.update(r,n,i,o),ut.setup(r,i,o,n,l);let d=ot;null!==l\u0026\u0026(u=Z.get(l),d=lt,d.setIndex(u));const p=null!==l?l.count:c.count,f=n.drawRange.start*h,m=n.drawRange.count*h,g=null!==s?s.start*h:0,v=null!==s?s.count*h:1/0,y=Math.max(f,g),x=Math.min(p,f+m,g+v)-1,_=Math.max(0,x-y+1);if(0!==_){if(r.isMesh)!0===i.wireframe?(W.setLineWidth(i.wireframeLinewidth*G()),d.setMode(1)):d.setMode(4);else if(r.isLine){let t=i.linewidth;void 0===t\u0026\u0026(t=1),W.setLineWidth(t*G()),r.isLineSegments?d.setMode(1):r.isLineLoop?d.setMode(2):d.setMode(3)}else r.isPoints?d.setMode(0):r.isSprite\u0026\u0026d.setMode(4);if(r.isInstancedMesh)d.renderInstances(y,_,r.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(y,_,t)}else d.render(y,_)}},this.compile=function(t,e){d=nt.get(t),d.init(),t.traverseVisible((function(t){t.isLight\u0026\u0026t.layers.test(e.layers)\u0026\u0026(d.pushLight(t),t.castShadow\u0026\u0026d.pushShadow(t))})),d.setupLights(),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i\u003cn.length;i++){Lt(n[i],t,e)}else Lt(n,t,e)}))};let _t=null;function bt(){Tt.stop()}function Mt(){Tt.start()}const Tt=new Os;function Et(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r\u003cs;r++){const s=t[r],a=s.object,o=s.geometry,l=null===i?s.material:i,c=s.group;if(n.isArrayCamera){const t=n.cameras;for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];a.layers.test(i.layers)\u0026\u0026(W.viewport(w.copy(i.viewport)),d.setupLightsView(i),At(a,e,i,o,l,c))}}else At(a,e,n,o,l,c)}}function At(t,e,n,i,r,s){if(t.onBeforeRender(m,e,n,i,r,s),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),t.isImmediateRenderObject){const i=Dt(n,e,r,t);W.setMaterial(r),ut.reset(),function(t,e){t.render((function(t){m.renderBufferImmediate(t,e)}))}(t,i)}else m.renderBufferDirect(n,e,i,r,t,s);t.onAfterRender(m,e,n,i,r,s)}function Lt(t,e,n){!0!==e.isScene\u0026\u0026(e=U);const i=q.get(t),r=d.state.lights,s=d.state.shadowsArray,a=r.state.version,o=$.getParameters(t,r.state,s,e,n),l=$.getProgramCacheKey(o);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=Y.get(t.envMap||i.environment),void 0===c\u0026\u0026(t.addEventListener(\"dispose\",xt),c=new Map,i.programs=c);let u=c.get(l);if(void 0!==u){if(i.currentProgram===u\u0026\u0026i.lightsStateVersion===a)return Rt(t,o),u}else o.uniforms=$.getUniforms(t),t.onBuild(o,m),t.onBeforeCompile(o,m),u=$.acquireProgram(o,l),c.set(l,u),i.uniforms=o.uniforms;const h=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)\u0026\u0026!0!==t.clipping||(h.clippingPlanes=it.uniform),Rt(t,o),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial\u0026\u0026!0===t.lights}(t),i.lightsStateVersion=a,i.needsLights\u0026\u0026(h.ambientLightColor.value=r.state.ambient,h.lightProbe.value=r.state.probe,h.directionalLights.value=r.state.directional,h.directionalLightShadows.value=r.state.directionalShadow,h.spotLights.value=r.state.spot,h.spotLightShadows.value=r.state.spotShadow,h.rectAreaLights.value=r.state.rectArea,h.ltc_1.value=r.state.rectAreaLTC1,h.ltc_2.value=r.state.rectAreaLTC2,h.pointLights.value=r.state.point,h.pointLightShadows.value=r.state.pointShadow,h.hemisphereLights.value=r.state.hemi,h.directionalShadowMap.value=r.state.directionalShadowMap,h.directionalShadowMatrix.value=r.state.directionalShadowMatrix,h.spotShadowMap.value=r.state.spotShadowMap,h.spotShadowMatrix.value=r.state.spotShadowMatrix,h.pointShadowMap.value=r.state.pointShadowMap,h.pointShadowMatrix.value=r.state.pointShadowMatrix);const p=u.getUniforms(),f=ao.seqWithValue(p.seq,h);return i.currentProgram=u,i.uniformsList=f,u}function Rt(t,e){const n=q.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas}function Dt(t,e,n,i){!0!==e.isScene\u0026\u0026(e=U),X.resetTextureUnits();const r=e.fog,s=n.isMeshStandardMaterial?e.environment:null,a=null===x?m.outputEncoding:x.texture.encoding,o=Y.get(n.envMap||s),l=!0===n.vertexColors\u0026\u0026i.geometry\u0026\u0026i.geometry.attributes.color\u0026\u00264===i.geometry.attributes.color.itemSize,c=q.get(n),u=d.state.lights;if(!0===z\u0026\u0026(!0===B||t!==b)){const e=t===b\u0026\u0026n.id===_;it.setState(n,t,e)}let h=!1;n.version===c.__version?c.needsLights\u0026\u0026c.lightsStateVersion!==u.state.version||c.outputEncoding!==a||i.isInstancedMesh\u0026\u0026!1===c.instancing?h=!0:i.isInstancedMesh||!0!==c.instancing?i.isSkinnedMesh\u0026\u0026!1===c.skinning?h=!0:i.isSkinnedMesh||!0!==c.skinning?c.envMap!==o||n.fog\u0026\u0026c.fog!==r?h=!0:void 0===c.numClippingPlanes||c.numClippingPlanes===it.numPlanes\u0026\u0026c.numIntersection===it.numIntersection?c.vertexAlphas!==l\u0026\u0026(h=!0):h=!0:h=!0:h=!0:(h=!0,c.__version=n.version);let p=c.currentProgram;!0===h\u0026\u0026(p=Lt(n,e,i));let f=!1,g=!1,v=!1;const y=p.getUniforms(),w=c.uniforms;if(W.useProgram(p.program)\u0026\u0026(f=!0,g=!0,v=!0),n.id!==_\u0026\u0026(_=n.id,g=!0),f||b!==t){if(y.setValue(ht,\"projectionMatrix\",t.projectionMatrix),V.logarithmicDepthBuffer\u0026\u0026y.setValue(ht,\"logDepthBufFC\",2/(Math.log(t.far+1)/Math.LN2)),b!==t\u0026\u0026(b=t,g=!0,v=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshStandardMaterial||n.envMap){const e=y.map.cameraPosition;void 0!==e\u0026\u0026e.setValue(ht,H.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial)\u0026\u0026y.setValue(ht,\"isOrthographic\",!0===t.isOrthographicCamera),(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.isShadowMaterial||i.isSkinnedMesh)\u0026\u0026y.setValue(ht,\"viewMatrix\",t.matrixWorldInverse)}if(i.isSkinnedMesh){y.setOptional(ht,i,\"bindMatrix\"),y.setOptional(ht,i,\"bindMatrixInverse\");const t=i.skeleton;t\u0026\u0026(V.floatVertexTextures?(null===t.boneTexture\u0026\u0026t.computeBoneTexture(),y.setValue(ht,\"boneTexture\",t.boneTexture,X),y.setValue(ht,\"boneTextureSize\",t.boneTextureSize)):y.setOptional(ht,t,\"boneMatrices\"))}var M,S;return(g||c.receiveShadow!==i.receiveShadow)\u0026\u0026(c.receiveShadow=i.receiveShadow,y.setValue(ht,\"receiveShadow\",i.receiveShadow)),g\u0026\u0026(y.setValue(ht,\"toneMappingExposure\",m.toneMappingExposure),c.needsLights\u0026\u0026(S=v,(M=w).ambientLightColor.needsUpdate=S,M.lightProbe.needsUpdate=S,M.directionalLights.needsUpdate=S,M.directionalLightShadows.needsUpdate=S,M.pointLights.needsUpdate=S,M.pointLightShadows.needsUpdate=S,M.spotLights.needsUpdate=S,M.spotLightShadows.needsUpdate=S,M.rectAreaLights.needsUpdate=S,M.hemisphereLights.needsUpdate=S),r\u0026\u0026n.fog\u0026\u0026tt.refreshFogUniforms(w,r),tt.refreshMaterialUniforms(w,n,A,E,O),ao.upload(ht,c.uniformsList,w,X)),n.isShaderMaterial\u0026\u0026!0===n.uniformsNeedUpdate\u0026\u0026(ao.upload(ht,c.uniformsList,w,X),n.uniformsNeedUpdate=!1),n.isSpriteMaterial\u0026\u0026y.setValue(ht,\"center\",i.center),y.setValue(ht,\"modelViewMatrix\",i.modelViewMatrix),y.setValue(ht,\"normalMatrix\",i.normalMatrix),y.setValue(ht,\"modelMatrix\",i.matrixWorld),p}Tt.setAnimationLoop((function(t){_t\u0026\u0026_t(t)})),\"undefined\"!=typeof window\u0026\u0026Tt.setContext(window),this.setAnimationLoop=function(t){_t=t,gt.setAnimationLoop(t),null===t?Tt.stop():Tt.start()},gt.addEventListener(\"sessionstart\",bt),gt.addEventListener(\"sessionend\",Mt),this.render=function(t,e){if(void 0!==e\u0026\u0026!0!==e.isCamera)return void console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");if(!0===g)return;!0===t.autoUpdate\u0026\u0026t.updateMatrixWorld(),null===e.parent\u0026\u0026e.updateMatrixWorld(),!0===gt.enabled\u0026\u0026!0===gt.isPresenting\u0026\u0026(!0===gt.cameraAutoUpdate\u0026\u0026gt.updateCamera(e),e=gt.getCamera()),!0===t.isScene\u0026\u0026t.onBeforeRender(m,t,e,x),d=nt.get(t,f.length),d.init(),f.push(d),F.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),N.setFromProjectionMatrix(F),B=this.localClippingEnabled,z=it.init(this.clippingPlanes,B,e),h=et.get(t,p.length),h.init(),p.push(h),function t(e,n,i,r){if(!1===e.visible)return;if(e.layers.test(n.layers))if(e.isGroup)i=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate\u0026\u0026e.update(n);else if(e.isLight)d.pushLight(e),e.castShadow\u0026\u0026d.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||N.intersectsSprite(e)){r\u0026\u0026H.setFromMatrixPosition(e.matrixWorld).applyMatrix4(F);const t=Q.update(e),n=e.material;n.visible\u0026\u0026h.push(e,t,n,i,H.z,null)}}else if(e.isImmediateRenderObject)r\u0026\u0026H.setFromMatrixPosition(e.matrixWorld).applyMatrix4(F),h.push(e,null,e.material,i,H.z,null);else if((e.isMesh||e.isLine||e.isPoints)\u0026\u0026(e.isSkinnedMesh\u0026\u0026e.skeleton.frame!==j.render.frame\u0026\u0026(e.skeleton.update(),e.skeleton.frame=j.render.frame),!e.frustumCulled||N.intersectsObject(e))){r\u0026\u0026H.setFromMatrixPosition(e.matrixWorld).applyMatrix4(F);const t=Q.update(e),n=e.material;if(Array.isArray(n)){const r=t.groups;for(let s=0,a=r.length;s\u003ca;s++){const a=r[s],o=n[a.materialIndex];o\u0026\u0026o.visible\u0026\u0026h.push(e,t,o,i,H.z,a)}}else n.visible\u0026\u0026h.push(e,t,n,i,H.z,null)}const s=e.children;for(let e=0,a=s.length;e\u003ca;e++)t(s[e],n,i,r)}(t,e,0,m.sortObjects),h.finish(),!0===m.sortObjects\u0026\u0026h.sort(L,R),!0===z\u0026\u0026it.beginShadows();const n=d.state.shadowsArray;rt.render(n,t,e),d.setupLights(),d.setupLightsView(e),!0===z\u0026\u0026it.endShadows(),!0===this.info.autoReset\u0026\u0026this.info.reset(),st.render(h,t);const i=h.opaque,r=h.transmissive,s=h.transparent;i.length\u003e0\u0026\u0026Et(i,t,e),r.length\u003e0\u0026\u0026function(t,e,n,i){null===O\u0026\u0026(O=new ii(1024,1024,{generateMipmaps:!0,minFilter:wt,magFilter:ft,wrapS:dt,wrapT:dt}));const r=m.getRenderTarget();m.setRenderTarget(O),m.clear(),Et(t,n,i),X.updateRenderTargetMipmap(O),m.setRenderTarget(r),Et(e,n,i)}(i,r,t,e),s.length\u003e0\u0026\u0026Et(s,t,e),null!==x\u0026\u0026(X.updateRenderTargetMipmap(x),X.updateMultisampleRenderTarget(x)),!0===t.isScene\u0026\u0026t.onAfterRender(m,t,e),W.buffers.depth.setTest(!0),W.buffers.depth.setMask(!0),W.buffers.color.setMask(!0),W.setPolygonOffset(!1),ut.resetDefaultState(),_=-1,b=null,f.pop(),d=f.length\u003e0?f[f.length-1]:null,p.pop(),h=p.length\u003e0?p[p.length-1]:null},this.getActiveCubeFace=function(){return v},this.getActiveMipmapLevel=function(){return y},this.getRenderTarget=function(){return x},this.setRenderTarget=function(t,e=0,n=0){x=t,v=e,y=n,t\u0026\u0026void 0===q.get(t).__webglFramebuffer\u0026\u0026X.setupRenderTarget(t);let i=null,r=!1,s=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)\u0026\u0026(s=!0);const a=q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=a[e],r=!0):i=t.isWebGLMultisampleRenderTarget?q.get(t).__webglMultisampledFramebuffer:a,w.copy(t.viewport),M.copy(t.scissor),S=t.scissorTest}else w.copy(C).multiplyScalar(A).floor(),M.copy(P).multiplyScalar(A).floor(),S=D;if(W.bindFramebuffer(36160,i)\u0026\u0026V.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(I.length!==n.length||36064!==I[0]){for(let t=0,e=n.length;t\u003ce;t++)I[t]=36064+t;I.length=n.length,e=!0}}else 1===I.length\u0026\u002636064===I[0]||(I[0]=36064,I.length=1,e=!0);else 1===I.length\u0026\u00261029===I[0]||(I[0]=1029,I.length=1,e=!0);e\u0026\u0026(V.isWebGL2?ht.drawBuffers(I):k.get(\"WEBGL_draw_buffers\").drawBuffersWEBGL(I))}if(W.viewport(w),W.scissor(M),W.setScissorTest(S),r){const i=q.get(t.texture);ht.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(s){const i=q.get(t.texture),r=e||0;ht.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");let o=q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget\u0026\u0026void 0!==a\u0026\u0026(o=o[a]),o){W.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==Ft\u0026\u0026ct.convert(o)!==ht.getParameter(35739))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\");const c=l===Pt\u0026\u0026(k.has(\"EXT_color_buffer_half_float\")||V.isWebGL2\u0026\u0026k.has(\"EXT_color_buffer_float\"));if(!(l===St||ct.convert(l)===ht.getParameter(35738)||l===Ct\u0026\u0026(V.isWebGL2||k.has(\"OES_texture_float\")||k.has(\"WEBGL_color_buffer_float\"))||c))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\");36053===ht.checkFramebufferStatus(36160)?e\u003e=0\u0026\u0026e\u003c=t.width-i\u0026\u0026n\u003e=0\u0026\u0026n\u003c=t.height-r\u0026\u0026ht.readPixels(e,n,i,r,ct.convert(o),ct.convert(l),s):console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\")}finally{const t=null!==x?q.get(x).__webglFramebuffer:null;W.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);let a=ct.convert(e.format);V.isWebGL2\u0026\u0026(6407===a\u0026\u0026(a=32849),6408===a\u0026\u0026(a=32856)),X.setTexture2D(e,0),ht.copyTexImage2D(3553,n,a,t.x,t.y,r,s,0),W.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=ct.convert(n.format),o=ct.convert(n.type);X.setTexture2D(n,0),ht.pixelStorei(37440,n.flipY),ht.pixelStorei(37441,n.premultiplyAlpha),ht.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?ht.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?ht.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):ht.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i\u0026\u0026n.generateMipmaps\u0026\u0026ht.generateMipmap(3553),W.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(m.isWebGL1Renderer)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\");const{width:s,height:a,data:o}=n.image,l=ct.convert(i.format),c=ct.convert(i.type);let u;if(i.isDataTexture3D)X.setTexture3D(i,0),u=32879;else{if(!i.isDataTexture2DArray)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\");X.setTexture2DArray(i,0),u=35866}ht.pixelStorei(37440,i.flipY),ht.pixelStorei(37441,i.premultiplyAlpha),ht.pixelStorei(3317,i.unpackAlignment);const h=ht.getParameter(3314),d=ht.getParameter(32878),p=ht.getParameter(3316),f=ht.getParameter(3315),g=ht.getParameter(32877);ht.pixelStorei(3314,s),ht.pixelStorei(32878,a),ht.pixelStorei(3316,t.min.x),ht.pixelStorei(3315,t.min.y),ht.pixelStorei(32877,t.min.z),ht.texSubImage3D(u,r,e.x,e.y,e.z,t.max.x-t.min.x+1,t.max.y-t.min.y+1,t.max.z-t.min.z+1,l,c,o),ht.pixelStorei(3314,h),ht.pixelStorei(32878,d),ht.pixelStorei(3316,p),ht.pixelStorei(3315,f),ht.pixelStorei(32877,g),0===r\u0026\u0026i.generateMipmaps\u0026\u0026ht.generateMipmap(u),W.unbindTexture()},this.initTexture=function(t){X.setTexture2D(t,0),W.unbindTexture()},this.resetState=function(){v=0,y=0,x=null,W.reset(),ut.reset()},\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}class $o extends Ko{}$o.prototype.isWebGL1Renderer=!0;class tl{constructor(t,e=25e-5){this.name=\"\",this.color=new Ir(t),this.density=e}clone(){return new tl(this.color,this.density)}toJSON(){return{type:\"FogExp2\",color:this.color.getHex(),density:this.density}}}tl.prototype.isFogExp2=!0;class el{constructor(t,e=1,n=1e3){this.name=\"\",this.color=new Ir(t),this.near=e,this.far=n}clone(){return new el(this.color,this.near,this.far)}toJSON(){return{type:\"Fog\",color:this.color.getHex(),near:this.near,far:this.far}}}el.prototype.isFog=!0;class nl extends cr{constructor(){super(),this.type=\"Scene\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background\u0026\u0026(this.background=t.background.clone()),null!==t.environment\u0026\u0026(this.environment=t.environment.clone()),null!==t.fog\u0026\u0026(this.fog=t.fog.clone()),null!==t.overrideMaterial\u0026\u0026(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background\u0026\u0026(e.object.background=this.background.toJSON(t)),null!==this.environment\u0026\u0026(e.object.environment=this.environment.toJSON(t)),null!==this.fog\u0026\u0026(e.object.fog=this.fog.toJSON()),e}}nl.prototype.isScene=!0;class il{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Tn,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Gn()}onUploadCallback(){}set needsUpdate(t){!0===t\u0026\u0026this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;i\u003cr;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers\u0026\u0026(t.arrayBuffers={}),void 0===this.array.buffer._uuid\u0026\u0026(this.array.buffer._uuid=Gn()),void 0===t.arrayBuffers[this.array.buffer._uuid]\u0026\u0026(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers\u0026\u0026(t.arrayBuffers={}),void 0===this.array.buffer._uuid\u0026\u0026(this.array.buffer._uuid=Gn()),void 0===t.arrayBuffers[this.array.buffer._uuid]\u0026\u0026(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}il.prototype.isInterleavedBuffer=!0;const rl=new oi;class sl{constructor(t,e,n,i){this.name=\"\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e\u003cn;e++)rl.x=this.getX(e),rl.y=this.getY(e),rl.z=this.getZ(e),rl.applyMatrix4(t),this.setXYZ(e,rl.x,rl.y,rl.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e\u003cn;e++)rl.x=this.getX(e),rl.y=this.getY(e),rl.z=this.getZ(e),rl.applyNormalMatrix(t),this.setXYZ(e,rl.x,rl.y,rl.z);return this}transformDirection(t){for(let e=0,n=this.count;e\u003cn;e++)rl.x=this.getX(e),rl.y=this.getY(e),rl.z=this.getZ(e),rl.transformDirection(t),this.setXYZ(e,rl.x,rl.y,rl.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=r,this}clone(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e\u003cthis.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e\u003cthis.itemSize;e++)t.push(this.data.array[n+e])}return new Or(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers\u0026\u0026(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]\u0026\u0026(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new sl(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e\u003cthis.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e\u003cthis.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers\u0026\u0026(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]\u0026\u0026(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}sl.prototype.isInterleavedBufferAttribute=!0;class al extends Er{constructor(t){super(),this.type=\"SpriteMaterial\",this.color=new Ir(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this}}let ol;al.prototype.isSpriteMaterial=!0;const ll=new oi,cl=new oi,ul=new oi,hl=new Zn,dl=new Zn,pl=new Fi,fl=new oi,ml=new oi,gl=new oi,vl=new Zn,yl=new Zn,xl=new Zn;class _l extends cr{constructor(t){if(super(),this.type=\"Sprite\",void 0===ol){ol=new rs;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new il(t,5);ol.setIndex([0,1,2,0,2,3]),ol.setAttribute(\"position\",new sl(e,3,0,!1)),ol.setAttribute(\"uv\",new sl(e,2,3,!1))}this.geometry=ol,this.material=void 0!==t?t:new al,this.center=new Zn(.5,.5)}raycast(t,e){null===t.camera\u0026\u0026console.error('THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.'),cl.setFromMatrixScale(this.matrixWorld),pl.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),ul.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera\u0026\u0026!1===this.material.sizeAttenuation\u0026\u0026cl.multiplyScalar(-ul.z);const n=this.material.rotation;let i,r;0!==n\u0026\u0026(r=Math.cos(n),i=Math.sin(n));const s=this.center;bl(fl.set(-.5,-.5,0),ul,s,cl,i,r),bl(ml.set(.5,-.5,0),ul,s,cl,i,r),bl(gl.set(.5,.5,0),ul,s,cl,i,r),vl.set(0,0),yl.set(1,0),xl.set(1,1);let a=t.ray.intersectTriangle(fl,ml,gl,!1,ll);if(null===a\u0026\u0026(bl(ml.set(-.5,.5,0),ul,s,cl,i,r),yl.set(0,1),a=t.ray.intersectTriangle(fl,gl,ml,!1,ll),null===a))return;const o=t.ray.origin.distanceTo(ll);o\u003ct.near||o\u003et.far||e.push({distance:o,point:ll.clone(),uv:Sr.getUV(ll,fl,ml,gl,vl,yl,xl,new Zn),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center\u0026\u0026this.center.copy(t.center),this.material=t.material,this}}function bl(t,e,n,i,r,s){hl.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(dl.x=s*hl.x-r*hl.y,dl.y=r*hl.x+s*hl.y):dl.copy(hl),t.copy(e),t.x+=dl.x,t.y+=dl.y,t.applyMatrix4(pl)}_l.prototype.isSprite=!0;const wl=new oi,Ml=new oi;class Sl extends cr{constructor(){super(),this._currentLevel=0,this.type=\"LOD\",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];this.addLevel(n.object.clone(),n.distance)}return this.autoUpdate=t.autoUpdate,this}addLevel(t,e=0){e=Math.abs(e);const n=this.levels;let i;for(i=0;i\u003cn.length\u0026\u0026!(e\u003cn[i].distance);i++);return n.splice(i,0,{distance:e,object:t}),this.add(t),this}getCurrentLevel(){return this._currentLevel}getObjectForDistance(t){const e=this.levels;if(e.length\u003e0){let n,i;for(n=1,i=e.length;n\u003ci\u0026\u0026!(t\u003ce[n].distance);n++);return e[n-1].object}return null}raycast(t,e){if(this.levels.length\u003e0){wl.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(wl);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length\u003e1){wl.setFromMatrixPosition(t.matrixWorld),Ml.setFromMatrixPosition(this.matrixWorld);const n=wl.distanceTo(Ml)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i\u003cr\u0026\u0026n\u003e=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;i\u003cr;i++)e[i].object.visible=!1}}toJSON(t){const e=super.toJSON(t);!1===this.autoUpdate\u0026\u0026(e.object.autoUpdate=!1),e.object.levels=[];const n=this.levels;for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];e.object.levels.push({object:i.object.uuid,distance:i.distance})}return e}}const Tl=new oi,El=new ni,Al=new ni,Ll=new oi,Rl=new Fi;class Cl extends ws{constructor(t,e){super(t,e),this.type=\"SkinnedMesh\",this.bindMode=\"attached\",this.bindMatrix=new Fi,this.bindMatrixInverse=new Fi}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e\u0026\u0026(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new ni,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n\u003ci;n++){t.x=e.getX(n),t.y=e.getY(n),t.z=e.getZ(n),t.w=e.getW(n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\"attached\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\"detached\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\"THREE.SkinnedMesh: Unrecognized bindMode: \"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;El.fromBufferAttribute(i.attributes.skinIndex,t),Al.fromBufferAttribute(i.attributes.skinWeight,t),Tl.fromBufferAttribute(i.attributes.position,t).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t\u003c4;t++){const i=Al.getComponent(t);if(0!==i){const r=El.getComponent(t);Rl.multiplyMatrices(n.bones[r].matrixWorld,n.boneInverses[r]),e.addScaledVector(Ll.copy(Tl).applyMatrix4(Rl),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}Cl.prototype.isSkinnedMesh=!0;class Pl extends cr{constructor(){super(),this.type=\"Bone\"}}Pl.prototype.isBone=!0;class Dl extends ti{constructor(t,e,n,i,r,s,a,o,l,c,u,h){super(null,s,a,o,l,c,i,r,u,h),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:ft,this.minFilter=void 0!==c?c:ft,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}Dl.prototype.isDataTexture=!0;const Il=new Fi,Nl=new Fi;class zl{constructor(t=[],e=[]){this.uuid=Gn(),this.bones=t.slice(0),this.boneInverses=e,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){const t=this.bones,e=this.boneInverses;if(this.boneMatrices=new Float32Array(16*t.length),0===e.length)this.calculateInverses();else if(t.length!==e.length){console.warn(\"THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.\"),this.boneInverses=[];for(let t=0,e=this.bones.length;t\u003ce;t++)this.boneInverses.push(new Fi)}}calculateInverses(){this.boneInverses.length=0;for(let t=0,e=this.bones.length;t\u003ce;t++){const e=new Fi;this.bones[t]\u0026\u0026e.copy(this.bones[t].matrixWorld).invert(),this.boneInverses.push(e)}}pose(){for(let t=0,e=this.bones.length;t\u003ce;t++){const e=this.bones[t];e\u0026\u0026e.matrixWorld.copy(this.boneInverses[t]).invert()}for(let t=0,e=this.bones.length;t\u003ce;t++){const e=this.bones[t];e\u0026\u0026(e.parent\u0026\u0026e.parent.isBone?(e.matrix.copy(e.parent.matrixWorld).invert(),e.matrix.multiply(e.matrixWorld)):e.matrix.copy(e.matrixWorld),e.matrix.decompose(e.position,e.quaternion,e.scale))}}update(){const t=this.bones,e=this.boneInverses,n=this.boneMatrices,i=this.boneTexture;for(let i=0,r=t.length;i\u003cr;i++){const r=t[i]?t[i].matrixWorld:Nl;Il.multiplyMatrices(r,e[i]),Il.toArray(n,16*i)}null!==i\u0026\u0026(i.needsUpdate=!0)}clone(){return new zl(this.bones,this.boneInverses)}computeBoneTexture(){let t=Math.sqrt(4*this.bones.length);t=qn(t),t=Math.max(t,4);const e=new Float32Array(t*t*4);e.set(this.boneMatrices);const n=new Dl(e,t,t,Ft,Ct);return this.boneMatrices=e,this.boneTexture=n,this.boneTextureSize=t,this}getBoneByName(t){for(let e=0,n=this.bones.length;e\u003cn;e++){const n=this.bones[e];if(n.name===t)return n}}dispose(){null!==this.boneTexture\u0026\u0026(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(t,e){this.uuid=t.uuid;for(let n=0,i=t.bones.length;n\u003ci;n++){const i=t.bones[n];let r=e[i];void 0===r\u0026\u0026(console.warn(\"THREE.Skeleton: No bone found with UUID:\",i),r=new Pl),this.bones.push(r),this.boneInverses.push((new Fi).fromArray(t.boneInverses[n]))}return this.init(),this}toJSON(){const t={metadata:{version:4.5,type:\"Skeleton\",generator:\"Skeleton.toJSON\"},bones:[],boneInverses:[]};t.uuid=this.uuid;const e=this.bones,n=this.boneInverses;for(let i=0,r=e.length;i\u003cr;i++){const r=e[i];t.bones.push(r.uuid);const s=n[i];t.boneInverses.push(s.toArray())}return t}}const Bl=new Fi,Ol=new Fi,Fl=[],Hl=new ws;class Ul extends ws{constructor(t,e,n){super(t,e),this.instanceMatrix=new Or(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor\u0026\u0026(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(Hl.geometry=this.geometry,Hl.material=this.material,void 0!==Hl.material)for(let r=0;r\u003ci;r++){this.getMatrixAt(r,Bl),Ol.multiplyMatrices(n,Bl),Hl.matrixWorld=Ol,Hl.raycast(t,Fl);for(let t=0,n=Fl.length;t\u003cn;t++){const n=Fl[t];n.instanceId=r,n.object=this,e.push(n)}Fl.length=0}}setColorAt(t,e){null===this.instanceColor\u0026\u0026(this.instanceColor=new Or(new Float32Array(3*this.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\"dispose\"})}}Ul.prototype.isInstancedMesh=!0;class Gl extends Er{constructor(t){super(),this.type=\"LineBasicMaterial\",this.color=new Ir(16777215),this.linewidth=1,this.linecap=\"round\",this.linejoin=\"round\",this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this.morphTargets=t.morphTargets,this}}Gl.prototype.isLineBasicMaterial=!0;const kl=new oi,Vl=new oi,Wl=new Fi,jl=new Oi,ql=new Ri;class Xl extends cr{constructor(t=new rs,e=new Gl){super(),this.type=\"Line\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t\u003ci;t++)kl.fromBufferAttribute(e,t-1),Vl.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=kl.distanceTo(Vl);t.setAttribute(\"lineDistance\",new qr(n,1))}else console.warn(\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry\u0026\u0026console.error(\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Line.threshold,s=n.drawRange;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),ql.copy(n.boundingSphere),ql.applyMatrix4(i),ql.radius+=r,!1===t.ray.intersectsSphere(ql))return;Wl.copy(i).invert(),jl.copy(t.ray).applyMatrix4(Wl);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a,l=new oi,c=new oi,u=new oi,h=new oi,d=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,r=n.attributes.position;if(null!==i){for(let n=Math.max(0,s.start),a=Math.min(i.count,s.start+s.count)-1;n\u003ca;n+=d){const s=i.getX(n),a=i.getX(n+1);l.fromBufferAttribute(r,s),c.fromBufferAttribute(r,a);if(jl.distanceSqToSegment(l,c,h,u)\u003eo)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);d\u003ct.near||d\u003et.far||e.push({distance:d,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;n\u003ci;n+=d){l.fromBufferAttribute(r,n),c.fromBufferAttribute(r,n+1);if(jl.distanceSqToSegment(l,c,h,u)\u003eo)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);i\u003ct.near||i\u003et.far||e.push({distance:i,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry\u0026\u0026console.error(\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}Xl.prototype.isLine=!0;const Yl=new oi,Zl=new oi;class Jl extends Xl{constructor(t,e){super(t,e),this.type=\"LineSegments\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t\u003ci;t+=2)Yl.fromBufferAttribute(e,t),Zl.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+Yl.distanceTo(Zl);t.setAttribute(\"lineDistance\",new qr(n,1))}else console.warn(\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry\u0026\u0026console.error(\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}}Jl.prototype.isLineSegments=!0;class Ql extends Xl{constructor(t,e){super(t,e),this.type=\"LineLoop\"}}Ql.prototype.isLineLoop=!0;class Kl extends Er{constructor(t){super(),this.type=\"PointsMaterial\",this.color=new Ir(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this.morphTargets=t.morphTargets,this}}Kl.prototype.isPointsMaterial=!0;const $l=new Fi,tc=new Oi,ec=new Ri,nc=new oi;class ic extends cr{constructor(t=new rs,e=new Kl){super(),this.type=\"Points\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,s=n.drawRange;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),ec.copy(n.boundingSphere),ec.applyMatrix4(i),ec.radius+=r,!1===t.ray.intersectsSphere(ec))return;$l.copy(i).invert(),tc.copy(t.ray).applyMatrix4($l);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position;if(null!==r){for(let n=Math.max(0,s.start),l=Math.min(r.count,s.start+s.count);n\u003cl;n++){const s=r.getX(n);nc.fromBufferAttribute(a,s),rc(nc,s,o,i,t,e,this)}}else{for(let n=Math.max(0,s.start),r=Math.min(a.count,s.start+s.count);n\u003cr;n++)nc.fromBufferAttribute(a,n),rc(nc,n,o,i,t,e,this)}}else console.error(\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}function rc(t,e,n,i,r,s,a){const o=tc.distanceSqToPoint(t);if(o\u003cn){const n=new oi;tc.closestPointToPoint(t,n),n.applyMatrix4(i);const l=r.ray.origin.distanceTo(n);if(l\u003cr.near||l\u003er.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}ic.prototype.isPoints=!0;class sc extends ti{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.format=void 0!==a?a:Ot,this.minFilter=void 0!==s?s:xt,this.magFilter=void 0!==r?r:xt,this.generateMipmaps=!1;const c=this;\"requestVideoFrameCallback\"in t\u0026\u0026t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\"requestVideoFrameCallback\"in t\u0026\u0026t.readyState\u003e=t.HAVE_CURRENT_DATA\u0026\u0026(this.needsUpdate=!0)}}sc.prototype.isVideoTexture=!0;class ac extends ti{constructor(t,e,n,i,r,s,a,o,l,c,u,h){super(null,s,a,o,l,c,i,r,u,h),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}ac.prototype.isCompressedTexture=!0;class oc extends ti{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}oc.prototype.isCanvasTexture=!0;class lc extends ti{constructor(t,e,n,i,r,s,a,o,l,c){if((c=void 0!==c?c:kt)!==kt\u0026\u0026c!==Vt)throw new Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");void 0===n\u0026\u0026c===kt\u0026\u0026(n=At),void 0===n\u0026\u0026c===Vt\u0026\u0026(n=zt),super(null,i,r,s,a,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==a?a:ft,this.minFilter=void 0!==o?o:ft,this.flipY=!1,this.generateMipmaps=!1}}lc.prototype.isDepthTexture=!0;class cc extends rs{constructor(t=1,e=8,n=0,i=2*Math.PI){super(),this.type=\"CircleGeometry\",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:i},e=Math.max(3,e);const r=[],s=[],a=[],o=[],l=new oi,c=new Zn;s.push(0,0,0),a.push(0,0,1),o.push(.5,.5);for(let r=0,u=3;r\u003c=e;r++,u+=3){const h=n+r/e*i;l.x=t*Math.cos(h),l.y=t*Math.sin(h),s.push(l.x,l.y,l.z),a.push(0,0,1),c.x=(s[u]/t+1)/2,c.y=(s[u+1]/t+1)/2,o.push(c.x,c.y)}for(let t=1;t\u003c=e;t++)r.push(t,t+1,0);this.setIndex(r),this.setAttribute(\"position\",new qr(s,3)),this.setAttribute(\"normal\",new qr(a,3)),this.setAttribute(\"uv\",new qr(o,2))}}class uc extends rs{constructor(t=1,e=1,n=1,i=8,r=1,s=!1,a=0,o=2*Math.PI){super(),this.type=\"CylinderGeometry\",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o};const l=this;i=Math.floor(i),r=Math.floor(r);const c=[],u=[],h=[],d=[];let p=0;const f=[],m=n/2;let g=0;function v(n){const r=p,s=new Zn,f=new oi;let v=0;const y=!0===n?t:e,x=!0===n?1:-1;for(let t=1;t\u003c=i;t++)u.push(0,m*x,0),h.push(0,x,0),d.push(.5,.5),p++;const _=p;for(let t=0;t\u003c=i;t++){const e=t/i*o+a,n=Math.cos(e),r=Math.sin(e);f.x=y*r,f.y=m*x,f.z=y*n,u.push(f.x,f.y,f.z),h.push(0,x,0),s.x=.5*n+.5,s.y=.5*r*x+.5,d.push(s.x,s.y),p++}for(let t=0;t\u003ci;t++){const e=r+t,i=_+t;!0===n?c.push(i,i+1,e):c.push(i+1,i,e),v+=3}l.addGroup(g,v,!0===n?1:2),g+=v}!function(){const s=new oi,v=new oi;let y=0;const x=(e-t)/n;for(let l=0;l\u003c=r;l++){const c=[],g=l/r,y=g*(e-t)+t;for(let t=0;t\u003c=i;t++){const e=t/i,r=e*o+a,l=Math.sin(r),f=Math.cos(r);v.x=y*l,v.y=-g*n+m,v.z=y*f,u.push(v.x,v.y,v.z),s.set(l,x,f).normalize(),h.push(s.x,s.y,s.z),d.push(e,1-g),c.push(p++)}f.push(c)}for(let t=0;t\u003ci;t++)for(let e=0;e\u003cr;e++){const n=f[e][t],i=f[e+1][t],r=f[e+1][t+1],s=f[e][t+1];c.push(n,i,s),c.push(i,r,s),y+=6}l.addGroup(g,y,0),g+=y}(),!1===s\u0026\u0026(t\u003e0\u0026\u0026v(!0),e\u003e0\u0026\u0026v(!1)),this.setIndex(c),this.setAttribute(\"position\",new qr(u,3)),this.setAttribute(\"normal\",new qr(h,3)),this.setAttribute(\"uv\",new qr(d,2))}}class hc extends uc{constructor(t=1,e=1,n=8,i=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,n,i,r,s,a),this.type=\"ConeGeometry\",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a}}}class dc extends rs{constructor(t,e,n=1,i=0){super(),this.type=\"PolyhedronGeometry\",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function a(t,e,n,i){const r=i+1,s=[];for(let i=0;i\u003c=r;i++){s[i]=[];const a=t.clone().lerp(n,i/r),o=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t\u003c=l;t++)s[i][t]=0===t\u0026\u0026i===r?a:a.clone().lerp(o,t/l)}for(let t=0;t\u003cr;t++)for(let e=0;e\u003c2*(r-t)-1;e++){const n=Math.floor(e/2);e%2==0?(o(s[t][n+1]),o(s[t+1][n]),o(s[t][n])):(o(s[t][n+1]),o(s[t+1][n+1]),o(s[t+1][n]))}}function o(t){r.push(t.x,t.y,t.z)}function l(e,n){const i=3*e;n.x=t[i+0],n.y=t[i+1],n.z=t[i+2]}function c(t,e,n,i){i\u003c0\u0026\u00261===t.x\u0026\u0026(s[e]=t.x-1),0===n.x\u0026\u00260===n.z\u0026\u0026(s[e]=i/2/Math.PI+.5)}function u(t){return Math.atan2(t.z,-t.x)}!function(t){const n=new oi,i=new oi,r=new oi;for(let s=0;s\u003ce.length;s+=3)l(e[s+0],n),l(e[s+1],i),l(e[s+2],r),a(n,i,r,t)}(i),function(t){const e=new oi;for(let n=0;n\u003cr.length;n+=3)e.x=r[n+0],e.y=r[n+1],e.z=r[n+2],e.normalize().multiplyScalar(t),r[n+0]=e.x,r[n+1]=e.y,r[n+2]=e.z}(n),function(){const t=new oi;for(let n=0;n\u003cr.length;n+=3){t.x=r[n+0],t.y=r[n+1],t.z=r[n+2];const i=u(t)/2/Math.PI+.5,a=(e=t,Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5);s.push(i,1-a)}var e;(function(){const t=new oi,e=new oi,n=new oi,i=new oi,a=new Zn,o=new Zn,l=new Zn;for(let h=0,d=0;h\u003cr.length;h+=9,d+=6){t.set(r[h+0],r[h+1],r[h+2]),e.set(r[h+3],r[h+4],r[h+5]),n.set(r[h+6],r[h+7],r[h+8]),a.set(s[d+0],s[d+1]),o.set(s[d+2],s[d+3]),l.set(s[d+4],s[d+5]),i.copy(t).add(e).add(n).divideScalar(3);const p=u(i);c(a,d+0,t,p),c(o,d+2,e,p),c(l,d+4,n,p)}})(),function(){for(let t=0;t\u003cs.length;t+=6){const e=s[t+0],n=s[t+2],i=s[t+4],r=Math.max(e,n,i),a=Math.min(e,n,i);r\u003e.9\u0026\u0026a\u003c.1\u0026\u0026(e\u003c.2\u0026\u0026(s[t+0]+=1),n\u003c.2\u0026\u0026(s[t+2]+=1),i\u003c.2\u0026\u0026(s[t+4]+=1))}}()}(),this.setAttribute(\"position\",new qr(r,3)),this.setAttribute(\"normal\",new qr(r.slice(),3)),this.setAttribute(\"uv\",new qr(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}}class pc extends dc{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-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,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[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],t,e),this.type=\"DodecahedronGeometry\",this.parameters={radius:t,detail:e}}}const fc=new oi,mc=new oi,gc=new oi,vc=new Sr;class yc extends rs{constructor(t,e){if(super(),this.type=\"EdgesGeometry\",this.parameters={thresholdAngle:e},e=void 0!==e?e:1,!0===t.isGeometry)return void console.error(\"THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");const n=Math.pow(10,4),i=Math.cos(Hn*e),r=t.getIndex(),s=t.getAttribute(\"position\"),a=r?r.count:s.count,o=[0,0,0],l=[\"a\",\"b\",\"c\"],c=new Array(3),u={},h=[];for(let t=0;t\u003ca;t+=3){r?(o[0]=r.getX(t),o[1]=r.getX(t+1),o[2]=r.getX(t+2)):(o[0]=t,o[1]=t+1,o[2]=t+2);const{a:e,b:a,c:d}=vc;if(e.fromBufferAttribute(s,o[0]),a.fromBufferAttribute(s,o[1]),d.fromBufferAttribute(s,o[2]),vc.getNormal(gc),c[0]=`${Math.round(e.x*n)},${Math.round(e.y*n)},${Math.round(e.z*n)}`,c[1]=`${Math.round(a.x*n)},${Math.round(a.y*n)},${Math.round(a.z*n)}`,c[2]=`${Math.round(d.x*n)},${Math.round(d.y*n)},${Math.round(d.z*n)}`,c[0]!==c[1]\u0026\u0026c[1]!==c[2]\u0026\u0026c[2]!==c[0])for(let t=0;t\u003c3;t++){const e=(t+1)%3,n=c[t],r=c[e],s=vc[l[t]],a=vc[l[e]],d=`${n}_${r}`,p=`${r}_${n}`;p in u\u0026\u0026u[p]?(gc.dot(u[p].normal)\u003c=i\u0026\u0026(h.push(s.x,s.y,s.z),h.push(a.x,a.y,a.z)),u[p]=null):d in u||(u[d]={index0:o[t],index1:o[e],normal:gc.clone()})}}for(const t in u)if(u[t]){const{index0:e,index1:n}=u[t];fc.fromBufferAttribute(s,e),mc.fromBufferAttribute(s,n),h.push(fc.x,fc.y,fc.z),h.push(mc.x,mc.y,mc.z)}this.setAttribute(\"position\",new qr(h,3))}}const xc=function(t,e,n){n=n||2;const i=e\u0026\u0026e.length,r=i?e[0]*n:t.length;let s=_c(t,0,r,n,!0);const a=[];if(!s||s.next===s.prev)return a;let o,l,c,u,h,d,p;if(i\u0026\u0026(s=function(t,e,n,i){const r=[];let s,a,o,l,c;for(s=0,a=e.length;s\u003ca;s++)o=e[s]*i,l=s\u003ca-1?e[s+1]*i:t.length,c=_c(t,o,l,i,!1),c===c.next\u0026\u0026(c.steiner=!0),r.push(Pc(c));for(r.sort(Ac),s=0;s\u003cr.length;s++)Lc(r[s],n),n=bc(n,n.next);return n}(t,e,s,n)),t.length\u003e80*n){o=c=t[0],l=u=t[1];for(let e=n;e\u003cr;e+=n)h=t[e],d=t[e+1],h\u003co\u0026\u0026(o=h),d\u003cl\u0026\u0026(l=d),h\u003ec\u0026\u0026(c=h),d\u003eu\u0026\u0026(u=d);p=Math.max(c-o,u-l),p=0!==p?1/p:0}return wc(s,a,n,o,l,p),a};function _c(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s\u003cn;s+=i)r+=(t[a]-t[s])*(t[s+1]+t[a+1]),a=s;return r}(t,e,n,i)\u003e0)for(s=e;s\u003cn;s+=i)a=Gc(s,t[s],t[s+1],a);else for(s=n-i;s\u003e=e;s-=i)a=Gc(s,t[s],t[s+1],a);return a\u0026\u0026zc(a,a.next)\u0026\u0026(kc(a),a=a.next),a}function bc(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!zc(i,i.next)\u0026\u00260!==Nc(i.prev,i,i.next))i=i.next;else{if(kc(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function wc(t,e,n,i,r,s,a){if(!t)return;!a\u0026\u0026s\u0026\u0026function(t,e,n,i){let r=t;do{null===r.z\u0026\u0026(r.z=Cc(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e\u003cc\u0026\u0026(o++,i=i.nextZ,i);e++);for(l=c;o\u003e0||l\u003e0\u0026\u0026i;)0!==o\u0026\u0026(0===l||!i||n.z\u003c=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a\u003e1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?Sc(t,i,r,s):Mc(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),kc(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?wc(t=Tc(bc(t),e,n),e,n,i,r,s,2):2===a\u0026\u0026Ec(t,e,n,i,r,s):wc(bc(t),e,n,i,r,s,1);break}}function Mc(t){const e=t.prev,n=t,i=t.next;if(Nc(e,n,i)\u003e=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Dc(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)\u0026\u0026Nc(r.prev,r,r.next)\u003e=0)return!1;r=r.next}return!0}function Sc(t,e,n,i){const r=t.prev,s=t,a=t.next;if(Nc(r,s,a)\u003e=0)return!1;const o=r.x\u003cs.x?r.x\u003ca.x?r.x:a.x:s.x\u003ca.x?s.x:a.x,l=r.y\u003cs.y?r.y\u003ca.y?r.y:a.y:s.y\u003ca.y?s.y:a.y,c=r.x\u003es.x?r.x\u003ea.x?r.x:a.x:s.x\u003ea.x?s.x:a.x,u=r.y\u003es.y?r.y\u003ea.y?r.y:a.y:s.y\u003ea.y?s.y:a.y,h=Cc(o,l,e,n,i),d=Cc(c,u,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p\u0026\u0026p.z\u003e=h\u0026\u0026f\u0026\u0026f.z\u003c=d;){if(p!==t.prev\u0026\u0026p!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)\u0026\u0026Nc(p.prev,p,p.next)\u003e=0)return!1;if(p=p.prevZ,f!==t.prev\u0026\u0026f!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,f.x,f.y)\u0026\u0026Nc(f.prev,f,f.next)\u003e=0)return!1;f=f.nextZ}for(;p\u0026\u0026p.z\u003e=h;){if(p!==t.prev\u0026\u0026p!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)\u0026\u0026Nc(p.prev,p,p.next)\u003e=0)return!1;p=p.prevZ}for(;f\u0026\u0026f.z\u003c=d;){if(f!==t.prev\u0026\u0026f!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,f.x,f.y)\u0026\u0026Nc(f.prev,f,f.next)\u003e=0)return!1;f=f.nextZ}return!0}function Tc(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!zc(r,s)\u0026\u0026Bc(r,i,i.next,s)\u0026\u0026Hc(r,s)\u0026\u0026Hc(s,r)\u0026\u0026(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),kc(i),kc(i.next),i=t=s),i=i.next}while(i!==t);return bc(i)}function Ec(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i\u0026\u0026Ic(a,t)){let o=Uc(a,t);return a=bc(a,a.next),o=bc(o,o.next),wc(a,e,n,i,r,s),void wc(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function Ac(t,e){return t.x-e.x}function Lc(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r\u003c=n.y\u0026\u0026r\u003e=n.next.y\u0026\u0026n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t\u003c=i\u0026\u0026t\u003ea){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x\u003cn.next.x?n:n.next}}n=n.next}while(n!==e);if(!s)return null;if(i===a)return s;const o=s,l=s.x,c=s.y;let u,h=1/0;n=s;do{i\u003e=n.x\u0026\u0026n.x\u003e=l\u0026\u0026i!==n.x\u0026\u0026Dc(r\u003cc?i:a,r,l,c,r\u003cc?a:i,r,n.x,n.y)\u0026\u0026(u=Math.abs(r-n.y)/(i-n.x),Hc(n,t)\u0026\u0026(u\u003ch||u===h\u0026\u0026(n.x\u003es.x||n.x===s.x\u0026\u0026Rc(s,n)))\u0026\u0026(s=n,h=u)),n=n.next}while(n!==o);return s}(t,e)){const n=Uc(e,t);bc(e,e.next),bc(n,n.next)}}function Rc(t,e){return Nc(t.prev,t,e.prev)\u003c0\u0026\u0026Nc(e.next,t,t.next)\u003c0}function Cc(t,e,n,i,r){return(t=1431655765\u0026((t=858993459\u0026((t=252645135\u0026((t=16711935\u0026((t=32767*(t-n)*r)|t\u003c\u003c8))|t\u003c\u003c4))|t\u003c\u003c2))|t\u003c\u003c1))|(e=1431655765\u0026((e=858993459\u0026((e=252645135\u0026((e=16711935\u0026((e=32767*(e-i)*r)|e\u003c\u003c8))|e\u003c\u003c4))|e\u003c\u003c2))|e\u003c\u003c1))\u003c\u003c1}function Pc(t){let e=t,n=t;do{(e.x\u003cn.x||e.x===n.x\u0026\u0026e.y\u003cn.y)\u0026\u0026(n=e),e=e.next}while(e!==t);return n}function Dc(t,e,n,i,r,s,a,o){return(r-a)*(e-o)-(t-a)*(s-o)\u003e=0\u0026\u0026(t-a)*(i-o)-(n-a)*(e-o)\u003e=0\u0026\u0026(n-a)*(s-o)-(r-a)*(i-o)\u003e=0}function Ic(t,e){return t.next.i!==e.i\u0026\u0026t.prev.i!==e.i\u0026\u0026!function(t,e){let n=t;do{if(n.i!==t.i\u0026\u0026n.next.i!==t.i\u0026\u0026n.i!==e.i\u0026\u0026n.next.i!==e.i\u0026\u0026Bc(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)\u0026\u0026(Hc(t,e)\u0026\u0026Hc(e,t)\u0026\u0026function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y\u003es!=n.next.y\u003es\u0026\u0026n.next.y!==n.y\u0026\u0026r\u003c(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x\u0026\u0026(i=!i),n=n.next}while(n!==t);return i}(t,e)\u0026\u0026(Nc(t.prev,t,e.prev)||Nc(t,e.prev,e))||zc(t,e)\u0026\u0026Nc(t.prev,t,t.next)\u003e0\u0026\u0026Nc(e.prev,e,e.next)\u003e0)}function Nc(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function zc(t,e){return t.x===e.x\u0026\u0026t.y===e.y}function Bc(t,e,n,i){const r=Fc(Nc(t,e,n)),s=Fc(Nc(t,e,i)),a=Fc(Nc(n,i,t)),o=Fc(Nc(n,i,e));return r!==s\u0026\u0026a!==o||(!(0!==r||!Oc(t,n,e))||(!(0!==s||!Oc(t,i,e))||(!(0!==a||!Oc(n,t,i))||!(0!==o||!Oc(n,e,i)))))}function Oc(t,e,n){return e.x\u003c=Math.max(t.x,n.x)\u0026\u0026e.x\u003e=Math.min(t.x,n.x)\u0026\u0026e.y\u003c=Math.max(t.y,n.y)\u0026\u0026e.y\u003e=Math.min(t.y,n.y)}function Fc(t){return t\u003e0?1:t\u003c0?-1:0}function Hc(t,e){return Nc(t.prev,t,t.next)\u003c0?Nc(t,e,t.next)\u003e=0\u0026\u0026Nc(t,t.prev,e)\u003e=0:Nc(t,e,t.prev)\u003c0||Nc(t,t.next,e)\u003c0}function Uc(t,e){const n=new Vc(t.i,t.x,t.y),i=new Vc(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function Gc(t,e,n,i){const r=new Vc(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function kc(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ\u0026\u0026(t.prevZ.nextZ=t.nextZ),t.nextZ\u0026\u0026(t.nextZ.prevZ=t.prevZ)}function Vc(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Wc{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r\u003ce;i=r++)n+=t[i].x*t[r].y-t[r].x*t[i].y;return.5*n}static isClockWise(t){return Wc.area(t)\u003c0}static triangulateShape(t,e){const n=[],i=[],r=[];jc(t),qc(n,t);let s=t.length;e.forEach(jc);for(let t=0;t\u003ce.length;t++)i.push(s),s+=e[t].length,qc(n,e[t]);const a=xc(n,i);for(let t=0;t\u003ca.length;t+=3)r.push(a.slice(t,t+3));return r}}function jc(t){const e=t.length;e\u003e2\u0026\u0026t[e-1].equals(t[0])\u0026\u0026t.pop()}function qc(t,e){for(let n=0;n\u003ce.length;n++)t.push(e[n].x),t.push(e[n].y)}class Xc extends rs{constructor(t,e){super(),this.type=\"ExtrudeGeometry\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],r=[];for(let e=0,n=t.length;e\u003cn;e++){s(t[e])}function s(t){const s=[],a=void 0!==e.curveSegments?e.curveSegments:12,o=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:100,c=void 0===e.bevelEnabled||e.bevelEnabled,u=void 0!==e.bevelThickness?e.bevelThickness:6,h=void 0!==e.bevelSize?e.bevelSize:u-2,d=void 0!==e.bevelOffset?e.bevelOffset:0,p=void 0!==e.bevelSegments?e.bevelSegments:3;const f=e.extrudePath,m=void 0!==e.UVGenerator?e.UVGenerator:Yc;void 0!==e.amount\u0026\u0026(console.warn(\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\"),l=e.amount);let g,v,y,x,_,b=!1;f\u0026\u0026(g=f.getSpacedPoints(o),b=!0,c=!1,v=f.computeFrenetFrames(o,!1),y=new oi,x=new oi,_=new oi),c||(p=0,u=0,h=0,d=0);const w=t.extractPoints(a);let M=w.shape;const S=w.holes;if(!Wc.isClockWise(M)){M=M.reverse();for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];Wc.isClockWise(e)\u0026\u0026(S[t]=e.reverse())}}const T=Wc.triangulateShape(M,S),E=M;for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];M=M.concat(e)}function A(t,e,n){return e||console.error(\"THREE.ExtrudeGeometry: vec does not exist\"),e.clone().multiplyScalar(n).add(t)}const L=M.length,R=T.length;function C(t,e,n){let i,r,s;const a=t.x-e.x,o=t.y-e.y,l=n.x-t.x,c=n.y-t.y,u=a*a+o*o,h=a*c-o*l;if(Math.abs(h)\u003eNumber.EPSILON){const h=Math.sqrt(u),d=Math.sqrt(l*l+c*c),p=e.x-o/h,f=e.y+a/h,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(a*c-o*l);i=p+a*m-t.x,r=f+o*m-t.y;const g=i*i+r*r;if(g\u003c=2)return new Zn(i,r);s=Math.sqrt(g/2)}else{let t=!1;a\u003eNumber.EPSILON?l\u003eNumber.EPSILON\u0026\u0026(t=!0):a\u003c-Number.EPSILON?l\u003c-Number.EPSILON\u0026\u0026(t=!0):Math.sign(o)===Math.sign(c)\u0026\u0026(t=!0),t?(i=-o,r=a,s=Math.sqrt(u)):(i=a,r=o,s=Math.sqrt(u/2))}return new Zn(i/s,r/s)}const P=[];for(let t=0,e=E.length,n=e-1,i=t+1;t\u003ce;t++,n++,i++)n===e\u0026\u0026(n=0),i===e\u0026\u0026(i=0),P[t]=C(E[t],E[n],E[i]);const D=[];let I,N=P.concat();for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];I=[];for(let t=0,n=e.length,i=n-1,r=t+1;t\u003cn;t++,i++,r++)i===n\u0026\u0026(i=0),r===n\u0026\u0026(r=0),I[t]=C(e[t],e[i],e[r]);D.push(I),N=N.concat(I)}for(let t=0;t\u003cp;t++){const e=t/p,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t\u003ce;t++){const e=A(E[t],P[t],i);O(e.x,e.y,-n)}for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];I=D[t];for(let t=0,r=e.length;t\u003cr;t++){const r=A(e[t],I[t],i);O(r.x,r.y,-n)}}}const z=h+d;for(let t=0;t\u003cL;t++){const e=c?A(M[t],N[t],z):M[t];b?(x.copy(v.normals[0]).multiplyScalar(e.x),y.copy(v.binormals[0]).multiplyScalar(e.y),_.copy(g[0]).add(x).add(y),O(_.x,_.y,_.z)):O(e.x,e.y,0)}for(let t=1;t\u003c=o;t++)for(let e=0;e\u003cL;e++){const n=c?A(M[e],N[e],z):M[e];b?(x.copy(v.normals[t]).multiplyScalar(n.x),y.copy(v.binormals[t]).multiplyScalar(n.y),_.copy(g[t]).add(x).add(y),O(_.x,_.y,_.z)):O(n.x,n.y,l/o*t)}for(let t=p-1;t\u003e=0;t--){const e=t/p,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t\u003ce;t++){const e=A(E[t],P[t],i);O(e.x,e.y,l+n)}for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];I=D[t];for(let t=0,r=e.length;t\u003cr;t++){const r=A(e[t],I[t],i);b?O(r.x,r.y+g[o-1].y,g[o-1].x+n):O(r.x,r.y,l+n)}}}function B(t,e){let n=t.length;for(;--n\u003e=0;){const i=n;let r=n-1;r\u003c0\u0026\u0026(r=t.length-1);for(let t=0,n=o+2*p;t\u003cn;t++){const n=L*t,s=L*(t+1);H(e+i+n,e+r+n,e+r+s,e+i+s)}}}function O(t,e,n){s.push(t),s.push(e),s.push(n)}function F(t,e,r){U(t),U(e),U(r);const s=i.length/3,a=m.generateTopUV(n,i,s-3,s-2,s-1);G(a[0]),G(a[1]),G(a[2])}function H(t,e,r,s){U(t),U(e),U(s),U(e),U(r),U(s);const a=i.length/3,o=m.generateSideWallUV(n,i,a-6,a-3,a-2,a-1);G(o[0]),G(o[1]),G(o[3]),G(o[1]),G(o[2]),G(o[3])}function U(t){i.push(s[3*t+0]),i.push(s[3*t+1]),i.push(s[3*t+2])}function G(t){r.push(t.x),r.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=L*t;for(let t=0;t\u003cR;t++){const n=T[t];F(n[2]+e,n[1]+e,n[0]+e)}t=o+2*p,e=L*t;for(let t=0;t\u003cR;t++){const n=T[t];F(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t\u003cR;t++){const e=T[t];F(e[2],e[1],e[0])}for(let t=0;t\u003cR;t++){const e=T[t];F(e[0]+L*o,e[1]+L*o,e[2]+L*o)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;B(E,e),e+=E.length;for(let t=0,n=S.length;t\u003cn;t++){const n=S[t];B(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\"position\",new qr(i,3)),this.setAttribute(\"uv\",new qr(r,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e\u003ci;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath\u0026\u0026(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}}const Yc={generateTopUV:function(t,e,n,i,r){const s=e[3*n],a=e[3*n+1],o=e[3*i],l=e[3*i+1],c=e[3*r],u=e[3*r+1];return[new Zn(s,a),new Zn(o,l),new Zn(c,u)]},generateSideWallUV:function(t,e,n,i,r,s){const a=e[3*n],o=e[3*n+1],l=e[3*n+2],c=e[3*i],u=e[3*i+1],h=e[3*i+2],d=e[3*r],p=e[3*r+1],f=e[3*r+2],m=e[3*s],g=e[3*s+1],v=e[3*s+2];return Math.abs(o-u)\u003cMath.abs(a-c)?[new Zn(a,1-l),new Zn(c,1-h),new Zn(d,1-f),new Zn(m,1-v)]:[new Zn(o,1-l),new Zn(u,1-h),new Zn(p,1-f),new Zn(g,1-v)]}};class Zc extends dc{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2;super([-1,n,0,1,n,0,-1,-n,0,1,-n,0,0,-1,n,0,1,n,0,-1,-n,0,1,-n,n,0,-1,n,0,1,-n,0,-1,-n,0,1],[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],t,e),this.type=\"IcosahedronGeometry\",this.parameters={radius:t,detail:e}}}class Jc extends rs{constructor(t,e=12,n=0,i=2*Math.PI){super(),this.type=\"LatheGeometry\",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e),i=kn(i,0,2*Math.PI);const r=[],s=[],a=[],o=1/e,l=new oi,c=new Zn;for(let r=0;r\u003c=e;r++){const u=n+r*o*i,h=Math.sin(u),d=Math.cos(u);for(let n=0;n\u003c=t.length-1;n++)l.x=t[n].x*h,l.y=t[n].y,l.z=t[n].x*d,s.push(l.x,l.y,l.z),c.x=r/e,c.y=n/(t.length-1),a.push(c.x,c.y)}for(let n=0;n\u003ce;n++)for(let e=0;e\u003ct.length-1;e++){const i=e+n*t.length,s=i,a=i+t.length,o=i+t.length+1,l=i+1;r.push(s,a,l),r.push(a,o,l)}if(this.setIndex(r),this.setAttribute(\"position\",new qr(s,3)),this.setAttribute(\"uv\",new qr(a,2)),this.computeVertexNormals(),i===2*Math.PI){const n=this.attributes.normal.array,i=new oi,r=new oi,s=new oi,a=e*t.length*3;for(let e=0,o=0;e\u003ct.length;e++,o+=3)i.x=n[o+0],i.y=n[o+1],i.z=n[o+2],r.x=n[a+o+0],r.y=n[a+o+1],r.z=n[a+o+2],s.addVectors(i,r).normalize(),n[o+0]=n[a+o+0]=s.x,n[o+1]=n[a+o+1]=s.y,n[o+2]=n[a+o+2]=s.z}}}class Qc extends dc{constructor(t=1,e=0){super([1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type=\"OctahedronGeometry\",this.parameters={radius:t,detail:e}}}class Kc extends rs{constructor(t,e,n){super(),this.type=\"ParametricGeometry\",this.parameters={func:t,slices:e,stacks:n};const i=[],r=[],s=[],a=[],o=1e-5,l=new oi,c=new oi,u=new oi,h=new oi,d=new oi;t.length\u003c3\u0026\u0026console.error(\"THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.\");const p=e+1;for(let i=0;i\u003c=n;i++){const p=i/n;for(let n=0;n\u003c=e;n++){const i=n/e;t(i,p,c),r.push(c.x,c.y,c.z),i-o\u003e=0?(t(i-o,p,u),h.subVectors(c,u)):(t(i+o,p,u),h.subVectors(u,c)),p-o\u003e=0?(t(i,p-o,u),d.subVectors(c,u)):(t(i,p+o,u),d.subVectors(u,c)),l.crossVectors(h,d).normalize(),s.push(l.x,l.y,l.z),a.push(i,p)}}for(let t=0;t\u003cn;t++)for(let n=0;n\u003ce;n++){const e=t*p+n,r=t*p+n+1,s=(t+1)*p+n+1,a=(t+1)*p+n;i.push(e,r,a),i.push(r,s,a)}this.setIndex(i),this.setAttribute(\"position\",new qr(r,3)),this.setAttribute(\"normal\",new qr(s,3)),this.setAttribute(\"uv\",new qr(a,2))}}class $c extends rs{constructor(t=.5,e=1,n=8,i=1,r=0,s=2*Math.PI){super(),this.type=\"RingGeometry\",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:n,phiSegments:i,thetaStart:r,thetaLength:s},n=Math.max(3,n);const a=[],o=[],l=[],c=[];let u=t;const h=(e-t)/(i=Math.max(1,i)),d=new oi,p=new Zn;for(let t=0;t\u003c=i;t++){for(let t=0;t\u003c=n;t++){const i=r+t/n*s;d.x=u*Math.cos(i),d.y=u*Math.sin(i),o.push(d.x,d.y,d.z),l.push(0,0,1),p.x=(d.x/e+1)/2,p.y=(d.y/e+1)/2,c.push(p.x,p.y)}u+=h}for(let t=0;t\u003ci;t++){const e=t*(n+1);for(let t=0;t\u003cn;t++){const i=t+e,r=i,s=i+n+1,o=i+n+2,l=i+1;a.push(r,s,l),a.push(s,o,l)}}this.setIndex(a),this.setAttribute(\"position\",new qr(o,3)),this.setAttribute(\"normal\",new qr(l,3)),this.setAttribute(\"uv\",new qr(c,2))}}class tu extends rs{constructor(t,e=12){super(),this.type=\"ShapeGeometry\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],r=[],s=[];let a=0,o=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e\u003ct.length;e++)l(t[e]),this.addGroup(a,o,e),a+=o,o=0;function l(t){const a=i.length/3,l=t.extractPoints(e);let c=l.shape;const u=l.holes;!1===Wc.isClockWise(c)\u0026\u0026(c=c.reverse());for(let t=0,e=u.length;t\u003ce;t++){const e=u[t];!0===Wc.isClockWise(e)\u0026\u0026(u[t]=e.reverse())}const h=Wc.triangulateShape(c,u);for(let t=0,e=u.length;t\u003ce;t++){const e=u[t];c=c.concat(e)}for(let t=0,e=c.length;t\u003ce;t++){const e=c[t];i.push(e.x,e.y,0),r.push(0,0,1),s.push(e.x,e.y)}for(let t=0,e=h.length;t\u003ce;t++){const e=h[t],i=e[0]+a,r=e[1]+a,s=e[2]+a;n.push(i,r,s),o+=3}}this.setIndex(n),this.setAttribute(\"position\",new qr(i,3)),this.setAttribute(\"normal\",new qr(r,3)),this.setAttribute(\"uv\",new qr(s,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}}class eu extends rs{constructor(t=1,e=8,n=6,i=0,r=2*Math.PI,s=0,a=Math.PI){super(),this.type=\"SphereGeometry\",this.parameters={radius:t,widthSegments:e,heightSegments:n,phiStart:i,phiLength:r,thetaStart:s,thetaLength:a},e=Math.max(3,Math.floor(e)),n=Math.max(2,Math.floor(n));const o=Math.min(s+a,Math.PI);let l=0;const c=[],u=new oi,h=new oi,d=[],p=[],f=[],m=[];for(let d=0;d\u003c=n;d++){const g=[],v=d/n;let y=0;0==d\u0026\u00260==s?y=.5/e:d==n\u0026\u0026o==Math.PI\u0026\u0026(y=-.5/e);for(let n=0;n\u003c=e;n++){const o=n/e;u.x=-t*Math.cos(i+o*r)*Math.sin(s+v*a),u.y=t*Math.cos(s+v*a),u.z=t*Math.sin(i+o*r)*Math.sin(s+v*a),p.push(u.x,u.y,u.z),h.copy(u).normalize(),f.push(h.x,h.y,h.z),m.push(o+y,1-v),g.push(l++)}c.push(g)}for(let t=0;t\u003cn;t++)for(let i=0;i\u003ce;i++){const e=c[t][i+1],r=c[t][i],a=c[t+1][i],l=c[t+1][i+1];(0!==t||s\u003e0)\u0026\u0026d.push(e,r,l),(t!==n-1||o\u003cMath.PI)\u0026\u0026d.push(r,a,l)}this.setIndex(d),this.setAttribute(\"position\",new qr(p,3)),this.setAttribute(\"normal\",new qr(f,3)),this.setAttribute(\"uv\",new qr(m,2))}}class nu extends dc{constructor(t=1,e=0){super([1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type=\"TetrahedronGeometry\",this.parameters={radius:t,detail:e}}}class iu extends Xc{constructor(t,e={}){const n=e.font;if(!n||!n.isFont)return console.error(\"THREE.TextGeometry: font parameter is not an instance of THREE.Font.\"),new rs;const i=n.generateShapes(t,e.size);e.depth=void 0!==e.height?e.height:50,void 0===e.bevelThickness\u0026\u0026(e.bevelThickness=10),void 0===e.bevelSize\u0026\u0026(e.bevelSize=8),void 0===e.bevelEnabled\u0026\u0026(e.bevelEnabled=!1),super(i,e),this.type=\"TextGeometry\"}}class ru extends rs{constructor(t=1,e=.4,n=8,i=6,r=2*Math.PI){super(),this.type=\"TorusGeometry\",this.parameters={radius:t,tube:e,radialSegments:n,tubularSegments:i,arc:r},n=Math.floor(n),i=Math.floor(i);const s=[],a=[],o=[],l=[],c=new oi,u=new oi,h=new oi;for(let s=0;s\u003c=n;s++)for(let d=0;d\u003c=i;d++){const p=d/i*r,f=s/n*Math.PI*2;u.x=(t+e*Math.cos(f))*Math.cos(p),u.y=(t+e*Math.cos(f))*Math.sin(p),u.z=e*Math.sin(f),a.push(u.x,u.y,u.z),c.x=t*Math.cos(p),c.y=t*Math.sin(p),h.subVectors(u,c).normalize(),o.push(h.x,h.y,h.z),l.push(d/i),l.push(s/n)}for(let t=1;t\u003c=n;t++)for(let e=1;e\u003c=i;e++){const n=(i+1)*t+e-1,r=(i+1)*(t-1)+e-1,a=(i+1)*(t-1)+e,o=(i+1)*t+e;s.push(n,r,o),s.push(r,a,o)}this.setIndex(s),this.setAttribute(\"position\",new qr(a,3)),this.setAttribute(\"normal\",new qr(o,3)),this.setAttribute(\"uv\",new qr(l,2))}}class su extends rs{constructor(t=1,e=.4,n=64,i=8,r=2,s=3){super(),this.type=\"TorusKnotGeometry\",this.parameters={radius:t,tube:e,tubularSegments:n,radialSegments:i,p:r,q:s},n=Math.floor(n),i=Math.floor(i);const a=[],o=[],l=[],c=[],u=new oi,h=new oi,d=new oi,p=new oi,f=new oi,m=new oi,g=new oi;for(let a=0;a\u003c=n;++a){const y=a/n*r*Math.PI*2;v(y,r,s,t,d),v(y+.01,r,s,t,p),m.subVectors(p,d),g.addVectors(p,d),f.crossVectors(m,g),g.crossVectors(f,m),f.normalize(),g.normalize();for(let t=0;t\u003c=i;++t){const r=t/i*Math.PI*2,s=-e*Math.cos(r),p=e*Math.sin(r);u.x=d.x+(s*g.x+p*f.x),u.y=d.y+(s*g.y+p*f.y),u.z=d.z+(s*g.z+p*f.z),o.push(u.x,u.y,u.z),h.subVectors(u,d).normalize(),l.push(h.x,h.y,h.z),c.push(a/n),c.push(t/i)}}for(let t=1;t\u003c=n;t++)for(let e=1;e\u003c=i;e++){const n=(i+1)*(t-1)+(e-1),r=(i+1)*t+(e-1),s=(i+1)*t+e,o=(i+1)*(t-1)+e;a.push(n,r,o),a.push(r,s,o)}function v(t,e,n,i,r){const s=Math.cos(t),a=Math.sin(t),o=n/e*t,l=Math.cos(o);r.x=i*(2+l)*.5*s,r.y=i*(2+l)*a*.5,r.z=i*Math.sin(o)*.5}this.setIndex(a),this.setAttribute(\"position\",new qr(o,3)),this.setAttribute(\"normal\",new qr(l,3)),this.setAttribute(\"uv\",new qr(c,2))}}class au extends rs{constructor(t,e=64,n=1,i=8,r=!1){super(),this.type=\"TubeGeometry\",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:r};const s=t.computeFrenetFrames(e,r);this.tangents=s.tangents,this.normals=s.normals,this.binormals=s.binormals;const a=new oi,o=new oi,l=new Zn;let c=new oi;const u=[],h=[],d=[],p=[];function f(r){c=t.getPointAt(r/e,c);const l=s.normals[r],d=s.binormals[r];for(let t=0;t\u003c=i;t++){const e=t/i*Math.PI*2,r=Math.sin(e),s=-Math.cos(e);o.x=s*l.x+r*d.x,o.y=s*l.y+r*d.y,o.z=s*l.z+r*d.z,o.normalize(),h.push(o.x,o.y,o.z),a.x=c.x+n*o.x,a.y=c.y+n*o.y,a.z=c.z+n*o.z,u.push(a.x,a.y,a.z)}}!function(){for(let t=0;t\u003ce;t++)f(t);f(!1===r?e:0),function(){for(let t=0;t\u003c=e;t++)for(let n=0;n\u003c=i;n++)l.x=t/e,l.y=n/i,d.push(l.x,l.y)}(),function(){for(let t=1;t\u003c=e;t++)for(let e=1;e\u003c=i;e++){const n=(i+1)*(t-1)+(e-1),r=(i+1)*t+(e-1),s=(i+1)*t+e,a=(i+1)*(t-1)+e;p.push(n,r,a),p.push(r,s,a)}}()}(),this.setIndex(p),this.setAttribute(\"position\",new qr(u,3)),this.setAttribute(\"normal\",new qr(h,3)),this.setAttribute(\"uv\",new qr(d,2))}toJSON(){const t=super.toJSON();return t.path=this.parameters.path.toJSON(),t}}class ou extends rs{constructor(t){if(super(),this.type=\"WireframeGeometry\",!0===t.isGeometry)return void console.error(\"THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");const e=[],n=[0,0],i={},r=new oi;if(null!==t.index){const s=t.attributes.position,a=t.index;let o=t.groups;0===o.length\u0026\u0026(o=[{start:0,count:a.count,materialIndex:0}]);for(let t=0,e=o.length;t\u003ce;++t){const e=o[t],r=e.start;for(let t=r,s=r+e.count;t\u003cs;t+=3)for(let e=0;e\u003c3;e++){const r=a.getX(t+e),s=a.getX(t+(e+1)%3);n[0]=Math.min(r,s),n[1]=Math.max(r,s);const o=n[0]+\",\"+n[1];void 0===i[o]\u0026\u0026(i[o]={index1:n[0],index2:n[1]})}}for(const t in i){const n=i[t];r.fromBufferAttribute(s,n.index1),e.push(r.x,r.y,r.z),r.fromBufferAttribute(s,n.index2),e.push(r.x,r.y,r.z)}}else{const n=t.attributes.position;for(let t=0,i=n.count/3;t\u003ci;t++)for(let i=0;i\u003c3;i++){const s=3*t+i;r.fromBufferAttribute(n,s),e.push(r.x,r.y,r.z);const a=3*t+(i+1)%3;r.fromBufferAttribute(n,a),e.push(r.x,r.y,r.z)}}this.setAttribute(\"position\",new qr(e,3))}}var lu=Object.freeze({__proto__:null,BoxGeometry:Ss,BoxBufferGeometry:Ss,CircleGeometry:cc,CircleBufferGeometry:cc,ConeGeometry:hc,ConeBufferGeometry:hc,CylinderGeometry:uc,CylinderBufferGeometry:uc,DodecahedronGeometry:pc,DodecahedronBufferGeometry:pc,EdgesGeometry:yc,ExtrudeGeometry:Xc,ExtrudeBufferGeometry:Xc,IcosahedronGeometry:Zc,IcosahedronBufferGeometry:Zc,LatheGeometry:Jc,LatheBufferGeometry:Jc,OctahedronGeometry:Qc,OctahedronBufferGeometry:Qc,ParametricGeometry:Kc,ParametricBufferGeometry:Kc,PlaneGeometry:Hs,PlaneBufferGeometry:Hs,PolyhedronGeometry:dc,PolyhedronBufferGeometry:dc,RingGeometry:$c,RingBufferGeometry:$c,ShapeGeometry:tu,ShapeBufferGeometry:tu,SphereGeometry:eu,SphereBufferGeometry:eu,TetrahedronGeometry:nu,TetrahedronBufferGeometry:nu,TextGeometry:iu,TextBufferGeometry:iu,TorusGeometry:ru,TorusBufferGeometry:ru,TorusKnotGeometry:su,TorusKnotBufferGeometry:su,TubeGeometry:au,TubeBufferGeometry:au,WireframeGeometry:ou});class cu extends Er{constructor(t){super(),this.type=\"ShadowMaterial\",this.color=new Ir(0),this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this}}cu.prototype.isShadowMaterial=!0;class uu extends Ls{constructor(t){super(t),this.type=\"RawShaderMaterial\"}}uu.prototype.isRawShaderMaterial=!0;class hu extends Er{constructor(t){super(),this.defines={STANDARD:\"\"},this.type=\"MeshStandardMaterial\",this.color=new Ir(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 Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.vertexTangents=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\"\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this.vertexTangents=t.vertexTangents,this}}hu.prototype.isMeshStandardMaterial=!0;class du extends hu{constructor(t){super(),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.type=\"MeshPhysicalMaterial\",this.clearcoat=0,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Zn(1,1),this.clearcoatNormalMap=null,this.reflectivity=.5,Object.defineProperty(this,\"ior\",{get:function(){return(1+.4*this.reflectivity)/(1-.4*this.reflectivity)},set:function(t){this.reflectivity=kn(2.5*(t-1)/(t+1),0,1)}}),this.sheen=null,this.transmission=0,this.transmissionMap=null,this.thickness=.01,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationColor=new Ir(1,1,1),this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.reflectivity=t.reflectivity,t.sheen?this.sheen=(this.sheen||new Ir).copy(t.sheen):this.sheen=null,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this}}du.prototype.isMeshPhysicalMaterial=!0;class pu extends Er{constructor(t){super(),this.type=\"MeshPhongMaterial\",this.color=new Ir(16777215),this.specular=new Ir(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Z,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}pu.prototype.isMeshPhongMaterial=!0;class fu extends Er{constructor(t){super(),this.defines={TOON:\"\"},this.type=\"MeshToonMaterial\",this.color=new Ir(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this}}fu.prototype.isMeshToonMaterial=!0;class mu extends Er{constructor(t){super(),this.type=\"MeshNormalMaterial\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}mu.prototype.isMeshNormalMaterial=!0;class gu extends Er{constructor(t){super(),this.type=\"MeshLambertMaterial\",this.color=new Ir(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Z,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this}}gu.prototype.isMeshLambertMaterial=!0;class vu extends Er{constructor(t){super(),this.defines={MATCAP:\"\"},this.type=\"MeshMatcapMaterial\",this.color=new Ir(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\"\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}vu.prototype.isMeshMatcapMaterial=!0;class yu extends Gl{constructor(t){super(),this.type=\"LineDashedMaterial\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}yu.prototype.isLineDashedMaterial=!0;var xu=Object.freeze({__proto__:null,ShadowMaterial:cu,SpriteMaterial:al,RawShaderMaterial:uu,ShaderMaterial:Ls,PointsMaterial:Kl,MeshPhysicalMaterial:du,MeshStandardMaterial:hu,MeshPhongMaterial:pu,MeshToonMaterial:fu,MeshNormalMaterial:mu,MeshLambertMaterial:gu,MeshDepthMaterial:Uo,MeshDistanceMaterial:Go,MeshBasicMaterial:Nr,MeshMatcapMaterial:vu,LineDashedMaterial:yu,LineBasicMaterial:Gl,Material:Er});const _u={arraySlice:function(t,e,n){return _u.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n\u0026\u0026t.constructor===e?t:\"number\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)\u0026\u0026!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,a=0;a!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[a++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s\u0026\u0026void 0===s[i];)s=t[r++];if(void 0===s)return;let a=s[i];if(void 0!==a)if(Array.isArray(a))do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),n.push.apply(n,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),a.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),n.push(a)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t\u003cs.tracks.length;++t){const e=s.tracks[t],o=e.getValueSize(),l=[],c=[];for(let t=0;t\u003ce.times.length;++t){const s=e.times[t]*r;if(!(s\u003cn||s\u003e=i)){l.push(e.times[t]);for(let n=0;n\u003co;++n)c.push(e.values[t*o+n])}}0!==l.length\u0026\u0026(e.times=_u.convertArray(l,e.times.constructor),e.values=_u.convertArray(c,e.values.constructor),a.push(e))}s.tracks=a;let o=1/0;for(let t=0;t\u003cs.tracks.length;++t)o\u003es.tracks[t].times[0]\u0026\u0026(o=s.tracks[t].times[0]);for(let t=0;t\u003cs.tracks.length;++t)s.tracks[t].shift(-1*o);return s.resetDuration(),s},makeClipAdditive:function(t,e=0,n=t,i=30){i\u003c=0\u0026\u0026(i=30);const r=n.tracks.length,s=e/i;for(let e=0;e\u003cr;++e){const i=n.tracks[e],r=i.ValueTypeName;if(\"bool\"===r||\"string\"===r)continue;const a=t.tracks.find((function(t){return t.name===i.name\u0026\u0026t.ValueTypeName===r}));if(void 0===a)continue;let o=0;const l=i.getValueSize();i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline\u0026\u0026(o=l/3);let c=0;const u=a.getValueSize();a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline\u0026\u0026(c=u/3);const h=i.times.length-1;let d;if(s\u003c=i.times[0]){const t=o,e=l-o;d=_u.arraySlice(i.values,t,e)}else if(s\u003e=i.times[h]){const t=h*l+o,e=t+l-o;d=_u.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=_u.arraySlice(t.resultBuffer,e,n)}if(\"quaternion\"===r){(new ai).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t\u003cp;++t){const e=t*u+c;if(\"quaternion\"===r)ai.multiplyQuaternionsFlat(a.values,e,d,0,a.values,e);else{const t=u-2*c;for(let n=0;n\u003ct;++n)a.values[e+n]-=d[n]}}}return t.blendMode=qe,t}};class bu{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],r=e[n-1];t:{e:{let s;n:{i:if(!(t\u003ci)){for(let s=n+2;;){if(void 0===i){if(t\u003cr)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,r)}if(n===s)break;if(r=i,i=e[++n],t\u003ci)break e}s=e.length;break n}if(t\u003e=r)break t;{const a=e[1];t\u003ca\u0026\u0026(n=2,r=a);for(let s=n-2;;){if(void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===s)break;if(i=r,r=e[--n-1],t\u003e=r)break e}s=n,n=0}}for(;n\u003cs;){const i=n+s\u003e\u003e\u003e1;t\u003ce[i]?s=i:n=i+1}if(i=e[n],r=e[n-1],void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,r,t)}this._cachedIndex=n,this.intervalChanged_(n,r,i)}return this.interpolate_(n,r,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=t*i;for(let t=0;t!==i;++t)e[t]=n[r+t];return e}interpolate_(){throw new Error(\"call to abstract method\")}intervalChanged_(){}}bu.prototype.beforeStart_=bu.prototype.copySampleValue_,bu.prototype.afterEnd_=bu.prototype.copySampleValue_;class wu extends bu{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ke,endingEnd:ke}}intervalChanged_(t,e,n){const i=this.parameterPositions;let r=t-2,s=t+1,a=i[r],o=i[s];if(void 0===a)switch(this.getSettings_().endingStart){case Ve:r=t,a=2*e-n;break;case We:r=i.length-2,a=e+i[r]-i[r+1];break;default:r=t,a=n}if(void 0===o)switch(this.getSettings_().endingEnd){case Ve:s=t,o=2*n-e;break;case We:s=1,o=n+i[1]-i[0];break;default:s=t-1,o=e}const l=.5*(n-e),c=this.valueSize;this._weightPrev=l/(e-a),this._weightNext=l/(o-n),this._offsetPrev=r*c,this._offsetNext=s*c}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=this._offsetPrev,u=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),f=p*p,m=f*p,g=-h*m+2*h*f-h*p,v=(1+h)*m+(-1.5-2*h)*f+(-.5+h)*p+1,y=(-1-d)*m+(1.5+d)*f+.5*p,x=d*m-d*f;for(let t=0;t!==a;++t)r[t]=g*s[c+t]+v*s[l+t]+y*s[o+t]+x*s[u+t];return r}}class Mu extends bu{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=(n-e)/(i-e),u=1-c;for(let t=0;t!==a;++t)r[t]=s[l+t]*u+s[o+t]*c;return r}}class Su extends bu{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}class Tu{constructor(t,e,n,i){if(void 0===t)throw new Error(\"THREE.KeyframeTrack: track name is undefined\");if(void 0===e||0===e.length)throw new Error(\"THREE.KeyframeTrack: no keyframes in track named \"+t);this.name=t,this.times=_u.convertArray(e,this.TimeBufferType),this.values=_u.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:_u.convertArray(t.times,Array),values:_u.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation\u0026\u0026(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new Su(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new Mu(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new wu(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case He:e=this.InterpolantFactoryMethodDiscrete;break;case Ue:e=this.InterpolantFactoryMethodLinear;break;case Ge:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\"unsupported interpolation for \"+this.ValueTypeName+\" keyframe track named \"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\"THREE.KeyframeTrack:\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return He;case this.InterpolantFactoryMethodLinear:return Ue;case this.InterpolantFactoryMethodSmooth:return Ge}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let r=0,s=i-1;for(;r!==i\u0026\u0026n[r]\u003ct;)++r;for(;-1!==s\u0026\u0026n[s]\u003ee;)--s;if(++s,0!==r||s!==i){r\u003e=s\u0026\u0026(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=_u.arraySlice(n,r,s),this.values=_u.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0\u0026\u0026(console.error(\"THREE.KeyframeTrack: Invalid value size in track.\",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r\u0026\u0026(console.error(\"THREE.KeyframeTrack: Track is empty.\",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if(\"number\"==typeof i\u0026\u0026isNaN(i)){console.error(\"THREE.KeyframeTrack: Time is not a valid number.\",this,e,i),t=!1;break}if(null!==s\u0026\u0026s\u003ei){console.error(\"THREE.KeyframeTrack: Out of order keys.\",this,e,i,s),t=!1;break}s=i}if(void 0!==i\u0026\u0026_u.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\"THREE.KeyframeTrack: Value is not a valid number.\",this,e,n),t=!1;break}}return t}optimize(){const t=_u.arraySlice(this.times),e=_u.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===Ge,r=t.length-1;let s=1;for(let a=1;a\u003cr;++a){let r=!1;const o=t[a];if(o!==t[a+1]\u0026\u0026(1!==a||o!==t[0]))if(i)r=!0;else{const t=a*n,i=t-n,s=t+n;for(let a=0;a!==n;++a){const n=e[t+a];if(n!==e[i+a]||n!==e[s+a]){r=!0;break}}}if(r){if(a!==s){t[s]=t[a];const i=a*n,r=s*n;for(let t=0;t!==n;++t)e[r+t]=e[i+t]}++s}}if(r\u003e0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=_u.arraySlice(t,0,s),this.values=_u.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=_u.arraySlice(this.times,0),e=_u.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Tu.prototype.TimeBufferType=Float32Array,Tu.prototype.ValueBufferType=Float32Array,Tu.prototype.DefaultInterpolation=Ue;class Eu extends Tu{}Eu.prototype.ValueTypeName=\"bool\",Eu.prototype.ValueBufferType=Array,Eu.prototype.DefaultInterpolation=He,Eu.prototype.InterpolantFactoryMethodLinear=void 0,Eu.prototype.InterpolantFactoryMethodSmooth=void 0;class Au extends Tu{}Au.prototype.ValueTypeName=\"color\";class Lu extends Tu{}Lu.prototype.ValueTypeName=\"number\";class Ru extends bu{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)ai.slerpFlat(r,0,s,l-a,s,l,o);return r}}class Cu extends Tu{InterpolantFactoryMethodLinear(t){return new Ru(this.times,this.values,this.getValueSize(),t)}}Cu.prototype.ValueTypeName=\"quaternion\",Cu.prototype.DefaultInterpolation=Ue,Cu.prototype.InterpolantFactoryMethodSmooth=void 0;class Pu extends Tu{}Pu.prototype.ValueTypeName=\"string\",Pu.prototype.ValueBufferType=Array,Pu.prototype.DefaultInterpolation=He,Pu.prototype.InterpolantFactoryMethodLinear=void 0,Pu.prototype.InterpolantFactoryMethodSmooth=void 0;class Du extends Tu{}Du.prototype.ValueTypeName=\"vector\";class Iu{constructor(t,e=-1,n,i=je){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=Gn(),this.duration\u003c0\u0026\u0026this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(Nu(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(Tu.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t\u003cr;t++){let a=[],o=[];a.push((t+r-1)%r,t,(t+1)%r),o.push(0,1,0);const l=_u.getKeyframeOrder(a);a=_u.sortedArray(a,1,l),o=_u.sortedArray(o,1,l),i||0!==a[0]||(a.push(r),o.push(o[0])),s.push(new Lu(\".morphTargetInfluences[\"+e[t].name+\"]\",a,o).scale(1/n))}return new this(t,-1,s)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry\u0026\u0026e.geometry.animations||e.animations}for(let t=0;t\u003cn.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},r=/^([\\w-]*?)([\\d]+)$/;for(let e=0,n=t.length;e\u003cn;e++){const n=t[e],s=n.name.match(r);if(s\u0026\u0026s.length\u003e1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error(\"THREE.AnimationClip: No animation in JSONLoader data.\"),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];_u.flattenJSON(n,s,a,i),0!==s.length\u0026\u0026r.push(new t(e,s,a))}},i=[],r=t.name||\"default\",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t\u003cl.length;t++){const r=l[t].keys;if(r\u0026\u00260!==r.length)if(r[0].morphTargets){const t={};let e;for(e=0;e\u003cr.length;e++)if(r[e].morphTargets)for(let n=0;n\u003cr[e].morphTargets.length;n++)t[r[e].morphTargets[n]]=-1;for(const n in t){const t=[],s=[];for(let i=0;i!==r[e].morphTargets.length;++i){const i=r[e];t.push(i.time),s.push(i.morphTarget===n?1:0)}i.push(new Lu(\".morphTargetInfluence[\"+n+\"]\",t,s))}o=t.length*(s||1)}else{const s=\".bones[\"+e[t].name+\"]\";n(Du,s+\".position\",r,\"pos\",i),n(Cu,s+\".quaternion\",r,\"rot\",i),n(Du,s+\".scale\",r,\"scl\",i)}}if(0===i.length)return null;return new this(r,o,i,a)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t\u003cthis.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e\u003cthis.tracks.length;e++)t=t\u0026\u0026this.tracks[e].validate();return t}optimize(){for(let t=0;t\u003cthis.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e\u003cthis.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function Nu(t){if(void 0===t.type)throw new Error(\"THREE.KeyframeTrack: track type undefined, can not parse\");const e=function(t){switch(t.toLowerCase()){case\"scalar\":case\"double\":case\"float\":case\"number\":case\"integer\":return Lu;case\"vector\":case\"vector2\":case\"vector3\":case\"vector4\":return Du;case\"color\":return Au;case\"quaternion\":return Cu;case\"bool\":case\"boolean\":return Eu;case\"string\":return Pu}throw new Error(\"THREE.KeyframeTrack: Unsupported typeName: \"+t)}(t.type);if(void 0===t.times){const e=[],n=[];_u.flattenJSON(t.keys,e,n,\"value\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}const zu={enabled:!1,files:{},add:function(t,e){!1!==this.enabled\u0026\u0026(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};class Bu{constructor(t,e,n){const i=this;let r=!1,s=0,a=0,o=void 0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===r\u0026\u0026void 0!==i.onStart\u0026\u0026i.onStart(t,s,a),r=!0},this.itemEnd=function(t){s++,void 0!==i.onProgress\u0026\u0026i.onProgress(t,s,a),s===a\u0026\u0026(r=!1,void 0!==i.onLoad\u0026\u0026i.onLoad())},this.itemError=function(t){void 0!==i.onError\u0026\u0026i.onError(t)},this.resolveURL=function(t){return o?o(t):t},this.setURLModifier=function(t){return o=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e\u0026\u0026l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e\u003cn;e+=2){const n=l[e],i=l[e+1];if(n.global\u0026\u0026(n.lastIndex=0),n.test(t))return i}return null}}}const Ou=new Bu;class Fu{constructor(t){this.manager=void 0!==t?t:Ou,this.crossOrigin=\"anonymous\",this.withCredentials=!1,this.path=\"\",this.resourcePath=\"\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,r){n.load(t,i,e,r)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}const Hu={};class Uu extends Fu{constructor(t){super(t)}load(t,e,n,i){void 0===t\u0026\u0026(t=\"\"),void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=zu.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;if(void 0!==Hu[t])return void Hu[t].push({onLoad:e,onProgress:n,onError:i});const a=t.match(/^data:(.*?)(;base64)?,(.*)$/);let o;if(a){const n=a[1],s=!!a[2];let o=a[3];o=decodeURIComponent(o),s\u0026\u0026(o=atob(o));try{let i;const s=(this.responseType||\"\").toLowerCase();switch(s){case\"arraybuffer\":case\"blob\":const t=new Uint8Array(o.length);for(let e=0;e\u003co.length;e++)t[e]=o.charCodeAt(e);i=\"blob\"===s?new Blob([t.buffer],{type:n}):t.buffer;break;case\"document\":const e=new DOMParser;i=e.parseFromString(o,n);break;case\"json\":i=JSON.parse(o);break;default:i=o}setTimeout((function(){e\u0026\u0026e(i),r.manager.itemEnd(t)}),0)}catch(e){setTimeout((function(){i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)}),0)}}else{Hu[t]=[],Hu[t].push({onLoad:e,onProgress:n,onError:i}),o=new XMLHttpRequest,o.open(\"GET\",t,!0),o.addEventListener(\"load\",(function(e){const n=this.response,i=Hu[t];if(delete Hu[t],200===this.status||0===this.status){0===this.status\u0026\u0026console.warn(\"THREE.FileLoader: HTTP Status 0 received.\"),zu.add(t,n);for(let t=0,e=i.length;t\u003ce;t++){const e=i[t];e.onLoad\u0026\u0026e.onLoad(n)}r.manager.itemEnd(t)}else{for(let t=0,n=i.length;t\u003cn;t++){const n=i[t];n.onError\u0026\u0026n.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}}),!1),o.addEventListener(\"progress\",(function(e){const n=Hu[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onProgress\u0026\u0026i.onProgress(e)}}),!1),o.addEventListener(\"error\",(function(e){const n=Hu[t];delete Hu[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onError\u0026\u0026i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),o.addEventListener(\"abort\",(function(e){const n=Hu[t];delete Hu[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onError\u0026\u0026i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),void 0!==this.responseType\u0026\u0026(o.responseType=this.responseType),void 0!==this.withCredentials\u0026\u0026(o.withCredentials=this.withCredentials),o.overrideMimeType\u0026\u0026o.overrideMimeType(void 0!==this.mimeType?this.mimeType:\"text/plain\");for(const t in this.requestHeader)o.setRequestHeader(t,this.requestHeader[t]);o.send(null)}return r.manager.itemStart(t),o}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class Gu extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=[];for(let n=0;n\u003ct.length;n++){const i=Iu.parse(t[n]);e.push(i)}return e}}class ku extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new ac,o=new Uu(this.manager);o.setPath(this.path),o.setResponseType(\"arraybuffer\"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const n=r.parse(t,!0);s[c]={width:n.width,height:n.height,format:n.format,mipmaps:n.mipmaps},l+=1,6===l\u0026\u0026(1===n.mipmapCount\u0026\u0026(a.minFilter=xt),a.image=s,a.format=n.format,a.needsUpdate=!0,e\u0026\u0026e(a))}),n,i)}if(Array.isArray(t))for(let e=0,n=t.length;e\u003cn;++e)c(e);else o.load(t,(function(t){const n=r.parse(t,!0);if(n.isCubemap){const t=n.mipmaps.length/n.mipmapCount;for(let e=0;e\u003ct;e++){s[e]={mipmaps:[]};for(let t=0;t\u003cn.mipmapCount;t++)s[e].mipmaps.push(n.mipmaps[e*n.mipmapCount+t]),s[e].format=n.format,s[e].width=n.width,s[e].height=n.height}a.image=s}else a.image.width=n.width,a.image.height=n.height,a.mipmaps=n.mipmaps;1===n.mipmapCount\u0026\u0026(a.minFilter=xt),a.format=n.format,a.needsUpdate=!0,e\u0026\u0026e(a)}),n,i);return a}}class Vu extends Fu{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=zu.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;const a=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"img\");function o(){a.removeEventListener(\"load\",o,!1),a.removeEventListener(\"error\",l,!1),zu.add(t,this),e\u0026\u0026e(this),r.manager.itemEnd(t)}function l(e){a.removeEventListener(\"load\",o,!1),a.removeEventListener(\"error\",l,!1),i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)}return a.addEventListener(\"load\",o,!1),a.addEventListener(\"error\",l,!1),\"data:\"!==t.substr(0,5)\u0026\u0026void 0!==this.crossOrigin\u0026\u0026(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class Wu extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=new Ds,s=new Vu(this.manager);s.setCrossOrigin(this.crossOrigin),s.setPath(this.path);let a=0;function o(n){s.load(t[n],(function(t){r.images[n]=t,a++,6===a\u0026\u0026(r.needsUpdate=!0,e\u0026\u0026e(r))}),void 0,i)}for(let e=0;e\u003ct.length;++e)o(e);return r}}class ju extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Dl,a=new Uu(this.manager);return a.setResponseType(\"arraybuffer\"),a.setRequestHeader(this.requestHeader),a.setPath(this.path),a.setWithCredentials(r.withCredentials),a.load(t,(function(t){const n=r.parse(t);n\u0026\u0026(void 0!==n.image?s.image=n.image:void 0!==n.data\u0026\u0026(s.image.width=n.width,s.image.height=n.height,s.image.data=n.data),s.wrapS=void 0!==n.wrapS?n.wrapS:dt,s.wrapT=void 0!==n.wrapT?n.wrapT:dt,s.magFilter=void 0!==n.magFilter?n.magFilter:xt,s.minFilter=void 0!==n.minFilter?n.minFilter:xt,s.anisotropy=void 0!==n.anisotropy?n.anisotropy:1,void 0!==n.encoding\u0026\u0026(s.encoding=n.encoding),void 0!==n.flipY\u0026\u0026(s.flipY=n.flipY),void 0!==n.format\u0026\u0026(s.format=n.format),void 0!==n.type\u0026\u0026(s.type=n.type),void 0!==n.mipmaps\u0026\u0026(s.mipmaps=n.mipmaps,s.minFilter=wt),1===n.mipmapCount\u0026\u0026(s.minFilter=xt),void 0!==n.generateMipmaps\u0026\u0026(s.generateMipmaps=n.generateMipmaps),s.needsUpdate=!0,e\u0026\u0026e(s,n))}),n,i),s}}class qu extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=new ti,s=new Vu(this.manager);return s.setCrossOrigin(this.crossOrigin),s.setPath(this.path),s.load(t,(function(n){r.image=n;const i=t.search(/\\.jpe?g($|\\?)/i)\u003e0||0===t.search(/^data\\:image\\/jpeg/);r.format=i?Ot:Ft,r.needsUpdate=!0,void 0!==e\u0026\u0026e(r)}),n,i),r}}class Xu{constructor(){this.type=\"Curve\",this.arcLengthDivisions=200}getPoint(){return console.warn(\"THREE.Curve: .getPoint() not implemented.\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths\u0026\u0026this.cacheArcLengths.length===t+1\u0026\u0026!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s\u003c=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o\u003c=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a\u003c0)o=i+1;else{if(!(a\u003e0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){let n=t-1e-4,i=t+1e-4;n\u003c0\u0026\u0026(n=0),i\u003e1\u0026\u0026(i=1);const r=this.getPoint(n),s=this.getPoint(i),a=e||(r.isVector2?new Zn:new oi);return a.copy(s).sub(r).normalize(),a}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new oi,i=[],r=[],s=[],a=new oi,o=new Fi;for(let e=0;e\u003c=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new oi),i[e].normalize()}r[0]=new oi,s[0]=new oi;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),u=Math.abs(i[0].y),h=Math.abs(i[0].z);c\u003c=l\u0026\u0026(l=c,n.set(1,0,0)),u\u003c=l\u0026\u0026(l=u,n.set(0,1,0)),h\u003c=l\u0026\u0026n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e\u003c=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()\u003eNumber.EPSILON){a.normalize();const t=Math.acos(kn(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(kn(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))\u003e0\u0026\u0026(e=-e);for(let n=1;n\u003c=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\"Curve\",generator:\"Curve.toJSON\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Yu extends Xu{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type=\"EllipseCurve\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new Zn,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)\u003cNumber.EPSILON;for(;r\u003c0;)r+=i;for(;r\u003ei;)r-=i;r\u003cNumber.EPSILON\u0026\u0026(r=s?0:i),!0!==this.aClockwise||s||(r===i?r=-i:r-=i);const a=this.aStartAngle+t*r;let o=this.aX+this.xRadius*Math.cos(a),l=this.aY+this.yRadius*Math.sin(a);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=o-this.aX,i=l-this.aY;o=n*t-i*e+this.aX,l=n*e+i*t+this.aY}return n.set(o,l)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}Yu.prototype.isEllipseCurve=!0;class Zu extends Yu{constructor(t,e,n,i,r,s){super(t,e,n,n,i,r,s),this.type=\"ArcCurve\"}}function Ju(){let t=0,e=0,n=0,i=0;function r(r,s,a,o){t=r,e=a,n=-3*r+3*s-2*a-o,i=2*r-2*s+a+o}return{initCatmullRom:function(t,e,n,i,s){r(e,n,s*(n-t),s*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,s,a,o){let l=(e-t)/s-(n-t)/(s+a)+(n-e)/a,c=(n-e)/a-(i-e)/(a+o)+(i-n)/o;l*=a,c*=a,r(e,n,l,c)},calc:function(r){const s=r*r;return t+e*r+n*s+i*(s*r)}}}Zu.prototype.isArcCurve=!0;const Qu=new oi,Ku=new Ju,$u=new Ju,th=new Ju;class eh extends Xu{constructor(t=[],e=!1,n=\"centripetal\",i=.5){super(),this.type=\"CatmullRomCurve3\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new oi){const n=e,i=this.points,r=i.length,s=(r-(this.closed?0:1))*t;let a,o,l=Math.floor(s),c=s-l;this.closed?l+=l\u003e0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c\u0026\u0026l===r-1\u0026\u0026(l=r-2,c=1),this.closed||l\u003e0?a=i[(l-1)%r]:(Qu.subVectors(i[0],i[1]).add(i[0]),a=Qu);const u=i[l%r],h=i[(l+1)%r];if(this.closed||l+2\u003cr?o=i[(l+2)%r]:(Qu.subVectors(i[r-1],i[r-2]).add(i[r-1]),o=Qu),\"centripetal\"===this.curveType||\"chordal\"===this.curveType){const t=\"chordal\"===this.curveType?.5:.25;let e=Math.pow(a.distanceToSquared(u),t),n=Math.pow(u.distanceToSquared(h),t),i=Math.pow(h.distanceToSquared(o),t);n\u003c1e-4\u0026\u0026(n=1),e\u003c1e-4\u0026\u0026(e=n),i\u003c1e-4\u0026\u0026(i=n),Ku.initNonuniformCatmullRom(a.x,u.x,h.x,o.x,e,n,i),$u.initNonuniformCatmullRom(a.y,u.y,h.y,o.y,e,n,i),th.initNonuniformCatmullRom(a.z,u.z,h.z,o.z,e,n,i)}else\"catmullrom\"===this.curveType\u0026\u0026(Ku.initCatmullRom(a.x,u.x,h.x,o.x,this.tension),$u.initCatmullRom(a.y,u.y,h.y,o.y,this.tension),th.initCatmullRom(a.z,u.z,h.z,o.z,this.tension));return n.set(Ku.calc(c),$u.calc(c),th.calc(c)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e\u003cn;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push((new oi).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}function nh(t,e,n,i,r){const s=.5*(i-e),a=.5*(r-n),o=t*t;return(2*n-2*i+s+a)*(t*o)+(-3*n+3*i-2*s-a)*o+s*t+n}function ih(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function rh(t,e,n,i,r){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,r)}eh.prototype.isCatmullRomCurve3=!0;class sh extends Xu{constructor(t=new Zn,e=new Zn,n=new Zn,i=new Zn){super(),this.type=\"CubicBezierCurve\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new Zn){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(rh(t,i.x,r.x,s.x,a.x),rh(t,i.y,r.y,s.y,a.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}sh.prototype.isCubicBezierCurve=!0;class ah extends Xu{constructor(t=new oi,e=new oi,n=new oi,i=new oi){super(),this.type=\"CubicBezierCurve3\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new oi){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(rh(t,i.x,r.x,s.x,a.x),rh(t,i.y,r.y,s.y,a.y),rh(t,i.z,r.z,s.z,a.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}ah.prototype.isCubicBezierCurve3=!0;class oh extends Xu{constructor(t=new Zn,e=new Zn){super(),this.type=\"LineCurve\",this.v1=t,this.v2=e}getPoint(t,e=new Zn){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new Zn;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}oh.prototype.isLineCurve=!0;class lh extends Xu{constructor(t=new oi,e=new oi){super(),this.type=\"LineCurve3\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new oi){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}class ch extends Xu{constructor(t=new Zn,e=new Zn,n=new Zn){super(),this.type=\"QuadraticBezierCurve\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new Zn){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(ih(t,i.x,r.x,s.x),ih(t,i.y,r.y,s.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}ch.prototype.isQuadraticBezierCurve=!0;class uh extends Xu{constructor(t=new oi,e=new oi,n=new oi){super(),this.type=\"QuadraticBezierCurve3\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new oi){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(ih(t,i.x,r.x,s.x),ih(t,i.y,r.y,s.y),ih(t,i.z,r.z,s.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}uh.prototype.isQuadraticBezierCurve3=!0;class hh extends Xu{constructor(t=[]){super(),this.type=\"SplineCurve\",this.points=t}getPoint(t,e=new Zn){const n=e,i=this.points,r=(i.length-1)*t,s=Math.floor(r),a=r-s,o=i[0===s?s:s-1],l=i[s],c=i[s\u003ei.length-2?i.length-1:s+1],u=i[s\u003ei.length-3?i.length-1:s+2];return n.set(nh(a,o.x,l.x,c.x,u.x),nh(a,o.y,l.y,c.y,u.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e\u003cn;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push((new Zn).fromArray(n))}return this}}hh.prototype.isSplineCurve=!0;var dh=Object.freeze({__proto__:null,ArcCurve:Zu,CatmullRomCurve3:eh,CubicBezierCurve:sh,CubicBezierCurve3:ah,EllipseCurve:Yu,LineCurve:oh,LineCurve3:lh,QuadraticBezierCurve:ch,QuadraticBezierCurve3:uh,SplineCurve:hh});class ph extends Xu{constructor(){super(),this.type=\"CurvePath\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new oh(e,t))}getPoint(t){const e=t*this.getLength(),n=this.getCurveLengths();let i=0;for(;i\u003cn.length;){if(n[i]\u003e=e){const t=n[i]-e,r=this.curves[i],s=r.getLength(),a=0===s?0:1-t/s;return r.getPointAt(a)}i++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths\u0026\u0026this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n\u003ci;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPoint(n/t));return this.autoClose\u0026\u0026e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,r=this.curves;i\u003cr.length;i++){const s=r[i],a=s\u0026\u0026s.isEllipseCurve?2*t:s\u0026\u0026(s.isLineCurve||s.isLineCurve3)?1:s\u0026\u0026s.isSplineCurve?t*s.points.length:t,o=s.getPoints(a);for(let t=0;t\u003co.length;t++){const i=o[t];n\u0026\u0026n.equals(i)||(e.push(i),n=i)}}return this.autoClose\u0026\u0026e.length\u003e1\u0026\u0026!e[e.length-1].equals(e[0])\u0026\u0026e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e\u003cn;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e\u003cn;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e\u003cn;e++){const n=t.curves[e];this.curves.push((new dh[n.type]).fromJSON(n))}return this}}class fh extends ph{constructor(t){super(),this.type=\"Path\",this.currentPoint=new Zn,t\u0026\u0026this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e\u003cn;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new oh(this.currentPoint.clone(),new Zn(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,i){const r=new ch(this.currentPoint.clone(),new Zn(t,e),new Zn(n,i));return this.curves.push(r),this.currentPoint.set(n,i),this}bezierCurveTo(t,e,n,i,r,s){const a=new sh(this.currentPoint.clone(),new Zn(t,e),new Zn(n,i),new Zn(r,s));return this.curves.push(a),this.currentPoint.set(r,s),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new hh(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,r,s){const a=this.currentPoint.x,o=this.currentPoint.y;return this.absarc(t+a,e+o,n,i,r,s),this}absarc(t,e,n,i,r,s){return this.absellipse(t,e,n,n,i,r,s),this}ellipse(t,e,n,i,r,s,a,o){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,r,s,a,o),this}absellipse(t,e,n,i,r,s,a,o){const l=new Yu(t,e,n,i,r,s,a,o);if(this.curves.length\u003e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class mh extends fh{constructor(t){super(t),this.uuid=Gn(),this.type=\"Shape\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n\u003ci;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e\u003cn;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e\u003cn;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e\u003cn;e++){const n=t.holes[e];this.holes.push((new fh).fromJSON(n))}return this}}class gh extends cr{constructor(t,e=1){super(),this.type=\"Light\",this.color=new Ir(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor\u0026\u0026(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance\u0026\u0026(e.object.distance=this.distance),void 0!==this.angle\u0026\u0026(e.object.angle=this.angle),void 0!==this.decay\u0026\u0026(e.object.decay=this.decay),void 0!==this.penumbra\u0026\u0026(e.object.penumbra=this.penumbra),void 0!==this.shadow\u0026\u0026(e.object.shadow=this.shadow.toJSON()),e}}gh.prototype.isLight=!0;class vh extends gh{constructor(t,e,n){super(t,n),this.type=\"HemisphereLight\",this.position.copy(cr.DefaultUp),this.updateMatrix(),this.groundColor=new Ir(e)}copy(t){return gh.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}vh.prototype.isHemisphereLight=!0;const yh=new Fi,xh=new oi,_h=new oi;class bh{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.mapSize=new Zn(512,512),this.map=null,this.mapPass=null,this.matrix=new Fi,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Bs,this._frameExtents=new Zn(1,1),this._viewportCount=1,this._viewports=[new ni(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;xh.setFromMatrixPosition(t.matrixWorld),e.position.copy(xh),_h.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(_h),e.updateMatrixWorld(),yh.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(yh),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map\u0026\u0026this.map.dispose(),this.mapPass\u0026\u0026this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias\u0026\u0026(t.bias=this.bias),0!==this.normalBias\u0026\u0026(t.normalBias=this.normalBias),1!==this.radius\u0026\u0026(t.radius=this.radius),512===this.mapSize.x\u0026\u0026512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class wh extends bh{constructor(){super(new Cs(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*Un*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;n===e.fov\u0026\u0026i===e.aspect\u0026\u0026r===e.far||(e.fov=n,e.aspect=i,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}wh.prototype.isSpotLightShadow=!0;class Mh extends gh{constructor(t,e,n=0,i=Math.PI/3,r=0,s=1){super(t,e),this.type=\"SpotLight\",this.position.copy(cr.DefaultUp),this.updateMatrix(),this.target=new cr,this.distance=n,this.angle=i,this.penumbra=r,this.decay=s,this.shadow=new wh}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}Mh.prototype.isSpotLight=!0;const Sh=new Fi,Th=new oi,Eh=new oi;class Ah extends bh{constructor(){super(new Cs(90,1,.5,500)),this._frameExtents=new Zn(4,2),this._viewportCount=6,this._viewports=[new ni(2,1,1,1),new ni(0,1,1,1),new ni(3,1,1,1),new ni(1,1,1,1),new ni(3,0,1,1),new ni(1,0,1,1)],this._cubeDirections=[new oi(1,0,0),new oi(-1,0,0),new oi(0,0,1),new oi(0,0,-1),new oi(0,1,0),new oi(0,-1,0)],this._cubeUps=[new oi(0,1,0),new oi(0,1,0),new oi(0,1,0),new oi(0,1,0),new oi(0,0,1),new oi(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,r=t.distance||n.far;r!==n.far\u0026\u0026(n.far=r,n.updateProjectionMatrix()),Th.setFromMatrixPosition(t.matrixWorld),n.position.copy(Th),Eh.copy(n.position),Eh.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(Eh),n.updateMatrixWorld(),i.makeTranslation(-Th.x,-Th.y,-Th.z),Sh.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Sh)}}Ah.prototype.isPointLightShadow=!0;class Lh extends gh{constructor(t,e,n=0,i=1){super(t,e),this.type=\"PointLight\",this.distance=n,this.decay=i,this.shadow=new Ah}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}Lh.prototype.isPointLight=!0;class Rh extends Rs{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type=\"OrthographicCamera\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){null===this.view\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,a=i+e,o=i-e;if(null!==this.view\u0026\u0026this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view\u0026\u0026(e.object.view=Object.assign({},this.view)),e}}Rh.prototype.isOrthographicCamera=!0;class Ch extends bh{constructor(){super(new Rh(-5,5,5,-5,.5,500))}}Ch.prototype.isDirectionalLightShadow=!0;class Ph extends gh{constructor(t,e){super(t,e),this.type=\"DirectionalLight\",this.position.copy(cr.DefaultUp),this.updateMatrix(),this.target=new cr,this.shadow=new Ch}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}Ph.prototype.isDirectionalLight=!0;class Dh extends gh{constructor(t,e){super(t,e),this.type=\"AmbientLight\"}}Dh.prototype.isAmbientLight=!0;class Ih extends gh{constructor(t,e,n=10,i=10){super(t,e),this.type=\"RectAreaLight\",this.width=n,this.height=i}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}Ih.prototype.isRectAreaLight=!0;class Nh{constructor(){this.coefficients=[];for(let t=0;t\u003c9;t++)this.coefficients.push(new oi)}set(t){for(let e=0;e\u003c9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t\u003c9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*i),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*n),e.addScaledVector(s[4],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e\u003c9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n\u003c9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e\u003c9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n\u003c9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e\u003c9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i\u003c9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i\u003c9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,r=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.546274*(n*n-i*i)}}Nh.prototype.isSphericalHarmonics3=!0;class zh extends gh{constructor(t=new Nh,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}zh.prototype.isLightProbe=!0;class Bh extends Fu{constructor(t){super(t),this.textures={}}load(t,e,n,i){const r=this,s=new Uu(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=this.textures;function n(t){return void 0===e[t]\u0026\u0026console.warn(\"THREE.MaterialLoader: Undefined texture\",t),e[t]}const i=new xu[t.type];if(void 0!==t.uuid\u0026\u0026(i.uuid=t.uuid),void 0!==t.name\u0026\u0026(i.name=t.name),void 0!==t.color\u0026\u0026void 0!==i.color\u0026\u0026i.color.setHex(t.color),void 0!==t.roughness\u0026\u0026(i.roughness=t.roughness),void 0!==t.metalness\u0026\u0026(i.metalness=t.metalness),void 0!==t.sheen\u0026\u0026(i.sheen=(new Ir).setHex(t.sheen)),void 0!==t.emissive\u0026\u0026void 0!==i.emissive\u0026\u0026i.emissive.setHex(t.emissive),void 0!==t.specular\u0026\u0026void 0!==i.specular\u0026\u0026i.specular.setHex(t.specular),void 0!==t.shininess\u0026\u0026(i.shininess=t.shininess),void 0!==t.clearcoat\u0026\u0026(i.clearcoat=t.clearcoat),void 0!==t.clearcoatRoughness\u0026\u0026(i.clearcoatRoughness=t.clearcoatRoughness),void 0!==t.transmission\u0026\u0026(i.transmission=t.transmission),void 0!==t.thickness\u0026\u0026(i.thickness=t.thickness),void 0!==t.attenuationDistance\u0026\u0026(i.attenuationDistance=t.attenuationDistance),void 0!==t.attenuationColor\u0026\u0026void 0!==i.attenuationColor\u0026\u0026i.attenuationColor.setHex(t.attenuationColor),void 0!==t.fog\u0026\u0026(i.fog=t.fog),void 0!==t.flatShading\u0026\u0026(i.flatShading=t.flatShading),void 0!==t.blending\u0026\u0026(i.blending=t.blending),void 0!==t.combine\u0026\u0026(i.combine=t.combine),void 0!==t.side\u0026\u0026(i.side=t.side),void 0!==t.shadowSide\u0026\u0026(i.shadowSide=t.shadowSide),void 0!==t.opacity\u0026\u0026(i.opacity=t.opacity),void 0!==t.transparent\u0026\u0026(i.transparent=t.transparent),void 0!==t.alphaTest\u0026\u0026(i.alphaTest=t.alphaTest),void 0!==t.depthTest\u0026\u0026(i.depthTest=t.depthTest),void 0!==t.depthWrite\u0026\u0026(i.depthWrite=t.depthWrite),void 0!==t.colorWrite\u0026\u0026(i.colorWrite=t.colorWrite),void 0!==t.stencilWrite\u0026\u0026(i.stencilWrite=t.stencilWrite),void 0!==t.stencilWriteMask\u0026\u0026(i.stencilWriteMask=t.stencilWriteMask),void 0!==t.stencilFunc\u0026\u0026(i.stencilFunc=t.stencilFunc),void 0!==t.stencilRef\u0026\u0026(i.stencilRef=t.stencilRef),void 0!==t.stencilFuncMask\u0026\u0026(i.stencilFuncMask=t.stencilFuncMask),void 0!==t.stencilFail\u0026\u0026(i.stencilFail=t.stencilFail),void 0!==t.stencilZFail\u0026\u0026(i.stencilZFail=t.stencilZFail),void 0!==t.stencilZPass\u0026\u0026(i.stencilZPass=t.stencilZPass),void 0!==t.wireframe\u0026\u0026(i.wireframe=t.wireframe),void 0!==t.wireframeLinewidth\u0026\u0026(i.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap\u0026\u0026(i.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin\u0026\u0026(i.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation\u0026\u0026(i.rotation=t.rotation),1!==t.linewidth\u0026\u0026(i.linewidth=t.linewidth),void 0!==t.dashSize\u0026\u0026(i.dashSize=t.dashSize),void 0!==t.gapSize\u0026\u0026(i.gapSize=t.gapSize),void 0!==t.scale\u0026\u0026(i.scale=t.scale),void 0!==t.polygonOffset\u0026\u0026(i.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor\u0026\u0026(i.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits\u0026\u0026(i.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.morphTargets\u0026\u0026(i.morphTargets=t.morphTargets),void 0!==t.morphNormals\u0026\u0026(i.morphNormals=t.morphNormals),void 0!==t.dithering\u0026\u0026(i.dithering=t.dithering),void 0!==t.alphaToCoverage\u0026\u0026(i.alphaToCoverage=t.alphaToCoverage),void 0!==t.premultipliedAlpha\u0026\u0026(i.premultipliedAlpha=t.premultipliedAlpha),void 0!==t.vertexTangents\u0026\u0026(i.vertexTangents=t.vertexTangents),void 0!==t.visible\u0026\u0026(i.visible=t.visible),void 0!==t.toneMapped\u0026\u0026(i.toneMapped=t.toneMapped),void 0!==t.userData\u0026\u0026(i.userData=t.userData),void 0!==t.vertexColors\u0026\u0026(\"number\"==typeof t.vertexColors?i.vertexColors=t.vertexColors\u003e0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case\"t\":i.uniforms[e].value=n(r.value);break;case\"c\":i.uniforms[e].value=(new Ir).setHex(r.value);break;case\"v2\":i.uniforms[e].value=(new Zn).fromArray(r.value);break;case\"v3\":i.uniforms[e].value=(new oi).fromArray(r.value);break;case\"v4\":i.uniforms[e].value=(new ni).fromArray(r.value);break;case\"m3\":i.uniforms[e].value=(new Jn).fromArray(r.value);break;case\"m4\":i.uniforms[e].value=(new Fi).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines\u0026\u0026(i.defines=t.defines),void 0!==t.vertexShader\u0026\u0026(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader\u0026\u0026(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading\u0026\u0026(i.flatShading=1===t.shading),void 0!==t.size\u0026\u0026(i.size=t.size),void 0!==t.sizeAttenuation\u0026\u0026(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map\u0026\u0026(i.map=n(t.map)),void 0!==t.matcap\u0026\u0026(i.matcap=n(t.matcap)),void 0!==t.alphaMap\u0026\u0026(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap\u0026\u0026(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale\u0026\u0026(i.bumpScale=t.bumpScale),void 0!==t.normalMap\u0026\u0026(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType\u0026\u0026(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)\u0026\u0026(e=[e,e]),i.normalScale=(new Zn).fromArray(e)}return void 0!==t.displacementMap\u0026\u0026(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale\u0026\u0026(i.displacementScale=t.displacementScale),void 0!==t.displacementBias\u0026\u0026(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap\u0026\u0026(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap\u0026\u0026(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap\u0026\u0026(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity\u0026\u0026(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap\u0026\u0026(i.specularMap=n(t.specularMap)),void 0!==t.envMap\u0026\u0026(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity\u0026\u0026(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity\u0026\u0026(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio\u0026\u0026(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap\u0026\u0026(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity\u0026\u0026(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap\u0026\u0026(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity\u0026\u0026(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap\u0026\u0026(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap\u0026\u0026(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap\u0026\u0026(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap\u0026\u0026(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale\u0026\u0026(i.clearcoatNormalScale=(new Zn).fromArray(t.clearcoatNormalScale)),void 0!==t.transmissionMap\u0026\u0026(i.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap\u0026\u0026(i.thicknessMap=n(t.thicknessMap)),i}setTextures(t){return this.textures=t,this}}class Oh{static decodeText(t){if(\"undefined\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\"\";for(let n=0,i=t.length;n\u003ci;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\"/\");return-1===e?\"./\":t.substr(0,e+1)}}class Fh extends rs{constructor(){super(),this.type=\"InstancedBufferGeometry\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}Fh.prototype.isInstancedBufferGeometry=!0;class Hh extends Or{constructor(t,e,n,i){\"number\"==typeof n\u0026\u0026(i=n,n=!1,console.error(\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\")),super(t,e,n),this.meshPerAttribute=i||1}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}Hh.prototype.isInstancedBufferAttribute=!0;class Uh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],s=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),a=Jr(r.type,s),o=new il(a,r.stride);return o.uuid=r.uuid,e[i]=o,o}const r=t.isInstancedBufferGeometry?new Fh:new rs,s=t.data.index;if(void 0!==s){const t=Jr(s.type,s.array);r.setIndex(new Or(t,1))}const a=t.data.attributes;for(const e in a){const n=a[e];let s;if(n.isInterleavedBufferAttribute){const e=i(t.data,n.data);s=new sl(e,n.itemSize,n.offset,n.normalized)}else{const t=Jr(n.type,n.array);s=new(n.isInstancedBufferAttribute?Hh:Or)(t,n.itemSize,n.normalized)}void 0!==n.name\u0026\u0026(s.name=n.name),void 0!==n.usage\u0026\u0026s.setUsage(n.usage),void 0!==n.updateRange\u0026\u0026(s.updateRange.offset=n.updateRange.offset,s.updateRange.count=n.updateRange.count),r.setAttribute(e,s)}const o=t.data.morphAttributes;if(o)for(const e in o){const n=o[e],s=[];for(let e=0,r=n.length;e\u003cr;e++){const r=n[e];let a;if(r.isInterleavedBufferAttribute){const e=i(t.data,r.data);a=new sl(e,r.itemSize,r.offset,r.normalized)}else{const t=Jr(r.type,r.array);a=new Or(t,r.itemSize,r.normalized)}void 0!==r.name\u0026\u0026(a.name=r.name),s.push(a)}r.morphAttributes[e]=s}t.data.morphTargetsRelative\u0026\u0026(r.morphTargetsRelative=!0);const l=t.data.groups||t.data.drawcalls||t.data.offsets;if(void 0!==l)for(let t=0,e=l.length;t!==e;++t){const e=l[t];r.addGroup(e.start,e.count,e.materialIndex)}const c=t.data.boundingSphere;if(void 0!==c){const t=new oi;void 0!==c.center\u0026\u0026t.fromArray(c.center),r.boundingSphere=new Ri(t,c.radius)}return t.name\u0026\u0026(r.name=t.name),t.userData\u0026\u0026(r.userData=t.userData),r}}class Gh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=\"\"===this.path?Oh.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||s;const a=new Uu(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(t,(function(n){let s=null;try{s=JSON.parse(n)}catch(e){return void 0!==i\u0026\u0026i(e),void console.error(\"THREE:ObjectLoader: Can't parse \"+t+\".\",e.message)}const a=s.metadata;void 0!==a\u0026\u0026void 0!==a.type\u0026\u0026\"geometry\"!==a.type.toLowerCase()?r.parse(s,e):console.error(\"THREE.ObjectLoader: Can't load \"+t)}),n,i)}parse(t,e){const n=this.parseAnimations(t.animations),i=this.parseShapes(t.shapes),r=this.parseGeometries(t.geometries,i),s=this.parseImages(t.images,(function(){void 0!==e\u0026\u0026e(l)})),a=this.parseTextures(t.textures,s),o=this.parseMaterials(t.materials,a),l=this.parseObject(t.object,r,o,n),c=this.parseSkeletons(t.skeletons,l);if(this.bindSkeletons(l,c),void 0!==e){let t=!1;for(const e in s)if(s[e]instanceof HTMLImageElement){t=!0;break}!1===t\u0026\u0026e(l)}return l}parseShapes(t){const e={};if(void 0!==t)for(let n=0,i=t.length;n\u003ci;n++){const i=(new mh).fromJSON(t[n]);e[i.uuid]=i}return e}parseSkeletons(t,e){const n={},i={};if(e.traverse((function(t){t.isBone\u0026\u0026(i[t.uuid]=t)})),void 0!==t)for(let e=0,r=t.length;e\u003cr;e++){const r=(new zl).fromJSON(t[e],i);n[r.uuid]=r}return n}parseGeometries(t,e){const n={};let i;if(void 0!==t){const r=new Uh;for(let s=0,a=t.length;s\u003ca;s++){let a;const o=t[s];switch(o.type){case\"PlaneGeometry\":case\"PlaneBufferGeometry\":a=new lu[o.type](o.width,o.height,o.widthSegments,o.heightSegments);break;case\"BoxGeometry\":case\"BoxBufferGeometry\":a=new lu[o.type](o.width,o.height,o.depth,o.widthSegments,o.heightSegments,o.depthSegments);break;case\"CircleGeometry\":case\"CircleBufferGeometry\":a=new lu[o.type](o.radius,o.segments,o.thetaStart,o.thetaLength);break;case\"CylinderGeometry\":case\"CylinderBufferGeometry\":a=new lu[o.type](o.radiusTop,o.radiusBottom,o.height,o.radialSegments,o.heightSegments,o.openEnded,o.thetaStart,o.thetaLength);break;case\"ConeGeometry\":case\"ConeBufferGeometry\":a=new lu[o.type](o.radius,o.height,o.radialSegments,o.heightSegments,o.openEnded,o.thetaStart,o.thetaLength);break;case\"SphereGeometry\":case\"SphereBufferGeometry\":a=new lu[o.type](o.radius,o.widthSegments,o.heightSegments,o.phiStart,o.phiLength,o.thetaStart,o.thetaLength);break;case\"DodecahedronGeometry\":case\"DodecahedronBufferGeometry\":case\"IcosahedronGeometry\":case\"IcosahedronBufferGeometry\":case\"OctahedronGeometry\":case\"OctahedronBufferGeometry\":case\"TetrahedronGeometry\":case\"TetrahedronBufferGeometry\":a=new lu[o.type](o.radius,o.detail);break;case\"RingGeometry\":case\"RingBufferGeometry\":a=new lu[o.type](o.innerRadius,o.outerRadius,o.thetaSegments,o.phiSegments,o.thetaStart,o.thetaLength);break;case\"TorusGeometry\":case\"TorusBufferGeometry\":a=new lu[o.type](o.radius,o.tube,o.radialSegments,o.tubularSegments,o.arc);break;case\"TorusKnotGeometry\":case\"TorusKnotBufferGeometry\":a=new lu[o.type](o.radius,o.tube,o.tubularSegments,o.radialSegments,o.p,o.q);break;case\"TubeGeometry\":case\"TubeBufferGeometry\":a=new lu[o.type]((new dh[o.path.type]).fromJSON(o.path),o.tubularSegments,o.radius,o.radialSegments,o.closed);break;case\"LatheGeometry\":case\"LatheBufferGeometry\":a=new lu[o.type](o.points,o.segments,o.phiStart,o.phiLength);break;case\"PolyhedronGeometry\":case\"PolyhedronBufferGeometry\":a=new lu[o.type](o.vertices,o.indices,o.radius,o.details);break;case\"ShapeGeometry\":case\"ShapeBufferGeometry\":i=[];for(let t=0,n=o.shapes.length;t\u003cn;t++){const n=e[o.shapes[t]];i.push(n)}a=new lu[o.type](i,o.curveSegments);break;case\"ExtrudeGeometry\":case\"ExtrudeBufferGeometry\":i=[];for(let t=0,n=o.shapes.length;t\u003cn;t++){const n=e[o.shapes[t]];i.push(n)}const t=o.options.extrudePath;void 0!==t\u0026\u0026(o.options.extrudePath=(new dh[t.type]).fromJSON(t)),a=new lu[o.type](i,o.options);break;case\"BufferGeometry\":case\"InstancedBufferGeometry\":a=r.parse(o);break;case\"Geometry\":console.error('THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.');break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type \"'+o.type+'\"');continue}a.uuid=o.uuid,void 0!==o.name\u0026\u0026(a.name=o.name),!0===a.isBufferGeometry\u0026\u0026void 0!==o.userData\u0026\u0026(a.userData=o.userData),n[o.uuid]=a}}return n}parseMaterials(t,e){const n={},i={};if(void 0!==t){const r=new Bh;r.setTextures(e);for(let e=0,s=t.length;e\u003cs;e++){const s=t[e];if(\"MultiMaterial\"===s.type){const t=[];for(let e=0;e\u003cs.materials.length;e++){const i=s.materials[e];void 0===n[i.uuid]\u0026\u0026(n[i.uuid]=r.parse(i)),t.push(n[i.uuid])}i[s.uuid]=t}else void 0===n[s.uuid]\u0026\u0026(n[s.uuid]=r.parse(s)),i[s.uuid]=n[s.uuid]}}return i}parseAnimations(t){const e={};if(void 0!==t)for(let n=0;n\u003ct.length;n++){const i=t[n],r=Iu.parse(i);e[r.uuid]=r}return e}parseImages(t,e){const n=this,i={};let r;function s(t){if(\"string\"==typeof t){const e=t;return function(t){return n.manager.itemStart(t),r.load(t,(function(){n.manager.itemEnd(t)}),void 0,(function(){n.manager.itemError(t),n.manager.itemEnd(t)}))}(/^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test(e)?e:n.resourcePath+e)}return t.data?{data:Jr(t.type,t.data),width:t.width,height:t.height}:null}if(void 0!==t\u0026\u0026t.length\u003e0){const n=new Bu(e);r=new Vu(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e\u003cn;e++){const n=t[e],r=n.url;if(Array.isArray(r)){i[n.uuid]=[];for(let t=0,e=r.length;t\u003ce;t++){const e=s(r[t]);null!==e\u0026\u0026(e instanceof HTMLImageElement?i[n.uuid].push(e):i[n.uuid].push(new Dl(e.data,e.width,e.height)))}}else{const t=s(n.url);null!==t\u0026\u0026(i[n.uuid]=t)}}}return i}parseTextures(t,e){function n(t,e){return\"number\"==typeof t?t:(console.warn(\"THREE.ObjectLoader.parseTexture: Constant should be in numeric form.\",t),e[t])}const i={};if(void 0!==t)for(let r=0,s=t.length;r\u003cs;r++){const s=t[r];let a;void 0===s.image\u0026\u0026console.warn('THREE.ObjectLoader: No \"image\" specified for',s.uuid),void 0===e[s.image]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined image\",s.image);const o=e[s.image];Array.isArray(o)?(a=new Ds(o),6===o.length\u0026\u0026(a.needsUpdate=!0)):(a=o\u0026\u0026o.data?new Dl(o.data,o.width,o.height):new ti(o),o\u0026\u0026(a.needsUpdate=!0)),a.uuid=s.uuid,void 0!==s.name\u0026\u0026(a.name=s.name),void 0!==s.mapping\u0026\u0026(a.mapping=n(s.mapping,kh)),void 0!==s.offset\u0026\u0026a.offset.fromArray(s.offset),void 0!==s.repeat\u0026\u0026a.repeat.fromArray(s.repeat),void 0!==s.center\u0026\u0026a.center.fromArray(s.center),void 0!==s.rotation\u0026\u0026(a.rotation=s.rotation),void 0!==s.wrap\u0026\u0026(a.wrapS=n(s.wrap[0],Vh),a.wrapT=n(s.wrap[1],Vh)),void 0!==s.format\u0026\u0026(a.format=s.format),void 0!==s.type\u0026\u0026(a.type=s.type),void 0!==s.encoding\u0026\u0026(a.encoding=s.encoding),void 0!==s.minFilter\u0026\u0026(a.minFilter=n(s.minFilter,Wh)),void 0!==s.magFilter\u0026\u0026(a.magFilter=n(s.magFilter,Wh)),void 0!==s.anisotropy\u0026\u0026(a.anisotropy=s.anisotropy),void 0!==s.flipY\u0026\u0026(a.flipY=s.flipY),void 0!==s.premultiplyAlpha\u0026\u0026(a.premultiplyAlpha=s.premultiplyAlpha),void 0!==s.unpackAlignment\u0026\u0026(a.unpackAlignment=s.unpackAlignment),i[s.uuid]=a}return i}parseObject(t,e,n,i){let r,s,a;function o(t){return void 0===e[t]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined geometry\",t),e[t]}function l(t){if(void 0!==t){if(Array.isArray(t)){const e=[];for(let i=0,r=t.length;i\u003cr;i++){const r=t[i];void 0===n[r]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined material\",r),e.push(n[r])}return e}return void 0===n[t]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined material\",t),n[t]}}switch(t.type){case\"Scene\":r=new nl,void 0!==t.background\u0026\u0026Number.isInteger(t.background)\u0026\u0026(r.background=new Ir(t.background)),void 0!==t.fog\u0026\u0026(\"Fog\"===t.fog.type?r.fog=new el(t.fog.color,t.fog.near,t.fog.far):\"FogExp2\"===t.fog.type\u0026\u0026(r.fog=new tl(t.fog.color,t.fog.density)));break;case\"PerspectiveCamera\":r=new Cs(t.fov,t.aspect,t.near,t.far),void 0!==t.focus\u0026\u0026(r.focus=t.focus),void 0!==t.zoom\u0026\u0026(r.zoom=t.zoom),void 0!==t.filmGauge\u0026\u0026(r.filmGauge=t.filmGauge),void 0!==t.filmOffset\u0026\u0026(r.filmOffset=t.filmOffset),void 0!==t.view\u0026\u0026(r.view=Object.assign({},t.view));break;case\"OrthographicCamera\":r=new Rh(t.left,t.right,t.top,t.bottom,t.near,t.far),void 0!==t.zoom\u0026\u0026(r.zoom=t.zoom),void 0!==t.view\u0026\u0026(r.view=Object.assign({},t.view));break;case\"AmbientLight\":r=new Dh(t.color,t.intensity);break;case\"DirectionalLight\":r=new Ph(t.color,t.intensity);break;case\"PointLight\":r=new Lh(t.color,t.intensity,t.distance,t.decay);break;case\"RectAreaLight\":r=new Ih(t.color,t.intensity,t.width,t.height);break;case\"SpotLight\":r=new Mh(t.color,t.intensity,t.distance,t.angle,t.penumbra,t.decay);break;case\"HemisphereLight\":r=new vh(t.color,t.groundColor,t.intensity);break;case\"LightProbe\":r=(new zh).fromJSON(t);break;case\"SkinnedMesh\":s=o(t.geometry),a=l(t.material),r=new Cl(s,a),void 0!==t.bindMode\u0026\u0026(r.bindMode=t.bindMode),void 0!==t.bindMatrix\u0026\u0026r.bindMatrix.fromArray(t.bindMatrix),void 0!==t.skeleton\u0026\u0026(r.skeleton=t.skeleton);break;case\"Mesh\":s=o(t.geometry),a=l(t.material),r=new ws(s,a);break;case\"InstancedMesh\":s=o(t.geometry),a=l(t.material);const e=t.count,n=t.instanceMatrix,i=t.instanceColor;r=new Ul(s,a,e),r.instanceMatrix=new Or(new Float32Array(n.array),16),void 0!==i\u0026\u0026(r.instanceColor=new Or(new Float32Array(i.array),i.itemSize));break;case\"LOD\":r=new Sl;break;case\"Line\":r=new Xl(o(t.geometry),l(t.material));break;case\"LineLoop\":r=new Ql(o(t.geometry),l(t.material));break;case\"LineSegments\":r=new Jl(o(t.geometry),l(t.material));break;case\"PointCloud\":case\"Points\":r=new ic(o(t.geometry),l(t.material));break;case\"Sprite\":r=new _l(l(t.material));break;case\"Group\":r=new Xo;break;case\"Bone\":r=new Pl;break;default:r=new cr}if(r.uuid=t.uuid,void 0!==t.name\u0026\u0026(r.name=t.name),void 0!==t.matrix?(r.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate\u0026\u0026(r.matrixAutoUpdate=t.matrixAutoUpdate),r.matrixAutoUpdate\u0026\u0026r.matrix.decompose(r.position,r.quaternion,r.scale)):(void 0!==t.position\u0026\u0026r.position.fromArray(t.position),void 0!==t.rotation\u0026\u0026r.rotation.fromArray(t.rotation),void 0!==t.quaternion\u0026\u0026r.quaternion.fromArray(t.quaternion),void 0!==t.scale\u0026\u0026r.scale.fromArray(t.scale)),void 0!==t.castShadow\u0026\u0026(r.castShadow=t.castShadow),void 0!==t.receiveShadow\u0026\u0026(r.receiveShadow=t.receiveShadow),t.shadow\u0026\u0026(void 0!==t.shadow.bias\u0026\u0026(r.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias\u0026\u0026(r.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius\u0026\u0026(r.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize\u0026\u0026r.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera\u0026\u0026(r.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible\u0026\u0026(r.visible=t.visible),void 0!==t.frustumCulled\u0026\u0026(r.frustumCulled=t.frustumCulled),void 0!==t.renderOrder\u0026\u0026(r.renderOrder=t.renderOrder),void 0!==t.userData\u0026\u0026(r.userData=t.userData),void 0!==t.layers\u0026\u0026(r.layers.mask=t.layers),void 0!==t.children){const s=t.children;for(let t=0;t\u003cs.length;t++)r.add(this.parseObject(s[t],e,n,i))}if(void 0!==t.animations){const e=t.animations;for(let t=0;t\u003ce.length;t++){const n=e[t];r.animations.push(i[n])}}if(\"LOD\"===t.type){void 0!==t.autoUpdate\u0026\u0026(r.autoUpdate=t.autoUpdate);const e=t.levels;for(let t=0;t\u003ce.length;t++){const n=e[t],i=r.getObjectByProperty(\"uuid\",n.object);void 0!==i\u0026\u0026r.addLevel(i,n.distance)}}return r}bindSkeletons(t,e){0!==Object.keys(e).length\u0026\u0026t.traverse((function(t){if(!0===t.isSkinnedMesh\u0026\u0026void 0!==t.skeleton){const n=e[t.skeleton];void 0===n?console.warn(\"THREE.ObjectLoader: No skeleton found with UUID:\",t.skeleton):t.bind(n,t.bindMatrix)}}))}setTexturePath(t){return console.warn(\"THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().\"),this.setResourcePath(t)}}const kh={UVMapping:rt,CubeReflectionMapping:st,CubeRefractionMapping:at,EquirectangularReflectionMapping:ot,EquirectangularRefractionMapping:lt,CubeUVReflectionMapping:ct,CubeUVRefractionMapping:ut},Vh={RepeatWrapping:ht,ClampToEdgeWrapping:dt,MirroredRepeatWrapping:pt},Wh={NearestFilter:ft,NearestMipmapNearestFilter:mt,NearestMipmapLinearFilter:vt,LinearFilter:xt,LinearMipmapNearestFilter:_t,LinearMipmapLinearFilter:wt};class jh extends Fu{constructor(t){super(t),\"undefined\"==typeof createImageBitmap\u0026\u0026console.warn(\"THREE.ImageBitmapLoader: createImageBitmap() not supported.\"),\"undefined\"==typeof fetch\u0026\u0026console.warn(\"THREE.ImageBitmapLoader: fetch() not supported.\"),this.options={premultiplyAlpha:\"none\"}}setOptions(t){return this.options=t,this}load(t,e,n,i){void 0===t\u0026\u0026(t=\"\"),void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=zu.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;const a={};a.credentials=\"anonymous\"===this.crossOrigin?\"same-origin\":\"include\",a.headers=this.requestHeader,fetch(t,a).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:\"none\"}))})).then((function(n){zu.add(t,n),e\u0026\u0026e(n),r.manager.itemEnd(t)})).catch((function(e){i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)})),r.manager.itemStart(t)}}jh.prototype.isImageBitmapLoader=!0;class qh{constructor(){this.type=\"ShapePath\",this.color=new Ir,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new fh,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath.lineTo(t,e),this}quadraticCurveTo(t,e,n,i){return this.currentPath.quadraticCurveTo(t,e,n,i),this}bezierCurveTo(t,e,n,i,r,s){return this.currentPath.bezierCurveTo(t,e,n,i,r,s),this}splineThru(t){return this.currentPath.splineThru(t),this}toShapes(t,e){function n(t){const e=[];for(let n=0,i=t.length;n\u003ci;n++){const i=t[n],r=new mh;r.curves=i.curves,e.push(r)}return e}function i(t,e){const n=e.length;let i=!1;for(let r=n-1,s=0;s\u003cn;r=s++){let n=e[r],a=e[s],o=a.x-n.x,l=a.y-n.y;if(Math.abs(l)\u003eNumber.EPSILON){if(l\u003c0\u0026\u0026(n=e[s],o=-o,a=e[r],l=-l),t.y\u003cn.y||t.y\u003ea.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-o*(t.y-n.y);if(0===e)return!0;if(e\u003c0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x\u003c=t.x\u0026\u0026t.x\u003c=n.x||n.x\u003c=t.x\u0026\u0026t.x\u003c=a.x)return!0}}return i}const r=Wc.isClockWise,s=this.subPaths;if(0===s.length)return[];if(!0===e)return n(s);let a,o,l;const c=[];if(1===s.length)return o=s[0],l=new mh,l.curves=o.curves,c.push(l),c;let u=!r(s[0].getPoints());u=t?!u:u;const h=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=s.length;e\u003cn;e++)o=s[e],p=o.getPoints(),a=r(p),a=t?!a:a,a?(!u\u0026\u0026d[g]\u0026\u0026g++,d[g]={s:new mh,p:p},d[g].s.curves=o.curves,u\u0026\u0026g++,m[g]=[]):m[g].push({h:o,p:p[0]});if(!d[0])return n(s);if(d.length\u003e1){let t=!1;const e=[];for(let t=0,e=d.length;t\u003ce;t++)h[t]=[];for(let n=0,r=d.length;n\u003cr;n++){const r=m[n];for(let s=0;s\u003cr.length;s++){const a=r[s];let o=!0;for(let r=0;r\u003cd.length;r++)i(a.p,d[r].p)\u0026\u0026(n!==r\u0026\u0026e.push({froms:n,tos:r,hole:s}),o?(o=!1,h[r].push(a)):t=!0);o\u0026\u0026h[n].push(a)}}e.length\u003e0\u0026\u0026(t||(m=h))}for(let t=0,e=d.length;t\u003ce;t++){l=d[t].s,c.push(l),f=m[t];for(let t=0,e=f.length;t\u003ce;t++)l.holes.push(f[t].h)}return c}}class Xh{constructor(t){this.type=\"Font\",this.data=t}generateShapes(t,e=100){const n=[],i=function(t,e,n){const i=Array.from(t),r=e/n.resolution,s=(n.boundingBox.yMax-n.boundingBox.yMin+n.underlineThickness)*r,a=[];let o=0,l=0;for(let t=0;t\u003ci.length;t++){const e=i[t];if(\"\\n\"===e)o=0,l-=s;else{const t=Yh(e,r,o,l,n);o+=t.offsetX,a.push(t.path)}}return a}(t,e,this.data);for(let t=0,e=i.length;t\u003ce;t++)Array.prototype.push.apply(n,i[t].toShapes());return n}}function Yh(t,e,n,i,r){const s=r.glyphs[t]||r.glyphs[\"?\"];if(!s)return void console.error('THREE.Font: character \"'+t+'\" does not exists in font family '+r.familyName+\".\");const a=new qh;let o,l,c,u,h,d,p,f;if(s.o){const t=s._cachedOutline||(s._cachedOutline=s.o.split(\" \"));for(let r=0,s=t.length;r\u003cs;){switch(t[r++]){case\"m\":o=t[r++]*e+n,l=t[r++]*e+i,a.moveTo(o,l);break;case\"l\":o=t[r++]*e+n,l=t[r++]*e+i,a.lineTo(o,l);break;case\"q\":c=t[r++]*e+n,u=t[r++]*e+i,h=t[r++]*e+n,d=t[r++]*e+i,a.quadraticCurveTo(h,d,c,u);break;case\"b\":c=t[r++]*e+n,u=t[r++]*e+i,h=t[r++]*e+n,d=t[r++]*e+i,p=t[r++]*e+n,f=t[r++]*e+i,a.bezierCurveTo(h,d,p,f,c,u)}}}return{offsetX:s.ha*e,path:a}}Xh.prototype.isFont=!0;class Zh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(t){let n;try{n=JSON.parse(t)}catch(e){console.warn(\"THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.\"),n=JSON.parse(t.substring(65,t.length-2))}const i=r.parse(n);e\u0026\u0026e(i)}),n,i)}parse(t){return new Xh(t)}}let Jh;const Qh={getContext:function(){return void 0===Jh\u0026\u0026(Jh=new(window.AudioContext||window.webkitAudioContext)),Jh},setContext:function(t){Jh=t}};class Kh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(this.manager);s.setResponseType(\"arraybuffer\"),s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{const t=n.slice(0);Qh.getContext().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}}class $h extends zh{constructor(t,e,n=1){super(void 0,n);const i=(new Ir).set(t),r=(new Ir).set(e),s=new oi(i.r,i.g,i.b),a=new oi(r.r,r.g,r.b),o=Math.sqrt(Math.PI),l=o*Math.sqrt(.75);this.sh.coefficients[0].copy(s).add(a).multiplyScalar(o),this.sh.coefficients[1].copy(s).sub(a).multiplyScalar(l)}}$h.prototype.isHemisphereLightProbe=!0;class td extends zh{constructor(t,e=1){super(void 0,e);const n=(new Ir).set(t);this.sh.coefficients[0].set(n.r,n.g,n.b).multiplyScalar(2*Math.sqrt(Math.PI))}}td.prototype.isAmbientLightProbe=!0;const ed=new Fi,nd=new Fi;class id{constructor(){this.type=\"StereoCamera\",this.aspect=1,this.eyeSep=.064,this.cameraL=new Cs,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Cs,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(t){const e=this._cache;if(e.focus!==t.focus||e.fov!==t.fov||e.aspect!==t.aspect*this.aspect||e.near!==t.near||e.far!==t.far||e.zoom!==t.zoom||e.eyeSep!==this.eyeSep){e.focus=t.focus,e.fov=t.fov,e.aspect=t.aspect*this.aspect,e.near=t.near,e.far=t.far,e.zoom=t.zoom,e.eyeSep=this.eyeSep;const n=t.projectionMatrix.clone(),i=e.eyeSep/2,r=i*e.near/e.focus,s=e.near*Math.tan(Hn*e.fov*.5)/e.zoom;let a,o;nd.elements[12]=-i,ed.elements[12]=i,a=-s*e.aspect+r,o=s*e.aspect+r,n.elements[0]=2*e.near/(o-a),n.elements[8]=(o+a)/(o-a),this.cameraL.projectionMatrix.copy(n),a=-s*e.aspect-r,o=s*e.aspect-r,n.elements[0]=2*e.near/(o-a),n.elements[8]=(o+a)/(o-a),this.cameraR.projectionMatrix.copy(n)}this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(nd),this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(ed)}}class rd{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=sd(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart\u0026\u0026!this.running)return this.start(),0;if(this.running){const e=sd();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}function sd(){return(\"undefined\"==typeof performance?Date:performance).now()}const ad=new oi,od=new ai,ld=new oi,cd=new oi;class ud extends cr{constructor(){super(),this.type=\"AudioListener\",this.context=Qh.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new rd}getInput(){return this.gain}removeFilter(){return null!==this.filter\u0026\u0026(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(ad,od,ld),cd.set(0,0,-1).applyQuaternion(od),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(ad.x,t),e.positionY.linearRampToValueAtTime(ad.y,t),e.positionZ.linearRampToValueAtTime(ad.z,t),e.forwardX.linearRampToValueAtTime(cd.x,t),e.forwardY.linearRampToValueAtTime(cd.y,t),e.forwardZ.linearRampToValueAtTime(cd.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(ad.x,ad.y,ad.z),e.setOrientation(cd.x,cd.y,cd.z,n.x,n.y,n.z)}}class hd extends cr{constructor(t){super(),this.type=\"Audio\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\"empty\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"audioNode\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaNode\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaStreamNode\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\"buffer\",this.autoplay\u0026\u0026this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\"THREE.Audio: Audio is already playing.\");if(!1===this.hasPlaybackControl)return void console.warn(\"THREE.Audio: this Audio has no playback control.\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying\u0026\u0026(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop\u0026\u0026(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}connect(){if(this.filters.length\u003e0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t\u003ce;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length\u003e0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t\u003ce;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying\u0026\u0026this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying\u0026\u0026this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\"THREE.Audio: this Audio has no playback control.\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying\u0026\u0026(this.source.loop=this.loop),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}const dd=new oi,pd=new ai,fd=new oi,md=new oi;class gd extends hd{constructor(t){super(t),this.panner=this.context.createPanner(),this.panner.panningModel=\"HRTF\",this.panner.connect(this.gain)}getOutput(){return this.panner}getRefDistance(){return this.panner.refDistance}setRefDistance(t){return this.panner.refDistance=t,this}getRolloffFactor(){return this.panner.rolloffFactor}setRolloffFactor(t){return this.panner.rolloffFactor=t,this}getDistanceModel(){return this.panner.distanceModel}setDistanceModel(t){return this.panner.distanceModel=t,this}getMaxDistance(){return this.panner.maxDistance}setMaxDistance(t){return this.panner.maxDistance=t,this}setDirectionalCone(t,e,n){return this.panner.coneInnerAngle=t,this.panner.coneOuterAngle=e,this.panner.coneOuterGain=n,this}updateMatrixWorld(t){if(super.updateMatrixWorld(t),!0===this.hasPlaybackControl\u0026\u0026!1===this.isPlaying)return;this.matrixWorld.decompose(dd,pd,fd),md.set(0,0,1).applyQuaternion(pd);const e=this.panner;if(e.positionX){const t=this.context.currentTime+this.listener.timeDelta;e.positionX.linearRampToValueAtTime(dd.x,t),e.positionY.linearRampToValueAtTime(dd.y,t),e.positionZ.linearRampToValueAtTime(dd.z,t),e.orientationX.linearRampToValueAtTime(md.x,t),e.orientationY.linearRampToValueAtTime(md.y,t),e.orientationZ.linearRampToValueAtTime(md.z,t)}else e.setPosition(dd.x,dd.y,dd.z),e.setOrientation(md.x,md.y,md.z)}}class vd{constructor(t,e=2048){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=e,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let t=0;const e=this.getFrequencyData();for(let n=0;n\u003ce.length;n++)t+=e[n];return t/e.length}}class yd{constructor(t,e,n){let i,r,s;switch(this.binding=t,this.valueSize=n,e){case\"quaternion\":i=this._slerp,r=this._slerpAdditive,s=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\"string\":case\"bool\":i=this._select,r=this._select,s=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,r=this._lerpAdditive,s=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=r,this._setIdentity=s,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,r=t*i+i;let s=this.cumulativeWeight;if(0===s){for(let t=0;t!==i;++t)n[r+t]=n[t];s=e}else{s+=e;const t=e/s;this._mixBufferRegion(n,r,0,t,i)}this.cumulativeWeight=s}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive\u0026\u0026this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,r=this.cumulativeWeight,s=this.cumulativeWeightAdditive,a=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,r\u003c1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-r,e)}s\u003e0\u0026\u0026this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n\u003ce;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n\u003cthis.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,r){if(i\u003e=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){ai.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;ai.multiplyQuaternionsFlat(t,s,t,e,t,n),ai.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const xd=new RegExp(\"[\\\\[\\\\]\\\\.:\\\\/]\",\"g\"),_d=\"[^\"+\"\\\\[\\\\]\\\\.:\\\\/\".replace(\"\\\\.\",\"\")+\"]\",bd=/((?:WC+[\\/:])*)/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),wd=/(WCOD+)?/.source.replace(\"WCOD\",_d),Md=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),Sd=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),Td=new RegExp(\"^\"+bd+wd+Md+Sd+\"$\"),Ed=[\"material\",\"materials\",\"bones\"];class Ad{constructor(t,e,n){this.path=e,this.parsedPath=n||Ad.parseTrackName(e),this.node=Ad.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t\u0026\u0026t.isAnimationObjectGroup?new Ad.Composite(t,e,n):new Ad(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\s/g,\"_\").replace(xd,\"\")}static parseTrackName(t){const e=Td.exec(t);if(!e)throw new Error(\"PropertyBinding: Cannot parse trackName: \"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName\u0026\u0026n.nodeName.lastIndexOf(\".\");if(void 0!==i\u0026\u0026-1!==i){const t=n.nodeName.substring(i+1);-1!==Ed.indexOf(t)\u0026\u0026(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\"PropertyBinding: can not parse propertyName from trackName: \"+t);return n}static findNode(t,e){if(!e||\"\"===e||\".\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i\u003ct.length;i++){const r=t[i];if(r.name===e||r.uuid===e)return r;const s=n(r.children);if(s)return s}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.node[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let r=e.propertyIndex;if(t||(t=Ad.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\"THREE.PropertyBinding: Trying to update node for track: \"+this.path+\" but it wasn't found.\");if(n){let i=e.objectIndex;switch(n){case\"materials\":if(!t.material)return void console.error(\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",this);if(!t.material.materials)return void console.error(\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\",this);t=t.material.materials;break;case\"bones\":if(!t.skeleton)return void console.error(\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\",this);t=t.skeleton.bones;for(let e=0;e\u003ct.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\",this,t);t=t[i]}}const s=t[i];if(void 0===s){const n=e.nodeName;return void console.error(\"THREE.PropertyBinding: Trying to update property for track: \"+n+\".\"+i+\" but it wasn't found.\",t)}let a=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?a=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate\u0026\u0026(a=this.Versioning.MatrixWorldNeedsUpdate);let o=this.BindingType.Direct;if(void 0!==r){if(\"morphTargetInfluences\"===i){if(!t.geometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\",this);if(!t.geometry.isBufferGeometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\",this);if(!t.geometry.morphAttributes)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\",this);void 0!==t.morphTargetDictionary[r]\u0026\u0026(r=t.morphTargetDictionary[r])}o=this.BindingType.ArrayElement,this.resolvedProperty=s,this.propertyIndex=r}else void 0!==s.fromArray\u0026\u0026void 0!==s.toArray?(o=this.BindingType.HasFromToArray,this.resolvedProperty=s):Array.isArray(s)?(o=this.BindingType.EntireArray,this.resolvedProperty=s):this.propertyName=i;this.getValue=this.GetterByBindingType[o],this.setValue=this.SetterByBindingTypeAndVersioning[o][a]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}Ad.Composite=class{constructor(t,e,n){const i=n||Ad.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i\u0026\u0026i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},Ad.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Ad.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},Ad.prototype.GetterByBindingType=[Ad.prototype._getValue_direct,Ad.prototype._getValue_array,Ad.prototype._getValue_arrayElement,Ad.prototype._getValue_toArray],Ad.prototype.SetterByBindingTypeAndVersioning=[[Ad.prototype._setValue_direct,Ad.prototype._setValue_direct_setNeedsUpdate,Ad.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[Ad.prototype._setValue_array,Ad.prototype._setValue_array_setNeedsUpdate,Ad.prototype._setValue_array_setMatrixWorldNeedsUpdate],[Ad.prototype._setValue_arrayElement,Ad.prototype._setValue_arrayElement_setNeedsUpdate,Ad.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[Ad.prototype._setValue_fromArray,Ad.prototype._setValue_fromArray_setNeedsUpdate,Ad.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];class Ld{constructor(){this.uuid=Gn(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;const t={};this._indicesByUUID=t;for(let e=0,n=arguments.length;e!==n;++e)t[arguments[e].uuid]=e;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};const e=this;this.stats={objects:{get total(){return e._objects.length},get inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}add(){const t=this._objects,e=this._indicesByUUID,n=this._paths,i=this._parsedPaths,r=this._bindings,s=r.length;let a=void 0,o=t.length,l=this.nCachedObjects_;for(let c=0,u=arguments.length;c!==u;++c){const u=arguments[c],h=u.uuid;let d=e[h];if(void 0===d){d=o++,e[h]=d,t.push(u);for(let t=0,e=s;t!==e;++t)r[t].push(new Ad(u,n[t],i[t]))}else if(d\u003cl){a=t[d];const o=--l,c=t[o];e[c.uuid]=d,t[d]=c,e[h]=o,t[o]=u;for(let t=0,e=s;t!==e;++t){const e=r[t],s=e[o];let a=e[d];e[d]=s,void 0===a\u0026\u0026(a=new Ad(u,n[t],i[t])),e[o]=a}}else t[d]!==a\u0026\u0026console.error(\"THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.\")}this.nCachedObjects_=l}remove(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s],o=a.uuid,l=e[o];if(void 0!==l\u0026\u0026l\u003e=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l\u003cr){const a=--r,o=t[a],c=--s,u=t[c];e[o.uuid]=l,t[l]=o,e[u.uuid]=a,t[a]=u,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[a],r=e[c];e[l]=i,e[a]=r,e.pop()}}else{const r=--s,a=t[r];r\u003e0\u0026\u0026(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,u=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(u);for(let n=c,i=o.length;n!==i;++n){const i=o[n];u[n]=new Ad(i,t,e)}return u}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}}Ld.prototype.isAnimationObjectGroup=!0;class Rd{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:ke,endingEnd:ke};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Oe,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled\u0026\u0026!this.paused\u0026\u00260!==this.timeScale\u0026\u0026null===this._startTime\u0026\u0026this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t\u0026\u0026(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a\u0026\u0026(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t\u0026\u0026(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i\u003c0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a\u003e0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case qe:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);break;case je:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t\u003en.parameterPositions[1]\u0026\u0026(this.stopFading(),0===i\u0026\u0026(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t\u003en.parameterPositions[1]\u0026\u0026(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=n===Fe;if(0===t)return-1===r?i:s\u0026\u00261==(1\u0026r)?e-i:i;if(n===Be){-1===r\u0026\u0026(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i\u003e=e)i=e;else{if(!(i\u003c0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t\u003c0?-1:1})}}else{if(-1===r\u0026\u0026(t\u003e=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i\u003e=e||i\u003c0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a\u003c=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t\u003e0?e:0,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t\u003e0?1:-1});else{if(1===a){const e=t\u003c0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:\"loop\",action:this,loopDelta:n})}}else this.time=i;if(s\u0026\u00261==(1\u0026r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=Ve,i.endingEnd=Ve):(i.endingStart=t?this.zeroSlopeAtStart?Ve:ke:We,i.endingEnd=e?this.zeroSlopeAtEnd?Ve:ke:We)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s\u0026\u0026(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}class Cd extends Bn{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c\u0026\u0026(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let u=c[l];if(void 0!==u)s[t]=u;else{if(u=s[t],void 0!==u){null===u._cacheIndex\u0026\u0026(++u.referenceCount,this._addInactiveBinding(u,o,l));continue}const i=e\u0026\u0026e._propertyBindings[t].binding.parsedPath;u=new yd(Ad.create(n,l,i),r.ValueTypeName,r.getValueSize()),++u.referenceCount,this._addInactiveBinding(u,o,l),s[t]=u}a[t].resultBuffer=u.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i\u0026\u0026i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++\u0026\u0026(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount\u0026\u0026(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e\u0026\u0026e\u003cthis._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,r=this._actionsByClip;let s=r[e];if(void 0===s)s={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,r[e]=s;else{const e=s.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),s.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const r=t._clip.uuid,s=this._actionsByClip,a=s[r],o=a.knownActions,l=o[o.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,o[c]=l,o.pop(),t._byClipCacheIndex=null;delete a.actionByRoot[(t._localRoot||this._root).uuid],0===o.length\u0026\u0026delete s[r],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount\u0026\u0026this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,r=this._bindings;let s=i[e];void 0===s\u0026\u0026(s={},i[e]=s),s[n]=t,t._cacheIndex=r.length,r.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,r=n.path,s=this._bindingsByRootAndName,a=s[i],o=e[e.length-1],l=t._cacheIndex;o._cacheIndex=l,e[l]=o,e.pop(),delete a[r],0===Object.keys(a).length\u0026\u0026delete s[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n\u0026\u0026(n=new Mu(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,r=e[i];t.__cacheIndex=i,e[i]=t,r.__cacheIndex=n,e[n]=r}clipAction(t,e,n){const i=e||this._root,r=i.uuid;let s=\"string\"==typeof t?Iu.findByName(i,t):t;const a=null!==s?s.uuid:t,o=this._actionsByClip[a];let l=null;if(void 0===n\u0026\u0026(n=null!==s?s.blendMode:je),void 0!==o){const t=o.actionByRoot[r];if(void 0!==t\u0026\u0026t.blendMode===n)return t;l=o.knownActions[0],null===s\u0026\u0026(s=l._clip)}if(null===s)return null;const c=new Rd(this,s,e,n);return this._bindAction(c,l),this._addInactiveAction(c,a,r),c}existingAction(t,e){const n=e||this._root,i=n.uuid,r=\"string\"==typeof t?Iu.findByName(n,t):t,s=r?r.uuid:t,a=this._actionsByClip[s];return void 0!==a\u0026\u0026a.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e\u003e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t\u003cthis._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,r=i[n];if(void 0!==r){const t=r.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const r=i._cacheIndex,s=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,s._cacheIndex=r,e[r]=s,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i\u0026\u0026(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n\u0026\u0026(this._deactivateAction(n),this._removeInactiveAction(n))}}Cd.prototype._controlInterpolantsResultBuffer=new Float32Array(1);class Pd{constructor(t){\"string\"==typeof t\u0026\u0026(console.warn(\"THREE.Uniform: Type parameter is no longer needed.\"),t=arguments[1]),this.value=t}clone(){return new Pd(void 0===this.value.clone?this.value:this.value.clone())}}class Dd extends il{constructor(t,e,n=1){super(t,e),this.meshPerAttribute=n||1}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}clone(t){const e=super.clone(t);return e.meshPerAttribute=this.meshPerAttribute,e}toJSON(t){const e=super.toJSON(t);return e.isInstancedInterleavedBuffer=!0,e.meshPerAttribute=this.meshPerAttribute,e}}Dd.prototype.isInstancedInterleavedBuffer=!0;class Id{constructor(t,e,n,i,r){this.buffer=t,this.type=e,this.itemSize=n,this.elementSize=i,this.count=r,this.version=0}set needsUpdate(t){!0===t\u0026\u0026this.version++}setBuffer(t){return this.buffer=t,this}setType(t,e){return this.type=t,this.elementSize=e,this}setItemSize(t){return this.itemSize=t,this}setCount(t){return this.count=t,this}}Id.prototype.isGLBufferAttribute=!0;class Nd{constructor(t,e,n=0,i=1/0){this.ray=new Oi(t,e),this.near=n,this.far=i,this.camera=null,this.layers=new Zi,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(t,e){this.ray.set(t,e)}setFromCamera(t,e){e\u0026\u0026e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize(),this.camera=e):e\u0026\u0026e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld),this.camera=e):console.error(\"THREE.Raycaster: Unsupported camera type: \"+e.type)}intersectObject(t,e=!1,n=[]){return Bd(t,this,n,e),n.sort(zd),n}intersectObjects(t,e=!1,n=[]){for(let i=0,r=t.length;i\u003cr;i++)Bd(t[i],this,n,e);return n.sort(zd),n}}function zd(t,e){return t.distance-e.distance}function Bd(t,e,n,i){if(t.layers.test(e.layers)\u0026\u0026t.raycast(e,n),!0===i){const i=t.children;for(let t=0,r=i.length;t\u003cr;t++)Bd(i[t],e,n,!0)}}class Od{constructor(t=1,e=0,n=0){return this.radius=t,this.phi=e,this.theta=n,this}set(t,e,n){return this.radius=t,this.phi=e,this.theta=n,this}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,n){return this.radius=Math.sqrt(t*t+e*e+n*n),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t,n),this.phi=Math.acos(kn(e/this.radius,-1,1))),this}clone(){return(new this.constructor).copy(this)}}class Fd{constructor(t=1,e=0,n=0){return this.radius=t,this.theta=e,this.y=n,this}set(t,e,n){return this.radius=t,this.theta=e,this.y=n,this}copy(t){return this.radius=t.radius,this.theta=t.theta,this.y=t.y,this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,n){return this.radius=Math.sqrt(t*t+n*n),this.theta=Math.atan2(t,n),this.y=e,this}clone(){return(new this.constructor).copy(this)}}const Hd=new Zn;class Ud{constructor(t=new Zn(1/0,1/0),e=new Zn(-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e\u003cn;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=Hd.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x\u003cthis.min.x||this.max.y\u003cthis.min.y}getCenter(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box2: .getCenter() target is now required\"),t=new Zn),this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box2: .getSize() target is now required\"),t=new Zn),this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x\u003cthis.min.x||t.x\u003ethis.max.x||t.y\u003cthis.min.y||t.y\u003ethis.max.y)}containsBox(t){return this.min.x\u003c=t.min.x\u0026\u0026t.max.x\u003c=this.max.x\u0026\u0026this.min.y\u003c=t.min.y\u0026\u0026t.max.y\u003c=this.max.y}getParameter(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box2: .getParameter() target is now required\"),e=new Zn),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x\u003cthis.min.x||t.min.x\u003ethis.max.x||t.max.y\u003cthis.min.y||t.min.y\u003ethis.max.y)}clampPoint(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box2: .clampPoint() target is now required\"),e=new Zn),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Hd.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)\u0026\u0026t.max.equals(this.max)}}Ud.prototype.isBox2=!0;const Gd=new oi,kd=new oi;class Vd{constructor(t=new oi,e=new oi){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Line3: .getCenter() target is now required\"),t=new oi),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Line3: .delta() target is now required\"),t=new oi),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Line3: .at() target is now required\"),e=new oi),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Gd.subVectors(t,this.start),kd.subVectors(this.end,this.start);const n=kd.dot(kd);let i=kd.dot(Gd)/n;return e\u0026\u0026(i=kn(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n\u0026\u0026(console.warn(\"THREE.Line3: .closestPointToPoint() target is now required\"),n=new oi),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)\u0026\u0026t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}class Wd extends cr{constructor(t){super(),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}Wd.prototype.isImmediateRenderObject=!0;const jd=new oi;class qd extends cr{constructor(t,e){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=e;const n=new rs,i=[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 t=0,e=1,n=32;t\u003cn;t++,e++){const r=t/n*Math.PI*2,s=e/n*Math.PI*2;i.push(Math.cos(r),Math.sin(r),1,Math.cos(s),Math.sin(s),1)}n.setAttribute(\"position\",new qr(i,3));const r=new Gl({fog:!1,toneMapped:!1});this.cone=new Jl(n,r),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateMatrixWorld();const t=this.light.distance?this.light.distance:1e3,e=t*Math.tan(this.light.angle);this.cone.scale.set(e,e,t),jd.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(jd),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}const Xd=new oi,Yd=new Fi,Zd=new Fi;class Jd extends Jl{constructor(t){const e=function t(e){const n=[];e\u0026\u0026e.isBone\u0026\u0026n.push(e);for(let i=0;i\u003ce.children.length;i++)n.push.apply(n,t(e.children[i]));return n}(t),n=new rs,i=[],r=[],s=new Ir(0,0,1),a=new Ir(0,1,0);for(let t=0;t\u003ce.length;t++){const n=e[t];n.parent\u0026\u0026n.parent.isBone\u0026\u0026(i.push(0,0,0),i.push(0,0,0),r.push(s.r,s.g,s.b),r.push(a.r,a.g,a.b))}n.setAttribute(\"position\",new qr(i,3)),n.setAttribute(\"color\",new qr(r,3));super(n,new Gl({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0})),this.type=\"SkeletonHelper\",this.isSkeletonHelper=!0,this.root=t,this.bones=e,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(t){const e=this.bones,n=this.geometry,i=n.getAttribute(\"position\");Zd.copy(this.root.matrixWorld).invert();for(let t=0,n=0;t\u003ce.length;t++){const r=e[t];r.parent\u0026\u0026r.parent.isBone\u0026\u0026(Yd.multiplyMatrices(Zd,r.matrixWorld),Xd.setFromMatrixPosition(Yd),i.setXYZ(n,Xd.x,Xd.y,Xd.z),Yd.multiplyMatrices(Zd,r.parent.matrixWorld),Xd.setFromMatrixPosition(Yd),i.setXYZ(n+1,Xd.x,Xd.y,Xd.z),n+=2)}n.getAttribute(\"position\").needsUpdate=!0,super.updateMatrixWorld(t)}}class Qd extends ws{constructor(t,e,n){super(new eu(e,4,2),new Nr({wireframe:!0,fog:!1,toneMapped:!1})),this.light=t,this.light.updateMatrixWorld(),this.color=n,this.type=\"PointLightHelper\",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}}const Kd=new oi,$d=new Ir,tp=new Ir;class ep extends cr{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n;const i=new Qc(e);i.rotateY(.5*Math.PI),this.material=new Nr({wireframe:!0,fog:!1,toneMapped:!1}),void 0===this.color\u0026\u0026(this.material.vertexColors=!0);const r=i.getAttribute(\"position\"),s=new Float32Array(3*r.count);i.setAttribute(\"color\",new Or(s,3)),this.add(new ws(i,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const t=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{const e=t.geometry.getAttribute(\"color\");$d.copy(this.light.color),tp.copy(this.light.groundColor);for(let t=0,n=e.count;t\u003cn;t++){const i=t\u003cn/2?$d:tp;e.setXYZ(t,i.r,i.g,i.b)}e.needsUpdate=!0}t.lookAt(Kd.setFromMatrixPosition(this.light.matrixWorld).negate())}}class np extends Jl{constructor(t=10,e=10,n=4473924,i=8947848){n=new Ir(n),i=new Ir(i);const r=e/2,s=t/e,a=t/2,o=[],l=[];for(let t=0,c=0,u=-a;t\u003c=e;t++,u+=s){o.push(-a,0,u,a,0,u),o.push(u,0,-a,u,0,a);const e=t===r?n:i;e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3}const c=new rs;c.setAttribute(\"position\",new qr(o,3)),c.setAttribute(\"color\",new qr(l,3));super(c,new Gl({vertexColors:!0,toneMapped:!1})),this.type=\"GridHelper\"}}class ip extends Jl{constructor(t=10,e=16,n=8,i=64,r=4473924,s=8947848){r=new Ir(r),s=new Ir(s);const a=[],o=[];for(let n=0;n\u003c=e;n++){const i=n/e*(2*Math.PI),l=Math.sin(i)*t,c=Math.cos(i)*t;a.push(0,0,0),a.push(l,0,c);const u=1\u0026n?r:s;o.push(u.r,u.g,u.b),o.push(u.r,u.g,u.b)}for(let e=0;e\u003c=n;e++){const l=1\u0026e?r:s,c=t-t/n*e;for(let t=0;t\u003ci;t++){let e=t/i*(2*Math.PI),n=Math.sin(e)*c,r=Math.cos(e)*c;a.push(n,0,r),o.push(l.r,l.g,l.b),e=(t+1)/i*(2*Math.PI),n=Math.sin(e)*c,r=Math.cos(e)*c,a.push(n,0,r),o.push(l.r,l.g,l.b)}}const l=new rs;l.setAttribute(\"position\",new qr(a,3)),l.setAttribute(\"color\",new qr(o,3));super(l,new Gl({vertexColors:!0,toneMapped:!1})),this.type=\"PolarGridHelper\"}}const rp=new oi,sp=new oi,ap=new oi;class op extends cr{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n,void 0===e\u0026\u0026(e=1);let i=new rs;i.setAttribute(\"position\",new qr([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));const r=new Gl({fog:!1,toneMapped:!1});this.lightPlane=new Xl(i,r),this.add(this.lightPlane),i=new rs,i.setAttribute(\"position\",new qr([0,0,0,0,0,1],3)),this.targetLine=new Xl(i,r),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){rp.setFromMatrixPosition(this.light.matrixWorld),sp.setFromMatrixPosition(this.light.target.matrixWorld),ap.subVectors(sp,rp),this.lightPlane.lookAt(sp),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(sp),this.targetLine.scale.z=ap.length()}}const lp=new oi,cp=new Rs;class up extends Jl{constructor(t){const e=new rs,n=new Gl({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new Ir(16755200),o=new Ir(16711680),l=new Ir(43775),c=new Ir(16777215),u=new Ir(3355443);function h(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),r.push(e.r,e.g,e.b),void 0===s[t]\u0026\u0026(s[t]=[]),s[t].push(i.length/3-1)}h(\"n1\",\"n2\",a),h(\"n2\",\"n4\",a),h(\"n4\",\"n3\",a),h(\"n3\",\"n1\",a),h(\"f1\",\"f2\",a),h(\"f2\",\"f4\",a),h(\"f4\",\"f3\",a),h(\"f3\",\"f1\",a),h(\"n1\",\"f1\",a),h(\"n2\",\"f2\",a),h(\"n3\",\"f3\",a),h(\"n4\",\"f4\",a),h(\"p\",\"n1\",o),h(\"p\",\"n2\",o),h(\"p\",\"n3\",o),h(\"p\",\"n4\",o),h(\"u1\",\"u2\",l),h(\"u2\",\"u3\",l),h(\"u3\",\"u1\",l),h(\"c\",\"t\",c),h(\"p\",\"c\",u),h(\"cn1\",\"cn2\",u),h(\"cn3\",\"cn4\",u),h(\"cf1\",\"cf2\",u),h(\"cf3\",\"cf4\",u),e.setAttribute(\"position\",new qr(i,3)),e.setAttribute(\"color\",new qr(r,3)),super(e,n),this.type=\"CameraHelper\",this.camera=t,this.camera.updateProjectionMatrix\u0026\u0026this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}update(){const t=this.geometry,e=this.pointMap;cp.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),hp(\"c\",e,t,cp,0,0,-1),hp(\"t\",e,t,cp,0,0,1),hp(\"n1\",e,t,cp,-1,-1,-1),hp(\"n2\",e,t,cp,1,-1,-1),hp(\"n3\",e,t,cp,-1,1,-1),hp(\"n4\",e,t,cp,1,1,-1),hp(\"f1\",e,t,cp,-1,-1,1),hp(\"f2\",e,t,cp,1,-1,1),hp(\"f3\",e,t,cp,-1,1,1),hp(\"f4\",e,t,cp,1,1,1),hp(\"u1\",e,t,cp,.7,1.1,-1),hp(\"u2\",e,t,cp,-.7,1.1,-1),hp(\"u3\",e,t,cp,0,2,-1),hp(\"cf1\",e,t,cp,-1,0,1),hp(\"cf2\",e,t,cp,1,0,1),hp(\"cf3\",e,t,cp,0,-1,1),hp(\"cf4\",e,t,cp,0,1,1),hp(\"cn1\",e,t,cp,-1,0,-1),hp(\"cn2\",e,t,cp,1,0,-1),hp(\"cn3\",e,t,cp,0,-1,-1),hp(\"cn4\",e,t,cp,0,1,-1),t.getAttribute(\"position\").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}}function hp(t,e,n,i,r,s,a){lp.set(r,s,a).unproject(i);const o=e[t];if(void 0!==o){const t=n.getAttribute(\"position\");for(let e=0,n=o.length;e\u003cn;e++)t.setXYZ(o[e],lp.x,lp.y,lp.z)}}const dp=new ui;class pp extends Jl{constructor(t,e=16776960){const n=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]),i=new Float32Array(24),r=new rs;r.setIndex(new Or(n,1)),r.setAttribute(\"position\",new Or(i,3)),super(r,new Gl({color:e,toneMapped:!1})),this.object=t,this.type=\"BoxHelper\",this.matrixAutoUpdate=!1,this.update()}update(t){if(void 0!==t\u0026\u0026console.warn(\"THREE.BoxHelper: .update() has no longer arguments.\"),void 0!==this.object\u0026\u0026dp.setFromObject(this.object),dp.isEmpty())return;const e=dp.min,n=dp.max,i=this.geometry.attributes.position,r=i.array;r[0]=n.x,r[1]=n.y,r[2]=n.z,r[3]=e.x,r[4]=n.y,r[5]=n.z,r[6]=e.x,r[7]=e.y,r[8]=n.z,r[9]=n.x,r[10]=e.y,r[11]=n.z,r[12]=n.x,r[13]=n.y,r[14]=e.z,r[15]=e.x,r[16]=n.y,r[17]=e.z,r[18]=e.x,r[19]=e.y,r[20]=e.z,r[21]=n.x,r[22]=e.y,r[23]=e.z,i.needsUpdate=!0,this.geometry.computeBoundingSphere()}setFromObject(t){return this.object=t,this.update(),this}copy(t){return Jl.prototype.copy.call(this,t),this.object=t.object,this}}class fp extends Jl{constructor(t,e=16776960){const n=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]),i=new rs;i.setIndex(new Or(n,1)),i.setAttribute(\"position\",new qr([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(i,new Gl({color:e,toneMapped:!1})),this.box=t,this.type=\"Box3Helper\",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}}class mp extends Xl{constructor(t,e=1,n=16776960){const i=n,r=new rs;r.setAttribute(\"position\",new qr([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,0,1,0,0,0],3)),r.computeBoundingSphere(),super(r,new Gl({color:i,toneMapped:!1})),this.type=\"PlaneHelper\",this.plane=t,this.size=e;const s=new rs;s.setAttribute(\"position\",new qr([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3)),s.computeBoundingSphere(),this.add(new ws(s,new Nr({color:i,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}updateMatrixWorld(t){let e=-this.plane.constant;Math.abs(e)\u003c1e-8\u0026\u0026(e=1e-8),this.scale.set(.5*this.size,.5*this.size,e),this.children[0].material.side=e\u003c0?m:f,this.lookAt(this.plane.normal),super.updateMatrixWorld(t)}}const gp=new oi;let vp,yp;class xp extends cr{constructor(t=new oi(0,0,1),e=new oi(0,0,0),n=1,i=16776960,r=.2*n,s=.2*r){super(),this.type=\"ArrowHelper\",void 0===vp\u0026\u0026(vp=new rs,vp.setAttribute(\"position\",new qr([0,0,0,0,1,0],3)),yp=new uc(0,.5,1,5,1),yp.translate(0,-.5,0)),this.position.copy(e),this.line=new Xl(vp,new Gl({color:i,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new ws(yp,new Nr({color:i,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(n,r,s)}setDirection(t){if(t.y\u003e.99999)this.quaternion.set(0,0,0,1);else if(t.y\u003c-.99999)this.quaternion.set(1,0,0,0);else{gp.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(gp,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}}class _p extends Jl{constructor(t=1){const e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t],n=new rs;n.setAttribute(\"position\",new qr(e,3)),n.setAttribute(\"color\",new qr([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(n,new Gl({vertexColors:!0,toneMapped:!1})),this.type=\"AxesHelper\"}dispose(){this.geometry.dispose(),this.material.dispose()}}const bp=new Float32Array(1),wp=new Int32Array(bp.buffer);class Mp{static toHalfFloat(t){bp[0]=t;const e=wp[0];let n=e\u003e\u003e16\u002632768,i=e\u003e\u003e12\u00262047;const r=e\u003e\u003e23\u0026255;return r\u003c103?n:r\u003e142?(n|=31744,n|=(255==r?0:1)\u0026\u00268388607\u0026e,n):r\u003c113?(i|=2048,n|=(i\u003e\u003e114-r)+(i\u003e\u003e113-r\u00261),n):(n|=r-112\u003c\u003c10|i\u003e\u003e1,n+=1\u0026i,n)}}const Sp=Math.pow(2,8),Tp=[.125,.215,.35,.446,.526,.582],Ep=5+Tp.length,Ap={[Je]:0,[Qe]:1,[$e]:2,[en]:3,[nn]:4,[rn]:5,[Ke]:6},Lp=new Nr({side:m,depthWrite:!1,depthTest:!1}),Rp=new ws(new Ss,Lp),Cp=new Rh,{_lodPlanes:Pp,_sizeLods:Dp,_sigmas:Ip}=kp(),Np=new Ir;let zp=null;const Bp=(1+Math.sqrt(5))/2,Op=1/Bp,Fp=[new oi(1,1,1),new oi(-1,1,1),new oi(1,1,-1),new oi(-1,1,-1),new oi(0,Bp,Op),new oi(0,Bp,-Op),new oi(Op,0,Bp),new oi(-Op,0,Bp),new oi(Bp,Op,0),new oi(-Bp,Op,0)];function Hp(t){const e=Math.max(t.r,t.g,t.b),n=Math.min(Math.max(Math.ceil(Math.log2(e)),-128),127);t.multiplyScalar(Math.pow(2,-n));return(n+128)/255}class Up{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new oi(0,1,0);return new uu({name:\"SphericalGaussianBlur\",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:Ap[Je]},outputEncoding:{value:Ap[Je]}},vertexShader:Xp(),fragmentShader:`\\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${Yp()}\\n\\n\\t\\t\\t#define ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t#include \u003ccube_uv_reflection_fragment\u003e\\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 \u003c n; i++ ) {\\n\\n\\t\\t\\t\\t\\tif ( i \u003e= 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\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:x,depthTest:!1,depthWrite:!1})}(20),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){zp=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(t,n,i,r),e\u003e0\u0026\u0026this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader\u0026\u0026(this._cubemapShader=qp(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader\u0026\u0026(this._equirectShader=jp(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader\u0026\u0026this._cubemapShader.dispose(),null!==this._equirectShader\u0026\u0026this._equirectShader.dispose();for(let t=0;t\u003cPp.length;t++)Pp[t].dispose()}_cleanup(t){this._pingPongRenderTarget.dispose(),this._renderer.setRenderTarget(zp),t.scissorTest=!1,Wp(t,0,0,t.width,t.height)}_fromTexture(t){zp=this._renderer.getRenderTarget();const e=this._allocateTargets(t);return this._textureToCubeUV(t,e),this._applyPMREM(e),this._cleanup(e),e}_allocateTargets(t){const e={magFilter:ft,minFilter:ft,generateMipmaps:!1,type:St,format:Gt,encoding:Gp(t)?t.encoding:$e,depthBuffer:!1},n=Vp(e);return n.depthBuffer=!t,this._pingPongRenderTarget=Vp(e),n}_compileMaterial(t){const e=new ws(Pp[0],t);this._renderer.compile(e,Cp)}_sceneToCubeUV(t,e,n,i){const r=new Cs(90,1,e,n),s=[1,-1,1,1,1,1],a=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,c=o.outputEncoding,u=o.toneMapping;o.getClearColor(Np),o.toneMapping=K,o.outputEncoding=Je,o.autoClear=!1;let h=!1;const d=t.background;if(d){if(d.isColor){Lp.color.copy(d).convertSRGBToLinear(),t.background=null;const e=Hp(Lp.color);Lp.opacity=e,h=!0}}else{Lp.color.copy(Np).convertSRGBToLinear();const t=Hp(Lp.color);Lp.opacity=t,h=!0}for(let e=0;e\u003c6;e++){const n=e%3;0==n?(r.up.set(0,s[e],0),r.lookAt(a[e],0,0)):1==n?(r.up.set(0,0,s[e]),r.lookAt(0,a[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,a[e])),Wp(i,n*Sp,e\u003e2?Sp:0,Sp,Sp),o.setRenderTarget(i),h\u0026\u0026o.render(Rp,r),o.render(t,r)}o.toneMapping=u,o.outputEncoding=c,o.autoClear=l}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader\u0026\u0026(this._cubemapShader=qp()):null==this._equirectShader\u0026\u0026(this._equirectShader=jp());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,r=new ws(Pp[0],i),s=i.uniforms;s.envMap.value=t,t.isCubeTexture||s.texelSize.value.set(1/t.image.width,1/t.image.height),s.inputEncoding.value=Ap[t.encoding],s.outputEncoding.value=Ap[e.texture.encoding],Wp(e,0,0,3*Sp,2*Sp),n.setRenderTarget(e),n.render(r,Cp)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;e\u003cEp;e++){const n=Math.sqrt(Ip[e]*Ip[e]-Ip[e-1]*Ip[e-1]),i=Fp[(e-1)%Fp.length];this._blur(t,e-1,e,n,i)}e.autoClear=n}_blur(t,e,n,i,r){const s=this._pingPongRenderTarget;this._halfBlur(t,s,e,n,i,\"latitudinal\",r),this._halfBlur(s,t,n,n,i,\"longitudinal\",r)}_halfBlur(t,e,n,i,r,s,a){const o=this._renderer,l=this._blurMaterial;\"latitudinal\"!==s\u0026\u0026\"longitudinal\"!==s\u0026\u0026console.error(\"blur direction must be either latitudinal or longitudinal!\");const c=new ws(Pp[i],l),u=l.uniforms,h=Dp[n]-1,d=isFinite(r)?Math.PI/(2*h):2*Math.PI/39,p=r/d,f=isFinite(r)?1+Math.floor(3*p):20;f\u003e20\u0026\u0026console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const m=[];let g=0;for(let t=0;t\u003c20;++t){const e=t/p,n=Math.exp(-e*e/2);m.push(n),0==t?g+=n:t\u003cf\u0026\u0026(g+=2*n)}for(let t=0;t\u003cm.length;t++)m[t]=m[t]/g;u.envMap.value=t.texture,u.samples.value=f,u.weights.value=m,u.latitudinal.value=\"latitudinal\"===s,a\u0026\u0026(u.poleAxis.value=a),u.dTheta.value=d,u.mipInt.value=8-n,u.inputEncoding.value=Ap[t.texture.encoding],u.outputEncoding.value=Ap[t.texture.encoding];const v=Dp[i];Wp(e,3*Math.max(0,Sp-2*v),(0===i?0:2*Sp)+2*v*(i\u003e4?i-8+4:0),3*v,2*v),o.setRenderTarget(e),o.render(c,Cp)}}function Gp(t){return void 0!==t\u0026\u0026t.type===St\u0026\u0026(t.encoding===Je||t.encoding===Qe||t.encoding===Ke)}function kp(){const t=[],e=[],n=[];let i=8;for(let r=0;r\u003cEp;r++){const s=Math.pow(2,i);e.push(s);let a=1/s;r\u003e4?a=Tp[r-8+4-1]:0==r\u0026\u0026(a=0),n.push(a);const o=1/(s-1),l=-o/2,c=1+o/2,u=[l,l,c,l,c,c,l,l,c,c,l,c],h=6,d=6,p=3,f=2,m=1,g=new Float32Array(p*d*h),v=new Float32Array(f*d*h),y=new Float32Array(m*d*h);for(let t=0;t\u003ch;t++){const e=t%3*2/3-1,n=t\u003e2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];g.set(i,p*d*t),v.set(u,f*d*t);const r=[t,t,t,t,t,t];y.set(r,m*d*t)}const x=new rs;x.setAttribute(\"position\",new Or(g,p)),x.setAttribute(\"uv\",new Or(v,f)),x.setAttribute(\"faceIndex\",new Or(y,m)),t.push(x),i\u003e4\u0026\u0026i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Vp(t){const e=new ii(3*Sp,3*Sp,t);return e.texture.mapping=ct,e.texture.name=\"PMREM.cubeUv\",e.scissorTest=!0,e}function Wp(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function jp(){const t=new Zn(1,1);return new uu({name:\"EquirectangularToCubeUV\",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:Ap[Je]},outputEncoding:{value:Ap[Je]}},vertexShader:Xp(),fragmentShader:`\\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 vec2 texelSize;\\n\\n\\t\\t\\t${Yp()}\\n\\n\\t\\t\\t#include \u003ccommon\u003e\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\n\\t\\t\\t\\tvec3 outputDirection = normalize( vOutputDirection );\\n\\t\\t\\t\\tvec2 uv = equirectUv( outputDirection );\\n\\n\\t\\t\\t\\tvec2 f = fract( uv / texelSize - 0.5 );\\n\\t\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\t\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x += texelSize.x;\\n\\t\\t\\t\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.y += texelSize.y;\\n\\t\\t\\t\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x -= texelSize.x;\\n\\t\\t\\t\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\n\\t\\t\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\t\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\t\\t\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\n\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:x,depthTest:!1,depthWrite:!1})}function qp(){return new uu({name:\"CubemapToCubeUV\",uniforms:{envMap:{value:null},inputEncoding:{value:Ap[Je]},outputEncoding:{value:Ap[Je]}},vertexShader:Xp(),fragmentShader:`\\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 samplerCube envMap;\\n\\n\\t\\t\\t${Yp()}\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t\\t\\t\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:x,depthTest:!1,depthWrite:!1})}function Xp(){return\"\\n\\n\\t\\tprecision mediump float;\\n\\t\\tprecision mediump int;\\n\\n\\t\\tattribute vec3 position;\\n\\t\\tattribute vec2 uv;\\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\"}function Yp(){return\"\\n\\n\\t\\tuniform int inputEncoding;\\n\\t\\tuniform int outputEncoding;\\n\\n\\t\\t#include \u003cencodings_pars_fragment\u003e\\n\\n\\t\\tvec4 inputTexelToLinear( vec4 value ) {\\n\\n\\t\\t\\tif ( inputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( inputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn sRGBToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn RGBEToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 7.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 16.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn RGBDToLinear( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn GammaToLinear( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 linearToOutputTexel( vec4 value ) {\\n\\n\\t\\t\\tif ( outputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( outputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn LinearTosRGB( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBE( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 7.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 16.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBD( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn LinearToGamma( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 envMapTexelToLinear( vec4 color ) {\\n\\n\\t\\t\\treturn inputTexelToLinear( color );\\n\\n\\t\\t}\\n\\t\"}const Zp=0,Jp=1,Qp=0,Kp=1,$p=2;function tf(t){return console.warn(\"THREE.MeshFaceMaterial has been removed. Use an Array instead.\"),t}function ef(t=[]){return console.warn(\"THREE.MultiMaterial has been removed. Use an Array instead.\"),t.isMultiMaterial=!0,t.materials=t,t.clone=function(){return t.slice()},t}function nf(t,e){return console.warn(\"THREE.PointCloud has been renamed to THREE.Points.\"),new ic(t,e)}function rf(t){return console.warn(\"THREE.Particle has been renamed to THREE.Sprite.\"),new _l(t)}function sf(t,e){return console.warn(\"THREE.ParticleSystem has been renamed to THREE.Points.\"),new ic(t,e)}function af(t){return console.warn(\"THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.\"),new Kl(t)}function of(t){return console.warn(\"THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.\"),new Kl(t)}function lf(t){return console.warn(\"THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.\"),new Kl(t)}function cf(t,e,n){return console.warn(\"THREE.Vertex has been removed. Use THREE.Vector3 instead.\"),new oi(t,e,n)}function uf(t,e){return console.warn(\"THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.\"),new Or(t,e).setUsage(En)}function hf(t,e){return console.warn(\"THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.\"),new Fr(t,e)}function df(t,e){return console.warn(\"THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.\"),new Hr(t,e)}function pf(t,e){return console.warn(\"THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.\"),new Ur(t,e)}function ff(t,e){return console.warn(\"THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.\"),new Gr(t,e)}function mf(t,e){return console.warn(\"THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.\"),new kr(t,e)}function gf(t,e){return console.warn(\"THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.\"),new Vr(t,e)}function vf(t,e){return console.warn(\"THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.\"),new Wr(t,e)}function yf(t,e){return console.warn(\"THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.\"),new qr(t,e)}function xf(t,e){return console.warn(\"THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.\"),new Xr(t,e)}function _f(t){return console.warn(\"THREE.AxisHelper has been renamed to THREE.AxesHelper.\"),new _p(t)}function bf(t,e){return console.warn(\"THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.\"),new pp(t,e)}function wf(t,e){return console.warn(\"THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.\"),new Jl(new yc(t.geometry),new Gl({color:void 0!==e?e:16777215}))}function Mf(t,e){return console.warn(\"THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.\"),new Jl(new ou(t.geometry),new Gl({color:void 0!==e?e:16777215}))}function Sf(t){return console.warn(\"THREE.XHRLoader has been renamed to THREE.FileLoader.\"),new Uu(t)}function Tf(t){return console.warn(\"THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.\"),new ju(t)}function Ef(t,e,n){return console.warn(\"THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).\"),new Is(t,n)}function Af(){console.error(\"THREE.CanvasRenderer has been removed\")}function Lf(){console.error(\"THREE.JSONLoader has been removed.\")}Xu.create=function(t,e){return console.log(\"THREE.Curve.create() has been deprecated\"),t.prototype=Object.create(Xu.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},fh.prototype.fromPoints=function(t){return console.warn(\"THREE.Path: .fromPoints() has been renamed to .setFromPoints().\"),this.setFromPoints(t)},np.prototype.setColors=function(){console.error(\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\")},Jd.prototype.update=function(){console.error(\"THREE.SkeletonHelper: update() no longer needs to be called.\")},Fu.prototype.extractUrlBase=function(t){return console.warn(\"THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.\"),Oh.extractUrlBase(t)},Fu.Handlers={add:function(){console.error(\"THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.\")},get:function(){console.error(\"THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.\")}},Ud.prototype.center=function(t){return console.warn(\"THREE.Box2: .center() has been renamed to .getCenter().\"),this.getCenter(t)},Ud.prototype.empty=function(){return console.warn(\"THREE.Box2: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},Ud.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},Ud.prototype.size=function(t){return console.warn(\"THREE.Box2: .size() has been renamed to .getSize().\"),this.getSize(t)},ui.prototype.center=function(t){return console.warn(\"THREE.Box3: .center() has been renamed to .getCenter().\"),this.getCenter(t)},ui.prototype.empty=function(){return console.warn(\"THREE.Box3: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},ui.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},ui.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},ui.prototype.size=function(t){return console.warn(\"THREE.Box3: .size() has been renamed to .getSize().\"),this.getSize(t)},Ri.prototype.empty=function(){return console.warn(\"THREE.Sphere: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},Bs.prototype.setFromMatrix=function(t){return console.warn(\"THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().\"),this.setFromProjectionMatrix(t)},Vd.prototype.center=function(t){return console.warn(\"THREE.Line3: .center() has been renamed to .getCenter().\"),this.getCenter(t)},Jn.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},Jn.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},Jn.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix3: .multiplyVector3Array() has been removed.\")},Jn.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},Jn.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix3: .applyToVector3Array() has been removed.\")},Jn.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},Fi.prototype.extractPosition=function(t){return console.warn(\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\"),this.copyPosition(t)},Fi.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},Fi.prototype.getPosition=function(){return console.warn(\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\"),(new oi).setFromMatrixColumn(this,3)},Fi.prototype.setRotationFromQuaternion=function(t){return console.warn(\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\"),this.makeRotationFromQuaternion(t)},Fi.prototype.multiplyToArray=function(){console.warn(\"THREE.Matrix4: .multiplyToArray() has been removed.\")},Fi.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.multiplyVector4=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix4: .multiplyVector3Array() has been removed.\")},Fi.prototype.rotateAxis=function(t){console.warn(\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\"),t.transformDirection(this)},Fi.prototype.crossVector=function(t){return console.warn(\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.translate=function(){console.error(\"THREE.Matrix4: .translate() has been removed.\")},Fi.prototype.rotateX=function(){console.error(\"THREE.Matrix4: .rotateX() has been removed.\")},Fi.prototype.rotateY=function(){console.error(\"THREE.Matrix4: .rotateY() has been removed.\")},Fi.prototype.rotateZ=function(){console.error(\"THREE.Matrix4: .rotateZ() has been removed.\")},Fi.prototype.rotateByAxis=function(){console.error(\"THREE.Matrix4: .rotateByAxis() has been removed.\")},Fi.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix4: .applyToVector3Array() has been removed.\")},Fi.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn(\"THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.\"),this.makePerspective(t,e,i,n,r,s)},Fi.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},pr.prototype.isIntersectionLine=function(t){return console.warn(\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\"),this.intersectsLine(t)},ai.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\"),t.applyQuaternion(this)},ai.prototype.inverse=function(){return console.warn(\"THREE.Quaternion: .inverse() has been renamed to invert().\"),this.invert()},Oi.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},Oi.prototype.isIntersectionPlane=function(t){return console.warn(\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\"),this.intersectsPlane(t)},Oi.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},Sr.prototype.area=function(){return console.warn(\"THREE.Triangle: .area() has been renamed to .getArea().\"),this.getArea()},Sr.prototype.barycoordFromPoint=function(t,e){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),this.getBarycoord(t,e)},Sr.prototype.midpoint=function(t){return console.warn(\"THREE.Triangle: .midpoint() has been renamed to .getMidpoint().\"),this.getMidpoint(t)},Sr.prototypenormal=function(t){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),this.getNormal(t)},Sr.prototype.plane=function(t){return console.warn(\"THREE.Triangle: .plane() has been renamed to .getPlane().\"),this.getPlane(t)},Sr.barycoordFromPoint=function(t,e,n,i,r){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),Sr.getBarycoord(t,e,n,i,r)},Sr.normal=function(t,e,n,i){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),Sr.getNormal(t,e,n,i)},mh.prototype.extractAllPoints=function(t){return console.warn(\"THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.\"),this.extractPoints(t)},mh.prototype.extrude=function(t){return console.warn(\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\"),new Xc(this,t)},mh.prototype.makeGeometry=function(t){return console.warn(\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\"),new tu(this,t)},Zn.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},Zn.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},Zn.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},oi.prototype.setEulerFromRotationMatrix=function(){console.error(\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\")},oi.prototype.setEulerFromQuaternion=function(){console.error(\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\")},oi.prototype.getPositionFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\"),this.setFromMatrixPosition(t)},oi.prototype.getScaleFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\"),this.setFromMatrixScale(t)},oi.prototype.getColumnFromMatrix=function(t,e){return console.warn(\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\"),this.setFromMatrixColumn(e,t)},oi.prototype.applyProjection=function(t){return console.warn(\"THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.\"),this.applyMatrix4(t)},oi.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},oi.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},oi.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},ni.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},ni.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},cr.prototype.getChildByName=function(t){return console.warn(\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\"),this.getObjectByName(t)},cr.prototype.renderDepth=function(){console.warn(\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\")},cr.prototype.translate=function(t,e){return console.warn(\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\"),this.translateOnAxis(e,t)},cr.prototype.getWorldRotation=function(){console.error(\"THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.\")},cr.prototype.applyMatrix=function(t){return console.warn(\"THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(cr.prototype,{eulerOrder:{get:function(){return console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order},set:function(t){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order=t}},useQuaternion:{get:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")},set:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")}}}),ws.prototype.setDrawMode=function(){console.error(\"THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")},Object.defineProperties(ws.prototype,{drawMode:{get:function(){return console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.\"),Xe},set:function(){console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")}}}),Cl.prototype.initBones=function(){console.error(\"THREE.SkinnedMesh: initBones() has been removed.\")},Cs.prototype.setLens=function(t,e){console.warn(\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\"),void 0!==e\u0026\u0026(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(gh.prototype,{onlyShadow:{set:function(){console.warn(\"THREE.Light: .onlyShadow has been removed.\")}},shadowCameraFov:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\"),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn(\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\"),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn(\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\"),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn(\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\"),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn(\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\"),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn(\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\"),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\"),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn(\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\")}},shadowBias:{set:function(t){console.warn(\"THREE.Light: .shadowBias is now .shadow.bias.\"),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn(\"THREE.Light: .shadowDarkness has been removed.\")}},shadowMapWidth:{set:function(t){console.warn(\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\"),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn(\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\"),this.shadow.mapSize.height=t}}}),Object.defineProperties(Or.prototype,{length:{get:function(){return console.warn(\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\"),this.array.length}},dynamic:{get:function(){return console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),this.usage===En},set:function(){console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),this.setUsage(En)}}}),Or.prototype.setDynamic=function(t){return console.warn(\"THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?En:Tn),this},Or.prototype.copyIndicesArray=function(){console.error(\"THREE.BufferAttribute: .copyIndicesArray() has been removed.\")},Or.prototype.setArray=function(){console.error(\"THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},rs.prototype.addIndex=function(t){console.warn(\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\"),this.setIndex(t)},rs.prototype.addAttribute=function(t,e){return console.warn(\"THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().\"),e\u0026\u0026e.isBufferAttribute||e\u0026\u0026e.isInterleavedBufferAttribute?\"index\"===t?(console.warn(\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\"),this.setIndex(e),this):this.setAttribute(t,e):(console.warn(\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\"),this.setAttribute(t,new Or(arguments[1],arguments[2])))},rs.prototype.addDrawCall=function(t,e,n){void 0!==n\u0026\u0026console.warn(\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\"),console.warn(\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\"),this.addGroup(t,e)},rs.prototype.clearDrawCalls=function(){console.warn(\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\"),this.clearGroups()},rs.prototype.computeOffsets=function(){console.warn(\"THREE.BufferGeometry: .computeOffsets() has been removed.\")},rs.prototype.removeAttribute=function(t){return console.warn(\"THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().\"),this.deleteAttribute(t)},rs.prototype.applyMatrix=function(t){return console.warn(\"THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(rs.prototype,{drawcalls:{get:function(){return console.error(\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\"),this.groups}},offsets:{get:function(){return console.warn(\"THREE.BufferGeometry: .offsets has been renamed to .groups.\"),this.groups}}}),il.prototype.setDynamic=function(t){return console.warn(\"THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?En:Tn),this},il.prototype.setArray=function(){console.error(\"THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},Xc.prototype.getArrays=function(){console.error(\"THREE.ExtrudeGeometry: .getArrays() has been removed.\")},Xc.prototype.addShapeList=function(){console.error(\"THREE.ExtrudeGeometry: .addShapeList() has been removed.\")},Xc.prototype.addShape=function(){console.error(\"THREE.ExtrudeGeometry: .addShape() has been removed.\")},nl.prototype.dispose=function(){console.error(\"THREE.Scene: .dispose() has been removed.\")},Pd.prototype.onUpdate=function(){return console.warn(\"THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.\"),this},Object.defineProperties(Er.prototype,{wrapAround:{get:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")},set:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")}},overdraw:{get:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")},set:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")}},wrapRGB:{get:function(){return console.warn(\"THREE.Material: .wrapRGB has been removed.\"),new Ir}},shading:{get:function(){console.error(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\")},set:function(t){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=t===v}},stencilMask:{get:function(){return console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask},set:function(t){console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask=t}}}),Object.defineProperties(Ls.prototype,{derivatives:{get:function(){return console.warn(\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives},set:function(t){console.warn(\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives=t}}}),Ko.prototype.clearTarget=function(t,e,n,i){console.warn(\"THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.\"),this.setRenderTarget(t),this.clear(e,n,i)},Ko.prototype.animate=function(t){console.warn(\"THREE.WebGLRenderer: .animate() is now .setAnimationLoop().\"),this.setAnimationLoop(t)},Ko.prototype.getCurrentRenderTarget=function(){return console.warn(\"THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().\"),this.getRenderTarget()},Ko.prototype.getMaxAnisotropy=function(){return console.warn(\"THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().\"),this.capabilities.getMaxAnisotropy()},Ko.prototype.getPrecision=function(){return console.warn(\"THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.\"),this.capabilities.precision},Ko.prototype.resetGLState=function(){return console.warn(\"THREE.WebGLRenderer: .resetGLState() is now .state.reset().\"),this.state.reset()},Ko.prototype.supportsFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\"),this.extensions.get(\"OES_texture_float\")},Ko.prototype.supportsHalfFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\"),this.extensions.get(\"OES_texture_half_float\")},Ko.prototype.supportsStandardDerivatives=function(){return console.warn(\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\"),this.extensions.get(\"OES_standard_derivatives\")},Ko.prototype.supportsCompressedTextureS3TC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_s3tc\")},Ko.prototype.supportsCompressedTexturePVRTC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_pvrtc\")},Ko.prototype.supportsBlendMinMax=function(){return console.warn(\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\"),this.extensions.get(\"EXT_blend_minmax\")},Ko.prototype.supportsVertexTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\"),this.capabilities.vertexTextures},Ko.prototype.supportsInstancedArrays=function(){return console.warn(\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\"),this.extensions.get(\"ANGLE_instanced_arrays\")},Ko.prototype.enableScissorTest=function(t){console.warn(\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\"),this.setScissorTest(t)},Ko.prototype.initMaterial=function(){console.warn(\"THREE.WebGLRenderer: .initMaterial() has been removed.\")},Ko.prototype.addPrePlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\")},Ko.prototype.addPostPlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\")},Ko.prototype.updateShadowMap=function(){console.warn(\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\")},Ko.prototype.setFaceCulling=function(){console.warn(\"THREE.WebGLRenderer: .setFaceCulling() has been removed.\")},Ko.prototype.allocTextureUnit=function(){console.warn(\"THREE.WebGLRenderer: .allocTextureUnit() has been removed.\")},Ko.prototype.setTexture=function(){console.warn(\"THREE.WebGLRenderer: .setTexture() has been removed.\")},Ko.prototype.setTexture2D=function(){console.warn(\"THREE.WebGLRenderer: .setTexture2D() has been removed.\")},Ko.prototype.setTextureCube=function(){console.warn(\"THREE.WebGLRenderer: .setTextureCube() has been removed.\")},Ko.prototype.getActiveMipMapLevel=function(){return console.warn(\"THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().\"),this.getActiveMipmapLevel()},Object.defineProperties(Ko.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\"),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\"),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")}},context:{get:function(){return console.warn(\"THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.\"),this.getContext()}},vr:{get:function(){return console.warn(\"THREE.WebGLRenderer: .vr has been renamed to .xr\"),this.xr}},gammaInput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\"),!1},set:function(){console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\")}},gammaOutput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),!1},set:function(t){console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),this.outputEncoding=!0===t?Qe:Je}},toneMappingWhitePoint:{get:function(){return console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\"),1},set:function(){console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\")}}}),Object.defineProperties(ko.prototype,{cullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")}},renderReverseSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")}},renderSingleSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")}}}),Object.defineProperties(ii.prototype,{wrapS:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy=t}},offset:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset=t}},repeat:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat=t}},format:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format=t}},type:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps=t}}}),hd.prototype.load=function(t){console.warn(\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\");const e=this;return(new Kh).load(t,(function(t){e.setBuffer(t)})),this},vd.prototype.getData=function(){return console.warn(\"THREE.AudioAnalyser: .getData() is now .getFrequencyData().\"),this.getFrequencyData()},Ps.prototype.updateCubeMap=function(t,e){return console.warn(\"THREE.CubeCamera: .updateCubeMap() is now .update().\"),this.update(t,e)},Ps.prototype.clear=function(t,e,n,i){return console.warn(\"THREE.CubeCamera: .clear() is now .renderTarget.clear().\"),this.renderTarget.clear(t,e,n,i)},Kn.crossOrigin=void 0,Kn.loadTexture=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\");const r=new qu;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e\u0026\u0026(s.mapping=e),s},Kn.loadTextureCube=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\");const r=new Wu;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e\u0026\u0026(s.mapping=e),s},Kn.loadCompressedTexture=function(){console.error(\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\")},Kn.loadCompressedTextureCube=function(){console.error(\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\")};const Rf={createMultiMaterialObject:function(){console.error(\"THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js\")},detach:function(){console.error(\"THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js\")},attach:function(){console.error(\"THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js\")}};function Cf(){console.error(\"THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js\")}\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"register\",{detail:{revision:i}})),\"undefined\"!=typeof window\u0026\u0026(window.__THREE__?console.warn(\"WARNING: Multiple instances of Three.js being imported.\"):window.__THREE__=i)},function(t,e,n){var i=n(0);i.OrbitControls=function(t,e){var n,r,s,a,o;void 0===e\u0026\u0026console.warn('THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.'),e===document\u0026\u0026console.error('THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'),this.object=t,this.domElement=e,this.enabled=!0,this.target=new i.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={LEFT:i.MOUSE.ROTATE,MIDDLE:i.MOUSE.DOLLY,RIGHT:i.MOUSE.PAN},this.touches={ONE:i.TOUCH.ROTATE,TWO:i.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return m.phi},this.getAzimuthalAngle=function(){return m.theta},this.saveState=function(){l.target0.copy(l.target),l.position0.copy(l.object.position),l.zoom0=l.object.zoom},this.reset=function(){l.target.copy(l.target0),l.object.position.copy(l.position0),l.object.zoom=l.zoom0,l.object.updateProjectionMatrix(),l.dispatchEvent(c),l.update(),p=d.NONE},this.update=(n=new i.Vector3,r=(new i.Quaternion).setFromUnitVectors(t.up,new i.Vector3(0,1,0)),s=r.clone().inverse(),a=new i.Vector3,o=new i.Quaternion,function(){var t=l.object.position;return n.copy(t).sub(l.target),n.applyQuaternion(r),m.setFromVector3(n),l.autoRotate\u0026\u0026p===d.NONE\u0026\u0026C(2*Math.PI/60/60*l.autoRotateSpeed),l.enableDamping?(m.theta+=g.theta*l.dampingFactor,m.phi+=g.phi*l.dampingFactor):(m.theta+=g.theta,m.phi+=g.phi),m.theta=Math.max(l.minAzimuthAngle,Math.min(l.maxAzimuthAngle,m.theta)),m.phi=Math.max(l.minPolarAngle,Math.min(l.maxPolarAngle,m.phi)),m.makeSafe(),m.radius*=v,m.radius=Math.max(l.minDistance,Math.min(l.maxDistance,m.radius)),!0===l.enableDamping?l.target.addScaledVector(y,l.dampingFactor):l.target.add(y),n.setFromSpherical(m),n.applyQuaternion(s),t.copy(l.target).add(n),l.object.lookAt(l.target),!0===l.enableDamping?(g.theta*=1-l.dampingFactor,g.phi*=1-l.dampingFactor,y.multiplyScalar(1-l.dampingFactor)):(g.set(0,0,0),y.set(0,0,0)),v=1,!!(x||a.distanceToSquared(l.object.position)\u003ef||8*(1-o.dot(l.object.quaternion))\u003ef)\u0026\u0026(l.dispatchEvent(c),a.copy(l.object.position),o.copy(l.object.quaternion),x=!1,!0)}),this.dispose=function(){l.domElement.removeEventListener(\"contextmenu\",tt,!1),l.domElement.removeEventListener(\"mousedown\",q,!1),l.domElement.removeEventListener(\"wheel\",Z,!1),l.domElement.removeEventListener(\"touchstart\",Q,!1),l.domElement.removeEventListener(\"touchend\",$,!1),l.domElement.removeEventListener(\"touchmove\",K,!1),document.removeEventListener(\"mousemove\",X,!1),document.removeEventListener(\"mouseup\",Y,!1),l.domElement.removeEventListener(\"keydown\",J,!1)};var l=this,c={type:\"change\"},u={type:\"start\"},h={type:\"end\"},d={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},p=d.NONE,f=1e-6,m=new i.Spherical,g=new i.Spherical,v=1,y=new i.Vector3,x=!1,_=new i.Vector2,b=new i.Vector2,w=new i.Vector2,M=new i.Vector2,S=new i.Vector2,T=new i.Vector2,E=new i.Vector2,A=new i.Vector2,L=new i.Vector2;function R(){return Math.pow(.95,l.zoomSpeed)}function C(t){g.theta-=t}function P(t){g.phi-=t}var D,I=(D=new i.Vector3,function(t,e){D.setFromMatrixColumn(e,0),D.multiplyScalar(-t),y.add(D)}),N=function(){var t=new i.Vector3;return function(e,n){!0===l.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(l.object.up,t)),t.multiplyScalar(e),y.add(t)}}(),z=function(){var t=new i.Vector3;return function(e,n){var i=l.domElement;if(l.object.isPerspectiveCamera){var r=l.object.position;t.copy(r).sub(l.target);var s=t.length();s*=Math.tan(l.object.fov/2*Math.PI/180),I(2*e*s/i.clientHeight,l.object.matrix),N(2*n*s/i.clientHeight,l.object.matrix)}else l.object.isOrthographicCamera?(I(e*(l.object.right-l.object.left)/l.object.zoom/i.clientWidth,l.object.matrix),N(n*(l.object.top-l.object.bottom)/l.object.zoom/i.clientHeight,l.object.matrix)):(console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\"),l.enablePan=!1)}}();function B(t){l.object.isPerspectiveCamera?v/=t:l.object.isOrthographicCamera?(l.object.zoom=Math.max(l.minZoom,Math.min(l.maxZoom,l.object.zoom*t)),l.object.updateProjectionMatrix(),x=!0):(console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\"),l.enableZoom=!1)}function O(t){l.object.isPerspectiveCamera?v*=t:l.object.isOrthographicCamera?(l.object.zoom=Math.max(l.minZoom,Math.min(l.maxZoom,l.object.zoom/t)),l.object.updateProjectionMatrix(),x=!0):(console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\"),l.enableZoom=!1)}function F(t){_.set(t.clientX,t.clientY)}function H(t){M.set(t.clientX,t.clientY)}function U(t){if(1==t.touches.length)_.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);_.set(e,n)}}function G(t){if(1==t.touches.length)M.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);M.set(e,n)}}function k(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);E.set(0,i)}function V(t){if(1==t.touches.length)b.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);b.set(e,n)}w.subVectors(b,_).multiplyScalar(l.rotateSpeed);var i=l.domElement;C(2*Math.PI*w.x/i.clientHeight),P(2*Math.PI*w.y/i.clientHeight),_.copy(b)}function W(t){if(1==t.touches.length)S.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);S.set(e,n)}T.subVectors(S,M).multiplyScalar(l.panSpeed),z(T.x,T.y),M.copy(S)}function j(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);A.set(0,i),L.set(0,Math.pow(A.y/E.y,l.zoomSpeed)),B(L.y),E.copy(A)}function q(t){if(!1!==l.enabled){switch(t.preventDefault(),l.domElement.focus?l.domElement.focus():window.focus(),t.button){case 0:switch(l.mouseButtons.LEFT){case i.MOUSE.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===l.enablePan)return;H(t),p=d.PAN}else{if(!1===l.enableRotate)return;F(t),p=d.ROTATE}break;case i.MOUSE.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===l.enableRotate)return;F(t),p=d.ROTATE}else{if(!1===l.enablePan)return;H(t),p=d.PAN}break;default:p=d.NONE}break;case 1:switch(l.mouseButtons.MIDDLE){case i.MOUSE.DOLLY:if(!1===l.enableZoom)return;!function(t){E.set(t.clientX,t.clientY)}(t),p=d.DOLLY;break;default:p=d.NONE}break;case 2:switch(l.mouseButtons.RIGHT){case i.MOUSE.ROTATE:if(!1===l.enableRotate)return;F(t),p=d.ROTATE;break;case i.MOUSE.PAN:if(!1===l.enablePan)return;H(t),p=d.PAN;break;default:p=d.NONE}}p!==d.NONE\u0026\u0026(document.addEventListener(\"mousemove\",X,!1),document.addEventListener(\"mouseup\",Y,!1),l.dispatchEvent(u))}}function X(t){if(!1!==l.enabled)switch(t.preventDefault(),p){case d.ROTATE:if(!1===l.enableRotate)return;!function(t){b.set(t.clientX,t.clientY),w.subVectors(b,_).multiplyScalar(l.rotateSpeed);var e=l.domElement;C(2*Math.PI*w.x/e.clientHeight),P(2*Math.PI*w.y/e.clientHeight),_.copy(b),l.update()}(t);break;case d.DOLLY:if(!1===l.enableZoom)return;!function(t){A.set(t.clientX,t.clientY),L.subVectors(A,E),L.y\u003e0?B(R()):L.y\u003c0\u0026\u0026O(R()),E.copy(A),l.update()}(t);break;case d.PAN:if(!1===l.enablePan)return;!function(t){S.set(t.clientX,t.clientY),T.subVectors(S,M).multiplyScalar(l.panSpeed),z(T.x,T.y),M.copy(S),l.update()}(t)}}function Y(t){!1!==l.enabled\u0026\u0026(document.removeEventListener(\"mousemove\",X,!1),document.removeEventListener(\"mouseup\",Y,!1),l.dispatchEvent(h),p=d.NONE)}function Z(t){!1===l.enabled||!1===l.enableZoom||p!==d.NONE\u0026\u0026p!==d.ROTATE||(t.preventDefault(),t.stopPropagation(),l.dispatchEvent(u),function(t){t.deltaY\u003c0?O(R()):t.deltaY\u003e0\u0026\u0026B(R()),l.update()}(t),l.dispatchEvent(h))}function J(t){!1!==l.enabled\u0026\u0026!1!==l.enableKeys\u0026\u0026!1!==l.enablePan\u0026\u0026function(t){var e=!1;switch(t.keyCode){case l.keys.UP:z(0,l.keyPanSpeed),e=!0;break;case l.keys.BOTTOM:z(0,-l.keyPanSpeed),e=!0;break;case l.keys.LEFT:z(l.keyPanSpeed,0),e=!0;break;case l.keys.RIGHT:z(-l.keyPanSpeed,0),e=!0}e\u0026\u0026(t.preventDefault(),l.update())}(t)}function Q(t){if(!1!==l.enabled){switch(t.preventDefault(),t.touches.length){case 1:switch(l.touches.ONE){case i.TOUCH.ROTATE:if(!1===l.enableRotate)return;U(t),p=d.TOUCH_ROTATE;break;case i.TOUCH.PAN:if(!1===l.enablePan)return;G(t),p=d.TOUCH_PAN;break;default:p=d.NONE}break;case 2:switch(l.touches.TWO){case i.TOUCH.DOLLY_PAN:if(!1===l.enableZoom\u0026\u0026!1===l.enablePan)return;!function(t){l.enableZoom\u0026\u0026k(t),l.enablePan\u0026\u0026G(t)}(t),p=d.TOUCH_DOLLY_PAN;break;case i.TOUCH.DOLLY_ROTATE:if(!1===l.enableZoom\u0026\u0026!1===l.enableRotate)return;!function(t){l.enableZoom\u0026\u0026k(t),l.enableRotate\u0026\u0026U(t)}(t),p=d.TOUCH_DOLLY_ROTATE;break;default:p=d.NONE}break;default:p=d.NONE}p!==d.NONE\u0026\u0026l.dispatchEvent(u)}}function K(t){if(!1!==l.enabled)switch(t.preventDefault(),t.stopPropagation(),p){case d.TOUCH_ROTATE:if(!1===l.enableRotate)return;V(t),l.update();break;case d.TOUCH_PAN:if(!1===l.enablePan)return;W(t),l.update();break;case d.TOUCH_DOLLY_PAN:if(!1===l.enableZoom\u0026\u0026!1===l.enablePan)return;!function(t){l.enableZoom\u0026\u0026j(t),l.enablePan\u0026\u0026W(t)}(t),l.update();break;case d.TOUCH_DOLLY_ROTATE:if(!1===l.enableZoom\u0026\u0026!1===l.enableRotate)return;!function(t){l.enableZoom\u0026\u0026j(t),l.enableRotate\u0026\u0026V(t)}(t),l.update();break;default:p=d.NONE}}function $(t){!1!==l.enabled\u0026\u0026(l.dispatchEvent(h),p=d.NONE)}function tt(t){!1!==l.enabled\u0026\u0026t.preventDefault()}l.domElement.addEventListener(\"contextmenu\",tt,!1),l.domElement.addEventListener(\"mousedown\",q,!1),l.domElement.addEventListener(\"wheel\",Z,!1),l.domElement.addEventListener(\"touchstart\",Q,!1),l.domElement.addEventListener(\"touchend\",$,!1),l.domElement.addEventListener(\"touchmove\",K,!1),l.domElement.addEventListener(\"keydown\",J,!1),-1===l.domElement.tabIndex\u0026\u0026(l.domElement.tabIndex=0),this.update()},i.OrbitControls.prototype=Object.create(i.EventDispatcher.prototype),i.OrbitControls.prototype.constructor=i.OrbitControls,i.MapControls=function(t,e){i.OrbitControls.call(this,t,e),this.mouseButtons.LEFT=i.MOUSE.PAN,this.mouseButtons.RIGHT=i.MOUSE.ROTATE,this.touches.ONE=i.TOUCH.PAN,this.touches.TWO=i.TOUCH.DOLLY_ROTATE},i.MapControls.prototype=Object.create(i.EventDispatcher.prototype),i.MapControls.prototype.constructor=i.MapControls,t.exports=e.default=i.OrbitControls},function(t,e,n){\"use strict\";n.r(e);var i=n(0),r=n(1),s=n.n(r);const a=n(3),o=n(4),l=new i.Clock,c=new i.Scene,u=new i.Color(.8,.8,.688);c.background=new i.Color(.1,.1,.1);let h,d,p=[],f=[],m=[],g=[],v=[],y=[],x=[],_=[],b=[],w=[],M=[],S=0,T=[0];const E={time:{type:\"f\",value:1},resolution:{type:\"v2\",value:new i.Vector2},texture:{type:\"t\",value:null},textureResolution:{type:\"v2\",value:new i.Vector2},textureBlockSize:{type:\"f\",value:1},bgColor:{type:\"v3\",value:new i.Vector3(u.r,u.g,u.b)}},A=window.innerWidth/window.innerHeight,L=new i.PerspectiveCamera(45,A,1,1e4),R=window.innerHeight,C=R/Math.tan(45*Math.PI/360)/2;L.position.z=C;const P=new i.WebGLRenderer;document.body.appendChild(P.domElement);new s.a(L,P.domElement);const D=()=\u003e{l.getDelta();const t=l.elapsedTime;T[0]=t,E.time.value=T[0],M.forEach(t=\u003e{t.update()}),P.render(c,L),requestAnimationFrame(D)},I=()=\u003e{const t=window.innerWidth,e=window.innerHeight;N(t,e)},N=(t,e)=\u003e{L.aspect=t/e,L.updateProjectionMatrix(),E.resolution.value=new i.Vector2(t,e),P.setPixelRatio(window.devicePixelRatio),P.setSize(t,e)},z=()=\u003e{S=0,c.clear(),p=[],f=[],m=[],g=[],v=[],y=[],x=[],_=[],b=[],w=[];const t=t=\u003e(t%2==0?.219:.281)*window.innerWidth,e=e=\u003e{let n=0;for(let i=e-1;i\u003e=0;i--)n+=t(i);return n};for(let n=0;n\u003c4;n++)M.push(new B(-window.innerWidth/2+e(n),-R/2,t(n),R));(()=\u003e{h=new i.BufferGeometry,h.setIndex(g),h.setAttribute(\"index\",new i.Uint16BufferAttribute(p,1)),h.setAttribute(\"totalIndex\",new i.Float32BufferAttribute([...Array(p.length)].map((t,e)=\u003eS),1)),h.setAttribute(\"position\",new i.Float32BufferAttribute(f,3)),h.setAttribute(\"uv\",new i.Uint16BufferAttribute(m,2)),h.setAttribute(\"size\",new i.Float32BufferAttribute(x,2)),h.setAttribute(\"padding\",new i.Float32BufferAttribute(v,2)),h.setAttribute(\"direction\",new i.Float32BufferAttribute(_,1)),h.setAttribute(\"ratio\",new i.Float32BufferAttribute(b,1)),h.setAttribute(\"weight\",new i.Float32BufferAttribute(w,2));const t=new i.RawShaderMaterial({uniforms:E,vertexShader:a,fragmentShader:o,transparent:!0,blending:i.NormalBlending,depthTest:!0,wireframe:!1,side:i.DoubleSide,glslVersion:i.GLSL1});d=new i.Mesh(h,t),c.add(d)})()};class B{constructor(t,e,n,i){this.x=t,this.y=e,this.z=0,this.w=n,this.h=i,this.ratio=.5+.1*(2*Math.random()-1),this.id=-1,this.impulse=0,this.draw(!1)}update(t=null){t\u0026\u0026(this.x=t.x,this.y=t.y,this.w=t.w,this.h=t.h,this.impulse=t.impulse),this.draw(!0)}getPositionAndSize(t,e){let n,i,r,s,a;switch(t){case 0:n=0===e||3===e?this.x+0:this.x+this.w-0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=this.z,s=this.w-0,a=this.h-0;break;case 1:n=this.x+this.w-0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=0===e||3===e?this.z:0,s=this.z,a=this.h-0;break;case 2:n=0===e||3===e?this.x+0:this.x+this.w-0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=0,s=this.w-0,a=this.h-0;break;case 3:n=this.x+0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=0===e||3===e?0:this.z,s=this.z,a=this.h-0;break;case 4:n=0===e||3===e?this.x+0:this.x+this.w-0,i=this.y+this.h-0,r=0===e||1===e?this.z:0,s=this.w-0,a=this.z;break;case 5:n=0===e||3===e?this.x+0:this.x+this.w-0,i=this.y+0,r=0===e||1===e?this.z:0,s=this.w-0,a=this.z}return{x:n,y:i,z:r,w:s,h:a}}draw(t=!1){if(t){const t=this.getScreenPosition();for(let e=0;e\u003c1;e++)for(let n=0;n\u003c4;n++){const i=1*this.id*4+4*e+n,r=h.attributes.position,{x:s,y:a,z:o,w:l,h:c}=this.getPositionAndSize(e,n);r.setXYZ(i,s,a,o),r.needsUpdate=!0;const u=h.attributes.size;u.setXY(i,l,c),u.needsUpdate=!0;const d=h.attributes.ratio;d.setX(i,this.impulse),d.needsUpdate=!0;const p=h.attributes.direction;p.setX(i,this.getDirection()),p.needsUpdate=!0;const f=h.attributes.weight;f.setXY(i,t.x,t.y),f.needsUpdate=!0}}else{this.id=S;const t=this.getScreenPosition();for(let e=0;e\u003c1;e++){for(let n=0;n\u003c4;n++){const{x:i,y:r,z:s,w:a,h:o}=this.getPositionAndSize(e,n);f.push(i,r,s),x.push(a,o),_.push(this.getDirection()),b.push(this.ratio),w.push(t.x,t.y)}for(let t=0;t\u003c4;t++)p.push(this.id),v.push(0,0);m.push(0,0,1,0,1,1,0,1);const n=1*this.id*4+4*e;g.push(n+0,n+1,n+2,n+2,n+3,n+0)}S++}}getDirection(){return Math.abs(this.w-this.h)\u003c100?-1:this.w\u003ethis.h?1:0}getCenter(){return{x:this.x+this.w/2,y:this.y+this.h/2}}getScreenPosition(){const t=this.getCenter(),e=window.innerWidth,n=R;return{x:(t.x+e/2)/e,y:(t.y+n/2)/n}}}window.addEventListener(\"resize\",I),z(),I(),D()},function(t,e){t.exports=\"precision mediump float;\\n\\nconst float PI = 3.1415926535897932384626433832795;\\n\\nattribute float index;\\nattribute float totalIndex;\\nattribute vec3 position;\\nattribute vec3 translate;\\nattribute vec2 uv;\\nattribute vec2 size;\\nattribute vec2 padding;\\nattribute vec3 color;\\nattribute float direction;\\nattribute float ratio;\\nattribute vec2 weight;\\n\\nuniform mat4 modelViewMatrix;\\nuniform mat4 projectionMatrix;\\nuniform float time;\\nuniform float uWidth;\\nuniform float uHeight;\\nuniform float duration;\\n\\nvarying float vIndex;\\nvarying float vTotalIndex;\\nvarying vec2 vUv;\\nvarying vec3 vColor;\\nvarying vec2 vResolution;\\nvarying float vDirection;\\nvarying float vRatio;\\nvarying vec2 vWeight;\\n\\nvoid main() {\\n vIndex = index;\\n vTotalIndex = totalIndex;\\n vUv = uv;\\n vColor = color;\\n // Actual resolution of rect by vertex with padding.\\n vResolution = vec2(size.x - padding.x, size.y - padding.y);\\n vDirection = direction;\\n vRatio = ratio;\\n vWeight = weight;\\n\\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\\n gl_Position = projectionMatrix * mvPosition;\\n}\"},function(t,e){t.exports=\"precision mediump float;\\n\\nconst float PI = 3.1415926535897932384626433832795;\\n\\nuniform vec2 resolution;\\nuniform float time;\\nuniform sampler2D texture;\\nuniform vec2 textureResolution;\\n\\nvarying float vIndex;\\nvarying float vTotalIndex;\\nvarying vec2 vUv;\\nvarying vec3 vColor;\\nvarying vec2 vResolution;\\nvarying float vDirection;\\nvarying float vRatio;\\nvarying vec2 vWeight;\\n\\n#define PI acos(-1.0)\\n#define ITER 64.0\\n\\nstruct obj{\\n float d;\\n vec3 c_shadow;\\n vec3 c_light;\\n};\\n\\nmat2 rot(float a) {\\n return mat2(cos(a), sin(a), -sin(a), cos(a));\\n}\\n\\nfloat rand(vec2 n) {\\n return fract(sin(dot(n, vec2(12.9898, 4.1414))) * 43758.5453);\\n}\\n\\nvec2 getUV() {\\n vec2 uv = (vUv.xy * vResolution * 2.0 - vResolution.xy) / min(vResolution.x, vResolution.y);\\n return uv;\\n}\\n\\nfloat atan2(float y, float x){\\n return x == 0.0 ? sign(y) * PI / 2.0 : atan(y, x);\\n}\\n\\nfloat radian(float degree) {\\n return degree * PI / 180.0;\\n}\\n\\nvec2 round(vec2 p) {\\n return floor(p + 0.5);\\n}\\n\\nvec2 crep(vec2 p, float c, float l) {\\n return p - c * clamp(round(p / c), -l, l);\\n}\\n\\nvec2 repetition(vec2 p, float c) {\\n return p - c * round(p / c);\\n}\\n\\nvec2 getWorldUV() {\\n vec2 weight = (vWeight * resolution * 2.0 - resolution.xy) / min(resolution.x, resolution.y);\\n return weight;\\n}\\n\\nfloat sdCappedCylinder(vec3 p, float h, float r) {\\n vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(h,r);\\n return min(max(d.x,d.y),0.0) + length(max(d,0.0));\\n}\\n\\nfloat sdSphere(vec3 p, float s) {\\n return length(p) - s;\\n}\\n\\nfloat sdTorus(vec3 p, vec2 t) {\\n vec2 q = vec2(length(p.xz)-t.x,p.y);\\n return length(q)-t.y;\\n}\\n\\nfloat box(vec3 p, vec3 c) {\\n vec3 q = abs(p) - c;\\n return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0);\\n}\\n\\nfloat getId() {\\n return floor(mod(vIndex, 4.0));\\n}\\n\\nvec3 getBGColor() {\\n float id = getId();\\n vec3 col = vec3(0.0);\\n vec3 col2 = vec3(0.0);\\n\\n if (id == 0.0) {\\n col = vec3(1.0, 0.01, 0.01);\\n col2 = vec3(0.9, 0.3, 0.1);\\n } else if (id == 1.0) {\\n col = vec3(0.7, 0.99, 0.01);\\n col2 = vec3(0.7, 0.99, 0.01);\\n } else if (id == 2.0) {\\n col = vec3(0.0, 0.69, 0.01);\\n col2 = vec3(0.0, 0.99, 0.01);\\n } else {\\n col = vec3(0.01, 0.01, 1.0);\\n col2 = vec3(0.0, 0.3, 0.9);\\n }\\n vec2 uv = getUV();\\n\\n col = mix(col2, col, length(uv.y));\\n\\n return col;\\n}\\n\\nfloat ease(float x) {\\n float contrast = 8.0; //4.0,8.0,16.0\\n return 1.0 / (1.0 + exp(-contrast * (x - 0.5)));\\n}\\n\\nobj prim(vec3 p) {\\n float id = getId();\\n\\n // primitive\\n float velocity = 0.4;\\n float size = velocity * 0.11;\\n float per = size * 4.0;\\n vec2 eachId = round(p.xz / per);\\n p.xz = repetition(p.xz, per);\\n vec3 p2 = p;\\n float d1 = 0.0;\\n float d2 = 0.0;\\n\\n vec3 shadow = vec3(0.0);\\n vec3 light = vec3(0.0);\\n\\n if (id == 0.0) {\\n shadow = vec3(0.3, 0.0, 1.0);\\n light = vec3(0.0, 1.0, 0.0);\\n d1 = sdCappedCylinder(p, size, size);\\n p2.xz *= rot(time);\\n p2.xy *= rot(radian(90.0));\\n d2 = sdCappedCylinder(p2, size * 0.5, size * 1.65);\\n } else if (id == 1.0) {\\n shadow = vec3(0.4, 0.7, 0.4);\\n light = vec3(0.1, 0.0, 0.99);\\n d1 = sdCappedCylinder(p, size, size);\\n p2.y += sin(time * 2.4 + length(eachId)) * 0.05;\\n d2 = sdCappedCylinder(p2, size * 0.5, size * 2.5);\\n } else if (id == 2.0) {\\n shadow = vec3(0.3, 0.0, 0.05);\\n light = vec3(0.99, 0.0, 0.69);\\n d1 = sdCappedCylinder(p, size, size * 0.2);\\n p2.xz *= rot(time * 2.0 + length(eachId));\\n p2.x += 0.015;\\n d2 = sdCappedCylinder(p2, size * 0.18, size * 2.1);\\n } else {\\n shadow = vec3(0.6, 0.2, 0.3);\\n light = vec3(1.0, 1.0, 0.0);\\n d1 = sdCappedCylinder(p, size * 1.4 * (sin(time * 2.0 + length(eachId)) * 0.5 + 0.5), size);\\n// p2.xz = repetition(p2.xz, per * 0.5);\\n d2 = sdCappedCylinder(p2, size * 0.18, size * 2.1);\\n }\\n\\n float d = min(d1, d2);\\n\\n return obj(d, shadow, light);\\n}\\n\\nobj SDF(vec3 p) {\\n vec3 pp = vec3(0.0);\\n vec2 worldUV = getWorldUV();\\n p.yz *= rot(radian(-60.0));\\n p.xz *= rot(PI * 2.0 / 8.0);\\n\\n obj scene = prim(p + vec3(0.0));\\n return scene;\\n}\\n\\nvec3 getNorm(vec3 p) {\\n vec2 eps = vec2(0.001, 0.0);\\n return normalize(SDF(p).d - vec3(SDF(p - eps.xyy).d, SDF(p - eps.yxy).d, SDF(p - eps.yyx).d));\\n}\\n\\nvoid main() {\\n vec2 uv = getUV();\\n\\n bool isHit = false;\\n vec3 ro = vec3(uv * 0.3, -1.0),\\n rd = vec3(0.0, 0.0, 1.0),\\n p = ro,\\n col = getBGColor(),\\n l = normalize(vec3(1.0, 2.0, -2.0));\\n obj o;\\n\\n for (float i = 0.0; i \u003c ITER; i++) {\\n vec3 p2 = p;\\n o = SDF(p);\\n if (o.d \u003c 0.001) {\\n isHit = true;\\n break;\\n }\\n p += o.d * rd;\\n }\\n\\n if (isHit) {\\n vec3 n = getNorm(p);\\n float lighting = max(dot(n, l), 0.0);\\n col = mix(o.c_shadow, o.c_light, lighting);\\n }\\n\\n vec3 color = vec3(sqrt(col));\\n\\n gl_FragColor = vec4(color, 1.0);\\n}\"}]);","artId":"ce6anisn70rh3gnts6jg","libraries":[]}],"like":1,"thumbFileName":"ce6anisn70rh3gnts6jg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce6anisn70rh3gnts6jg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVqfDbBC8gKzdTS7uCBVy7egfSLo869ybwwfR6x19PeE4","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce69fpcn70rh3gnts1g0","title":"Form of completion","description":"This is a long horizontal generative art created for CURATION_FREE.","createdAt":1670158313,"updatedAt":1670158313,"user":{"id":"frbTvj363JQYvSV4nuD9dxGVPq33","customId":"frbTvj363JQYvSV4nuD9dxGVPq33","name":"Lisa Sekaida 世界田りさ","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/frbTvj363JQYvSV4nuD9dxGVPq33.jpg","createdAt":1643083264007,"updatedAt":1716332663248},"codes":[{"id":"ce69fqcn70rh3gnts1h0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n\t\u003cmeta charset=\"utf-8\" /\u003e\n\t\u003c!-- keep the line below for OpenProcessing compatibility --\u003e\n\t\u003cscript src=\"https://openprocessing.org/openprocessing_sketch.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"mySketch.js\"\u003e\u003c/script\u003e\n\t\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e \n\u003c/body\u003e\n\n\u003c/html\u003e","artId":"ce69fpcn70rh3gnts1g0","libraries":[]},{"id":"ce69fqcn70rh3gnts1hg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce69fpcn70rh3gnts1g0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce69fqcn70rh3gnts1i0","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n colorMode(HSB, s = 11012, 100, 100, 100)\n background(0);\n frameRate(1);\n noFill();\n}\n\nfunction draw() {\n\tvar r = random;\n\tfor (let y = 0; y \u003c 1080; y += 100) {\n\t\tfor (let x = 0; x \u003c 11012; x += 100) {\n\t\t\tstroke(255);\n\t\t\tstrokeWeight(2);\n\t\t\tfill(x + r(s * 0.2), r(100), r(100), 32);\n\t\t\tellipseMode(CENTER);\n\t\t\tellipse(x, y, y / r(100));\n\t\t\tstroke(255);\n\t\t\tfill(x + r(s * 0.2), r(100), r(100), 32);\n\t\t\trectMode(CENTER);\n\t\t\trect(x, y, y / r(100));\n\t\t}\n\t}\n}","artId":"ce69fpcn70rh3gnts1g0","libraries":[]}],"like":3,"thumbFileName":"ce69fpcn70rh3gnts1g0.jpg","selectedThumbFileName":"ce69fpcn70rh3gnts1g0.jpg","thumbnailFileUrl":"","resourceFileName":"ce69fpcn70rh3gnts1g0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXSUqK8nJwhn73e21Xn6B8LtzY4iYxSceUewdqUP691sU","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce685asn70rh3gntrq80","title":"Untitled #4","description":"","createdAt":1670152877,"updatedAt":1670152877,"user":{"id":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","customId":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","name":"Chayapon (Tae)","biography":"Twitter(X) : https://x.com/tayxt50","image":"","createdAt":1669660770663,"updatedAt":1733322529959},"codes":[{"id":"ce685bcn70rh3gntrq90","type":0,"text":"","artId":"ce685asn70rh3gntrq80","libraries":[]},{"id":"ce685bcn70rh3gntrq9g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce685asn70rh3gntrq80","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce685bcn70rh3gntrqa0","type":2,"text":"let dg = 60;\nlet margin = 10;\nlet gap = 17;\n\nfunction setup() {\n createCanvas(11012, 1080);\n angleMode(DEGREES);\n}\n\nfunction draw() {\n let num_tilesX = ceil(width / dg);\n let num_tilesY = 4;\n\n let myCanvas_w = width - 2 * margin - (num_tilesX - 1) * gap;\n let myCanvas_h = height - 2 * margin - (num_tilesY - 1) * gap;\n let scl_w = myCanvas_w / num_tilesX;\n let scl_h = myCanvas_h / num_tilesY;\n\n background(\"#000000\");\n noStroke();\n fill(\"#fffff\");\n\n for (let j = 0; j \u003c num_tilesY; j++) {\n for (let i = 0; i \u003c num_tilesX; i++) {\n push();\n let p = 3*frameCount + map(5*i,0,num_tilesX,0,360*20);\n let m = sin(p);\n if(j%2 != 0){\n m = cos(p);\n }\n let mh = map(m, -1, 1, -scl_h / 4, scl_h / 4);\n let posX = margin + i * (scl_w + gap) + scl_w / 2;\n let posY = margin + j * (scl_h + gap) + scl_h / 2 + mh;\n\n translate(posX, posY);\n rotate(20*frameCount);\n rectMode(CENTER);\n for (let k = 0; k \u003c 180; k += 45) {\n rotate(k);\n let scl = map(m, -1, 1, scl_w, scl_w * 0.6);\n rect(0, 0, scl, scl * 0.05);\n }\n pop();\n }\n }\n}","artId":"ce685asn70rh3gntrq80","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.min.js"]}],"like":0,"thumbFileName":"ce685asn70rh3gntrq80.png","selectedThumbFileName":"ce685asn70rh3gntrq80.png","thumbnailFileUrl":"","resourceFileName":"ce685asn70rh3gntrq80.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUhPgnHi9wiSPu3g1XfzjFy5CQosfcZM1hTD9VC1bpsmL","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce672rkn70rlpj69dm40","title":"Untitled #3","description":"","createdAt":1670148470,"updatedAt":1670156409,"user":{"id":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","customId":"ivkx3Qpqf8NSSW2iaRLVScXkR7H2","name":"Chayapon (Tae)","biography":"Twitter(X) : https://x.com/tayxt50","image":"","createdAt":1669660770663,"updatedAt":1733322529959},"codes":[{"id":"ce672tkn70rlpj69dm50","type":0,"text":"","artId":"ce672rkn70rlpj69dm40","libraries":[]},{"id":"ce672tkn70rlpj69dm5g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce672rkn70rlpj69dm40","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce672tkn70rlpj69dm60","type":2,"text":"let dg = 60;\nlet margin = 10;\nlet gap = 17;\n\nfunction setup() {\n createCanvas(11012, 1080);\n angleMode(DEGREES);\n}\n\nfunction draw() {\n let num_tilesX = ceil(width / dg);\n let num_tilesY = 5;\n\n let myCanvas_w = width - 2 * margin - (num_tilesX - 1) * gap;\n let myCanvas_h = height - 2 * margin - (num_tilesY - 1) * gap;\n let scl_w = myCanvas_w / num_tilesX;\n let scl_h = myCanvas_h / num_tilesY;\n\n background(\"#000000\");\n noStroke();\n fill(\"#fffff\");\n\n for (let j = 0; j \u003c num_tilesY; j++) {\n for (let i = 0; i \u003c num_tilesX; i++) {\n push();\n let p = 3*frameCount + map(i,0,num_tilesX,0,360*20);\n let m = sin(p);\n if(j%2 != 0){\n m = cos(p);\n }\n let mh = map(m, -1, 1, -scl_h / 4, scl_h / 4);\n let posX = margin + i * (scl_w + gap) + scl_w / 2;\n let posY = margin + j * (scl_h + gap) + scl_h / 2 + mh;\n\n translate(posX, posY);\n rotate(20*frameCount);\n rectMode(CENTER);\n for (let k = 0; k \u003c 180; k += 45) {\n rotate(k);\n let scl = map(m, -1, 1, scl_w, scl_w * 0.6);\n rect(0, 0, scl, scl * 0.05);\n }\n pop();\n }\n }\n}","artId":"ce672rkn70rlpj69dm40","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.min.js"]}],"like":0,"thumbFileName":"ce672rkn70rlpj69dm40.png","selectedThumbFileName":"ce672rkn70rlpj69dm40.png","thumbnailFileUrl":"","resourceFileName":"ce672rkn70rlpj69dm40.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmY8G1qos8yEcF6j4UbjDxm61k6gGVyewcybQcgnzmJrZF","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce66pasn70rlpj69djmg","title":"ping-pong rally","description":"","createdAt":1670147247,"updatedAt":1670147247,"user":{"id":"9Bqy2IWae5gAXfMSM4cHStP2dxP2","customId":"r21nomi","name":"NIINOMI","biography":"Creative Coder.\nI mainly use GLSL, WebGL.\nRecently, TouchDesigner, Houdini and Unity.\n\nhttps://niinomi.art","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/9Bqy2IWae5gAXfMSM4cHStP2dxP2.jpg","createdAt":1548912457000,"updatedAt":1735357681608},"codes":[{"id":"ce66pbsn70rlpj69djng","type":0,"text":"","artId":"ce66pasn70rlpj69djmg","libraries":[]},{"id":"ce66pbsn70rlpj69djo0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce66pasn70rlpj69djmg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce66pbsn70rlpj69djog","type":2,"text":"!function(t){var e={};function n(i){if(e[i])return e[i].exports;var r=e[i]={i:i,l:!1,exports:{}};return t[i].call(r.exports,r,r.exports,n),r.l=!0,r.exports}n.m=t,n.c=e,n.d=function(t,e,i){n.o(t,e)||Object.defineProperty(t,e,{enumerable:!0,get:i})},n.r=function(t){\"undefined\"!=typeof Symbol\u0026\u0026Symbol.toStringTag\u0026\u0026Object.defineProperty(t,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(t,\"__esModule\",{value:!0})},n.t=function(t,e){if(1\u0026e\u0026\u0026(t=n(t)),8\u0026e)return t;if(4\u0026e\u0026\u0026\"object\"==typeof t\u0026\u0026t\u0026\u0026t.__esModule)return t;var i=Object.create(null);if(n.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:t}),2\u0026e\u0026\u0026\"string\"!=typeof t)for(var r in t)n.d(i,r,function(e){return t[e]}.bind(null,r));return i},n.n=function(t){var e=t\u0026\u0026t.__esModule?function(){return t.default}:function(){return t};return n.d(e,\"a\",e),e},n.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},n.p=\"\",n(n.s=2)}([function(t,e,n){\"use strict\";n.r(e),n.d(e,\"ACESFilmicToneMapping\",(function(){return nt})),n.d(e,\"AddEquation\",(function(){return T})),n.d(e,\"AddOperation\",(function(){return Q})),n.d(e,\"AdditiveAnimationBlendMode\",(function(){return qe})),n.d(e,\"AdditiveBlending\",(function(){return b})),n.d(e,\"AlphaFormat\",(function(){return Bt})),n.d(e,\"AlwaysDepth\",(function(){return k})),n.d(e,\"AlwaysStencilFunc\",(function(){return Sn})),n.d(e,\"AmbientLight\",(function(){return Dh})),n.d(e,\"AmbientLightProbe\",(function(){return td})),n.d(e,\"AnimationClip\",(function(){return Iu})),n.d(e,\"AnimationLoader\",(function(){return Gu})),n.d(e,\"AnimationMixer\",(function(){return Cd})),n.d(e,\"AnimationObjectGroup\",(function(){return Ld})),n.d(e,\"AnimationUtils\",(function(){return _u})),n.d(e,\"ArcCurve\",(function(){return Zu})),n.d(e,\"ArrayCamera\",(function(){return qo})),n.d(e,\"ArrowHelper\",(function(){return xp})),n.d(e,\"Audio\",(function(){return hd})),n.d(e,\"AudioAnalyser\",(function(){return vd})),n.d(e,\"AudioContext\",(function(){return Qh})),n.d(e,\"AudioListener\",(function(){return ud})),n.d(e,\"AudioLoader\",(function(){return Kh})),n.d(e,\"AxesHelper\",(function(){return _p})),n.d(e,\"AxisHelper\",(function(){return _f})),n.d(e,\"BackSide\",(function(){return m})),n.d(e,\"BasicDepthPacking\",(function(){return sn})),n.d(e,\"BasicShadowMap\",(function(){return u})),n.d(e,\"BinaryTextureLoader\",(function(){return Tf})),n.d(e,\"Bone\",(function(){return Pl})),n.d(e,\"BooleanKeyframeTrack\",(function(){return Eu})),n.d(e,\"BoundingBoxHelper\",(function(){return bf})),n.d(e,\"Box2\",(function(){return Ud})),n.d(e,\"Box3\",(function(){return ui})),n.d(e,\"Box3Helper\",(function(){return fp})),n.d(e,\"BoxBufferGeometry\",(function(){return Ss})),n.d(e,\"BoxGeometry\",(function(){return Ss})),n.d(e,\"BoxHelper\",(function(){return pp})),n.d(e,\"BufferAttribute\",(function(){return Or})),n.d(e,\"BufferGeometry\",(function(){return rs})),n.d(e,\"BufferGeometryLoader\",(function(){return Uh})),n.d(e,\"ByteType\",(function(){return Tt})),n.d(e,\"Cache\",(function(){return zu})),n.d(e,\"Camera\",(function(){return Rs})),n.d(e,\"CameraHelper\",(function(){return up})),n.d(e,\"CanvasRenderer\",(function(){return Af})),n.d(e,\"CanvasTexture\",(function(){return oc})),n.d(e,\"CatmullRomCurve3\",(function(){return eh})),n.d(e,\"CineonToneMapping\",(function(){return et})),n.d(e,\"CircleBufferGeometry\",(function(){return cc})),n.d(e,\"CircleGeometry\",(function(){return cc})),n.d(e,\"ClampToEdgeWrapping\",(function(){return dt})),n.d(e,\"Clock\",(function(){return rd})),n.d(e,\"Color\",(function(){return Ir})),n.d(e,\"ColorKeyframeTrack\",(function(){return Au})),n.d(e,\"CompressedTexture\",(function(){return ac})),n.d(e,\"CompressedTextureLoader\",(function(){return ku})),n.d(e,\"ConeBufferGeometry\",(function(){return hc})),n.d(e,\"ConeGeometry\",(function(){return hc})),n.d(e,\"CubeCamera\",(function(){return Ps})),n.d(e,\"CubeReflectionMapping\",(function(){return st})),n.d(e,\"CubeRefractionMapping\",(function(){return at})),n.d(e,\"CubeTexture\",(function(){return Ds})),n.d(e,\"CubeTextureLoader\",(function(){return Wu})),n.d(e,\"CubeUVReflectionMapping\",(function(){return ct})),n.d(e,\"CubeUVRefractionMapping\",(function(){return ut})),n.d(e,\"CubicBezierCurve\",(function(){return sh})),n.d(e,\"CubicBezierCurve3\",(function(){return ah})),n.d(e,\"CubicInterpolant\",(function(){return wu})),n.d(e,\"CullFaceBack\",(function(){return o})),n.d(e,\"CullFaceFront\",(function(){return l})),n.d(e,\"CullFaceFrontBack\",(function(){return c})),n.d(e,\"CullFaceNone\",(function(){return a})),n.d(e,\"Curve\",(function(){return Xu})),n.d(e,\"CurvePath\",(function(){return ph})),n.d(e,\"CustomBlending\",(function(){return S})),n.d(e,\"CustomToneMapping\",(function(){return it})),n.d(e,\"CylinderBufferGeometry\",(function(){return uc})),n.d(e,\"CylinderGeometry\",(function(){return uc})),n.d(e,\"Cylindrical\",(function(){return Fd})),n.d(e,\"DataTexture\",(function(){return Dl})),n.d(e,\"DataTexture2DArray\",(function(){return ia})),n.d(e,\"DataTexture3D\",(function(){return ra})),n.d(e,\"DataTextureLoader\",(function(){return ju})),n.d(e,\"DataUtils\",(function(){return Mp})),n.d(e,\"DecrementStencilOp\",(function(){return pn})),n.d(e,\"DecrementWrapStencilOp\",(function(){return mn})),n.d(e,\"DefaultLoadingManager\",(function(){return Ou})),n.d(e,\"DepthFormat\",(function(){return kt})),n.d(e,\"DepthStencilFormat\",(function(){return Vt})),n.d(e,\"DepthTexture\",(function(){return lc})),n.d(e,\"DirectionalLight\",(function(){return Ph})),n.d(e,\"DirectionalLightHelper\",(function(){return op})),n.d(e,\"DiscreteInterpolant\",(function(){return Su})),n.d(e,\"DodecahedronBufferGeometry\",(function(){return pc})),n.d(e,\"DodecahedronGeometry\",(function(){return pc})),n.d(e,\"DoubleSide\",(function(){return g})),n.d(e,\"DstAlphaFactor\",(function(){return B})),n.d(e,\"DstColorFactor\",(function(){return F})),n.d(e,\"DynamicBufferAttribute\",(function(){return uf})),n.d(e,\"DynamicCopyUsage\",(function(){return Dn})),n.d(e,\"DynamicDrawUsage\",(function(){return En})),n.d(e,\"DynamicReadUsage\",(function(){return Rn})),n.d(e,\"EdgesGeometry\",(function(){return yc})),n.d(e,\"EdgesHelper\",(function(){return wf})),n.d(e,\"EllipseCurve\",(function(){return Yu})),n.d(e,\"EqualDepth\",(function(){return j})),n.d(e,\"EqualStencilFunc\",(function(){return xn})),n.d(e,\"EquirectangularReflectionMapping\",(function(){return ot})),n.d(e,\"EquirectangularRefractionMapping\",(function(){return lt})),n.d(e,\"Euler\",(function(){return Yi})),n.d(e,\"EventDispatcher\",(function(){return Bn})),n.d(e,\"ExtrudeBufferGeometry\",(function(){return Xc})),n.d(e,\"ExtrudeGeometry\",(function(){return Xc})),n.d(e,\"FaceColors\",(function(){return Kp})),n.d(e,\"FileLoader\",(function(){return Uu})),n.d(e,\"FlatShading\",(function(){return v})),n.d(e,\"Float16BufferAttribute\",(function(){return jr})),n.d(e,\"Float32Attribute\",(function(){return yf})),n.d(e,\"Float32BufferAttribute\",(function(){return qr})),n.d(e,\"Float64Attribute\",(function(){return xf})),n.d(e,\"Float64BufferAttribute\",(function(){return Xr})),n.d(e,\"FloatType\",(function(){return Ct})),n.d(e,\"Fog\",(function(){return el})),n.d(e,\"FogExp2\",(function(){return tl})),n.d(e,\"Font\",(function(){return Xh})),n.d(e,\"FontLoader\",(function(){return Zh})),n.d(e,\"FrontSide\",(function(){return f})),n.d(e,\"Frustum\",(function(){return Bs})),n.d(e,\"GLBufferAttribute\",(function(){return Id})),n.d(e,\"GLSL1\",(function(){return Nn})),n.d(e,\"GLSL3\",(function(){return zn})),n.d(e,\"GammaEncoding\",(function(){return Ke})),n.d(e,\"GreaterDepth\",(function(){return X})),n.d(e,\"GreaterEqualDepth\",(function(){return q})),n.d(e,\"GreaterEqualStencilFunc\",(function(){return Mn})),n.d(e,\"GreaterStencilFunc\",(function(){return bn})),n.d(e,\"GridHelper\",(function(){return np})),n.d(e,\"Group\",(function(){return Xo})),n.d(e,\"HalfFloatType\",(function(){return Pt})),n.d(e,\"HemisphereLight\",(function(){return vh})),n.d(e,\"HemisphereLightHelper\",(function(){return ep})),n.d(e,\"HemisphereLightProbe\",(function(){return $h})),n.d(e,\"IcosahedronBufferGeometry\",(function(){return Zc})),n.d(e,\"IcosahedronGeometry\",(function(){return Zc})),n.d(e,\"ImageBitmapLoader\",(function(){return jh})),n.d(e,\"ImageLoader\",(function(){return Vu})),n.d(e,\"ImageUtils\",(function(){return Kn})),n.d(e,\"ImmediateRenderObject\",(function(){return Wd})),n.d(e,\"IncrementStencilOp\",(function(){return dn})),n.d(e,\"IncrementWrapStencilOp\",(function(){return fn})),n.d(e,\"InstancedBufferAttribute\",(function(){return Hh})),n.d(e,\"InstancedBufferGeometry\",(function(){return Fh})),n.d(e,\"InstancedInterleavedBuffer\",(function(){return Dd})),n.d(e,\"InstancedMesh\",(function(){return Ul})),n.d(e,\"Int16Attribute\",(function(){return ff})),n.d(e,\"Int16BufferAttribute\",(function(){return Gr})),n.d(e,\"Int32Attribute\",(function(){return gf})),n.d(e,\"Int32BufferAttribute\",(function(){return Vr})),n.d(e,\"Int8Attribute\",(function(){return hf})),n.d(e,\"Int8BufferAttribute\",(function(){return Fr})),n.d(e,\"IntType\",(function(){return Lt})),n.d(e,\"InterleavedBuffer\",(function(){return il})),n.d(e,\"InterleavedBufferAttribute\",(function(){return sl})),n.d(e,\"Interpolant\",(function(){return bu})),n.d(e,\"InterpolateDiscrete\",(function(){return He})),n.d(e,\"InterpolateLinear\",(function(){return Ue})),n.d(e,\"InterpolateSmooth\",(function(){return Ge})),n.d(e,\"InvertStencilOp\",(function(){return gn})),n.d(e,\"JSONLoader\",(function(){return Lf})),n.d(e,\"KeepStencilOp\",(function(){return un})),n.d(e,\"KeyframeTrack\",(function(){return Tu})),n.d(e,\"LOD\",(function(){return Sl})),n.d(e,\"LatheBufferGeometry\",(function(){return Jc})),n.d(e,\"LatheGeometry\",(function(){return Jc})),n.d(e,\"Layers\",(function(){return Zi})),n.d(e,\"LensFlare\",(function(){return Cf})),n.d(e,\"LessDepth\",(function(){return V})),n.d(e,\"LessEqualDepth\",(function(){return W})),n.d(e,\"LessEqualStencilFunc\",(function(){return _n})),n.d(e,\"LessStencilFunc\",(function(){return yn})),n.d(e,\"Light\",(function(){return gh})),n.d(e,\"LightProbe\",(function(){return zh})),n.d(e,\"Line\",(function(){return Xl})),n.d(e,\"Line3\",(function(){return Vd})),n.d(e,\"LineBasicMaterial\",(function(){return Gl})),n.d(e,\"LineCurve\",(function(){return oh})),n.d(e,\"LineCurve3\",(function(){return lh})),n.d(e,\"LineDashedMaterial\",(function(){return yu})),n.d(e,\"LineLoop\",(function(){return Ql})),n.d(e,\"LinePieces\",(function(){return Jp})),n.d(e,\"LineSegments\",(function(){return Jl})),n.d(e,\"LineStrip\",(function(){return Zp})),n.d(e,\"LinearEncoding\",(function(){return Je})),n.d(e,\"LinearFilter\",(function(){return xt})),n.d(e,\"LinearInterpolant\",(function(){return Mu})),n.d(e,\"LinearMipMapLinearFilter\",(function(){return Mt})),n.d(e,\"LinearMipMapNearestFilter\",(function(){return bt})),n.d(e,\"LinearMipmapLinearFilter\",(function(){return wt})),n.d(e,\"LinearMipmapNearestFilter\",(function(){return _t})),n.d(e,\"LinearToneMapping\",(function(){return $})),n.d(e,\"Loader\",(function(){return Fu})),n.d(e,\"LoaderUtils\",(function(){return Oh})),n.d(e,\"LoadingManager\",(function(){return Bu})),n.d(e,\"LogLuvEncoding\",(function(){return tn})),n.d(e,\"LoopOnce\",(function(){return Be})),n.d(e,\"LoopPingPong\",(function(){return Fe})),n.d(e,\"LoopRepeat\",(function(){return Oe})),n.d(e,\"LuminanceAlphaFormat\",(function(){return Ut})),n.d(e,\"LuminanceFormat\",(function(){return Ht})),n.d(e,\"MOUSE\",(function(){return r})),n.d(e,\"Material\",(function(){return Er})),n.d(e,\"MaterialLoader\",(function(){return Bh})),n.d(e,\"Math\",(function(){return Yn})),n.d(e,\"MathUtils\",(function(){return Yn})),n.d(e,\"Matrix3\",(function(){return Jn})),n.d(e,\"Matrix4\",(function(){return Fi})),n.d(e,\"MaxEquation\",(function(){return R})),n.d(e,\"Mesh\",(function(){return ws})),n.d(e,\"MeshBasicMaterial\",(function(){return Nr})),n.d(e,\"MeshDepthMaterial\",(function(){return Uo})),n.d(e,\"MeshDistanceMaterial\",(function(){return Go})),n.d(e,\"MeshFaceMaterial\",(function(){return tf})),n.d(e,\"MeshLambertMaterial\",(function(){return gu})),n.d(e,\"MeshMatcapMaterial\",(function(){return vu})),n.d(e,\"MeshNormalMaterial\",(function(){return mu})),n.d(e,\"MeshPhongMaterial\",(function(){return pu})),n.d(e,\"MeshPhysicalMaterial\",(function(){return du})),n.d(e,\"MeshStandardMaterial\",(function(){return hu})),n.d(e,\"MeshToonMaterial\",(function(){return fu})),n.d(e,\"MinEquation\",(function(){return L})),n.d(e,\"MirroredRepeatWrapping\",(function(){return pt})),n.d(e,\"MixOperation\",(function(){return J})),n.d(e,\"MultiMaterial\",(function(){return ef})),n.d(e,\"MultiplyBlending\",(function(){return M})),n.d(e,\"MultiplyOperation\",(function(){return Z})),n.d(e,\"NearestFilter\",(function(){return ft})),n.d(e,\"NearestMipMapLinearFilter\",(function(){return yt})),n.d(e,\"NearestMipMapNearestFilter\",(function(){return gt})),n.d(e,\"NearestMipmapLinearFilter\",(function(){return vt})),n.d(e,\"NearestMipmapNearestFilter\",(function(){return mt})),n.d(e,\"NeverDepth\",(function(){return G})),n.d(e,\"NeverStencilFunc\",(function(){return vn})),n.d(e,\"NoBlending\",(function(){return x})),n.d(e,\"NoColors\",(function(){return Qp})),n.d(e,\"NoToneMapping\",(function(){return K})),n.d(e,\"NormalAnimationBlendMode\",(function(){return je})),n.d(e,\"NormalBlending\",(function(){return _})),n.d(e,\"NotEqualDepth\",(function(){return Y})),n.d(e,\"NotEqualStencilFunc\",(function(){return wn})),n.d(e,\"NumberKeyframeTrack\",(function(){return Lu})),n.d(e,\"Object3D\",(function(){return cr})),n.d(e,\"ObjectLoader\",(function(){return Gh})),n.d(e,\"ObjectSpaceNormalMap\",(function(){return ln})),n.d(e,\"OctahedronBufferGeometry\",(function(){return Qc})),n.d(e,\"OctahedronGeometry\",(function(){return Qc})),n.d(e,\"OneFactor\",(function(){return P})),n.d(e,\"OneMinusDstAlphaFactor\",(function(){return O})),n.d(e,\"OneMinusDstColorFactor\",(function(){return H})),n.d(e,\"OneMinusSrcAlphaFactor\",(function(){return z})),n.d(e,\"OneMinusSrcColorFactor\",(function(){return I})),n.d(e,\"OrthographicCamera\",(function(){return Rh})),n.d(e,\"PCFShadowMap\",(function(){return h})),n.d(e,\"PCFSoftShadowMap\",(function(){return d})),n.d(e,\"PMREMGenerator\",(function(){return Up})),n.d(e,\"ParametricBufferGeometry\",(function(){return Kc})),n.d(e,\"ParametricGeometry\",(function(){return Kc})),n.d(e,\"Particle\",(function(){return rf})),n.d(e,\"ParticleBasicMaterial\",(function(){return of})),n.d(e,\"ParticleSystem\",(function(){return sf})),n.d(e,\"ParticleSystemMaterial\",(function(){return lf})),n.d(e,\"Path\",(function(){return fh})),n.d(e,\"PerspectiveCamera\",(function(){return Cs})),n.d(e,\"Plane\",(function(){return pr})),n.d(e,\"PlaneBufferGeometry\",(function(){return Hs})),n.d(e,\"PlaneGeometry\",(function(){return Hs})),n.d(e,\"PlaneHelper\",(function(){return mp})),n.d(e,\"PointCloud\",(function(){return nf})),n.d(e,\"PointCloudMaterial\",(function(){return af})),n.d(e,\"PointLight\",(function(){return Lh})),n.d(e,\"PointLightHelper\",(function(){return Qd})),n.d(e,\"Points\",(function(){return ic})),n.d(e,\"PointsMaterial\",(function(){return Kl})),n.d(e,\"PolarGridHelper\",(function(){return ip})),n.d(e,\"PolyhedronBufferGeometry\",(function(){return dc})),n.d(e,\"PolyhedronGeometry\",(function(){return dc})),n.d(e,\"PositionalAudio\",(function(){return gd})),n.d(e,\"PropertyBinding\",(function(){return Ad})),n.d(e,\"PropertyMixer\",(function(){return yd})),n.d(e,\"QuadraticBezierCurve\",(function(){return ch})),n.d(e,\"QuadraticBezierCurve3\",(function(){return uh})),n.d(e,\"Quaternion\",(function(){return ai})),n.d(e,\"QuaternionKeyframeTrack\",(function(){return Cu})),n.d(e,\"QuaternionLinearInterpolant\",(function(){return Ru})),n.d(e,\"REVISION\",(function(){return i})),n.d(e,\"RGBADepthPacking\",(function(){return an})),n.d(e,\"RGBAFormat\",(function(){return Ft})),n.d(e,\"RGBAIntegerFormat\",(function(){return Zt})),n.d(e,\"RGBA_ASTC_10x10_Format\",(function(){return ye})),n.d(e,\"RGBA_ASTC_10x5_Format\",(function(){return me})),n.d(e,\"RGBA_ASTC_10x6_Format\",(function(){return ge})),n.d(e,\"RGBA_ASTC_10x8_Format\",(function(){return ve})),n.d(e,\"RGBA_ASTC_12x10_Format\",(function(){return xe})),n.d(e,\"RGBA_ASTC_12x12_Format\",(function(){return _e})),n.d(e,\"RGBA_ASTC_4x4_Format\",(function(){return oe})),n.d(e,\"RGBA_ASTC_5x4_Format\",(function(){return le})),n.d(e,\"RGBA_ASTC_5x5_Format\",(function(){return ce})),n.d(e,\"RGBA_ASTC_6x5_Format\",(function(){return ue})),n.d(e,\"RGBA_ASTC_6x6_Format\",(function(){return he})),n.d(e,\"RGBA_ASTC_8x5_Format\",(function(){return de})),n.d(e,\"RGBA_ASTC_8x6_Format\",(function(){return pe})),n.d(e,\"RGBA_ASTC_8x8_Format\",(function(){return fe})),n.d(e,\"RGBA_BPTC_Format\",(function(){return be})),n.d(e,\"RGBA_ETC2_EAC_Format\",(function(){return ae})),n.d(e,\"RGBA_PVRTC_2BPPV1_Format\",(function(){return ie})),n.d(e,\"RGBA_PVRTC_4BPPV1_Format\",(function(){return ne})),n.d(e,\"RGBA_S3TC_DXT1_Format\",(function(){return Qt})),n.d(e,\"RGBA_S3TC_DXT3_Format\",(function(){return Kt})),n.d(e,\"RGBA_S3TC_DXT5_Format\",(function(){return $t})),n.d(e,\"RGBDEncoding\",(function(){return rn})),n.d(e,\"RGBEEncoding\",(function(){return $e})),n.d(e,\"RGBEFormat\",(function(){return Gt})),n.d(e,\"RGBFormat\",(function(){return Ot})),n.d(e,\"RGBIntegerFormat\",(function(){return Yt})),n.d(e,\"RGBM16Encoding\",(function(){return nn})),n.d(e,\"RGBM7Encoding\",(function(){return en})),n.d(e,\"RGB_ETC1_Format\",(function(){return re})),n.d(e,\"RGB_ETC2_Format\",(function(){return se})),n.d(e,\"RGB_PVRTC_2BPPV1_Format\",(function(){return ee})),n.d(e,\"RGB_PVRTC_4BPPV1_Format\",(function(){return te})),n.d(e,\"RGB_S3TC_DXT1_Format\",(function(){return Jt})),n.d(e,\"RGFormat\",(function(){return qt})),n.d(e,\"RGIntegerFormat\",(function(){return Xt})),n.d(e,\"RawShaderMaterial\",(function(){return uu})),n.d(e,\"Ray\",(function(){return Oi})),n.d(e,\"Raycaster\",(function(){return Nd})),n.d(e,\"RectAreaLight\",(function(){return Ih})),n.d(e,\"RedFormat\",(function(){return Wt})),n.d(e,\"RedIntegerFormat\",(function(){return jt})),n.d(e,\"ReinhardToneMapping\",(function(){return tt})),n.d(e,\"RepeatWrapping\",(function(){return ht})),n.d(e,\"ReplaceStencilOp\",(function(){return hn})),n.d(e,\"ReverseSubtractEquation\",(function(){return A})),n.d(e,\"RingBufferGeometry\",(function(){return $c})),n.d(e,\"RingGeometry\",(function(){return $c})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x10_Format\",(function(){return Ie})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x5_Format\",(function(){return Ce})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x6_Format\",(function(){return Pe})),n.d(e,\"SRGB8_ALPHA8_ASTC_10x8_Format\",(function(){return De})),n.d(e,\"SRGB8_ALPHA8_ASTC_12x10_Format\",(function(){return Ne})),n.d(e,\"SRGB8_ALPHA8_ASTC_12x12_Format\",(function(){return ze})),n.d(e,\"SRGB8_ALPHA8_ASTC_4x4_Format\",(function(){return we})),n.d(e,\"SRGB8_ALPHA8_ASTC_5x4_Format\",(function(){return Me})),n.d(e,\"SRGB8_ALPHA8_ASTC_5x5_Format\",(function(){return Se})),n.d(e,\"SRGB8_ALPHA8_ASTC_6x5_Format\",(function(){return Te})),n.d(e,\"SRGB8_ALPHA8_ASTC_6x6_Format\",(function(){return Ee})),n.d(e,\"SRGB8_ALPHA8_ASTC_8x5_Format\",(function(){return Ae})),n.d(e,\"SRGB8_ALPHA8_ASTC_8x6_Format\",(function(){return Le})),n.d(e,\"SRGB8_ALPHA8_ASTC_8x8_Format\",(function(){return Re})),n.d(e,\"Scene\",(function(){return nl})),n.d(e,\"SceneUtils\",(function(){return Rf})),n.d(e,\"ShaderChunk\",(function(){return Us})),n.d(e,\"ShaderLib\",(function(){return ks})),n.d(e,\"ShaderMaterial\",(function(){return Ls})),n.d(e,\"ShadowMaterial\",(function(){return cu})),n.d(e,\"Shape\",(function(){return mh})),n.d(e,\"ShapeBufferGeometry\",(function(){return tu})),n.d(e,\"ShapeGeometry\",(function(){return tu})),n.d(e,\"ShapePath\",(function(){return qh})),n.d(e,\"ShapeUtils\",(function(){return Wc})),n.d(e,\"ShortType\",(function(){return Et})),n.d(e,\"Skeleton\",(function(){return zl})),n.d(e,\"SkeletonHelper\",(function(){return Jd})),n.d(e,\"SkinnedMesh\",(function(){return Cl})),n.d(e,\"SmoothShading\",(function(){return y})),n.d(e,\"Sphere\",(function(){return Ri})),n.d(e,\"SphereBufferGeometry\",(function(){return eu})),n.d(e,\"SphereGeometry\",(function(){return eu})),n.d(e,\"Spherical\",(function(){return Od})),n.d(e,\"SphericalHarmonics3\",(function(){return Nh})),n.d(e,\"SplineCurve\",(function(){return hh})),n.d(e,\"SpotLight\",(function(){return Mh})),n.d(e,\"SpotLightHelper\",(function(){return qd})),n.d(e,\"Sprite\",(function(){return _l})),n.d(e,\"SpriteMaterial\",(function(){return al})),n.d(e,\"SrcAlphaFactor\",(function(){return N})),n.d(e,\"SrcAlphaSaturateFactor\",(function(){return U})),n.d(e,\"SrcColorFactor\",(function(){return D})),n.d(e,\"StaticCopyUsage\",(function(){return Pn})),n.d(e,\"StaticDrawUsage\",(function(){return Tn})),n.d(e,\"StaticReadUsage\",(function(){return Ln})),n.d(e,\"StereoCamera\",(function(){return id})),n.d(e,\"StreamCopyUsage\",(function(){return In})),n.d(e,\"StreamDrawUsage\",(function(){return An})),n.d(e,\"StreamReadUsage\",(function(){return Cn})),n.d(e,\"StringKeyframeTrack\",(function(){return Pu})),n.d(e,\"SubtractEquation\",(function(){return E})),n.d(e,\"SubtractiveBlending\",(function(){return w})),n.d(e,\"TOUCH\",(function(){return s})),n.d(e,\"TangentSpaceNormalMap\",(function(){return on})),n.d(e,\"TetrahedronBufferGeometry\",(function(){return nu})),n.d(e,\"TetrahedronGeometry\",(function(){return nu})),n.d(e,\"TextBufferGeometry\",(function(){return iu})),n.d(e,\"TextGeometry\",(function(){return iu})),n.d(e,\"Texture\",(function(){return ti})),n.d(e,\"TextureLoader\",(function(){return qu})),n.d(e,\"TorusBufferGeometry\",(function(){return ru})),n.d(e,\"TorusGeometry\",(function(){return ru})),n.d(e,\"TorusKnotBufferGeometry\",(function(){return su})),n.d(e,\"TorusKnotGeometry\",(function(){return su})),n.d(e,\"Triangle\",(function(){return Sr})),n.d(e,\"TriangleFanDrawMode\",(function(){return Ze})),n.d(e,\"TriangleStripDrawMode\",(function(){return Ye})),n.d(e,\"TrianglesDrawMode\",(function(){return Xe})),n.d(e,\"TubeBufferGeometry\",(function(){return au})),n.d(e,\"TubeGeometry\",(function(){return au})),n.d(e,\"UVMapping\",(function(){return rt})),n.d(e,\"Uint16Attribute\",(function(){return mf})),n.d(e,\"Uint16BufferAttribute\",(function(){return kr})),n.d(e,\"Uint32Attribute\",(function(){return vf})),n.d(e,\"Uint32BufferAttribute\",(function(){return Wr})),n.d(e,\"Uint8Attribute\",(function(){return df})),n.d(e,\"Uint8BufferAttribute\",(function(){return Hr})),n.d(e,\"Uint8ClampedAttribute\",(function(){return pf})),n.d(e,\"Uint8ClampedBufferAttribute\",(function(){return Ur})),n.d(e,\"Uniform\",(function(){return Pd})),n.d(e,\"UniformsLib\",(function(){return Gs})),n.d(e,\"UniformsUtils\",(function(){return As})),n.d(e,\"UnsignedByteType\",(function(){return St})),n.d(e,\"UnsignedInt248Type\",(function(){return zt})),n.d(e,\"UnsignedIntType\",(function(){return Rt})),n.d(e,\"UnsignedShort4444Type\",(function(){return Dt})),n.d(e,\"UnsignedShort5551Type\",(function(){return It})),n.d(e,\"UnsignedShort565Type\",(function(){return Nt})),n.d(e,\"UnsignedShortType\",(function(){return At})),n.d(e,\"VSMShadowMap\",(function(){return p})),n.d(e,\"Vector2\",(function(){return Zn})),n.d(e,\"Vector3\",(function(){return oi})),n.d(e,\"Vector4\",(function(){return ni})),n.d(e,\"VectorKeyframeTrack\",(function(){return Du})),n.d(e,\"Vertex\",(function(){return cf})),n.d(e,\"VertexColors\",(function(){return $p})),n.d(e,\"VideoTexture\",(function(){return sc})),n.d(e,\"WebGL1Renderer\",(function(){return $o})),n.d(e,\"WebGLCubeRenderTarget\",(function(){return Is})),n.d(e,\"WebGLMultipleRenderTargets\",(function(){return ri})),n.d(e,\"WebGLMultisampleRenderTarget\",(function(){return si})),n.d(e,\"WebGLRenderTarget\",(function(){return ii})),n.d(e,\"WebGLRenderTargetCube\",(function(){return Ef})),n.d(e,\"WebGLRenderer\",(function(){return Ko})),n.d(e,\"WebGLUtils\",(function(){return jo})),n.d(e,\"WireframeGeometry\",(function(){return ou})),n.d(e,\"WireframeHelper\",(function(){return Mf})),n.d(e,\"WrapAroundEnding\",(function(){return We})),n.d(e,\"XHRLoader\",(function(){return Sf})),n.d(e,\"ZeroCurvatureEnding\",(function(){return ke})),n.d(e,\"ZeroFactor\",(function(){return C})),n.d(e,\"ZeroSlopeEnding\",(function(){return Ve})),n.d(e,\"ZeroStencilOp\",(function(){return cn})),n.d(e,\"sRGBEncoding\",(function(){return Qe}));\nconst i=\"129\",r={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},s={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},a=0,o=1,l=2,c=3,u=0,h=1,d=2,p=3,f=0,m=1,g=2,v=1,y=2,x=0,_=1,b=2,w=3,M=4,S=5,T=100,E=101,A=102,L=103,R=104,C=200,P=201,D=202,I=203,N=204,z=205,B=206,O=207,F=208,H=209,U=210,G=0,k=1,V=2,W=3,j=4,q=5,X=6,Y=7,Z=0,J=1,Q=2,K=0,$=1,tt=2,et=3,nt=4,it=5,rt=300,st=301,at=302,ot=303,lt=304,ct=306,ut=307,ht=1e3,dt=1001,pt=1002,ft=1003,mt=1004,gt=1004,vt=1005,yt=1005,xt=1006,_t=1007,bt=1007,wt=1008,Mt=1008,St=1009,Tt=1010,Et=1011,At=1012,Lt=1013,Rt=1014,Ct=1015,Pt=1016,Dt=1017,It=1018,Nt=1019,zt=1020,Bt=1021,Ot=1022,Ft=1023,Ht=1024,Ut=1025,Gt=Ft,kt=1026,Vt=1027,Wt=1028,jt=1029,qt=1030,Xt=1031,Yt=1032,Zt=1033,Jt=33776,Qt=33777,Kt=33778,$t=33779,te=35840,ee=35841,ne=35842,ie=35843,re=36196,se=37492,ae=37496,oe=37808,le=37809,ce=37810,ue=37811,he=37812,de=37813,pe=37814,fe=37815,me=37816,ge=37817,ve=37818,ye=37819,xe=37820,_e=37821,be=36492,we=37840,Me=37841,Se=37842,Te=37843,Ee=37844,Ae=37845,Le=37846,Re=37847,Ce=37848,Pe=37849,De=37850,Ie=37851,Ne=37852,ze=37853,Be=2200,Oe=2201,Fe=2202,He=2300,Ue=2301,Ge=2302,ke=2400,Ve=2401,We=2402,je=2500,qe=2501,Xe=0,Ye=1,Ze=2,Je=3e3,Qe=3001,Ke=3007,$e=3002,tn=3003,en=3004,nn=3005,rn=3006,sn=3200,an=3201,on=0,ln=1,cn=0,un=7680,hn=7681,dn=7682,pn=7683,fn=34055,mn=34056,gn=5386,vn=512,yn=513,xn=514,_n=515,bn=516,wn=517,Mn=518,Sn=519,Tn=35044,En=35048,An=35040,Ln=35045,Rn=35049,Cn=35041,Pn=35046,Dn=35050,In=35042,Nn=\"100\",zn=\"300 es\";class Bn{addEventListener(t,e){void 0===this._listeners\u0026\u0026(this._listeners={});const n=this._listeners;void 0===n[t]\u0026\u0026(n[t]=[]),-1===n[t].indexOf(e)\u0026\u0026n[t].push(e)}hasEventListener(t,e){if(void 0===this._listeners)return!1;const n=this._listeners;return void 0!==n[t]\u0026\u0026-1!==n[t].indexOf(e)}removeEventListener(t,e){if(void 0===this._listeners)return;const n=this._listeners[t];if(void 0!==n){const t=n.indexOf(e);-1!==t\u0026\u0026n.splice(t,1)}}dispatchEvent(t){if(void 0===this._listeners)return;const e=this._listeners[t.type];if(void 0!==e){t.target=this;const n=e.slice(0);for(let e=0,i=n.length;e\u003ci;e++)n[e].call(this,t);t.target=null}}}const On=[];for(let t=0;t\u003c256;t++)On[t]=(t\u003c16?\"0\":\"\")+t.toString(16);let Fn=1234567;const Hn=Math.PI/180,Un=180/Math.PI;function Gn(){const t=4294967295*Math.random()|0,e=4294967295*Math.random()|0,n=4294967295*Math.random()|0,i=4294967295*Math.random()|0;return(On[255\u0026t]+On[t\u003e\u003e8\u0026255]+On[t\u003e\u003e16\u0026255]+On[t\u003e\u003e24\u0026255]+\"-\"+On[255\u0026e]+On[e\u003e\u003e8\u0026255]+\"-\"+On[e\u003e\u003e16\u002615|64]+On[e\u003e\u003e24\u0026255]+\"-\"+On[63\u0026n|128]+On[n\u003e\u003e8\u0026255]+\"-\"+On[n\u003e\u003e16\u0026255]+On[n\u003e\u003e24\u0026255]+On[255\u0026i]+On[i\u003e\u003e8\u0026255]+On[i\u003e\u003e16\u0026255]+On[i\u003e\u003e24\u0026255]).toUpperCase()}function kn(t,e,n){return Math.max(e,Math.min(n,t))}function Vn(t,e){return(t%e+e)%e}function Wn(t,e,n){return(1-n)*t+n*e}function jn(t){return 0==(t\u0026t-1)\u0026\u00260!==t}function qn(t){return Math.pow(2,Math.ceil(Math.log(t)/Math.LN2))}function Xn(t){return Math.pow(2,Math.floor(Math.log(t)/Math.LN2))}var Yn=Object.freeze({__proto__:null,DEG2RAD:Hn,RAD2DEG:Un,generateUUID:Gn,clamp:kn,euclideanModulo:Vn,mapLinear:function(t,e,n,i,r){return i+(t-e)*(r-i)/(n-e)},inverseLerp:function(t,e,n){return t!==e?(n-t)/(e-t):0},lerp:Wn,damp:function(t,e,n,i){return Wn(t,e,1-Math.exp(-n*i))},pingpong:function(t,e=1){return e-Math.abs(Vn(t,2*e)-e)},smoothstep:function(t,e,n){return t\u003c=e?0:t\u003e=n?1:(t=(t-e)/(n-e))*t*(3-2*t)},smootherstep:function(t,e,n){return t\u003c=e?0:t\u003e=n?1:(t=(t-e)/(n-e))*t*t*(t*(6*t-15)+10)},randInt:function(t,e){return t+Math.floor(Math.random()*(e-t+1))},randFloat:function(t,e){return t+Math.random()*(e-t)},randFloatSpread:function(t){return t*(.5-Math.random())},seededRandom:function(t){return void 0!==t\u0026\u0026(Fn=t%2147483647),Fn=16807*Fn%2147483647,(Fn-1)/2147483646},degToRad:function(t){return t*Hn},radToDeg:function(t){return t*Un},isPowerOfTwo:jn,ceilPowerOfTwo:qn,floorPowerOfTwo:Xn,setQuaternionFromProperEuler:function(t,e,n,i,r){const s=Math.cos,a=Math.sin,o=s(n/2),l=a(n/2),c=s((e+i)/2),u=a((e+i)/2),h=s((e-i)/2),d=a((e-i)/2),p=s((i-e)/2),f=a((i-e)/2);switch(r){case\"XYX\":t.set(o*u,l*h,l*d,o*c);break;case\"YZY\":t.set(l*d,o*u,l*h,o*c);break;case\"ZXZ\":t.set(l*h,l*d,o*u,o*c);break;case\"XZX\":t.set(o*u,l*f,l*p,o*c);break;case\"YXY\":t.set(l*p,o*u,l*f,o*c);break;case\"ZYZ\":t.set(l*f,l*p,o*u,o*c);break;default:console.warn(\"THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: \"+r)}}});class Zn{constructor(t=0,e=0){this.x=t,this.y=e}get width(){return this.x}set width(t){this.x=t}get height(){return this.y}set height(t){this.y=t}set(t,e){return this.x=t,this.y=e,this}setScalar(t){return this.x=t,this.y=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y)}copy(t){return this.x=t.x,this.y=t.y,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this)}addScalar(t){return this.x+=t,this.y+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this)}subScalar(t){return this.x-=t,this.y-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this}multiply(t){return this.x*=t.x,this.y*=t.y,this}multiplyScalar(t){return this.x*=t,this.y*=t,this}divide(t){return this.x/=t.x,this.y/=t.y,this}divideScalar(t){return this.multiplyScalar(1/t)}applyMatrix3(t){const e=this.x,n=this.y,i=t.elements;return this.x=i[0]*e+i[3]*n+i[6],this.y=i[1]*e+i[4]*n+i[7],this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(t){return this.x*t.x+this.y*t.y}cross(t){return this.x*t.y-this.y*t.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(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y;return e*e+n*n}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)}setLength(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this}equals(t){return t.x===this.x\u0026\u0026t.y===this.y}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this}rotateAround(t,e){const n=Math.cos(e),i=Math.sin(e),r=this.x-t.x,s=this.y-t.y;return this.x=r*n-s*i+t.x,this.y=r*i+s*n+t.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}}Zn.prototype.isVector2=!0;class Jn{constructor(){this.elements=[1,0,0,0,1,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l){const c=this.elements;return c[0]=t,c[1]=i,c[2]=a,c[3]=e,c[4]=r,c[5]=o,c[6]=n,c[7]=s,c[8]=l,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],this}extractBasis(t,e,n){return t.setFromMatrix3Column(this,0),e.setFromMatrix3Column(this,1),n.setFromMatrix3Column(this,2),this}setFromMatrix4(t){const e=t.elements;return this.set(e[0],e[4],e[8],e[1],e[5],e[9],e[2],e[6],e[10]),this}multiply(t){return this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[3],o=n[6],l=n[1],c=n[4],u=n[7],h=n[2],d=n[5],p=n[8],f=i[0],m=i[3],g=i[6],v=i[1],y=i[4],x=i[7],_=i[2],b=i[5],w=i[8];return r[0]=s*f+a*v+o*_,r[3]=s*m+a*y+o*b,r[6]=s*g+a*x+o*w,r[1]=l*f+c*v+u*_,r[4]=l*m+c*y+u*b,r[7]=l*g+c*x+u*w,r[2]=h*f+d*v+p*_,r[5]=h*m+d*y+p*b,r[8]=h*g+d*x+p*w,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[3]*=t,e[6]*=t,e[1]*=t,e[4]*=t,e[7]*=t,e[2]*=t,e[5]*=t,e[8]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8];return e*s*c-e*a*l-n*r*c+n*a*o+i*r*l-i*s*o}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],u=c*s-a*l,h=a*o-c*r,d=l*r-s*o,p=e*u+n*h+i*d;if(0===p)return this.set(0,0,0,0,0,0,0,0,0);const f=1/p;return t[0]=u*f,t[1]=(i*l-c*n)*f,t[2]=(a*n-i*s)*f,t[3]=h*f,t[4]=(c*e-i*o)*f,t[5]=(i*r-a*e)*f,t[6]=d*f,t[7]=(n*o-l*e)*f,t[8]=(s*e-n*r)*f,this}transpose(){let t;const e=this.elements;return t=e[1],e[1]=e[3],e[3]=t,t=e[2],e[2]=e[6],e[6]=t,t=e[5],e[5]=e[7],e[7]=t,this}getNormalMatrix(t){return this.setFromMatrix4(t).invert().transpose()}transposeIntoArray(t){const e=this.elements;return t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8],this}setUvTransform(t,e,n,i,r,s,a){const o=Math.cos(r),l=Math.sin(r);return this.set(n*o,n*l,-n*(o*s+l*a)+s+t,-i*l,i*o,-i*(-l*s+o*a)+a+e,0,0,1),this}scale(t,e){const n=this.elements;return n[0]*=t,n[3]*=t,n[6]*=t,n[1]*=e,n[4]*=e,n[7]*=e,this}rotate(t){const e=Math.cos(t),n=Math.sin(t),i=this.elements,r=i[0],s=i[3],a=i[6],o=i[1],l=i[4],c=i[7];return i[0]=e*r+n*o,i[3]=e*s+n*l,i[6]=e*a+n*c,i[1]=-n*r+e*o,i[4]=-n*s+e*l,i[7]=-n*a+e*c,this}translate(t,e){const n=this.elements;return n[0]+=t*n[2],n[3]+=t*n[5],n[6]+=t*n[8],n[1]+=e*n[2],n[4]+=e*n[5],n[7]+=e*n[8],this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t\u003c9;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n\u003c9;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t}clone(){return(new this.constructor).fromArray(this.elements)}}let Qn;Jn.prototype.isMatrix3=!0;class Kn{static getDataURL(t){if(/^data:/i.test(t.src))return t.src;if(\"undefined\"==typeof HTMLCanvasElement)return t.src;let e;if(t instanceof HTMLCanvasElement)e=t;else{void 0===Qn\u0026\u0026(Qn=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\")),Qn.width=t.width,Qn.height=t.height;const n=Qn.getContext(\"2d\");t instanceof ImageData?n.putImageData(t,0,0):n.drawImage(t,0,0,t.width,t.height),e=Qn}return e.width\u003e2048||e.height\u003e2048?(console.warn(\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\",t),e.toDataURL(\"image/jpeg\",.6)):e.toDataURL(\"image/png\")}}let $n=0;class ti extends Bn{constructor(t=ti.DEFAULT_IMAGE,e=ti.DEFAULT_MAPPING,n=dt,i=dt,r=xt,s=wt,a=Ft,o=St,l=1,c=Je){super(),Object.defineProperty(this,\"id\",{value:$n++}),this.uuid=Gn(),this.name=\"\",this.image=t,this.mipmaps=[],this.mapping=e,this.wrapS=n,this.wrapT=i,this.magFilter=r,this.minFilter=s,this.anisotropy=l,this.format=a,this.internalFormat=null,this.type=o,this.offset=new Zn(0,0),this.repeat=new Zn(1,1),this.center=new Zn(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new Jn,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=c,this.version=0,this.onUpdate=null}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(t){return this.name=t.name,this.image=t.image,this.mipmaps=t.mipmaps.slice(0),this.mapping=t.mapping,this.wrapS=t.wrapS,this.wrapT=t.wrapT,this.magFilter=t.magFilter,this.minFilter=t.minFilter,this.anisotropy=t.anisotropy,this.format=t.format,this.internalFormat=t.internalFormat,this.type=t.type,this.offset.copy(t.offset),this.repeat.copy(t.repeat),this.center.copy(t.center),this.rotation=t.rotation,this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrix.copy(t.matrix),this.generateMipmaps=t.generateMipmaps,this.premultiplyAlpha=t.premultiplyAlpha,this.flipY=t.flipY,this.unpackAlignment=t.unpackAlignment,this.encoding=t.encoding,this}toJSON(t){const e=void 0===t||\"string\"==typeof t;if(!e\u0026\u0026void 0!==t.textures[this.uuid])return t.textures[this.uuid];const n={metadata:{version:4.5,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};if(void 0!==this.image){const i=this.image;if(void 0===i.uuid\u0026\u0026(i.uuid=Gn()),!e\u0026\u0026void 0===t.images[i.uuid]){let e;if(Array.isArray(i)){e=[];for(let t=0,n=i.length;t\u003cn;t++)i[t].isDataTexture?e.push(ei(i[t].image)):e.push(ei(i[t]))}else e=ei(i);t.images[i.uuid]={uuid:i.uuid,url:e}}n.image=i.uuid}return e||(t.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:\"dispose\"})}transformUv(t){if(this.mapping!==rt)return t;if(t.applyMatrix3(this.matrix),t.x\u003c0||t.x\u003e1)switch(this.wrapS){case ht:t.x=t.x-Math.floor(t.x);break;case dt:t.x=t.x\u003c0?0:1;break;case pt:1===Math.abs(Math.floor(t.x)%2)?t.x=Math.ceil(t.x)-t.x:t.x=t.x-Math.floor(t.x)}if(t.y\u003c0||t.y\u003e1)switch(this.wrapT){case ht:t.y=t.y-Math.floor(t.y);break;case dt:t.y=t.y\u003c0?0:1;break;case pt:1===Math.abs(Math.floor(t.y)%2)?t.y=Math.ceil(t.y)-t.y:t.y=t.y-Math.floor(t.y)}return this.flipY\u0026\u0026(t.y=1-t.y),t}set needsUpdate(t){!0===t\u0026\u0026this.version++}}function ei(t){return\"undefined\"!=typeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap\u0026\u0026t instanceof ImageBitmap?Kn.getDataURL(t):t.data?{data:Array.prototype.slice.call(t.data),width:t.width,height:t.height,type:t.data.constructor.name}:(console.warn(\"THREE.Texture: Unable to serialize Texture.\"),{})}ti.DEFAULT_IMAGE=void 0,ti.DEFAULT_MAPPING=rt,ti.prototype.isTexture=!0;class ni{constructor(t=0,e=0,n=0,i=1){this.x=t,this.y=e,this.z=n,this.w=i}get width(){return this.z}set width(t){this.z=t}get height(){return this.w}set height(t){this.w=t}set(t,e,n,i){return this.x=t,this.y=e,this.z=n,this.w=i,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this.w=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setW(t){return this.w=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;case 3:this.w=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){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: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this.w=void 0!==t.w?t.w:1,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this.w+=t.w,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this.w+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this.w=t.w+e.w,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this.w+=t.w*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this.w-=t.w,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this.w-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this.w=t.w-e.w,this}multiply(t){return this.x*=t.x,this.y*=t.y,this.z*=t.z,this.w*=t.w,this}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this.w*=t,this}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=this.w,s=t.elements;return this.x=s[0]*e+s[4]*n+s[8]*i+s[12]*r,this.y=s[1]*e+s[5]*n+s[9]*i+s[13]*r,this.z=s[2]*e+s[6]*n+s[10]*i+s[14]*r,this.w=s[3]*e+s[7]*n+s[11]*i+s[15]*r,this}divideScalar(t){return this.multiplyScalar(1/t)}setAxisAngleFromQuaternion(t){this.w=2*Math.acos(t.w);const e=Math.sqrt(1-t.w*t.w);return e\u003c1e-4?(this.x=1,this.y=0,this.z=0):(this.x=t.x/e,this.y=t.y/e,this.z=t.z/e),this}setAxisAngleFromRotationMatrix(t){let e,n,i,r;const s=t.elements,a=s[0],o=s[4],l=s[8],c=s[1],u=s[5],h=s[9],d=s[2],p=s[6],f=s[10];if(Math.abs(o-c)\u003c.01\u0026\u0026Math.abs(l-d)\u003c.01\u0026\u0026Math.abs(h-p)\u003c.01){if(Math.abs(o+c)\u003c.1\u0026\u0026Math.abs(l+d)\u003c.1\u0026\u0026Math.abs(h+p)\u003c.1\u0026\u0026Math.abs(a+u+f-3)\u003c.1)return this.set(1,0,0,0),this;e=Math.PI;const t=(a+1)/2,s=(u+1)/2,m=(f+1)/2,g=(o+c)/4,v=(l+d)/4,y=(h+p)/4;return t\u003es\u0026\u0026t\u003em?t\u003c.01?(n=0,i=.707106781,r=.707106781):(n=Math.sqrt(t),i=g/n,r=v/n):s\u003em?s\u003c.01?(n=.707106781,i=0,r=.707106781):(i=Math.sqrt(s),n=g/i,r=y/i):m\u003c.01?(n=.707106781,i=.707106781,r=0):(r=Math.sqrt(m),n=v/r,i=y/r),this.set(n,i,r,e),this}let m=Math.sqrt((p-h)*(p-h)+(l-d)*(l-d)+(c-o)*(c-o));return Math.abs(m)\u003c.001\u0026\u0026(m=1),this.x=(p-h)/m,this.y=(l-d)/m,this.z=(c-o)/m,this.w=Math.acos((a+u+f-1)/2),this}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this.w=Math.min(this.w,t.w),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this.w=Math.max(this.w,t.w),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this.w=Math.max(t.w,Math.min(e.w,this.w)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this.w=Math.max(t,Math.min(e,this.w)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w\u003c0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z+this.w*t.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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this.w+=(t.w-this.w)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this.w=t.w+(e.w-t.w)*n,this}equals(t){return t.x===this.x\u0026\u0026t.y===this.y\u0026\u0026t.z===this.z\u0026\u0026t.w===this.w}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this.w=t[e+3],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t[e+3]=this.w,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this.w=t.getW(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}}ni.prototype.isVector4=!0;class ii extends Bn{constructor(t,e,n){super(),this.width=t,this.height=e,this.depth=1,this.scissor=new ni(0,0,t,e),this.scissorTest=!1,this.viewport=new ni(0,0,t,e),n=n||{},this.texture=new ti(void 0,n.mapping,n.wrapS,n.wrapT,n.magFilter,n.minFilter,n.format,n.type,n.anisotropy,n.encoding),this.texture.image={},this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=1,this.texture.generateMipmaps=void 0!==n.generateMipmaps\u0026\u0026n.generateMipmaps,this.texture.minFilter=void 0!==n.minFilter?n.minFilter:xt,this.depthBuffer=void 0===n.depthBuffer||n.depthBuffer,this.stencilBuffer=void 0!==n.stencilBuffer\u0026\u0026n.stencilBuffer,this.depthTexture=void 0!==n.depthTexture?n.depthTexture:null}setTexture(t){t.image={width:this.width,height:this.height,depth:this.depth},this.texture=t}setSize(t,e,n=1){this.width===t\u0026\u0026this.height===e\u0026\u0026this.depth===n||(this.width=t,this.height=e,this.depth=n,this.texture.image.width=t,this.texture.image.height=e,this.texture.image.depth=n,this.dispose()),this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e)}clone(){return(new this.constructor).copy(this)}copy(t){return this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.copy(t.viewport),this.texture=t.texture.clone(),this.texture.image={...this.texture.image},this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}ii.prototype.isWebGLRenderTarget=!0;class ri extends ii{constructor(t,e,n){super(t,e);const i=this.texture;this.texture=[];for(let t=0;t\u003cn;t++)this.texture[t]=i.clone()}setSize(t,e,n=1){if(this.width!==t||this.height!==e||this.depth!==n){this.width=t,this.height=e,this.depth=n;for(let i=0,r=this.texture.length;i\u003cr;i++)this.texture[i].image.width=t,this.texture[i].image.height=e,this.texture[i].image.depth=n;this.dispose()}return this.viewport.set(0,0,t,e),this.scissor.set(0,0,t,e),this}copy(t){this.dispose(),this.width=t.width,this.height=t.height,this.depth=t.depth,this.viewport.set(0,0,this.width,this.height),this.scissor.set(0,0,this.width,this.height),this.depthBuffer=t.depthBuffer,this.stencilBuffer=t.stencilBuffer,this.depthTexture=t.depthTexture,this.texture.length=0;for(let e=0,n=t.texture.length;e\u003cn;e++)this.texture[e]=t.texture[e].clone();return this}}ri.prototype.isWebGLMultipleRenderTargets=!0;class si extends ii{constructor(t,e,n){super(t,e,n),this.samples=4}copy(t){return super.copy.call(this,t),this.samples=t.samples,this}}si.prototype.isWebGLMultisampleRenderTarget=!0;class ai{constructor(t=0,e=0,n=0,i=1){this._x=t,this._y=e,this._z=n,this._w=i}static slerp(t,e,n,i){return console.warn(\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\"),n.slerpQuaternions(t,e,i)}static slerpFlat(t,e,n,i,r,s,a){let o=n[i+0],l=n[i+1],c=n[i+2],u=n[i+3];const h=r[s+0],d=r[s+1],p=r[s+2],f=r[s+3];if(0===a)return t[e+0]=o,t[e+1]=l,t[e+2]=c,void(t[e+3]=u);if(1===a)return t[e+0]=h,t[e+1]=d,t[e+2]=p,void(t[e+3]=f);if(u!==f||o!==h||l!==d||c!==p){let t=1-a;const e=o*h+l*d+c*p+u*f,n=e\u003e=0?1:-1,i=1-e*e;if(i\u003eNumber.EPSILON){const r=Math.sqrt(i),s=Math.atan2(r,e*n);t=Math.sin(t*s)/r,a=Math.sin(a*s)/r}const r=a*n;if(o=o*t+h*r,l=l*t+d*r,c=c*t+p*r,u=u*t+f*r,t===1-a){const t=1/Math.sqrt(o*o+l*l+c*c+u*u);o*=t,l*=t,c*=t,u*=t}}t[e]=o,t[e+1]=l,t[e+2]=c,t[e+3]=u}static multiplyQuaternionsFlat(t,e,n,i,r,s){const a=n[i],o=n[i+1],l=n[i+2],c=n[i+3],u=r[s],h=r[s+1],d=r[s+2],p=r[s+3];return t[e]=a*p+c*u+o*d-l*h,t[e+1]=o*p+c*h+l*u-a*d,t[e+2]=l*p+c*d+a*h-o*u,t[e+3]=c*p-a*u-o*h-l*d,t}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get w(){return this._w}set w(t){this._w=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._w=i,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(t){return this._x=t.x,this._y=t.y,this._z=t.z,this._w=t.w,this._onChangeCallback(),this}setFromEuler(t,e){if(!t||!t.isEuler)throw new Error(\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\");const n=t._x,i=t._y,r=t._z,s=t._order,a=Math.cos,o=Math.sin,l=a(n/2),c=a(i/2),u=a(r/2),h=o(n/2),d=o(i/2),p=o(r/2);switch(s){case\"XYZ\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\"YXZ\":this._x=h*c*u+l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\"ZXY\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u-h*d*p;break;case\"ZYX\":this._x=h*c*u-l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u+h*d*p;break;case\"YZX\":this._x=h*c*u+l*d*p,this._y=l*d*u+h*c*p,this._z=l*c*p-h*d*u,this._w=l*c*u-h*d*p;break;case\"XZY\":this._x=h*c*u-l*d*p,this._y=l*d*u-h*c*p,this._z=l*c*p+h*d*u,this._w=l*c*u+h*d*p;break;default:console.warn(\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \"+s)}return!1!==e\u0026\u0026this._onChangeCallback(),this}setFromAxisAngle(t,e){const n=e/2,i=Math.sin(n);return this._x=t.x*i,this._y=t.y*i,this._z=t.z*i,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(t){const e=t.elements,n=e[0],i=e[4],r=e[8],s=e[1],a=e[5],o=e[9],l=e[2],c=e[6],u=e[10],h=n+a+u;if(h\u003e0){const t=.5/Math.sqrt(h+1);this._w=.25/t,this._x=(c-o)*t,this._y=(r-l)*t,this._z=(s-i)*t}else if(n\u003ea\u0026\u0026n\u003eu){const t=2*Math.sqrt(1+n-a-u);this._w=(c-o)/t,this._x=.25*t,this._y=(i+s)/t,this._z=(r+l)/t}else if(a\u003eu){const t=2*Math.sqrt(1+a-n-u);this._w=(r-l)/t,this._x=(i+s)/t,this._y=.25*t,this._z=(o+c)/t}else{const t=2*Math.sqrt(1+u-n-a);this._w=(s-i)/t,this._x=(r+l)/t,this._y=(o+c)/t,this._z=.25*t}return this._onChangeCallback(),this}setFromUnitVectors(t,e){let n=t.dot(e)+1;return n\u003cNumber.EPSILON?(n=0,Math.abs(t.x)\u003eMath.abs(t.z)?(this._x=-t.y,this._y=t.x,this._z=0,this._w=n):(this._x=0,this._y=-t.z,this._z=t.y,this._w=n)):(this._x=t.y*e.z-t.z*e.y,this._y=t.z*e.x-t.x*e.z,this._z=t.x*e.y-t.y*e.x,this._w=n),this.normalize()}angleTo(t){return 2*Math.acos(Math.abs(kn(this.dot(t),-1,1)))}rotateTowards(t,e){const n=this.angleTo(t);if(0===n)return this;const i=Math.min(1,e/n);return this.slerp(t,i),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(t){return this._x*t._x+this._y*t._y+this._z*t._z+this._w*t._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 t=this.length();return 0===t?(this._x=0,this._y=0,this._z=0,this._w=1):(t=1/t,this._x=this._x*t,this._y=this._y*t,this._z=this._z*t,this._w=this._w*t),this._onChangeCallback(),this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\"),this.multiplyQuaternions(t,e)):this.multiplyQuaternions(this,t)}premultiply(t){return this.multiplyQuaternions(t,this)}multiplyQuaternions(t,e){const n=t._x,i=t._y,r=t._z,s=t._w,a=e._x,o=e._y,l=e._z,c=e._w;return this._x=n*c+s*a+i*l-r*o,this._y=i*c+s*o+r*a-n*l,this._z=r*c+s*l+n*o-i*a,this._w=s*c-n*a-i*o-r*l,this._onChangeCallback(),this}slerp(t,e){if(0===e)return this;if(1===e)return this.copy(t);const n=this._x,i=this._y,r=this._z,s=this._w;let a=s*t._w+n*t._x+i*t._y+r*t._z;if(a\u003c0?(this._w=-t._w,this._x=-t._x,this._y=-t._y,this._z=-t._z,a=-a):this.copy(t),a\u003e=1)return this._w=s,this._x=n,this._y=i,this._z=r,this;const o=1-a*a;if(o\u003c=Number.EPSILON){const t=1-e;return this._w=t*s+e*this._w,this._x=t*n+e*this._x,this._y=t*i+e*this._y,this._z=t*r+e*this._z,this.normalize(),this._onChangeCallback(),this}const l=Math.sqrt(o),c=Math.atan2(l,a),u=Math.sin((1-e)*c)/l,h=Math.sin(e*c)/l;return this._w=s*u+this._w*h,this._x=n*u+this._x*h,this._y=i*u+this._y*h,this._z=r*u+this._z*h,this._onChangeCallback(),this}slerpQuaternions(t,e,n){this.copy(t).slerp(e,n)}equals(t){return t._x===this._x\u0026\u0026t._y===this._y\u0026\u0026t._z===this._z\u0026\u0026t._w===this._w}fromArray(t,e=0){return this._x=t[e],this._y=t[e+1],this._z=t[e+2],this._w=t[e+3],this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._w,t}fromBufferAttribute(t,e){return this._x=t.getX(e),this._y=t.getY(e),this._z=t.getZ(e),this._w=t.getW(e),this}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}ai.prototype.isQuaternion=!0;class oi{constructor(t=0,e=0,n=0){this.x=t,this.y=e,this.z=n}set(t,e,n){return void 0===n\u0026\u0026(n=this.z),this.x=t,this.y=e,this.z=n,this}setScalar(t){return this.x=t,this.y=t,this.z=t,this}setX(t){return this.x=t,this}setY(t){return this.y=t,this}setZ(t){return this.z=t,this}setComponent(t,e){switch(t){case 0:this.x=e;break;case 1:this.y=e;break;case 2:this.z=e;break;default:throw new Error(\"index is out of range: \"+t)}return this}getComponent(t){switch(t){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\"index is out of range: \"+t)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(t){return this.x=t.x,this.y=t.y,this.z=t.z,this}add(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(t,e)):(this.x+=t.x,this.y+=t.y,this.z+=t.z,this)}addScalar(t){return this.x+=t,this.y+=t,this.z+=t,this}addVectors(t,e){return this.x=t.x+e.x,this.y=t.y+e.y,this.z=t.z+e.z,this}addScaledVector(t,e){return this.x+=t.x*e,this.y+=t.y*e,this.z+=t.z*e,this}sub(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(t,e)):(this.x-=t.x,this.y-=t.y,this.z-=t.z,this)}subScalar(t){return this.x-=t,this.y-=t,this.z-=t,this}subVectors(t,e){return this.x=t.x-e.x,this.y=t.y-e.y,this.z=t.z-e.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\"),this.multiplyVectors(t,e)):(this.x*=t.x,this.y*=t.y,this.z*=t.z,this)}multiplyScalar(t){return this.x*=t,this.y*=t,this.z*=t,this}multiplyVectors(t,e){return this.x=t.x*e.x,this.y=t.y*e.y,this.z=t.z*e.z,this}applyEuler(t){return t\u0026\u0026t.isEuler||console.error(\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\"),this.applyQuaternion(ci.setFromEuler(t))}applyAxisAngle(t,e){return this.applyQuaternion(ci.setFromAxisAngle(t,e))}applyMatrix3(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[3]*n+r[6]*i,this.y=r[1]*e+r[4]*n+r[7]*i,this.z=r[2]*e+r[5]*n+r[8]*i,this}applyNormalMatrix(t){return this.applyMatrix3(t).normalize()}applyMatrix4(t){const e=this.x,n=this.y,i=this.z,r=t.elements,s=1/(r[3]*e+r[7]*n+r[11]*i+r[15]);return this.x=(r[0]*e+r[4]*n+r[8]*i+r[12])*s,this.y=(r[1]*e+r[5]*n+r[9]*i+r[13])*s,this.z=(r[2]*e+r[6]*n+r[10]*i+r[14])*s,this}applyQuaternion(t){const e=this.x,n=this.y,i=this.z,r=t.x,s=t.y,a=t.z,o=t.w,l=o*e+s*i-a*n,c=o*n+a*e-r*i,u=o*i+r*n-s*e,h=-r*e-s*n-a*i;return this.x=l*o+h*-r+c*-a-u*-s,this.y=c*o+h*-s+u*-r-l*-a,this.z=u*o+h*-a+l*-s-c*-r,this}project(t){return this.applyMatrix4(t.matrixWorldInverse).applyMatrix4(t.projectionMatrix)}unproject(t){return this.applyMatrix4(t.projectionMatrixInverse).applyMatrix4(t.matrixWorld)}transformDirection(t){const e=this.x,n=this.y,i=this.z,r=t.elements;return this.x=r[0]*e+r[4]*n+r[8]*i,this.y=r[1]*e+r[5]*n+r[9]*i,this.z=r[2]*e+r[6]*n+r[10]*i,this.normalize()}divide(t){return this.x/=t.x,this.y/=t.y,this.z/=t.z,this}divideScalar(t){return this.multiplyScalar(1/t)}min(t){return this.x=Math.min(this.x,t.x),this.y=Math.min(this.y,t.y),this.z=Math.min(this.z,t.z),this}max(t){return this.x=Math.max(this.x,t.x),this.y=Math.max(this.y,t.y),this.z=Math.max(this.z,t.z),this}clamp(t,e){return this.x=Math.max(t.x,Math.min(e.x,this.x)),this.y=Math.max(t.y,Math.min(e.y,this.y)),this.z=Math.max(t.z,Math.min(e.z,this.z)),this}clampScalar(t,e){return this.x=Math.max(t,Math.min(e,this.x)),this.y=Math.max(t,Math.min(e,this.y)),this.z=Math.max(t,Math.min(e,this.z)),this}clampLength(t,e){const n=this.length();return this.divideScalar(n||1).multiplyScalar(Math.max(t,Math.min(e,n)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(t){return this.x*t.x+this.y*t.y+this.z*t.z}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(t){return this.normalize().multiplyScalar(t)}lerp(t,e){return this.x+=(t.x-this.x)*e,this.y+=(t.y-this.y)*e,this.z+=(t.z-this.z)*e,this}lerpVectors(t,e,n){return this.x=t.x+(e.x-t.x)*n,this.y=t.y+(e.y-t.y)*n,this.z=t.z+(e.z-t.z)*n,this}cross(t,e){return void 0!==e?(console.warn(\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(t,e)):this.crossVectors(this,t)}crossVectors(t,e){const n=t.x,i=t.y,r=t.z,s=e.x,a=e.y,o=e.z;return this.x=i*o-r*a,this.y=r*s-n*o,this.z=n*a-i*s,this}projectOnVector(t){const e=t.lengthSq();if(0===e)return this.set(0,0,0);const n=t.dot(this)/e;return this.copy(t).multiplyScalar(n)}projectOnPlane(t){return li.copy(this).projectOnVector(t),this.sub(li)}reflect(t){return this.sub(li.copy(t).multiplyScalar(2*this.dot(t)))}angleTo(t){const e=Math.sqrt(this.lengthSq()*t.lengthSq());if(0===e)return Math.PI/2;const n=this.dot(t)/e;return Math.acos(kn(n,-1,1))}distanceTo(t){return Math.sqrt(this.distanceToSquared(t))}distanceToSquared(t){const e=this.x-t.x,n=this.y-t.y,i=this.z-t.z;return e*e+n*n+i*i}manhattanDistanceTo(t){return Math.abs(this.x-t.x)+Math.abs(this.y-t.y)+Math.abs(this.z-t.z)}setFromSpherical(t){return this.setFromSphericalCoords(t.radius,t.phi,t.theta)}setFromSphericalCoords(t,e,n){const i=Math.sin(e)*t;return this.x=i*Math.sin(n),this.y=Math.cos(e)*t,this.z=i*Math.cos(n),this}setFromCylindrical(t){return this.setFromCylindricalCoords(t.radius,t.theta,t.y)}setFromCylindricalCoords(t,e,n){return this.x=t*Math.sin(e),this.y=n,this.z=t*Math.cos(e),this}setFromMatrixPosition(t){const e=t.elements;return this.x=e[12],this.y=e[13],this.z=e[14],this}setFromMatrixScale(t){const e=this.setFromMatrixColumn(t,0).length(),n=this.setFromMatrixColumn(t,1).length(),i=this.setFromMatrixColumn(t,2).length();return this.x=e,this.y=n,this.z=i,this}setFromMatrixColumn(t,e){return this.fromArray(t.elements,4*e)}setFromMatrix3Column(t,e){return this.fromArray(t.elements,3*e)}equals(t){return t.x===this.x\u0026\u0026t.y===this.y\u0026\u0026t.z===this.z}fromArray(t,e=0){return this.x=t[e],this.y=t[e+1],this.z=t[e+2],this}toArray(t=[],e=0){return t[e]=this.x,t[e+1]=this.y,t[e+2]=this.z,t}fromBufferAttribute(t,e,n){return void 0!==n\u0026\u0026console.warn(\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\"),this.x=t.getX(e),this.y=t.getY(e),this.z=t.getZ(e),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}}oi.prototype.isVector3=!0;const li=new oi,ci=new ai;class ui{constructor(t=new oi(1/0,1/0,1/0),e=new oi(-1/0,-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromArray(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.length;o\u003cl;o+=3){const l=t[o],c=t[o+1],u=t[o+2];l\u003ce\u0026\u0026(e=l),c\u003cn\u0026\u0026(n=c),u\u003ci\u0026\u0026(i=u),l\u003er\u0026\u0026(r=l),c\u003es\u0026\u0026(s=c),u\u003ea\u0026\u0026(a=u)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromBufferAttribute(t){let e=1/0,n=1/0,i=1/0,r=-1/0,s=-1/0,a=-1/0;for(let o=0,l=t.count;o\u003cl;o++){const l=t.getX(o),c=t.getY(o),u=t.getZ(o);l\u003ce\u0026\u0026(e=l),c\u003cn\u0026\u0026(n=c),u\u003ci\u0026\u0026(i=u),l\u003er\u0026\u0026(r=l),c\u003es\u0026\u0026(s=c),u\u003ea\u0026\u0026(a=u)}return this.min.set(e,n,i),this.max.set(r,s,a),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e\u003cn;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=di.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}setFromObject(t){return this.makeEmpty(),this.expandByObject(t)}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x\u003cthis.min.x||this.max.y\u003cthis.min.y||this.max.z\u003cthis.min.z}getCenter(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box3: .getCenter() target is now required\"),t=new oi),this.isEmpty()?t.set(0,0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box3: .getSize() target is now required\"),t=new oi),this.isEmpty()?t.set(0,0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}expandByObject(t){t.updateWorldMatrix(!1,!1);const e=t.geometry;void 0!==e\u0026\u0026(null===e.boundingBox\u0026\u0026e.computeBoundingBox(),pi.copy(e.boundingBox),pi.applyMatrix4(t.matrixWorld),this.union(pi));const n=t.children;for(let t=0,e=n.length;t\u003ce;t++)this.expandByObject(n[t]);return this}containsPoint(t){return!(t.x\u003cthis.min.x||t.x\u003ethis.max.x||t.y\u003cthis.min.y||t.y\u003ethis.max.y||t.z\u003cthis.min.z||t.z\u003ethis.max.z)}containsBox(t){return this.min.x\u003c=t.min.x\u0026\u0026t.max.x\u003c=this.max.x\u0026\u0026this.min.y\u003c=t.min.y\u0026\u0026t.max.y\u003c=this.max.y\u0026\u0026this.min.z\u003c=t.min.z\u0026\u0026t.max.z\u003c=this.max.z}getParameter(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box3: .getParameter() target is now required\"),e=new oi),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y),(t.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(t){return!(t.max.x\u003cthis.min.x||t.min.x\u003ethis.max.x||t.max.y\u003cthis.min.y||t.min.y\u003ethis.max.y||t.max.z\u003cthis.min.z||t.min.z\u003ethis.max.z)}intersectsSphere(t){return this.clampPoint(t.center,di),di.distanceToSquared(t.center)\u003c=t.radius*t.radius}intersectsPlane(t){let e,n;return t.normal.x\u003e0?(e=t.normal.x*this.min.x,n=t.normal.x*this.max.x):(e=t.normal.x*this.max.x,n=t.normal.x*this.min.x),t.normal.y\u003e0?(e+=t.normal.y*this.min.y,n+=t.normal.y*this.max.y):(e+=t.normal.y*this.max.y,n+=t.normal.y*this.min.y),t.normal.z\u003e0?(e+=t.normal.z*this.min.z,n+=t.normal.z*this.max.z):(e+=t.normal.z*this.max.z,n+=t.normal.z*this.min.z),e\u003c=-t.constant\u0026\u0026n\u003e=-t.constant}intersectsTriangle(t){if(this.isEmpty())return!1;this.getCenter(_i),bi.subVectors(this.max,_i),fi.subVectors(t.a,_i),mi.subVectors(t.b,_i),gi.subVectors(t.c,_i),vi.subVectors(mi,fi),yi.subVectors(gi,mi),xi.subVectors(fi,gi);let e=[0,-vi.z,vi.y,0,-yi.z,yi.y,0,-xi.z,xi.y,vi.z,0,-vi.x,yi.z,0,-yi.x,xi.z,0,-xi.x,-vi.y,vi.x,0,-yi.y,yi.x,0,-xi.y,xi.x,0];return!!Si(e,fi,mi,gi,bi)\u0026\u0026(e=[1,0,0,0,1,0,0,0,1],!!Si(e,fi,mi,gi,bi)\u0026\u0026(wi.crossVectors(vi,yi),e=[wi.x,wi.y,wi.z],Si(e,fi,mi,gi,bi)))}clampPoint(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box3: .clampPoint() target is now required\"),e=new oi),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return di.copy(t).clamp(this.min,this.max).sub(t).length()}getBoundingSphere(t){return void 0===t\u0026\u0026console.error(\"THREE.Box3: .getBoundingSphere() target is now required\"),this.getCenter(t.center),t.radius=.5*this.getSize(di).length(),t}intersect(t){return this.min.max(t.min),this.max.min(t.max),this.isEmpty()\u0026\u0026this.makeEmpty(),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}applyMatrix4(t){return this.isEmpty()||(hi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(t),hi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(t),hi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(t),hi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(t),hi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(t),hi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(t),hi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(t),hi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(t),this.setFromPoints(hi)),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)\u0026\u0026t.max.equals(this.max)}}ui.prototype.isBox3=!0;const hi=[new oi,new oi,new oi,new oi,new oi,new oi,new oi,new oi],di=new oi,pi=new ui,fi=new oi,mi=new oi,gi=new oi,vi=new oi,yi=new oi,xi=new oi,_i=new oi,bi=new oi,wi=new oi,Mi=new oi;function Si(t,e,n,i,r){for(let s=0,a=t.length-3;s\u003c=a;s+=3){Mi.fromArray(t,s);const a=r.x*Math.abs(Mi.x)+r.y*Math.abs(Mi.y)+r.z*Math.abs(Mi.z),o=e.dot(Mi),l=n.dot(Mi),c=i.dot(Mi);if(Math.max(-Math.max(o,l,c),Math.min(o,l,c))\u003ea)return!1}return!0}const Ti=new ui,Ei=new oi,Ai=new oi,Li=new oi;class Ri{constructor(t=new oi,e=-1){this.center=t,this.radius=e}set(t,e){return this.center.copy(t),this.radius=e,this}setFromPoints(t,e){const n=this.center;void 0!==e?n.copy(e):Ti.setFromPoints(t).getCenter(n);let i=0;for(let e=0,r=t.length;e\u003cr;e++)i=Math.max(i,n.distanceToSquared(t[e]));return this.radius=Math.sqrt(i),this}copy(t){return this.center.copy(t.center),this.radius=t.radius,this}isEmpty(){return this.radius\u003c0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(t){return t.distanceToSquared(this.center)\u003c=this.radius*this.radius}distanceToPoint(t){return t.distanceTo(this.center)-this.radius}intersectsSphere(t){const e=this.radius+t.radius;return t.center.distanceToSquared(this.center)\u003c=e*e}intersectsBox(t){return t.intersectsSphere(this)}intersectsPlane(t){return Math.abs(t.distanceToPoint(this.center))\u003c=this.radius}clampPoint(t,e){const n=this.center.distanceToSquared(t);return void 0===e\u0026\u0026(console.warn(\"THREE.Sphere: .clampPoint() target is now required\"),e=new oi),e.copy(t),n\u003ethis.radius*this.radius\u0026\u0026(e.sub(this.center).normalize(),e.multiplyScalar(this.radius).add(this.center)),e}getBoundingBox(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Sphere: .getBoundingBox() target is now required\"),t=new ui),this.isEmpty()?(t.makeEmpty(),t):(t.set(this.center,this.center),t.expandByScalar(this.radius),t)}applyMatrix4(t){return this.center.applyMatrix4(t),this.radius=this.radius*t.getMaxScaleOnAxis(),this}translate(t){return this.center.add(t),this}expandByPoint(t){Li.subVectors(t,this.center);const e=Li.lengthSq();if(e\u003ethis.radius*this.radius){const t=Math.sqrt(e),n=.5*(t-this.radius);this.center.add(Li.multiplyScalar(n/t)),this.radius+=n}return this}union(t){return Ai.subVectors(t.center,this.center).normalize().multiplyScalar(t.radius),this.expandByPoint(Ei.copy(t.center).add(Ai)),this.expandByPoint(Ei.copy(t.center).sub(Ai)),this}equals(t){return t.center.equals(this.center)\u0026\u0026t.radius===this.radius}clone(){return(new this.constructor).copy(this)}}const Ci=new oi,Pi=new oi,Di=new oi,Ii=new oi,Ni=new oi,zi=new oi,Bi=new oi;class Oi{constructor(t=new oi,e=new oi(0,0,-1)){this.origin=t,this.direction=e}set(t,e){return this.origin.copy(t),this.direction.copy(e),this}copy(t){return this.origin.copy(t.origin),this.direction.copy(t.direction),this}at(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Ray: .at() target is now required\"),e=new oi),e.copy(this.direction).multiplyScalar(t).add(this.origin)}lookAt(t){return this.direction.copy(t).sub(this.origin).normalize(),this}recast(t){return this.origin.copy(this.at(t,Ci)),this}closestPointToPoint(t,e){void 0===e\u0026\u0026(console.warn(\"THREE.Ray: .closestPointToPoint() target is now required\"),e=new oi),e.subVectors(t,this.origin);const n=e.dot(this.direction);return n\u003c0?e.copy(this.origin):e.copy(this.direction).multiplyScalar(n).add(this.origin)}distanceToPoint(t){return Math.sqrt(this.distanceSqToPoint(t))}distanceSqToPoint(t){const e=Ci.subVectors(t,this.origin).dot(this.direction);return e\u003c0?this.origin.distanceToSquared(t):(Ci.copy(this.direction).multiplyScalar(e).add(this.origin),Ci.distanceToSquared(t))}distanceSqToSegment(t,e,n,i){Pi.copy(t).add(e).multiplyScalar(.5),Di.copy(e).sub(t).normalize(),Ii.copy(this.origin).sub(Pi);const r=.5*t.distanceTo(e),s=-this.direction.dot(Di),a=Ii.dot(this.direction),o=-Ii.dot(Di),l=Ii.lengthSq(),c=Math.abs(1-s*s);let u,h,d,p;if(c\u003e0)if(u=s*o-a,h=s*a-o,p=r*c,u\u003e=0)if(h\u003e=-p)if(h\u003c=p){const t=1/c;u*=t,h*=t,d=u*(u+s*h+2*a)+h*(s*u+h+2*o)+l}else h=r,u=Math.max(0,-(s*h+a)),d=-u*u+h*(h+2*o)+l;else h=-r,u=Math.max(0,-(s*h+a)),d=-u*u+h*(h+2*o)+l;else h\u003c=-p?(u=Math.max(0,-(-s*r+a)),h=u\u003e0?-r:Math.min(Math.max(-r,-o),r),d=-u*u+h*(h+2*o)+l):h\u003c=p?(u=0,h=Math.min(Math.max(-r,-o),r),d=h*(h+2*o)+l):(u=Math.max(0,-(s*r+a)),h=u\u003e0?r:Math.min(Math.max(-r,-o),r),d=-u*u+h*(h+2*o)+l);else h=s\u003e0?-r:r,u=Math.max(0,-(s*h+a)),d=-u*u+h*(h+2*o)+l;return n\u0026\u0026n.copy(this.direction).multiplyScalar(u).add(this.origin),i\u0026\u0026i.copy(Di).multiplyScalar(h).add(Pi),d}intersectSphere(t,e){Ci.subVectors(t.center,this.origin);const n=Ci.dot(this.direction),i=Ci.dot(Ci)-n*n,r=t.radius*t.radius;if(i\u003er)return null;const s=Math.sqrt(r-i),a=n-s,o=n+s;return a\u003c0\u0026\u0026o\u003c0?null:a\u003c0?this.at(o,e):this.at(a,e)}intersectsSphere(t){return this.distanceSqToPoint(t.center)\u003c=t.radius*t.radius}distanceToPlane(t){const e=t.normal.dot(this.direction);if(0===e)return 0===t.distanceToPoint(this.origin)?0:null;const n=-(this.origin.dot(t.normal)+t.constant)/e;return n\u003e=0?n:null}intersectPlane(t,e){const n=this.distanceToPlane(t);return null===n?null:this.at(n,e)}intersectsPlane(t){const e=t.distanceToPoint(this.origin);if(0===e)return!0;return t.normal.dot(this.direction)*e\u003c0}intersectBox(t,e){let n,i,r,s,a,o;const l=1/this.direction.x,c=1/this.direction.y,u=1/this.direction.z,h=this.origin;return l\u003e=0?(n=(t.min.x-h.x)*l,i=(t.max.x-h.x)*l):(n=(t.max.x-h.x)*l,i=(t.min.x-h.x)*l),c\u003e=0?(r=(t.min.y-h.y)*c,s=(t.max.y-h.y)*c):(r=(t.max.y-h.y)*c,s=(t.min.y-h.y)*c),n\u003es||r\u003ei?null:((r\u003en||n!=n)\u0026\u0026(n=r),(s\u003ci||i!=i)\u0026\u0026(i=s),u\u003e=0?(a=(t.min.z-h.z)*u,o=(t.max.z-h.z)*u):(a=(t.max.z-h.z)*u,o=(t.min.z-h.z)*u),n\u003eo||a\u003ei?null:((a\u003en||n!=n)\u0026\u0026(n=a),(o\u003ci||i!=i)\u0026\u0026(i=o),i\u003c0?null:this.at(n\u003e=0?n:i,e)))}intersectsBox(t){return null!==this.intersectBox(t,Ci)}intersectTriangle(t,e,n,i,r){Ni.subVectors(e,t),zi.subVectors(n,t),Bi.crossVectors(Ni,zi);let s,a=this.direction.dot(Bi);if(a\u003e0){if(i)return null;s=1}else{if(!(a\u003c0))return null;s=-1,a=-a}Ii.subVectors(this.origin,t);const o=s*this.direction.dot(zi.crossVectors(Ii,zi));if(o\u003c0)return null;const l=s*this.direction.dot(Ni.cross(Ii));if(l\u003c0)return null;if(o+l\u003ea)return null;const c=-s*Ii.dot(Bi);return c\u003c0?null:this.at(c/a,r)}applyMatrix4(t){return this.origin.applyMatrix4(t),this.direction.transformDirection(t),this}equals(t){return t.origin.equals(this.origin)\u0026\u0026t.direction.equals(this.direction)}clone(){return(new this.constructor).copy(this)}}class Fi{constructor(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\")}set(t,e,n,i,r,s,a,o,l,c,u,h,d,p,f,m){const g=this.elements;return g[0]=t,g[4]=e,g[8]=n,g[12]=i,g[1]=r,g[5]=s,g[9]=a,g[13]=o,g[2]=l,g[6]=c,g[10]=u,g[14]=h,g[3]=d,g[7]=p,g[11]=f,g[15]=m,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return(new Fi).fromArray(this.elements)}copy(t){const e=this.elements,n=t.elements;return e[0]=n[0],e[1]=n[1],e[2]=n[2],e[3]=n[3],e[4]=n[4],e[5]=n[5],e[6]=n[6],e[7]=n[7],e[8]=n[8],e[9]=n[9],e[10]=n[10],e[11]=n[11],e[12]=n[12],e[13]=n[13],e[14]=n[14],e[15]=n[15],this}copyPosition(t){const e=this.elements,n=t.elements;return e[12]=n[12],e[13]=n[13],e[14]=n[14],this}setFromMatrix3(t){const e=t.elements;return this.set(e[0],e[3],e[6],0,e[1],e[4],e[7],0,e[2],e[5],e[8],0,0,0,0,1),this}extractBasis(t,e,n){return t.setFromMatrixColumn(this,0),e.setFromMatrixColumn(this,1),n.setFromMatrixColumn(this,2),this}makeBasis(t,e,n){return this.set(t.x,e.x,n.x,0,t.y,e.y,n.y,0,t.z,e.z,n.z,0,0,0,0,1),this}extractRotation(t){const e=this.elements,n=t.elements,i=1/Hi.setFromMatrixColumn(t,0).length(),r=1/Hi.setFromMatrixColumn(t,1).length(),s=1/Hi.setFromMatrixColumn(t,2).length();return e[0]=n[0]*i,e[1]=n[1]*i,e[2]=n[2]*i,e[3]=0,e[4]=n[4]*r,e[5]=n[5]*r,e[6]=n[6]*r,e[7]=0,e[8]=n[8]*s,e[9]=n[9]*s,e[10]=n[10]*s,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromEuler(t){t\u0026\u0026t.isEuler||console.error(\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\");const e=this.elements,n=t.x,i=t.y,r=t.z,s=Math.cos(n),a=Math.sin(n),o=Math.cos(i),l=Math.sin(i),c=Math.cos(r),u=Math.sin(r);if(\"XYZ\"===t.order){const t=s*c,n=s*u,i=a*c,r=a*u;e[0]=o*c,e[4]=-o*u,e[8]=l,e[1]=n+i*l,e[5]=t-r*l,e[9]=-a*o,e[2]=r-t*l,e[6]=i+n*l,e[10]=s*o}else if(\"YXZ\"===t.order){const t=o*c,n=o*u,i=l*c,r=l*u;e[0]=t+r*a,e[4]=i*a-n,e[8]=s*l,e[1]=s*u,e[5]=s*c,e[9]=-a,e[2]=n*a-i,e[6]=r+t*a,e[10]=s*o}else if(\"ZXY\"===t.order){const t=o*c,n=o*u,i=l*c,r=l*u;e[0]=t-r*a,e[4]=-s*u,e[8]=i+n*a,e[1]=n+i*a,e[5]=s*c,e[9]=r-t*a,e[2]=-s*l,e[6]=a,e[10]=s*o}else if(\"ZYX\"===t.order){const t=s*c,n=s*u,i=a*c,r=a*u;e[0]=o*c,e[4]=i*l-n,e[8]=t*l+r,e[1]=o*u,e[5]=r*l+t,e[9]=n*l-i,e[2]=-l,e[6]=a*o,e[10]=s*o}else if(\"YZX\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=r-t*u,e[8]=i*u+n,e[1]=u,e[5]=s*c,e[9]=-a*c,e[2]=-l*c,e[6]=n*u+i,e[10]=t-r*u}else if(\"XZY\"===t.order){const t=s*o,n=s*l,i=a*o,r=a*l;e[0]=o*c,e[4]=-u,e[8]=l*c,e[1]=t*u+r,e[5]=s*c,e[9]=n*u-i,e[2]=i*u-n,e[6]=a*c,e[10]=r*u+t}return e[3]=0,e[7]=0,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,this}makeRotationFromQuaternion(t){return this.compose(Gi,t,ki)}lookAt(t,e,n){const i=this.elements;return ji.subVectors(t,e),0===ji.lengthSq()\u0026\u0026(ji.z=1),ji.normalize(),Vi.crossVectors(n,ji),0===Vi.lengthSq()\u0026\u0026(1===Math.abs(n.z)?ji.x+=1e-4:ji.z+=1e-4,ji.normalize(),Vi.crossVectors(n,ji)),Vi.normalize(),Wi.crossVectors(ji,Vi),i[0]=Vi.x,i[4]=Wi.x,i[8]=ji.x,i[1]=Vi.y,i[5]=Wi.y,i[9]=ji.y,i[2]=Vi.z,i[6]=Wi.z,i[10]=ji.z,this}multiply(t,e){return void 0!==e?(console.warn(\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\"),this.multiplyMatrices(t,e)):this.multiplyMatrices(this,t)}premultiply(t){return this.multiplyMatrices(t,this)}multiplyMatrices(t,e){const n=t.elements,i=e.elements,r=this.elements,s=n[0],a=n[4],o=n[8],l=n[12],c=n[1],u=n[5],h=n[9],d=n[13],p=n[2],f=n[6],m=n[10],g=n[14],v=n[3],y=n[7],x=n[11],_=n[15],b=i[0],w=i[4],M=i[8],S=i[12],T=i[1],E=i[5],A=i[9],L=i[13],R=i[2],C=i[6],P=i[10],D=i[14],I=i[3],N=i[7],z=i[11],B=i[15];return r[0]=s*b+a*T+o*R+l*I,r[4]=s*w+a*E+o*C+l*N,r[8]=s*M+a*A+o*P+l*z,r[12]=s*S+a*L+o*D+l*B,r[1]=c*b+u*T+h*R+d*I,r[5]=c*w+u*E+h*C+d*N,r[9]=c*M+u*A+h*P+d*z,r[13]=c*S+u*L+h*D+d*B,r[2]=p*b+f*T+m*R+g*I,r[6]=p*w+f*E+m*C+g*N,r[10]=p*M+f*A+m*P+g*z,r[14]=p*S+f*L+m*D+g*B,r[3]=v*b+y*T+x*R+_*I,r[7]=v*w+y*E+x*C+_*N,r[11]=v*M+y*A+x*P+_*z,r[15]=v*S+y*L+x*D+_*B,this}multiplyScalar(t){const e=this.elements;return e[0]*=t,e[4]*=t,e[8]*=t,e[12]*=t,e[1]*=t,e[5]*=t,e[9]*=t,e[13]*=t,e[2]*=t,e[6]*=t,e[10]*=t,e[14]*=t,e[3]*=t,e[7]*=t,e[11]*=t,e[15]*=t,this}determinant(){const t=this.elements,e=t[0],n=t[4],i=t[8],r=t[12],s=t[1],a=t[5],o=t[9],l=t[13],c=t[2],u=t[6],h=t[10],d=t[14];return t[3]*(+r*o*u-i*l*u-r*a*h+n*l*h+i*a*d-n*o*d)+t[7]*(+e*o*d-e*l*h+r*s*h-i*s*d+i*l*c-r*o*c)+t[11]*(+e*l*u-e*a*d-r*s*u+n*s*d+r*a*c-n*l*c)+t[15]*(-i*a*c-e*o*u+e*a*h+i*s*u-n*s*h+n*o*c)}transpose(){const t=this.elements;let e;return e=t[1],t[1]=t[4],t[4]=e,e=t[2],t[2]=t[8],t[8]=e,e=t[6],t[6]=t[9],t[9]=e,e=t[3],t[3]=t[12],t[12]=e,e=t[7],t[7]=t[13],t[13]=e,e=t[11],t[11]=t[14],t[14]=e,this}setPosition(t,e,n){const i=this.elements;return t.isVector3?(i[12]=t.x,i[13]=t.y,i[14]=t.z):(i[12]=t,i[13]=e,i[14]=n),this}invert(){const t=this.elements,e=t[0],n=t[1],i=t[2],r=t[3],s=t[4],a=t[5],o=t[6],l=t[7],c=t[8],u=t[9],h=t[10],d=t[11],p=t[12],f=t[13],m=t[14],g=t[15],v=u*m*l-f*h*l+f*o*d-a*m*d-u*o*g+a*h*g,y=p*h*l-c*m*l-p*o*d+s*m*d+c*o*g-s*h*g,x=c*f*l-p*u*l+p*a*d-s*f*d-c*a*g+s*u*g,_=p*u*o-c*f*o-p*a*h+s*f*h+c*a*m-s*u*m,b=e*v+n*y+i*x+r*_;if(0===b)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const w=1/b;return t[0]=v*w,t[1]=(f*h*r-u*m*r-f*i*d+n*m*d+u*i*g-n*h*g)*w,t[2]=(a*m*r-f*o*r+f*i*l-n*m*l-a*i*g+n*o*g)*w,t[3]=(u*o*r-a*h*r-u*i*l+n*h*l+a*i*d-n*o*d)*w,t[4]=y*w,t[5]=(c*m*r-p*h*r+p*i*d-e*m*d-c*i*g+e*h*g)*w,t[6]=(p*o*r-s*m*r-p*i*l+e*m*l+s*i*g-e*o*g)*w,t[7]=(s*h*r-c*o*r+c*i*l-e*h*l-s*i*d+e*o*d)*w,t[8]=x*w,t[9]=(p*u*r-c*f*r-p*n*d+e*f*d+c*n*g-e*u*g)*w,t[10]=(s*f*r-p*a*r+p*n*l-e*f*l-s*n*g+e*a*g)*w,t[11]=(c*a*r-s*u*r-c*n*l+e*u*l+s*n*d-e*a*d)*w,t[12]=_*w,t[13]=(c*f*i-p*u*i+p*n*h-e*f*h-c*n*m+e*u*m)*w,t[14]=(p*a*i-s*f*i-p*n*o+e*f*o+s*n*m-e*a*m)*w,t[15]=(s*u*i-c*a*i+c*n*o-e*u*o-s*n*h+e*a*h)*w,this}scale(t){const e=this.elements,n=t.x,i=t.y,r=t.z;return e[0]*=n,e[4]*=i,e[8]*=r,e[1]*=n,e[5]*=i,e[9]*=r,e[2]*=n,e[6]*=i,e[10]*=r,e[3]*=n,e[7]*=i,e[11]*=r,this}getMaxScaleOnAxis(){const t=this.elements,e=t[0]*t[0]+t[1]*t[1]+t[2]*t[2],n=t[4]*t[4]+t[5]*t[5]+t[6]*t[6],i=t[8]*t[8]+t[9]*t[9]+t[10]*t[10];return Math.sqrt(Math.max(e,n,i))}makeTranslation(t,e,n){return this.set(1,0,0,t,0,1,0,e,0,0,1,n,0,0,0,1),this}makeRotationX(t){const e=Math.cos(t),n=Math.sin(t);return this.set(1,0,0,0,0,e,-n,0,0,n,e,0,0,0,0,1),this}makeRotationY(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,0,n,0,0,1,0,0,-n,0,e,0,0,0,0,1),this}makeRotationZ(t){const e=Math.cos(t),n=Math.sin(t);return this.set(e,-n,0,0,n,e,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(t,e){const n=Math.cos(e),i=Math.sin(e),r=1-n,s=t.x,a=t.y,o=t.z,l=r*s,c=r*a;return this.set(l*s+n,l*a-i*o,l*o+i*a,0,l*a+i*o,c*a+n,c*o-i*s,0,l*o-i*a,c*o+i*s,r*o*o+n,0,0,0,0,1),this}makeScale(t,e,n){return this.set(t,0,0,0,0,e,0,0,0,0,n,0,0,0,0,1),this}makeShear(t,e,n,i,r,s){return this.set(1,n,r,0,t,1,s,0,e,i,1,0,0,0,0,1),this}compose(t,e,n){const i=this.elements,r=e._x,s=e._y,a=e._z,o=e._w,l=r+r,c=s+s,u=a+a,h=r*l,d=r*c,p=r*u,f=s*c,m=s*u,g=a*u,v=o*l,y=o*c,x=o*u,_=n.x,b=n.y,w=n.z;return i[0]=(1-(f+g))*_,i[1]=(d+x)*_,i[2]=(p-y)*_,i[3]=0,i[4]=(d-x)*b,i[5]=(1-(h+g))*b,i[6]=(m+v)*b,i[7]=0,i[8]=(p+y)*w,i[9]=(m-v)*w,i[10]=(1-(h+f))*w,i[11]=0,i[12]=t.x,i[13]=t.y,i[14]=t.z,i[15]=1,this}decompose(t,e,n){const i=this.elements;let r=Hi.set(i[0],i[1],i[2]).length();const s=Hi.set(i[4],i[5],i[6]).length(),a=Hi.set(i[8],i[9],i[10]).length();this.determinant()\u003c0\u0026\u0026(r=-r),t.x=i[12],t.y=i[13],t.z=i[14],Ui.copy(this);const o=1/r,l=1/s,c=1/a;return Ui.elements[0]*=o,Ui.elements[1]*=o,Ui.elements[2]*=o,Ui.elements[4]*=l,Ui.elements[5]*=l,Ui.elements[6]*=l,Ui.elements[8]*=c,Ui.elements[9]*=c,Ui.elements[10]*=c,e.setFromRotationMatrix(Ui),n.x=r,n.y=s,n.z=a,this}makePerspective(t,e,n,i,r,s){void 0===s\u0026\u0026console.warn(\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\");const a=this.elements,o=2*r/(e-t),l=2*r/(n-i),c=(e+t)/(e-t),u=(n+i)/(n-i),h=-(s+r)/(s-r),d=-2*s*r/(s-r);return a[0]=o,a[4]=0,a[8]=c,a[12]=0,a[1]=0,a[5]=l,a[9]=u,a[13]=0,a[2]=0,a[6]=0,a[10]=h,a[14]=d,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(t,e,n,i,r,s){const a=this.elements,o=1/(e-t),l=1/(n-i),c=1/(s-r),u=(e+t)*o,h=(n+i)*l,d=(s+r)*c;return a[0]=2*o,a[4]=0,a[8]=0,a[12]=-u,a[1]=0,a[5]=2*l,a[9]=0,a[13]=-h,a[2]=0,a[6]=0,a[10]=-2*c,a[14]=-d,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(t){const e=this.elements,n=t.elements;for(let t=0;t\u003c16;t++)if(e[t]!==n[t])return!1;return!0}fromArray(t,e=0){for(let n=0;n\u003c16;n++)this.elements[n]=t[n+e];return this}toArray(t=[],e=0){const n=this.elements;return t[e]=n[0],t[e+1]=n[1],t[e+2]=n[2],t[e+3]=n[3],t[e+4]=n[4],t[e+5]=n[5],t[e+6]=n[6],t[e+7]=n[7],t[e+8]=n[8],t[e+9]=n[9],t[e+10]=n[10],t[e+11]=n[11],t[e+12]=n[12],t[e+13]=n[13],t[e+14]=n[14],t[e+15]=n[15],t}}Fi.prototype.isMatrix4=!0;const Hi=new oi,Ui=new Fi,Gi=new oi(0,0,0),ki=new oi(1,1,1),Vi=new oi,Wi=new oi,ji=new oi,qi=new Fi,Xi=new ai;class Yi{constructor(t=0,e=0,n=0,i=Yi.DefaultOrder){this._x=t,this._y=e,this._z=n,this._order=i}get x(){return this._x}set x(t){this._x=t,this._onChangeCallback()}get y(){return this._y}set y(t){this._y=t,this._onChangeCallback()}get z(){return this._z}set z(t){this._z=t,this._onChangeCallback()}get order(){return this._order}set order(t){this._order=t,this._onChangeCallback()}set(t,e,n,i){return this._x=t,this._y=e,this._z=n,this._order=i||this._order,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(t){return this._x=t._x,this._y=t._y,this._z=t._z,this._order=t._order,this._onChangeCallback(),this}setFromRotationMatrix(t,e,n){const i=t.elements,r=i[0],s=i[4],a=i[8],o=i[1],l=i[5],c=i[9],u=i[2],h=i[6],d=i[10];switch(e=e||this._order){case\"XYZ\":this._y=Math.asin(kn(a,-1,1)),Math.abs(a)\u003c.9999999?(this._x=Math.atan2(-c,d),this._z=Math.atan2(-s,r)):(this._x=Math.atan2(h,l),this._z=0);break;case\"YXZ\":this._x=Math.asin(-kn(c,-1,1)),Math.abs(c)\u003c.9999999?(this._y=Math.atan2(a,d),this._z=Math.atan2(o,l)):(this._y=Math.atan2(-u,r),this._z=0);break;case\"ZXY\":this._x=Math.asin(kn(h,-1,1)),Math.abs(h)\u003c.9999999?(this._y=Math.atan2(-u,d),this._z=Math.atan2(-s,l)):(this._y=0,this._z=Math.atan2(o,r));break;case\"ZYX\":this._y=Math.asin(-kn(u,-1,1)),Math.abs(u)\u003c.9999999?(this._x=Math.atan2(h,d),this._z=Math.atan2(o,r)):(this._x=0,this._z=Math.atan2(-s,l));break;case\"YZX\":this._z=Math.asin(kn(o,-1,1)),Math.abs(o)\u003c.9999999?(this._x=Math.atan2(-c,l),this._y=Math.atan2(-u,r)):(this._x=0,this._y=Math.atan2(a,d));break;case\"XZY\":this._z=Math.asin(-kn(s,-1,1)),Math.abs(s)\u003c.9999999?(this._x=Math.atan2(h,l),this._y=Math.atan2(a,r)):(this._x=Math.atan2(-c,d),this._y=0);break;default:console.warn(\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \"+e)}return this._order=e,!1!==n\u0026\u0026this._onChangeCallback(),this}setFromQuaternion(t,e,n){return qi.makeRotationFromQuaternion(t),this.setFromRotationMatrix(qi,e,n)}setFromVector3(t,e){return this.set(t.x,t.y,t.z,e||this._order)}reorder(t){return Xi.setFromEuler(this),this.setFromQuaternion(Xi,t)}equals(t){return t._x===this._x\u0026\u0026t._y===this._y\u0026\u0026t._z===this._z\u0026\u0026t._order===this._order}fromArray(t){return this._x=t[0],this._y=t[1],this._z=t[2],void 0!==t[3]\u0026\u0026(this._order=t[3]),this._onChangeCallback(),this}toArray(t=[],e=0){return t[e]=this._x,t[e+1]=this._y,t[e+2]=this._z,t[e+3]=this._order,t}toVector3(t){return t?t.set(this._x,this._y,this._z):new oi(this._x,this._y,this._z)}_onChange(t){return this._onChangeCallback=t,this}_onChangeCallback(){}}Yi.prototype.isEuler=!0,Yi.DefaultOrder=\"XYZ\",Yi.RotationOrders=[\"XYZ\",\"YZX\",\"ZXY\",\"XZY\",\"YXZ\",\"ZYX\"];class Zi{constructor(){this.mask=1}set(t){this.mask=1\u003c\u003ct|0}enable(t){this.mask|=1\u003c\u003ct|0}enableAll(){this.mask=-1}toggle(t){this.mask^=1\u003c\u003ct|0}disable(t){this.mask\u0026=~(1\u003c\u003ct|0)}disableAll(){this.mask=0}test(t){return 0!=(this.mask\u0026t.mask)}}let Ji=0;const Qi=new oi,Ki=new ai,$i=new Fi,tr=new oi,er=new oi,nr=new oi,ir=new ai,rr=new oi(1,0,0),sr=new oi(0,1,0),ar=new oi(0,0,1),or={type:\"added\"},lr={type:\"removed\"};class cr extends Bn{constructor(){super(),Object.defineProperty(this,\"id\",{value:Ji++}),this.uuid=Gn(),this.name=\"\",this.type=\"Object3D\",this.parent=null,this.children=[],this.up=cr.DefaultUp.clone();const t=new oi,e=new Yi,n=new ai,i=new oi(1,1,1);e._onChange((function(){n.setFromEuler(e,!1)})),n._onChange((function(){e.setFromQuaternion(n,void 0,!1)})),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:t},rotation:{configurable:!0,enumerable:!0,value:e},quaternion:{configurable:!0,enumerable:!0,value:n},scale:{configurable:!0,enumerable:!0,value:i},modelViewMatrix:{value:new Fi},normalMatrix:{value:new Jn}}),this.matrix=new Fi,this.matrixWorld=new Fi,this.matrixAutoUpdate=cr.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new Zi,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(t){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),this.matrix.premultiply(t),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(t){return this.quaternion.premultiply(t),this}setRotationFromAxisAngle(t,e){this.quaternion.setFromAxisAngle(t,e)}setRotationFromEuler(t){this.quaternion.setFromEuler(t,!0)}setRotationFromMatrix(t){this.quaternion.setFromRotationMatrix(t)}setRotationFromQuaternion(t){this.quaternion.copy(t)}rotateOnAxis(t,e){return Ki.setFromAxisAngle(t,e),this.quaternion.multiply(Ki),this}rotateOnWorldAxis(t,e){return Ki.setFromAxisAngle(t,e),this.quaternion.premultiply(Ki),this}rotateX(t){return this.rotateOnAxis(rr,t)}rotateY(t){return this.rotateOnAxis(sr,t)}rotateZ(t){return this.rotateOnAxis(ar,t)}translateOnAxis(t,e){return Qi.copy(t).applyQuaternion(this.quaternion),this.position.add(Qi.multiplyScalar(e)),this}translateX(t){return this.translateOnAxis(rr,t)}translateY(t){return this.translateOnAxis(sr,t)}translateZ(t){return this.translateOnAxis(ar,t)}localToWorld(t){return t.applyMatrix4(this.matrixWorld)}worldToLocal(t){return t.applyMatrix4($i.copy(this.matrixWorld).invert())}lookAt(t,e,n){t.isVector3?tr.copy(t):tr.set(t,e,n);const i=this.parent;this.updateWorldMatrix(!0,!1),er.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?$i.lookAt(er,tr,this.up):$i.lookAt(tr,er,this.up),this.quaternion.setFromRotationMatrix($i),i\u0026\u0026($i.extractRotation(i.matrixWorld),Ki.setFromRotationMatrix($i),this.quaternion.premultiply(Ki.invert()))}add(t){if(arguments.length\u003e1){for(let t=0;t\u003carguments.length;t++)this.add(arguments[t]);return this}return t===this?(console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",t),this):(t\u0026\u0026t.isObject3D?(null!==t.parent\u0026\u0026t.parent.remove(t),t.parent=this,this.children.push(t),t.dispatchEvent(or)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",t),this)}remove(t){if(arguments.length\u003e1){for(let t=0;t\u003carguments.length;t++)this.remove(arguments[t]);return this}const e=this.children.indexOf(t);return-1!==e\u0026\u0026(t.parent=null,this.children.splice(e,1),t.dispatchEvent(lr)),this}removeFromParent(){const t=this.parent;return null!==t\u0026\u0026t.remove(this),this}clear(){for(let t=0;t\u003cthis.children.length;t++){const e=this.children[t];e.parent=null,e.dispatchEvent(lr)}return this.children.length=0,this}attach(t){return this.updateWorldMatrix(!0,!1),$i.copy(this.matrixWorld).invert(),null!==t.parent\u0026\u0026(t.parent.updateWorldMatrix(!0,!1),$i.multiply(t.parent.matrixWorld)),t.applyMatrix4($i),this.add(t),t.updateWorldMatrix(!1,!0),this}getObjectById(t){return this.getObjectByProperty(\"id\",t)}getObjectByName(t){return this.getObjectByProperty(\"name\",t)}getObjectByProperty(t,e){if(this[t]===e)return this;for(let n=0,i=this.children.length;n\u003ci;n++){const i=this.children[n].getObjectByProperty(t,e);if(void 0!==i)return i}}getWorldPosition(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldPosition() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1),t.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldQuaternion() target is now required\"),t=new ai),this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(er,t,nr),t}getWorldScale(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldScale() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(er,ir,t),t}getWorldDirection(t){void 0===t\u0026\u0026(console.warn(\"THREE.Object3D: .getWorldDirection() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(e[8],e[9],e[10]).normalize()}raycast(){}traverse(t){t(this);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].traverse(t)}traverseVisible(t){if(!1===this.visible)return;t(this);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].traverseVisible(t)}traverseAncestors(t){const e=this.parent;null!==e\u0026\u0026(t(e),e.traverseAncestors(t))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(t){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),(this.matrixWorldNeedsUpdate||t)\u0026\u0026(null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,t=!0);const e=this.children;for(let n=0,i=e.length;n\u003ci;n++)e[n].updateMatrixWorld(t)}updateWorldMatrix(t,e){const n=this.parent;if(!0===t\u0026\u0026null!==n\u0026\u0026n.updateWorldMatrix(!0,!1),this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),!0===e){const t=this.children;for(let e=0,n=t.length;e\u003cn;e++)t[e].updateWorldMatrix(!1,!0)}}toJSON(t){const e=void 0===t||\"string\"==typeof t,n={};e\u0026\u0026(t={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{}},n.metadata={version:4.5,type:\"Object\",generator:\"Object3D.toJSON\"});const i={};function r(e,n){return void 0===e[n.uuid]\u0026\u0026(e[n.uuid]=n.toJSON(t)),n.uuid}if(i.uuid=this.uuid,i.type=this.type,\"\"!==this.name\u0026\u0026(i.name=this.name),!0===this.castShadow\u0026\u0026(i.castShadow=!0),!0===this.receiveShadow\u0026\u0026(i.receiveShadow=!0),!1===this.visible\u0026\u0026(i.visible=!1),!1===this.frustumCulled\u0026\u0026(i.frustumCulled=!1),0!==this.renderOrder\u0026\u0026(i.renderOrder=this.renderOrder),\"{}\"!==JSON.stringify(this.userData)\u0026\u0026(i.userData=this.userData),i.layers=this.layers.mask,i.matrix=this.matrix.toArray(),!1===this.matrixAutoUpdate\u0026\u0026(i.matrixAutoUpdate=!1),this.isInstancedMesh\u0026\u0026(i.type=\"InstancedMesh\",i.count=this.count,i.instanceMatrix=this.instanceMatrix.toJSON(),null!==this.instanceColor\u0026\u0026(i.instanceColor=this.instanceColor.toJSON())),this.isMesh||this.isLine||this.isPoints){i.geometry=r(t.geometries,this.geometry);const e=this.geometry.parameters;if(void 0!==e\u0026\u0026void 0!==e.shapes){const n=e.shapes;if(Array.isArray(n))for(let e=0,i=n.length;e\u003ci;e++){const i=n[e];r(t.shapes,i)}else r(t.shapes,n)}}if(this.isSkinnedMesh\u0026\u0026(i.bindMode=this.bindMode,i.bindMatrix=this.bindMatrix.toArray(),void 0!==this.skeleton\u0026\u0026(r(t.skeletons,this.skeleton),i.skeleton=this.skeleton.uuid)),void 0!==this.material)if(Array.isArray(this.material)){const e=[];for(let n=0,i=this.material.length;n\u003ci;n++)e.push(r(t.materials,this.material[n]));i.material=e}else i.material=r(t.materials,this.material);if(this.children.length\u003e0){i.children=[];for(let e=0;e\u003cthis.children.length;e++)i.children.push(this.children[e].toJSON(t).object)}if(this.animations.length\u003e0){i.animations=[];for(let e=0;e\u003cthis.animations.length;e++){const n=this.animations[e];i.animations.push(r(t.animations,n))}}if(e){const e=s(t.geometries),i=s(t.materials),r=s(t.textures),a=s(t.images),o=s(t.shapes),l=s(t.skeletons),c=s(t.animations);e.length\u003e0\u0026\u0026(n.geometries=e),i.length\u003e0\u0026\u0026(n.materials=i),r.length\u003e0\u0026\u0026(n.textures=r),a.length\u003e0\u0026\u0026(n.images=a),o.length\u003e0\u0026\u0026(n.shapes=o),l.length\u003e0\u0026\u0026(n.skeletons=l),c.length\u003e0\u0026\u0026(n.animations=c)}return n.object=i,n;function s(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}}clone(t){return(new this.constructor).copy(this,t)}copy(t,e=!0){if(this.name=t.name,this.up.copy(t.up),this.position.copy(t.position),this.rotation.order=t.rotation.order,this.quaternion.copy(t.quaternion),this.scale.copy(t.scale),this.matrix.copy(t.matrix),this.matrixWorld.copy(t.matrixWorld),this.matrixAutoUpdate=t.matrixAutoUpdate,this.matrixWorldNeedsUpdate=t.matrixWorldNeedsUpdate,this.layers.mask=t.layers.mask,this.visible=t.visible,this.castShadow=t.castShadow,this.receiveShadow=t.receiveShadow,this.frustumCulled=t.frustumCulled,this.renderOrder=t.renderOrder,this.userData=JSON.parse(JSON.stringify(t.userData)),!0===e)for(let e=0;e\u003ct.children.length;e++){const n=t.children[e];this.add(n.clone())}return this}}cr.DefaultUp=new oi(0,1,0),cr.DefaultMatrixAutoUpdate=!0,cr.prototype.isObject3D=!0;const ur=new oi,hr=new oi,dr=new Jn;class pr{constructor(t=new oi(1,0,0),e=0){this.normal=t,this.constant=e}set(t,e){return this.normal.copy(t),this.constant=e,this}setComponents(t,e,n,i){return this.normal.set(t,e,n),this.constant=i,this}setFromNormalAndCoplanarPoint(t,e){return this.normal.copy(t),this.constant=-e.dot(this.normal),this}setFromCoplanarPoints(t,e,n){const i=ur.subVectors(n,e).cross(hr.subVectors(t,e)).normalize();return this.setFromNormalAndCoplanarPoint(i,t),this}copy(t){return this.normal.copy(t.normal),this.constant=t.constant,this}normalize(){const t=1/this.normal.length();return this.normal.multiplyScalar(t),this.constant*=t,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(t){return this.normal.dot(t)+this.constant}distanceToSphere(t){return this.distanceToPoint(t.center)-t.radius}projectPoint(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Plane: .projectPoint() target is now required\"),e=new oi),e.copy(this.normal).multiplyScalar(-this.distanceToPoint(t)).add(t)}intersectLine(t,e){void 0===e\u0026\u0026(console.warn(\"THREE.Plane: .intersectLine() target is now required\"),e=new oi);const n=t.delta(ur),i=this.normal.dot(n);if(0===i)return 0===this.distanceToPoint(t.start)?e.copy(t.start):null;const r=-(t.start.dot(this.normal)+this.constant)/i;return r\u003c0||r\u003e1?null:e.copy(n).multiplyScalar(r).add(t.start)}intersectsLine(t){const e=this.distanceToPoint(t.start),n=this.distanceToPoint(t.end);return e\u003c0\u0026\u0026n\u003e0||n\u003c0\u0026\u0026e\u003e0}intersectsBox(t){return t.intersectsPlane(this)}intersectsSphere(t){return t.intersectsPlane(this)}coplanarPoint(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Plane: .coplanarPoint() target is now required\"),t=new oi),t.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(t,e){const n=e||dr.getNormalMatrix(t),i=this.coplanarPoint(ur).applyMatrix4(t),r=this.normal.applyMatrix3(n).normalize();return this.constant=-i.dot(r),this}translate(t){return this.constant-=t.dot(this.normal),this}equals(t){return t.normal.equals(this.normal)\u0026\u0026t.constant===this.constant}clone(){return(new this.constructor).copy(this)}}pr.prototype.isPlane=!0;const fr=new oi,mr=new oi,gr=new oi,vr=new oi,yr=new oi,xr=new oi,_r=new oi,br=new oi,wr=new oi,Mr=new oi;class Sr{constructor(t=new oi,e=new oi,n=new oi){this.a=t,this.b=e,this.c=n}static getNormal(t,e,n,i){void 0===i\u0026\u0026(console.warn(\"THREE.Triangle: .getNormal() target is now required\"),i=new oi),i.subVectors(n,e),fr.subVectors(t,e),i.cross(fr);const r=i.lengthSq();return r\u003e0?i.multiplyScalar(1/Math.sqrt(r)):i.set(0,0,0)}static getBarycoord(t,e,n,i,r){fr.subVectors(i,e),mr.subVectors(n,e),gr.subVectors(t,e);const s=fr.dot(fr),a=fr.dot(mr),o=fr.dot(gr),l=mr.dot(mr),c=mr.dot(gr),u=s*l-a*a;if(void 0===r\u0026\u0026(console.warn(\"THREE.Triangle: .getBarycoord() target is now required\"),r=new oi),0===u)return r.set(-2,-1,-1);const h=1/u,d=(l*o-a*c)*h,p=(s*c-a*o)*h;return r.set(1-d-p,p,d)}static containsPoint(t,e,n,i){return this.getBarycoord(t,e,n,i,vr),vr.x\u003e=0\u0026\u0026vr.y\u003e=0\u0026\u0026vr.x+vr.y\u003c=1}static getUV(t,e,n,i,r,s,a,o){return this.getBarycoord(t,e,n,i,vr),o.set(0,0),o.addScaledVector(r,vr.x),o.addScaledVector(s,vr.y),o.addScaledVector(a,vr.z),o}static isFrontFacing(t,e,n,i){return fr.subVectors(n,e),mr.subVectors(t,e),fr.cross(mr).dot(i)\u003c0}set(t,e,n){return this.a.copy(t),this.b.copy(e),this.c.copy(n),this}setFromPointsAndIndices(t,e,n,i){return this.a.copy(t[e]),this.b.copy(t[n]),this.c.copy(t[i]),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.a.copy(t.a),this.b.copy(t.b),this.c.copy(t.c),this}getArea(){return fr.subVectors(this.c,this.b),mr.subVectors(this.a,this.b),.5*fr.cross(mr).length()}getMidpoint(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Triangle: .getMidpoint() target is now required\"),t=new oi),t.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return Sr.getNormal(this.a,this.b,this.c,t)}getPlane(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Triangle: .getPlane() target is now required\"),t=new pr),t.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,e){return Sr.getBarycoord(t,this.a,this.b,this.c,e)}getUV(t,e,n,i,r){return Sr.getUV(t,this.a,this.b,this.c,e,n,i,r)}containsPoint(t){return Sr.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return Sr.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(t){return t.intersectsTriangle(this)}closestPointToPoint(t,e){void 0===e\u0026\u0026(console.warn(\"THREE.Triangle: .closestPointToPoint() target is now required\"),e=new oi);const n=this.a,i=this.b,r=this.c;let s,a;yr.subVectors(i,n),xr.subVectors(r,n),br.subVectors(t,n);const o=yr.dot(br),l=xr.dot(br);if(o\u003c=0\u0026\u0026l\u003c=0)return e.copy(n);wr.subVectors(t,i);const c=yr.dot(wr),u=xr.dot(wr);if(c\u003e=0\u0026\u0026u\u003c=c)return e.copy(i);const h=o*u-c*l;if(h\u003c=0\u0026\u0026o\u003e=0\u0026\u0026c\u003c=0)return s=o/(o-c),e.copy(n).addScaledVector(yr,s);Mr.subVectors(t,r);const d=yr.dot(Mr),p=xr.dot(Mr);if(p\u003e=0\u0026\u0026d\u003c=p)return e.copy(r);const f=d*l-o*p;if(f\u003c=0\u0026\u0026l\u003e=0\u0026\u0026p\u003c=0)return a=l/(l-p),e.copy(n).addScaledVector(xr,a);const m=c*p-d*u;if(m\u003c=0\u0026\u0026u-c\u003e=0\u0026\u0026d-p\u003e=0)return _r.subVectors(r,i),a=(u-c)/(u-c+(d-p)),e.copy(i).addScaledVector(_r,a);const g=1/(m+f+h);return s=f*g,a=h*g,e.copy(n).addScaledVector(yr,s).addScaledVector(xr,a)}equals(t){return t.a.equals(this.a)\u0026\u0026t.b.equals(this.b)\u0026\u0026t.c.equals(this.c)}}let Tr=0;class Er extends Bn{constructor(){super(),Object.defineProperty(this,\"id\",{value:Tr++}),this.uuid=Gn(),this.name=\"\",this.type=\"Material\",this.fog=!0,this.blending=_,this.side=f,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=N,this.blendDst=z,this.blendEquation=T,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=W,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=Sn,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=un,this.stencilZFail=un,this.stencilZPass=un,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaTest=0,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0}onBuild(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(t){if(void 0!==t)for(const e in t){const n=t[e];if(void 0===n){console.warn(\"THREE.Material: '\"+e+\"' parameter is undefined.\");continue}if(\"shading\"===e){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=n===v;continue}const i=this[e];void 0!==i?i\u0026\u0026i.isColor?i.set(n):i\u0026\u0026i.isVector3\u0026\u0026n\u0026\u0026n.isVector3?i.copy(n):this[e]=n:console.warn(\"THREE.\"+this.type+\": '\"+e+\"' is not a property of this material.\")}}toJSON(t){const e=void 0===t||\"string\"==typeof t;e\u0026\u0026(t={textures:{},images:{}});const n={metadata:{version:4.5,type:\"Material\",generator:\"Material.toJSON\"}};function i(t){const e=[];for(const n in t){const i=t[n];delete i.metadata,e.push(i)}return e}if(n.uuid=this.uuid,n.type=this.type,\"\"!==this.name\u0026\u0026(n.name=this.name),this.color\u0026\u0026this.color.isColor\u0026\u0026(n.color=this.color.getHex()),void 0!==this.roughness\u0026\u0026(n.roughness=this.roughness),void 0!==this.metalness\u0026\u0026(n.metalness=this.metalness),this.sheen\u0026\u0026this.sheen.isColor\u0026\u0026(n.sheen=this.sheen.getHex()),this.emissive\u0026\u0026this.emissive.isColor\u0026\u0026(n.emissive=this.emissive.getHex()),this.emissiveIntensity\u0026\u00261!==this.emissiveIntensity\u0026\u0026(n.emissiveIntensity=this.emissiveIntensity),this.specular\u0026\u0026this.specular.isColor\u0026\u0026(n.specular=this.specular.getHex()),void 0!==this.shininess\u0026\u0026(n.shininess=this.shininess),void 0!==this.clearcoat\u0026\u0026(n.clearcoat=this.clearcoat),void 0!==this.clearcoatRoughness\u0026\u0026(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap\u0026\u0026this.clearcoatMap.isTexture\u0026\u0026(n.clearcoatMap=this.clearcoatMap.toJSON(t).uuid),this.clearcoatRoughnessMap\u0026\u0026this.clearcoatRoughnessMap.isTexture\u0026\u0026(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(t).uuid),this.clearcoatNormalMap\u0026\u0026this.clearcoatNormalMap.isTexture\u0026\u0026(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(t).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.map\u0026\u0026this.map.isTexture\u0026\u0026(n.map=this.map.toJSON(t).uuid),this.matcap\u0026\u0026this.matcap.isTexture\u0026\u0026(n.matcap=this.matcap.toJSON(t).uuid),this.alphaMap\u0026\u0026this.alphaMap.isTexture\u0026\u0026(n.alphaMap=this.alphaMap.toJSON(t).uuid),this.lightMap\u0026\u0026this.lightMap.isTexture\u0026\u0026(n.lightMap=this.lightMap.toJSON(t).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap\u0026\u0026this.aoMap.isTexture\u0026\u0026(n.aoMap=this.aoMap.toJSON(t).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap\u0026\u0026this.bumpMap.isTexture\u0026\u0026(n.bumpMap=this.bumpMap.toJSON(t).uuid,n.bumpScale=this.bumpScale),this.normalMap\u0026\u0026this.normalMap.isTexture\u0026\u0026(n.normalMap=this.normalMap.toJSON(t).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap\u0026\u0026this.displacementMap.isTexture\u0026\u0026(n.displacementMap=this.displacementMap.toJSON(t).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap\u0026\u0026this.roughnessMap.isTexture\u0026\u0026(n.roughnessMap=this.roughnessMap.toJSON(t).uuid),this.metalnessMap\u0026\u0026this.metalnessMap.isTexture\u0026\u0026(n.metalnessMap=this.metalnessMap.toJSON(t).uuid),this.emissiveMap\u0026\u0026this.emissiveMap.isTexture\u0026\u0026(n.emissiveMap=this.emissiveMap.toJSON(t).uuid),this.specularMap\u0026\u0026this.specularMap.isTexture\u0026\u0026(n.specularMap=this.specularMap.toJSON(t).uuid),this.envMap\u0026\u0026this.envMap.isTexture\u0026\u0026(n.envMap=this.envMap.toJSON(t).uuid,void 0!==this.combine\u0026\u0026(n.combine=this.combine)),void 0!==this.envMapIntensity\u0026\u0026(n.envMapIntensity=this.envMapIntensity),void 0!==this.reflectivity\u0026\u0026(n.reflectivity=this.reflectivity),void 0!==this.refractionRatio\u0026\u0026(n.refractionRatio=this.refractionRatio),this.gradientMap\u0026\u0026this.gradientMap.isTexture\u0026\u0026(n.gradientMap=this.gradientMap.toJSON(t).uuid),void 0!==this.transmission\u0026\u0026(n.transmission=this.transmission),this.transmissionMap\u0026\u0026this.transmissionMap.isTexture\u0026\u0026(n.transmissionMap=this.transmissionMap.toJSON(t).uuid),void 0!==this.thickness\u0026\u0026(n.thickness=this.thickness),this.thicknessMap\u0026\u0026this.thicknessMap.isTexture\u0026\u0026(n.thicknessMap=this.thicknessMap.toJSON(t).uuid),void 0!==this.attenuationDistance\u0026\u0026(n.attenuationDistance=this.attenuationDistance),void 0!==this.attenuationColor\u0026\u0026(n.attenuationColor=this.attenuationColor.getHex()),void 0!==this.size\u0026\u0026(n.size=this.size),null!==this.shadowSide\u0026\u0026(n.shadowSide=this.shadowSide),void 0!==this.sizeAttenuation\u0026\u0026(n.sizeAttenuation=this.sizeAttenuation),this.blending!==_\u0026\u0026(n.blending=this.blending),this.side!==f\u0026\u0026(n.side=this.side),this.vertexColors\u0026\u0026(n.vertexColors=!0),this.opacity\u003c1\u0026\u0026(n.opacity=this.opacity),!0===this.transparent\u0026\u0026(n.transparent=this.transparent),n.depthFunc=this.depthFunc,n.depthTest=this.depthTest,n.depthWrite=this.depthWrite,n.colorWrite=this.colorWrite,n.stencilWrite=this.stencilWrite,n.stencilWriteMask=this.stencilWriteMask,n.stencilFunc=this.stencilFunc,n.stencilRef=this.stencilRef,n.stencilFuncMask=this.stencilFuncMask,n.stencilFail=this.stencilFail,n.stencilZFail=this.stencilZFail,n.stencilZPass=this.stencilZPass,this.rotation\u0026\u00260!==this.rotation\u0026\u0026(n.rotation=this.rotation),!0===this.polygonOffset\u0026\u0026(n.polygonOffset=!0),0!==this.polygonOffsetFactor\u0026\u0026(n.polygonOffsetFactor=this.polygonOffsetFactor),0!==this.polygonOffsetUnits\u0026\u0026(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth\u0026\u00261!==this.linewidth\u0026\u0026(n.linewidth=this.linewidth),void 0!==this.dashSize\u0026\u0026(n.dashSize=this.dashSize),void 0!==this.gapSize\u0026\u0026(n.gapSize=this.gapSize),void 0!==this.scale\u0026\u0026(n.scale=this.scale),!0===this.dithering\u0026\u0026(n.dithering=!0),this.alphaTest\u003e0\u0026\u0026(n.alphaTest=this.alphaTest),!0===this.alphaToCoverage\u0026\u0026(n.alphaToCoverage=this.alphaToCoverage),!0===this.premultipliedAlpha\u0026\u0026(n.premultipliedAlpha=this.premultipliedAlpha),!0===this.wireframe\u0026\u0026(n.wireframe=this.wireframe),this.wireframeLinewidth\u003e1\u0026\u0026(n.wireframeLinewidth=this.wireframeLinewidth),\"round\"!==this.wireframeLinecap\u0026\u0026(n.wireframeLinecap=this.wireframeLinecap),\"round\"!==this.wireframeLinejoin\u0026\u0026(n.wireframeLinejoin=this.wireframeLinejoin),!0===this.morphTargets\u0026\u0026(n.morphTargets=!0),!0===this.morphNormals\u0026\u0026(n.morphNormals=!0),!0===this.flatShading\u0026\u0026(n.flatShading=this.flatShading),!1===this.visible\u0026\u0026(n.visible=!1),!1===this.toneMapped\u0026\u0026(n.toneMapped=!1),\"{}\"!==JSON.stringify(this.userData)\u0026\u0026(n.userData=this.userData),e){const e=i(t.textures),r=i(t.images);e.length\u003e0\u0026\u0026(n.textures=e),r.length\u003e0\u0026\u0026(n.images=r)}return n}clone(){return(new this.constructor).copy(this)}copy(t){this.name=t.name,this.fog=t.fog,this.blending=t.blending,this.side=t.side,this.vertexColors=t.vertexColors,this.opacity=t.opacity,this.transparent=t.transparent,this.blendSrc=t.blendSrc,this.blendDst=t.blendDst,this.blendEquation=t.blendEquation,this.blendSrcAlpha=t.blendSrcAlpha,this.blendDstAlpha=t.blendDstAlpha,this.blendEquationAlpha=t.blendEquationAlpha,this.depthFunc=t.depthFunc,this.depthTest=t.depthTest,this.depthWrite=t.depthWrite,this.stencilWriteMask=t.stencilWriteMask,this.stencilFunc=t.stencilFunc,this.stencilRef=t.stencilRef,this.stencilFuncMask=t.stencilFuncMask,this.stencilFail=t.stencilFail,this.stencilZFail=t.stencilZFail,this.stencilZPass=t.stencilZPass,this.stencilWrite=t.stencilWrite;const e=t.clippingPlanes;let n=null;if(null!==e){const t=e.length;n=new Array(t);for(let i=0;i!==t;++i)n[i]=e[i].clone()}return this.clippingPlanes=n,this.clipIntersection=t.clipIntersection,this.clipShadows=t.clipShadows,this.shadowSide=t.shadowSide,this.colorWrite=t.colorWrite,this.precision=t.precision,this.polygonOffset=t.polygonOffset,this.polygonOffsetFactor=t.polygonOffsetFactor,this.polygonOffsetUnits=t.polygonOffsetUnits,this.dithering=t.dithering,this.alphaTest=t.alphaTest,this.alphaToCoverage=t.alphaToCoverage,this.premultipliedAlpha=t.premultipliedAlpha,this.visible=t.visible,this.toneMapped=t.toneMapped,this.userData=JSON.parse(JSON.stringify(t.userData)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}set needsUpdate(t){!0===t\u0026\u0026this.version++}}Er.prototype.isMaterial=!0;const Ar={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},Lr={h:0,s:0,l:0},Rr={h:0,s:0,l:0};function Cr(t,e,n){return n\u003c0\u0026\u0026(n+=1),n\u003e1\u0026\u0026(n-=1),n\u003c1/6?t+6*(e-t)*n:n\u003c.5?e:n\u003c2/3?t+6*(e-t)*(2/3-n):t}function Pr(t){return t\u003c.04045?.0773993808*t:Math.pow(.9478672986*t+.0521327014,2.4)}function Dr(t){return t\u003c.0031308?12.92*t:1.055*Math.pow(t,.41666)-.055}class Ir{constructor(t,e,n){return void 0===e\u0026\u0026void 0===n?this.set(t):this.setRGB(t,e,n)}set(t){return t\u0026\u0026t.isColor?this.copy(t):\"number\"==typeof t?this.setHex(t):\"string\"==typeof t\u0026\u0026this.setStyle(t),this}setScalar(t){return this.r=t,this.g=t,this.b=t,this}setHex(t){return t=Math.floor(t),this.r=(t\u003e\u003e16\u0026255)/255,this.g=(t\u003e\u003e8\u0026255)/255,this.b=(255\u0026t)/255,this}setRGB(t,e,n){return this.r=t,this.g=e,this.b=n,this}setHSL(t,e,n){if(t=Vn(t,1),e=kn(e,0,1),n=kn(n,0,1),0===e)this.r=this.g=this.b=n;else{const i=n\u003c=.5?n*(1+e):n+e-n*e,r=2*n-i;this.r=Cr(r,i,t+1/3),this.g=Cr(r,i,t),this.b=Cr(r,i,t-1/3)}return this}setStyle(t){function e(e){void 0!==e\u0026\u0026parseFloat(e)\u003c1\u0026\u0026console.warn(\"THREE.Color: Alpha component of \"+t+\" will be ignored.\")}let n;if(n=/^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec(t)){let t;const i=n[1],r=n[2];switch(i){case\"rgb\":case\"rgba\":if(t=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return this.r=Math.min(255,parseInt(t[1],10))/255,this.g=Math.min(255,parseInt(t[2],10))/255,this.b=Math.min(255,parseInt(t[3],10))/255,e(t[4]),this;if(t=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r))return this.r=Math.min(100,parseInt(t[1],10))/100,this.g=Math.min(100,parseInt(t[2],10))/100,this.b=Math.min(100,parseInt(t[3],10))/100,e(t[4]),this;break;case\"hsl\":case\"hsla\":if(t=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(r)){const n=parseFloat(t[1])/360,i=parseInt(t[2],10)/100,r=parseInt(t[3],10)/100;return e(t[4]),this.setHSL(n,i,r)}}}else if(n=/^\\#([A-Fa-f\\d]+)$/.exec(t)){const t=n[1],e=t.length;if(3===e)return this.r=parseInt(t.charAt(0)+t.charAt(0),16)/255,this.g=parseInt(t.charAt(1)+t.charAt(1),16)/255,this.b=parseInt(t.charAt(2)+t.charAt(2),16)/255,this;if(6===e)return this.r=parseInt(t.charAt(0)+t.charAt(1),16)/255,this.g=parseInt(t.charAt(2)+t.charAt(3),16)/255,this.b=parseInt(t.charAt(4)+t.charAt(5),16)/255,this}return t\u0026\u0026t.length\u003e0?this.setColorName(t):this}setColorName(t){const e=Ar[t.toLowerCase()];return void 0!==e?this.setHex(e):console.warn(\"THREE.Color: Unknown color \"+t),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(t){return this.r=t.r,this.g=t.g,this.b=t.b,this}copyGammaToLinear(t,e=2){return this.r=Math.pow(t.r,e),this.g=Math.pow(t.g,e),this.b=Math.pow(t.b,e),this}copyLinearToGamma(t,e=2){const n=e\u003e0?1/e:1;return this.r=Math.pow(t.r,n),this.g=Math.pow(t.g,n),this.b=Math.pow(t.b,n),this}convertGammaToLinear(t){return this.copyGammaToLinear(this,t),this}convertLinearToGamma(t){return this.copyLinearToGamma(this,t),this}copySRGBToLinear(t){return this.r=Pr(t.r),this.g=Pr(t.g),this.b=Pr(t.b),this}copyLinearToSRGB(t){return this.r=Dr(t.r),this.g=Dr(t.g),this.b=Dr(t.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(){return 255*this.r\u003c\u003c16^255*this.g\u003c\u003c8^255*this.b\u003c\u003c0}getHexString(){return(\"000000\"+this.getHex().toString(16)).slice(-6)}getHSL(t){void 0===t\u0026\u0026(console.warn(\"THREE.Color: .getHSL() target is now required\"),t={h:0,s:0,l:0});const e=this.r,n=this.g,i=this.b,r=Math.max(e,n,i),s=Math.min(e,n,i);let a,o;const l=(s+r)/2;if(s===r)a=0,o=0;else{const t=r-s;switch(o=l\u003c=.5?t/(r+s):t/(2-r-s),r){case e:a=(n-i)/t+(n\u003ci?6:0);break;case n:a=(i-e)/t+2;break;case i:a=(e-n)/t+4}a/=6}return t.h=a,t.s=o,t.l=l,t}getStyle(){return\"rgb(\"+(255*this.r|0)+\",\"+(255*this.g|0)+\",\"+(255*this.b|0)+\")\"}offsetHSL(t,e,n){return this.getHSL(Lr),Lr.h+=t,Lr.s+=e,Lr.l+=n,this.setHSL(Lr.h,Lr.s,Lr.l),this}add(t){return this.r+=t.r,this.g+=t.g,this.b+=t.b,this}addColors(t,e){return this.r=t.r+e.r,this.g=t.g+e.g,this.b=t.b+e.b,this}addScalar(t){return this.r+=t,this.g+=t,this.b+=t,this}sub(t){return this.r=Math.max(0,this.r-t.r),this.g=Math.max(0,this.g-t.g),this.b=Math.max(0,this.b-t.b),this}multiply(t){return this.r*=t.r,this.g*=t.g,this.b*=t.b,this}multiplyScalar(t){return this.r*=t,this.g*=t,this.b*=t,this}lerp(t,e){return this.r+=(t.r-this.r)*e,this.g+=(t.g-this.g)*e,this.b+=(t.b-this.b)*e,this}lerpColors(t,e,n){return this.r=t.r+(e.r-t.r)*n,this.g=t.g+(e.g-t.g)*n,this.b=t.b+(e.b-t.b)*n,this}lerpHSL(t,e){this.getHSL(Lr),t.getHSL(Rr);const n=Wn(Lr.h,Rr.h,e),i=Wn(Lr.s,Rr.s,e),r=Wn(Lr.l,Rr.l,e);return this.setHSL(n,i,r),this}equals(t){return t.r===this.r\u0026\u0026t.g===this.g\u0026\u0026t.b===this.b}fromArray(t,e=0){return this.r=t[e],this.g=t[e+1],this.b=t[e+2],this}toArray(t=[],e=0){return t[e]=this.r,t[e+1]=this.g,t[e+2]=this.b,t}fromBufferAttribute(t,e){return this.r=t.getX(e),this.g=t.getY(e),this.b=t.getZ(e),!0===t.normalized\u0026\u0026(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}}Ir.NAMES=Ar,Ir.prototype.isColor=!0,Ir.prototype.r=1,Ir.prototype.g=1,Ir.prototype.b=1;class Nr extends Er{constructor(t){super(),this.type=\"MeshBasicMaterial\",this.color=new Ir(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.combine=Z,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this}}Nr.prototype.isMeshBasicMaterial=!0;const zr=new oi,Br=new Zn;class Or{constructor(t,e,n){if(Array.isArray(t))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.name=\"\",this.array=t,this.itemSize=e,this.count=void 0!==t?t.length/e:0,this.normalized=!0===n,this.usage=Tn,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(t){!0===t\u0026\u0026this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.name=t.name,this.array=new t.array.constructor(t.array),this.itemSize=t.itemSize,this.count=t.count,this.normalized=t.normalized,this.usage=t.usage,this}copyAt(t,e,n){t*=this.itemSize,n*=e.itemSize;for(let i=0,r=this.itemSize;i\u003cr;i++)this.array[t+i]=e.array[n+i];return this}copyArray(t){return this.array.set(t),this}copyColorsArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyColorsArray(): color is undefined\",i),r=new Ir),e[n++]=r.r,e[n++]=r.g,e[n++]=r.b}return this}copyVector2sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\",i),r=new Zn),e[n++]=r.x,e[n++]=r.y}return this}copyVector3sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\",i),r=new oi),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z}return this}copyVector4sArray(t){const e=this.array;let n=0;for(let i=0,r=t.length;i\u003cr;i++){let r=t[i];void 0===r\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\",i),r=new ni),e[n++]=r.x,e[n++]=r.y,e[n++]=r.z,e[n++]=r.w}return this}applyMatrix3(t){if(2===this.itemSize)for(let e=0,n=this.count;e\u003cn;e++)Br.fromBufferAttribute(this,e),Br.applyMatrix3(t),this.setXY(e,Br.x,Br.y);else if(3===this.itemSize)for(let e=0,n=this.count;e\u003cn;e++)zr.fromBufferAttribute(this,e),zr.applyMatrix3(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}applyMatrix4(t){for(let e=0,n=this.count;e\u003cn;e++)zr.x=this.getX(e),zr.y=this.getY(e),zr.z=this.getZ(e),zr.applyMatrix4(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e\u003cn;e++)zr.x=this.getX(e),zr.y=this.getY(e),zr.z=this.getZ(e),zr.applyNormalMatrix(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}transformDirection(t){for(let e=0,n=this.count;e\u003cn;e++)zr.x=this.getX(e),zr.y=this.getY(e),zr.z=this.getZ(e),zr.transformDirection(t),this.setXYZ(e,zr.x,zr.y,zr.z);return this}set(t,e=0){return this.array.set(t,e),this}getX(t){return this.array[t*this.itemSize]}setX(t,e){return this.array[t*this.itemSize]=e,this}getY(t){return this.array[t*this.itemSize+1]}setY(t,e){return this.array[t*this.itemSize+1]=e,this}getZ(t){return this.array[t*this.itemSize+2]}setZ(t,e){return this.array[t*this.itemSize+2]=e,this}getW(t){return this.array[t*this.itemSize+3]}setW(t,e){return this.array[t*this.itemSize+3]=e,this}setXY(t,e,n){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this}setXYZ(t,e,n,i){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t*=this.itemSize,this.array[t+0]=e,this.array[t+1]=n,this.array[t+2]=i,this.array[t+3]=r,this}onUpload(t){return this.onUploadCallback=t,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const t={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return\"\"!==this.name\u0026\u0026(t.name=this.name),this.usage!==Tn\u0026\u0026(t.usage=this.usage),0===this.updateRange.offset\u0026\u0026-1===this.updateRange.count||(t.updateRange=this.updateRange),t}}Or.prototype.isBufferAttribute=!0;class Fr extends Or{constructor(t,e,n){super(new Int8Array(t),e,n)}}class Hr extends Or{constructor(t,e,n){super(new Uint8Array(t),e,n)}}class Ur extends Or{constructor(t,e,n){super(new Uint8ClampedArray(t),e,n)}}class Gr extends Or{constructor(t,e,n){super(new Int16Array(t),e,n)}}class kr extends Or{constructor(t,e,n){super(new Uint16Array(t),e,n)}}class Vr extends Or{constructor(t,e,n){super(new Int32Array(t),e,n)}}class Wr extends Or{constructor(t,e,n){super(new Uint32Array(t),e,n)}}class jr extends Or{constructor(t,e,n){super(new Uint16Array(t),e,n)}}jr.prototype.isFloat16BufferAttribute=!0;class qr extends Or{constructor(t,e,n){super(new Float32Array(t),e,n)}}class Xr extends Or{constructor(t,e,n){super(new Float64Array(t),e,n)}}function Yr(t){if(0===t.length)return-1/0;let e=t[0];for(let n=1,i=t.length;n\u003ci;++n)t[n]\u003ee\u0026\u0026(e=t[n]);return e}const Zr={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:Uint8ClampedArray,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};function Jr(t,e){return new Zr[t](e)}let Qr=0;const Kr=new Fi,$r=new cr,ts=new oi,es=new ui,ns=new ui,is=new oi;class rs extends Bn{constructor(){super(),Object.defineProperty(this,\"id\",{value:Qr++}),this.uuid=Gn(),this.name=\"\",this.type=\"BufferGeometry\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(t){return Array.isArray(t)?this.index=new(Yr(t)\u003e65535?Wr:kr)(t,1):this.index=t,this}getAttribute(t){return this.attributes[t]}setAttribute(t,e){return this.attributes[t]=e,this}deleteAttribute(t){return delete this.attributes[t],this}hasAttribute(t){return void 0!==this.attributes[t]}addGroup(t,e,n=0){this.groups.push({start:t,count:e,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(t,e){this.drawRange.start=t,this.drawRange.count=e}applyMatrix4(t){const e=this.attributes.position;void 0!==e\u0026\u0026(e.applyMatrix4(t),e.needsUpdate=!0);const n=this.attributes.normal;if(void 0!==n){const e=(new Jn).getNormalMatrix(t);n.applyNormalMatrix(e),n.needsUpdate=!0}const i=this.attributes.tangent;return void 0!==i\u0026\u0026(i.transformDirection(t),i.needsUpdate=!0),null!==this.boundingBox\u0026\u0026this.computeBoundingBox(),null!==this.boundingSphere\u0026\u0026this.computeBoundingSphere(),this}applyQuaternion(t){return Kr.makeRotationFromQuaternion(t),this.applyMatrix4(Kr),this}rotateX(t){return Kr.makeRotationX(t),this.applyMatrix4(Kr),this}rotateY(t){return Kr.makeRotationY(t),this.applyMatrix4(Kr),this}rotateZ(t){return Kr.makeRotationZ(t),this.applyMatrix4(Kr),this}translate(t,e,n){return Kr.makeTranslation(t,e,n),this.applyMatrix4(Kr),this}scale(t,e,n){return Kr.makeScale(t,e,n),this.applyMatrix4(Kr),this}lookAt(t){return $r.lookAt(t),$r.updateMatrix(),this.applyMatrix4($r.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(ts).negate(),this.translate(ts.x,ts.y,ts.z),this}setFromPoints(t){const e=[];for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];e.push(i.x,i.y,i.z||0)}return this.setAttribute(\"position\",new qr(e,3)),this}computeBoundingBox(){null===this.boundingBox\u0026\u0026(this.boundingBox=new ui);const t=this.attributes.position,e=this.morphAttributes.position;if(t\u0026\u0026t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingBox.set(new oi(-1/0,-1/0,-1/0),new oi(1/0,1/0,1/0));if(void 0!==t){if(this.boundingBox.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];es.setFromBufferAttribute(n),this.morphTargetsRelative?(is.addVectors(this.boundingBox.min,es.min),this.boundingBox.expandByPoint(is),is.addVectors(this.boundingBox.max,es.max),this.boundingBox.expandByPoint(is)):(this.boundingBox.expandByPoint(es.min),this.boundingBox.expandByPoint(es.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){null===this.boundingSphere\u0026\u0026(this.boundingSphere=new Ri);const t=this.attributes.position,e=this.morphAttributes.position;if(t\u0026\u0026t.isGLBufferAttribute)return console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),void this.boundingSphere.set(new oi,1/0);if(t){const n=this.boundingSphere.center;if(es.setFromBufferAttribute(t),e)for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];ns.setFromBufferAttribute(n),this.morphTargetsRelative?(is.addVectors(es.min,ns.min),es.expandByPoint(is),is.addVectors(es.max,ns.max),es.expandByPoint(is)):(es.expandByPoint(ns.min),es.expandByPoint(ns.max))}es.getCenter(n);let i=0;for(let e=0,r=t.count;e\u003cr;e++)is.fromBufferAttribute(t,e),i=Math.max(i,n.distanceToSquared(is));if(e)for(let r=0,s=e.length;r\u003cs;r++){const s=e[r],a=this.morphTargetsRelative;for(let e=0,r=s.count;e\u003cr;e++)is.fromBufferAttribute(s,e),a\u0026\u0026(ts.fromBufferAttribute(t,e),is.add(ts)),i=Math.max(i,n.distanceToSquared(is))}this.boundingSphere.radius=Math.sqrt(i),isNaN(this.boundingSphere.radius)\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}computeFaceNormals(){}computeTangents(){const t=this.index,e=this.attributes;if(null===t||void 0===e.position||void 0===e.normal||void 0===e.uv)return void console.error(\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\");const n=t.array,i=e.position.array,r=e.normal.array,s=e.uv.array,a=i.length/3;void 0===e.tangent\u0026\u0026this.setAttribute(\"tangent\",new Or(new Float32Array(4*a),4));const o=e.tangent.array,l=[],c=[];for(let t=0;t\u003ca;t++)l[t]=new oi,c[t]=new oi;const u=new oi,h=new oi,d=new oi,p=new Zn,f=new Zn,m=new Zn,g=new oi,v=new oi;function y(t,e,n){u.fromArray(i,3*t),h.fromArray(i,3*e),d.fromArray(i,3*n),p.fromArray(s,2*t),f.fromArray(s,2*e),m.fromArray(s,2*n),h.sub(u),d.sub(u),f.sub(p),m.sub(p);const r=1/(f.x*m.y-m.x*f.y);isFinite(r)\u0026\u0026(g.copy(h).multiplyScalar(m.y).addScaledVector(d,-f.y).multiplyScalar(r),v.copy(d).multiplyScalar(f.x).addScaledVector(h,-m.x).multiplyScalar(r),l[t].add(g),l[e].add(g),l[n].add(g),c[t].add(v),c[e].add(v),c[n].add(v))}let x=this.groups;0===x.length\u0026\u0026(x=[{start:0,count:n.length}]);for(let t=0,e=x.length;t\u003ce;++t){const e=x[t],i=e.start;for(let t=i,r=i+e.count;t\u003cr;t+=3)y(n[t+0],n[t+1],n[t+2])}const _=new oi,b=new oi,w=new oi,M=new oi;function S(t){w.fromArray(r,3*t),M.copy(w);const e=l[t];_.copy(e),_.sub(w.multiplyScalar(w.dot(e))).normalize(),b.crossVectors(M,e);const n=b.dot(c[t])\u003c0?-1:1;o[4*t]=_.x,o[4*t+1]=_.y,o[4*t+2]=_.z,o[4*t+3]=n}for(let t=0,e=x.length;t\u003ce;++t){const e=x[t],i=e.start;for(let t=i,r=i+e.count;t\u003cr;t+=3)S(n[t+0]),S(n[t+1]),S(n[t+2])}}computeVertexNormals(){const t=this.index,e=this.getAttribute(\"position\");if(void 0!==e){let n=this.getAttribute(\"normal\");if(void 0===n)n=new Or(new Float32Array(3*e.count),3),this.setAttribute(\"normal\",n);else for(let t=0,e=n.count;t\u003ce;t++)n.setXYZ(t,0,0,0);const i=new oi,r=new oi,s=new oi,a=new oi,o=new oi,l=new oi,c=new oi,u=new oi;if(t)for(let h=0,d=t.count;h\u003cd;h+=3){const d=t.getX(h+0),p=t.getX(h+1),f=t.getX(h+2);i.fromBufferAttribute(e,d),r.fromBufferAttribute(e,p),s.fromBufferAttribute(e,f),c.subVectors(s,r),u.subVectors(i,r),c.cross(u),a.fromBufferAttribute(n,d),o.fromBufferAttribute(n,p),l.fromBufferAttribute(n,f),a.add(c),o.add(c),l.add(c),n.setXYZ(d,a.x,a.y,a.z),n.setXYZ(p,o.x,o.y,o.z),n.setXYZ(f,l.x,l.y,l.z)}else for(let t=0,a=e.count;t\u003ca;t+=3)i.fromBufferAttribute(e,t+0),r.fromBufferAttribute(e,t+1),s.fromBufferAttribute(e,t+2),c.subVectors(s,r),u.subVectors(i,r),c.cross(u),n.setXYZ(t+0,c.x,c.y,c.z),n.setXYZ(t+1,c.x,c.y,c.z),n.setXYZ(t+2,c.x,c.y,c.z);this.normalizeNormals(),n.needsUpdate=!0}}merge(t,e){if(!t||!t.isBufferGeometry)return void console.error(\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\",t);void 0===e\u0026\u0026(e=0,console.warn(\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\"));const n=this.attributes;for(const i in n){if(void 0===t.attributes[i])continue;const r=n[i].array,s=t.attributes[i],a=s.array,o=s.itemSize*e,l=Math.min(a.length,r.length-o);for(let t=0,e=o;t\u003cl;t++,e++)r[e]=a[t]}return this}normalizeNormals(){const t=this.attributes.normal;for(let e=0,n=t.count;e\u003cn;e++)is.fromBufferAttribute(t,e),is.normalize(),t.setXYZ(e,is.x,is.y,is.z)}toNonIndexed(){function t(t,e){const n=t.array,i=t.itemSize,r=t.normalized,s=new n.constructor(e.length*i);let a=0,o=0;for(let t=0,r=e.length;t\u003cr;t++){a=e[t]*i;for(let t=0;t\u003ci;t++)s[o++]=n[a++]}return new Or(s,i,r)}if(null===this.index)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\"),this;const e=new rs,n=this.index.array,i=this.attributes;for(const r in i){const s=t(i[r],n);e.setAttribute(r,s)}const r=this.morphAttributes;for(const i in r){const s=[],a=r[i];for(let e=0,i=a.length;e\u003ci;e++){const i=t(a[e],n);s.push(i)}e.morphAttributes[i]=s}e.morphTargetsRelative=this.morphTargetsRelative;const s=this.groups;for(let t=0,n=s.length;t\u003cn;t++){const n=s[t];e.addGroup(n.start,n.count,n.materialIndex)}return e}toJSON(){const t={metadata:{version:4.5,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};if(t.uuid=this.uuid,t.type=this.type,\"\"!==this.name\u0026\u0026(t.name=this.name),Object.keys(this.userData).length\u003e0\u0026\u0026(t.userData=this.userData),void 0!==this.parameters){const e=this.parameters;for(const n in e)void 0!==e[n]\u0026\u0026(t[n]=e[n]);return t}t.data={attributes:{}};const e=this.index;null!==e\u0026\u0026(t.data.index={type:e.array.constructor.name,array:Array.prototype.slice.call(e.array)});const n=this.attributes;for(const e in n){const i=n[e];t.data.attributes[e]=i.toJSON(t.data)}const i={};let r=!1;for(const e in this.morphAttributes){const n=this.morphAttributes[e],s=[];for(let e=0,i=n.length;e\u003ci;e++){const i=n[e];s.push(i.toJSON(t.data))}s.length\u003e0\u0026\u0026(i[e]=s,r=!0)}r\u0026\u0026(t.data.morphAttributes=i,t.data.morphTargetsRelative=this.morphTargetsRelative);const s=this.groups;s.length\u003e0\u0026\u0026(t.data.groups=JSON.parse(JSON.stringify(s)));const a=this.boundingSphere;return null!==a\u0026\u0026(t.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),t}clone(){return(new rs).copy(this)}copy(t){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const e={};this.name=t.name;const n=t.index;null!==n\u0026\u0026this.setIndex(n.clone(e));const i=t.attributes;for(const t in i){const n=i[t];this.setAttribute(t,n.clone(e))}const r=t.morphAttributes;for(const t in r){const n=[],i=r[t];for(let t=0,r=i.length;t\u003cr;t++)n.push(i[t].clone(e));this.morphAttributes[t]=n}this.morphTargetsRelative=t.morphTargetsRelative;const s=t.groups;for(let t=0,e=s.length;t\u003ce;t++){const e=s[t];this.addGroup(e.start,e.count,e.materialIndex)}const a=t.boundingBox;null!==a\u0026\u0026(this.boundingBox=a.clone());const o=t.boundingSphere;return null!==o\u0026\u0026(this.boundingSphere=o.clone()),this.drawRange.start=t.drawRange.start,this.drawRange.count=t.drawRange.count,this.userData=t.userData,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}rs.prototype.isBufferGeometry=!0;const ss=new Fi,as=new Oi,os=new Ri,ls=new oi,cs=new oi,us=new oi,hs=new oi,ds=new oi,ps=new oi,fs=new oi,ms=new oi,gs=new oi,vs=new Zn,ys=new Zn,xs=new Zn,_s=new oi,bs=new oi;class ws extends cr{constructor(t=new rs,e=new Nr){super(),this.type=\"Mesh\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),void 0!==t.morphTargetInfluences\u0026\u0026(this.morphTargetInfluences=t.morphTargetInfluences.slice()),void 0!==t.morphTargetDictionary\u0026\u0026(this.morphTargetDictionary=Object.assign({},t.morphTargetDictionary)),this.material=t.material,this.geometry=t.geometry,this}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}raycast(t,e){const n=this.geometry,i=this.material,r=this.matrixWorld;if(void 0===i)return;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),os.copy(n.boundingSphere),os.applyMatrix4(r),!1===t.ray.intersectsSphere(os))return;if(ss.copy(r).invert(),as.copy(t.ray).applyMatrix4(ss),null!==n.boundingBox\u0026\u0026!1===as.intersectsBox(n.boundingBox))return;let s;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position,o=n.morphAttributes.position,l=n.morphTargetsRelative,c=n.attributes.uv,u=n.attributes.uv2,h=n.groups,d=n.drawRange;if(null!==r)if(Array.isArray(i))for(let n=0,p=h.length;n\u003cp;n++){const p=h[n],f=i[p.materialIndex];for(let n=Math.max(p.start,d.start),i=Math.min(p.start+p.count,d.start+d.count);n\u003ci;n+=3){const i=r.getX(n),h=r.getX(n+1),d=r.getX(n+2);s=Ms(this,f,t,as,a,o,l,c,u,i,h,d),s\u0026\u0026(s.faceIndex=Math.floor(n/3),s.face.materialIndex=p.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),h=Math.min(r.count,d.start+d.count);n\u003ch;n+=3){const h=r.getX(n),d=r.getX(n+1),p=r.getX(n+2);s=Ms(this,i,t,as,a,o,l,c,u,h,d,p),s\u0026\u0026(s.faceIndex=Math.floor(n/3),e.push(s))}}else if(void 0!==a)if(Array.isArray(i))for(let n=0,r=h.length;n\u003cr;n++){const r=h[n],p=i[r.materialIndex];for(let n=Math.max(r.start,d.start),i=Math.min(r.start+r.count,d.start+d.count);n\u003ci;n+=3){s=Ms(this,p,t,as,a,o,l,c,u,n,n+1,n+2),s\u0026\u0026(s.faceIndex=Math.floor(n/3),s.face.materialIndex=r.materialIndex,e.push(s))}}else{for(let n=Math.max(0,d.start),r=Math.min(a.count,d.start+d.count);n\u003cr;n+=3){s=Ms(this,i,t,as,a,o,l,c,u,n,n+1,n+2),s\u0026\u0026(s.faceIndex=Math.floor(n/3),e.push(s))}}}else n.isGeometry\u0026\u0026console.error(\"THREE.Mesh.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}}function Ms(t,e,n,i,r,s,a,o,l,c,u,h){ls.fromBufferAttribute(r,c),cs.fromBufferAttribute(r,u),us.fromBufferAttribute(r,h);const d=t.morphTargetInfluences;if(e.morphTargets\u0026\u0026s\u0026\u0026d){fs.set(0,0,0),ms.set(0,0,0),gs.set(0,0,0);for(let t=0,e=s.length;t\u003ce;t++){const e=d[t],n=s[t];0!==e\u0026\u0026(hs.fromBufferAttribute(n,c),ds.fromBufferAttribute(n,u),ps.fromBufferAttribute(n,h),a?(fs.addScaledVector(hs,e),ms.addScaledVector(ds,e),gs.addScaledVector(ps,e)):(fs.addScaledVector(hs.sub(ls),e),ms.addScaledVector(ds.sub(cs),e),gs.addScaledVector(ps.sub(us),e)))}ls.add(fs),cs.add(ms),us.add(gs)}t.isSkinnedMesh\u0026\u0026(t.boneTransform(c,ls),t.boneTransform(u,cs),t.boneTransform(h,us));const p=function(t,e,n,i,r,s,a,o){let l;if(l=e.side===m?i.intersectTriangle(a,s,r,!0,o):i.intersectTriangle(r,s,a,e.side!==g,o),null===l)return null;bs.copy(o),bs.applyMatrix4(t.matrixWorld);const c=n.ray.origin.distanceTo(bs);return c\u003cn.near||c\u003en.far?null:{distance:c,point:bs.clone(),object:t}}(t,e,n,i,ls,cs,us,_s);if(p){o\u0026\u0026(vs.fromBufferAttribute(o,c),ys.fromBufferAttribute(o,u),xs.fromBufferAttribute(o,h),p.uv=Sr.getUV(_s,ls,cs,us,vs,ys,xs,new Zn)),l\u0026\u0026(vs.fromBufferAttribute(l,c),ys.fromBufferAttribute(l,u),xs.fromBufferAttribute(l,h),p.uv2=Sr.getUV(_s,ls,cs,us,vs,ys,xs,new Zn));const t={a:c,b:u,c:h,normal:new oi,materialIndex:0};Sr.getNormal(ls,cs,us,t.normal),p.face=t}return p}ws.prototype.isMesh=!0;class Ss extends rs{constructor(t=1,e=1,n=1,i=1,r=1,s=1){super(),this.type=\"BoxGeometry\",this.parameters={width:t,height:e,depth:n,widthSegments:i,heightSegments:r,depthSegments:s};const a=this;i=Math.floor(i),r=Math.floor(r),s=Math.floor(s);const o=[],l=[],c=[],u=[];let h=0,d=0;function p(t,e,n,i,r,s,p,f,m,g,v){const y=s/m,x=p/g,_=s/2,b=p/2,w=f/2,M=m+1,S=g+1;let T=0,E=0;const A=new oi;for(let s=0;s\u003cS;s++){const a=s*x-b;for(let o=0;o\u003cM;o++){const h=o*y-_;A[t]=h*i,A[e]=a*r,A[n]=w,l.push(A.x,A.y,A.z),A[t]=0,A[e]=0,A[n]=f\u003e0?1:-1,c.push(A.x,A.y,A.z),u.push(o/m),u.push(1-s/g),T+=1}}for(let t=0;t\u003cg;t++)for(let e=0;e\u003cm;e++){const n=h+e+M*t,i=h+e+M*(t+1),r=h+(e+1)+M*(t+1),s=h+(e+1)+M*t;o.push(n,i,s),o.push(i,r,s),E+=6}a.addGroup(d,E,v),d+=E,h+=T}p(\"z\",\"y\",\"x\",-1,-1,n,e,t,s,r,0),p(\"z\",\"y\",\"x\",1,-1,n,e,-t,s,r,1),p(\"x\",\"z\",\"y\",1,1,t,n,e,i,s,2),p(\"x\",\"z\",\"y\",1,-1,t,n,-e,i,s,3),p(\"x\",\"y\",\"z\",1,-1,t,e,n,i,r,4),p(\"x\",\"y\",\"z\",-1,-1,t,e,-n,i,r,5),this.setIndex(o),this.setAttribute(\"position\",new qr(l,3)),this.setAttribute(\"normal\",new qr(c,3)),this.setAttribute(\"uv\",new qr(u,2))}}function Ts(t){const e={};for(const n in t){e[n]={};for(const i in t[n]){const r=t[n][i];r\u0026\u0026(r.isColor||r.isMatrix3||r.isMatrix4||r.isVector2||r.isVector3||r.isVector4||r.isTexture||r.isQuaternion)?e[n][i]=r.clone():Array.isArray(r)?e[n][i]=r.slice():e[n][i]=r}}return e}function Es(t){const e={};for(let n=0;n\u003ct.length;n++){const i=Ts(t[n]);for(const t in i)e[t]=i[t]}return e}const As={clone:Ts,merge:Es};class Ls extends Er{constructor(t){super(),this.type=\"ShaderMaterial\",this.defines={},this.uniforms={},this.vertexShader=\"void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}\",this.fragmentShader=\"void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}\",this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.morphTargets=!1,this.morphNormals=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,void 0!==t\u0026\u0026(void 0!==t.attributes\u0026\u0026console.error(\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\"),this.setValues(t))}copy(t){return super.copy(t),this.fragmentShader=t.fragmentShader,this.vertexShader=t.vertexShader,this.uniforms=Ts(t.uniforms),this.defines=Object.assign({},t.defines),this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.lights=t.lights,this.clipping=t.clipping,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.extensions=Object.assign({},t.extensions),this.glslVersion=t.glslVersion,this}toJSON(t){const e=super.toJSON(t);e.glslVersion=this.glslVersion,e.uniforms={};for(const n in this.uniforms){const i=this.uniforms[n].value;i\u0026\u0026i.isTexture?e.uniforms[n]={type:\"t\",value:i.toJSON(t).uuid}:i\u0026\u0026i.isColor?e.uniforms[n]={type:\"c\",value:i.getHex()}:i\u0026\u0026i.isVector2?e.uniforms[n]={type:\"v2\",value:i.toArray()}:i\u0026\u0026i.isVector3?e.uniforms[n]={type:\"v3\",value:i.toArray()}:i\u0026\u0026i.isVector4?e.uniforms[n]={type:\"v4\",value:i.toArray()}:i\u0026\u0026i.isMatrix3?e.uniforms[n]={type:\"m3\",value:i.toArray()}:i\u0026\u0026i.isMatrix4?e.uniforms[n]={type:\"m4\",value:i.toArray()}:e.uniforms[n]={value:i}}Object.keys(this.defines).length\u003e0\u0026\u0026(e.defines=this.defines),e.vertexShader=this.vertexShader,e.fragmentShader=this.fragmentShader;const n={};for(const t in this.extensions)!0===this.extensions[t]\u0026\u0026(n[t]=!0);return Object.keys(n).length\u003e0\u0026\u0026(e.extensions=n),e}}Ls.prototype.isShaderMaterial=!0;class Rs extends cr{constructor(){super(),this.type=\"Camera\",this.matrixWorldInverse=new Fi,this.projectionMatrix=new Fi,this.projectionMatrixInverse=new Fi}copy(t,e){return super.copy(t,e),this.matrixWorldInverse.copy(t.matrixWorldInverse),this.projectionMatrix.copy(t.projectionMatrix),this.projectionMatrixInverse.copy(t.projectionMatrixInverse),this}getWorldDirection(t){void 0===t\u0026\u0026(console.warn(\"THREE.Camera: .getWorldDirection() target is now required\"),t=new oi),this.updateWorldMatrix(!0,!1);const e=this.matrixWorld.elements;return t.set(-e[8],-e[9],-e[10]).normalize()}updateMatrixWorld(t){super.updateMatrixWorld(t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(t,e){super.updateWorldMatrix(t,e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return(new this.constructor).copy(this)}}Rs.prototype.isCamera=!0;class Cs extends Rs{constructor(t=50,e=1,n=.1,i=2e3){super(),this.type=\"PerspectiveCamera\",this.fov=t,this.zoom=1,this.near=n,this.far=i,this.focus=10,this.aspect=e,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.fov=t.fov,this.zoom=t.zoom,this.near=t.near,this.far=t.far,this.focus=t.focus,this.aspect=t.aspect,this.view=null===t.view?null:Object.assign({},t.view),this.filmGauge=t.filmGauge,this.filmOffset=t.filmOffset,this}setFocalLength(t){const e=.5*this.getFilmHeight()/t;this.fov=2*Un*Math.atan(e),this.updateProjectionMatrix()}getFocalLength(){const t=Math.tan(.5*Hn*this.fov);return.5*this.getFilmHeight()/t}getEffectiveFOV(){return 2*Un*Math.atan(Math.tan(.5*Hn*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(t,e,n,i,r,s){this.aspect=t/e,null===this.view\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=this.near;let e=t*Math.tan(.5*Hn*this.fov)/this.zoom,n=2*e,i=this.aspect*n,r=-.5*i;const s=this.view;if(null!==this.view\u0026\u0026this.view.enabled){const t=s.fullWidth,a=s.fullHeight;r+=s.offsetX*i/t,e-=s.offsetY*n/a,i*=s.width/t,n*=s.height/a}const a=this.filmOffset;0!==a\u0026\u0026(r+=t*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(r,r+i,e,e-n,t,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.fov=this.fov,e.object.zoom=this.zoom,e.object.near=this.near,e.object.far=this.far,e.object.focus=this.focus,e.object.aspect=this.aspect,null!==this.view\u0026\u0026(e.object.view=Object.assign({},this.view)),e.object.filmGauge=this.filmGauge,e.object.filmOffset=this.filmOffset,e}}Cs.prototype.isPerspectiveCamera=!0;class Ps extends cr{constructor(t,e,n){if(super(),this.type=\"CubeCamera\",!0!==n.isWebGLCubeRenderTarget)return void console.error(\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\");this.renderTarget=n;const i=new Cs(90,1,t,e);i.layers=this.layers,i.up.set(0,-1,0),i.lookAt(new oi(1,0,0)),this.add(i);const r=new Cs(90,1,t,e);r.layers=this.layers,r.up.set(0,-1,0),r.lookAt(new oi(-1,0,0)),this.add(r);const s=new Cs(90,1,t,e);s.layers=this.layers,s.up.set(0,0,1),s.lookAt(new oi(0,1,0)),this.add(s);const a=new Cs(90,1,t,e);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new oi(0,-1,0)),this.add(a);const o=new Cs(90,1,t,e);o.layers=this.layers,o.up.set(0,-1,0),o.lookAt(new oi(0,0,1)),this.add(o);const l=new Cs(90,1,t,e);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new oi(0,0,-1)),this.add(l)}update(t,e){null===this.parent\u0026\u0026this.updateMatrixWorld();const n=this.renderTarget,[i,r,s,a,o,l]=this.children,c=t.xr.enabled,u=t.getRenderTarget();t.xr.enabled=!1;const h=n.texture.generateMipmaps;n.texture.generateMipmaps=!1,t.setRenderTarget(n,0),t.render(e,i),t.setRenderTarget(n,1),t.render(e,r),t.setRenderTarget(n,2),t.render(e,s),t.setRenderTarget(n,3),t.render(e,a),t.setRenderTarget(n,4),t.render(e,o),n.texture.generateMipmaps=h,t.setRenderTarget(n,5),t.render(e,l),t.setRenderTarget(u),t.xr.enabled=c}}class Ds extends ti{constructor(t,e,n,i,r,s,a,o,l,c){super(t=void 0!==t?t:[],e=void 0!==e?e:st,n,i,r,s,a=void 0!==a?a:Ot,o,l,c),this._needsFlipEnvMap=!0,this.flipY=!1}get images(){return this.image}set images(t){this.image=t}}Ds.prototype.isCubeTexture=!0;class Is extends ii{constructor(t,e,n){Number.isInteger(e)\u0026\u0026(console.warn(\"THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )\"),e=n),super(t,t,e),e=e||{},this.texture=new Ds(void 0,e.mapping,e.wrapS,e.wrapT,e.magFilter,e.minFilter,e.format,e.type,e.anisotropy,e.encoding),this.texture.generateMipmaps=void 0!==e.generateMipmaps\u0026\u0026e.generateMipmaps,this.texture.minFilter=void 0!==e.minFilter?e.minFilter:xt,this.texture._needsFlipEnvMap=!1}fromEquirectangularTexture(t,e){this.texture.type=e.type,this.texture.format=Ft,this.texture.encoding=e.encoding,this.texture.generateMipmaps=e.generateMipmaps,this.texture.minFilter=e.minFilter,this.texture.magFilter=e.magFilter;const n={uniforms:{tEquirect:{value:null}},vertexShader:\"\\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 \u003cbegin_vertex\u003e\\n\\t\\t\\t\\t\\t#include \u003cproject_vertex\u003e\\n\\n\\t\\t\\t\\t}\\n\\t\\t\\t\",fragmentShader:\"\\n\\n\\t\\t\\t\\tuniform sampler2D tEquirect;\\n\\n\\t\\t\\t\\tvarying vec3 vWorldDirection;\\n\\n\\t\\t\\t\\t#include \u003ccommon\u003e\\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\"},i=new Ss(5,5,5),r=new Ls({name:\"CubemapFromEquirect\",uniforms:Ts(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:m,blending:x});r.uniforms.tEquirect.value=e;const s=new ws(i,r),a=e.minFilter;e.minFilter===wt\u0026\u0026(e.minFilter=xt);return new Ps(1,10,this).update(t,s),e.minFilter=a,s.geometry.dispose(),s.material.dispose(),this}clear(t,e,n,i){const r=t.getRenderTarget();for(let r=0;r\u003c6;r++)t.setRenderTarget(this,r),t.clear(e,n,i);t.setRenderTarget(r)}}Is.prototype.isWebGLCubeRenderTarget=!0;const Ns=new Ri,zs=new oi;class Bs{constructor(t=new pr,e=new pr,n=new pr,i=new pr,r=new pr,s=new pr){this.planes=[t,e,n,i,r,s]}set(t,e,n,i,r,s){const a=this.planes;return a[0].copy(t),a[1].copy(e),a[2].copy(n),a[3].copy(i),a[4].copy(r),a[5].copy(s),this}copy(t){const e=this.planes;for(let n=0;n\u003c6;n++)e[n].copy(t.planes[n]);return this}setFromProjectionMatrix(t){const e=this.planes,n=t.elements,i=n[0],r=n[1],s=n[2],a=n[3],o=n[4],l=n[5],c=n[6],u=n[7],h=n[8],d=n[9],p=n[10],f=n[11],m=n[12],g=n[13],v=n[14],y=n[15];return e[0].setComponents(a-i,u-o,f-h,y-m).normalize(),e[1].setComponents(a+i,u+o,f+h,y+m).normalize(),e[2].setComponents(a+r,u+l,f+d,y+g).normalize(),e[3].setComponents(a-r,u-l,f-d,y-g).normalize(),e[4].setComponents(a-s,u-c,f-p,y-v).normalize(),e[5].setComponents(a+s,u+c,f+p,y+v).normalize(),this}intersectsObject(t){const e=t.geometry;return null===e.boundingSphere\u0026\u0026e.computeBoundingSphere(),Ns.copy(e.boundingSphere).applyMatrix4(t.matrixWorld),this.intersectsSphere(Ns)}intersectsSprite(t){return Ns.center.set(0,0,0),Ns.radius=.7071067811865476,Ns.applyMatrix4(t.matrixWorld),this.intersectsSphere(Ns)}intersectsSphere(t){const e=this.planes,n=t.center,i=-t.radius;for(let t=0;t\u003c6;t++){if(e[t].distanceToPoint(n)\u003ci)return!1}return!0}intersectsBox(t){const e=this.planes;for(let n=0;n\u003c6;n++){const i=e[n];if(zs.x=i.normal.x\u003e0?t.max.x:t.min.x,zs.y=i.normal.y\u003e0?t.max.y:t.min.y,zs.z=i.normal.z\u003e0?t.max.z:t.min.z,i.distanceToPoint(zs)\u003c0)return!1}return!0}containsPoint(t){const e=this.planes;for(let n=0;n\u003c6;n++)if(e[n].distanceToPoint(t)\u003c0)return!1;return!0}clone(){return(new this.constructor).copy(this)}}function Os(){let t=null,e=!1,n=null,i=null;function r(e,s){n(e,s),i=t.requestAnimationFrame(r)}return{start:function(){!0!==e\u0026\u0026null!==n\u0026\u0026(i=t.requestAnimationFrame(r),e=!0)},stop:function(){t.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(t){n=t},setContext:function(e){t=e}}}function Fs(t,e){const n=e.isWebGL2,i=new WeakMap;return{get:function(t){return t.isInterleavedBufferAttribute\u0026\u0026(t=t.data),i.get(t)},remove:function(e){e.isInterleavedBufferAttribute\u0026\u0026(e=e.data);const n=i.get(e);n\u0026\u0026(t.deleteBuffer(n.buffer),i.delete(e))},update:function(e,r){if(e.isGLBufferAttribute){const t=i.get(e);return void((!t||t.version\u003ce.version)\u0026\u0026i.set(e,{buffer:e.buffer,type:e.type,bytesPerElement:e.elementSize,version:e.version}))}e.isInterleavedBufferAttribute\u0026\u0026(e=e.data);const s=i.get(e);void 0===s?i.set(e,function(e,i){const r=e.array,s=e.usage,a=t.createBuffer();t.bindBuffer(i,a),t.bufferData(i,r,s),e.onUploadCallback();let o=5126;return r instanceof Float32Array?o=5126:r instanceof Float64Array?console.warn(\"THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.\"):r instanceof Uint16Array?e.isFloat16BufferAttribute?n?o=5131:console.warn(\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\"):o=5123:r instanceof Int16Array?o=5122:r instanceof Uint32Array?o=5125:r instanceof Int32Array?o=5124:r instanceof Int8Array?o=5120:(r instanceof Uint8Array||r instanceof Uint8ClampedArray)\u0026\u0026(o=5121),{buffer:a,type:o,bytesPerElement:r.BYTES_PER_ELEMENT,version:e.version}}(e,r)):s.version\u003ce.version\u0026\u0026(!function(e,i,r){const s=i.array,a=i.updateRange;t.bindBuffer(r,e),-1===a.count?t.bufferSubData(r,0,s):(n?t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s,a.offset,a.count):t.bufferSubData(r,a.offset*s.BYTES_PER_ELEMENT,s.subarray(a.offset,a.offset+a.count)),a.count=-1)}(s.buffer,e,r),s.version=e.version)}}}class Hs extends rs{constructor(t=1,e=1,n=1,i=1){super(),this.type=\"PlaneGeometry\",this.parameters={width:t,height:e,widthSegments:n,heightSegments:i};const r=t/2,s=e/2,a=Math.floor(n),o=Math.floor(i),l=a+1,c=o+1,u=t/a,h=e/o,d=[],p=[],f=[],m=[];for(let t=0;t\u003cc;t++){const e=t*h-s;for(let n=0;n\u003cl;n++){const i=n*u-r;p.push(i,-e,0),f.push(0,0,1),m.push(n/a),m.push(1-t/o)}}for(let t=0;t\u003co;t++)for(let e=0;e\u003ca;e++){const n=e+l*t,i=e+l*(t+1),r=e+1+l*(t+1),s=e+1+l*t;d.push(n,i,s),d.push(i,r,s)}this.setIndex(d),this.setAttribute(\"position\",new qr(p,3)),this.setAttribute(\"normal\",new qr(f,3)),this.setAttribute(\"uv\",new qr(m,2))}}const Us={alphamap_fragment:\"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\",alphamap_pars_fragment:\"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",alphatest_fragment:\"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a \u003c ALPHATEST ) discard;\\n#endif\",aomap_fragment:\"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\",aomap_pars_fragment:\"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\",begin_vertex:\"vec3 transformed = vec3( position );\",beginnormal_vertex:\"vec3 objectNormal = vec3( normal );\\n#ifdef USE_TANGENT\\n\\tvec3 objectTangent = vec3( tangent.xyz );\\n#endif\",bsdfs:\"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {\\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\\treturn vec2( -1.04, 1.04 ) * a004 + r.zw;\\n}\\nfloat punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\tif( cutoffDistance \u003e 0.0 ) {\\n\\t\\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t}\\n\\treturn distanceFalloff;\\n#else\\n\\tif( cutoffDistance \u003e 0.0 \u0026\u0026 decayExponent \u003e 0.0 ) {\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n\\t}\\n\\treturn 1.0;\\n#endif\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );\\n\\tvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;\\n\\treturn Fr * fresnel + F0;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_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}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + viewDir );\\n\\tfloat dotNL = saturate( dot( normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tfloat dotNH = saturate( dot( normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * 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 \u003e 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 ] ) \u003c 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}\\nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( normal, viewDir ) );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\treturn specularColor * brdf.x + brdf.y;\\n}\\nvoid BRDF_Specular_Multiscattering_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );\\n\\tvec2 brdf = integrateSpecularBRDF( dotNV, roughness );\\n\\tvec3 FssEss = F * brdf.x + brdf.y;\\n\\tfloat Ess = brdf.x + brdf.y;\\n\\tfloat Ems = 1.0 - Ess;\\n\\tvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;\\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\\n\\tsingleScatter += FssEss;\\n\\tmultiScatter += Fms * Ems;\\n}\\nfloat 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_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n#if defined( USE_SHEEN )\\nfloat D_Charlie(float roughness, float NoH) {\\n\\tfloat invAlpha = 1.0 / roughness;\\n\\tfloat cos2h = NoH * NoH;\\n\\tfloat sin2h = max(1.0 - cos2h, 0.0078125);\\treturn (2.0 + invAlpha) * pow(sin2h, invAlpha * 0.5) / (2.0 * PI);\\n}\\nfloat V_Neubelt(float NoV, float NoL) {\\n\\treturn saturate(1.0 / (4.0 * (NoL + NoV - NoL * NoV)));\\n}\\nvec3 BRDF_Specular_Sheen( const in float roughness, const in vec3 L, const in GeometricContext geometry, vec3 specularColor ) {\\n\\tvec3 N = geometry.normal;\\n\\tvec3 V = geometry.viewDir;\\n\\tvec3 H = normalize( V + L );\\n\\tfloat dotNH = saturate( dot( N, H ) );\\n\\treturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );\\n}\\n#endif\",bumpmap_pars_fragment:\"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + 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 = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\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\",clipping_planes_fragment:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) discard;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#if UNION_CLIPPING_PLANES \u003c NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i \u003c NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) \u0026\u0026 clipped;\\n\\t\\t}\\n\\t\\t#pragma unroll_loop_end\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\",clipping_planes_pars_fragment:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvarying vec3 vClipPosition;\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\",clipping_planes_pars_vertex:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvarying vec3 vClipPosition;\\n#endif\",clipping_planes_vertex:\"#if NUM_CLIPPING_PLANES \u003e 0\\n\\tvClipPosition = - mvPosition.xyz;\\n#endif\",color_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tdiffuseColor *= vColor;\\n#elif defined( USE_COLOR )\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\",color_pars_fragment:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_pars_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvarying vec4 vColor;\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\\n\\tvarying vec3 vColor;\\n#endif\",color_vertex:\"#if defined( USE_COLOR_ALPHA )\\n\\tvColor = vec4( 1.0 );\\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_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\",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; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\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 max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }\\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};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal;\\n#endif\\n};\\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}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\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}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\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}\",cube_uv_reflection_fragment:\"#ifdef ENVMAP_TYPE_CUBE_UV\\n\\t#define cubeUV_maxMipLevel 8.0\\n\\t#define cubeUV_minMipLevel 4.0\\n\\t#define cubeUV_maxTileSize 256.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 \u003e absDirection.z ) {\\n\\t\\t\\tif ( absDirection.x \u003e absDirection.y )\\n\\t\\t\\t\\tface = direction.x \u003e 0.0 ? 0.0 : 3.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y \u003e 0.0 ? 1.0 : 4.0;\\n\\t\\t} else {\\n\\t\\t\\tif ( absDirection.z \u003e absDirection.y )\\n\\t\\t\\t\\tface = direction.z \u003e 0.0 ? 2.0 : 5.0;\\n\\t\\t\\telse\\n\\t\\t\\t\\tface = direction.y \u003e 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\\tfloat texelSize = 1.0 / ( 3.0 * cubeUV_maxTileSize );\\n\\t\\tvec2 uv = getUV( direction, face ) * ( faceSize - 1.0 );\\n\\t\\tvec2 f = fract( uv );\\n\\t\\tuv += 0.5 - f;\\n\\t\\tif ( face \u003e 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\\tif ( mipInt \u003c cubeUV_maxMipLevel ) {\\n\\t\\t\\tuv.y += 2.0 * cubeUV_maxTileSize;\\n\\t\\t}\\n\\t\\tuv.y += filterInt * 2.0 * cubeUV_minTileSize;\\n\\t\\tuv.x += 3.0 * max( 0.0, cubeUV_maxTileSize - 2.0 * faceSize );\\n\\t\\tuv *= texelSize;\\n\\t\\tvec3 tl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x += texelSize;\\n\\t\\tvec3 tr = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.y += texelSize;\\n\\t\\tvec3 br = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tuv.x -= texelSize;\\n\\t\\tvec3 bl = envMapTexelToLinear( texture2D( envMap, uv ) ).rgb;\\n\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\treturn mix( tm, bm, f.y );\\n\\t}\\n\\t#define r0 1.0\\n\\t#define v0 0.339\\n\\t#define m0 - 2.0\\n\\t#define r1 0.8\\n\\t#define v1 0.276\\n\\t#define m1 - 1.0\\n\\t#define r4 0.4\\n\\t#define v4 0.046\\n\\t#define m4 2.0\\n\\t#define r5 0.305\\n\\t#define v5 0.016\\n\\t#define m5 3.0\\n\\t#define r6 0.21\\n\\t#define v6 0.0038\\n\\t#define m6 4.0\\n\\tfloat roughnessToMip( float roughness ) {\\n\\t\\tfloat mip = 0.0;\\n\\t\\tif ( roughness \u003e= r1 ) {\\n\\t\\t\\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\\n\\t\\t} else if ( roughness \u003e= r4 ) {\\n\\t\\t\\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\\n\\t\\t} else if ( roughness \u003e= r5 ) {\\n\\t\\t\\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\\n\\t\\t} else if ( roughness \u003e= r6 ) {\\n\\t\\t\\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + 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 ), m0, cubeUV_maxMipLevel );\\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\",defaultnormal_vertex:\"vec3 transformedNormal = objectNormal;\\n#ifdef USE_INSTANCING\\n\\tmat3 m = mat3( instanceMatrix );\\n\\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\\n\\ttransformedNormal = m * transformedNormal;\\n#endif\\ntransformedNormal = normalMatrix * transformedNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n#ifdef USE_TANGENT\\n\\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\\n\\t#ifdef FLIP_SIDED\\n\\t\\ttransformedTangent = - transformedTangent;\\n\\t#endif\\n#endif\",displacementmap_pars_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\",displacementmap_vertex:\"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\\n#endif\",emissivemap_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\",emissivemap_pars_fragment:\"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\",encodings_fragment:\"gl_FragColor = linearToOutputTexel( gl_FragColor );\",encodings_pars_fragment:\"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.a );\\n}\\nvec4 LinearTosRGB( 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}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * value.a * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.r, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = clamp( floor( D ) / 255.0, 0.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;\\n\\tXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract( Le );\\n\\tvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;\\n\\treturn vec4( max( vRGB, 0.0 ), 1.0 );\\n}\",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, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\t#ifndef ENVMAP_TYPE_CUBE_UV\\n\\t\\tenvColor = envMapTexelToLinear( envColor );\\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\",envmap_common_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float envMapIntensity;\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\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\",envmap_pars_fragment:\"#ifdef USE_ENVMAP\\n\\tuniform float reflectivity;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\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\",envmap_pars_vertex:\"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\\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\",envmap_physical_pars_fragment:\"#if defined( USE_ENVMAP )\\n\\t#ifdef ENVMAP_MODE_REFRACTION\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -viewDir, normal );\\n\\t\\t\\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -viewDir, normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\",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\",fog_vertex:\"#ifdef USE_FOG\\n\\tfogDepth = - mvPosition.z;\\n#endif\",fog_pars_vertex:\"#ifdef USE_FOG\\n\\tvarying float fogDepth;\\n#endif\",fog_fragment:\"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\",fog_pars_fragment:\"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\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\",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 texture2D( gradientMap, coord ).rgb;\\n\\t#else\\n\\t\\treturn ( coord.x \u003c 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t#endif\\n}\",lightmap_fragment:\"#ifdef USE_LIGHTMAP\\n\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\treflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n#endif\",lightmap_pars_fragment:\"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\",lights_lambert_vertex:\"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\nvIndirectFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n\\tvIndirectBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );\\n#ifdef DOUBLE_SIDED\\n\\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\\n\\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );\\n#endif\\n#if NUM_POINT_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_SPOT_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_DIR_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if NUM_HEMI_LIGHTS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\",lights_pars_begin:\"uniform bool receiveShadow;\\nuniform vec3 ambientLightColor;\\nuniform vec3 lightProbe[ 9 ];\\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 GeometricContext geometry ) {\\n\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\\n\\treturn irradiance;\\n}\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS \u003e 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS \u003e 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 getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS \u003e 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 getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos \u003e spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS \u003e 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 \u003e 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 GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\",lights_toon_fragment:\"ToonMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\",lights_toon_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct ToonMaterial {\\n\\tvec3 diffuseColor;\\n};\\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Toon\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Toon\\n#define Material_LightProbeLOD( material )\\t(0)\",lights_phong_fragment:\"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\",lights_phong_pars_fragment:\"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\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 GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\",lights_physical_fragment:\"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\\nmaterial.specularRoughness = max( roughnessFactor, 0.0525 );material.specularRoughness += geometryRoughness;\\nmaterial.specularRoughness = min( material.specularRoughness, 1.0 );\\n#ifdef REFLECTIVITY\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), rawDiffuseColor, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), rawDiffuseColor, metalnessFactor );\\n#endif\\n#ifdef CLEARCOAT\\n\\tmaterial.clearcoat = clearcoat;\\n\\tmaterial.clearcoatRoughness = clearcoatRoughness;\\n\\t#ifdef USE_CLEARCOATMAP\\n\\t\\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\\n\\t#endif\\n\\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\t\\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).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_SHEEN\\n\\tmaterial.sheenColor = sheen;\\n#endif\",lights_physical_pars_fragment:\"struct PhysicalMaterial {\\n\\tvec3 diffuseColor;\\n\\tfloat specularRoughness;\\n\\tvec3 specularColor;\\n#ifdef CLEARCOAT\\n\\tfloat clearcoat;\\n\\tfloat clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tvec3 sheenColor;\\n#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS \u003e 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\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.specularRoughness;\\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 GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\\n\\t\\tvec3 ccIrradiance = ccDotNL * directLight.color;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tccIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t\\treflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\t#ifdef USE_SHEEN\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(\\n\\t\\t\\tmaterial.specularRoughness,\\n\\t\\t\\tdirectLight.direction,\\n\\t\\t\\tgeometry,\\n\\t\\t\\tmaterial.sheenColor\\n\\t\\t);\\n\\t#else\\n\\t\\treflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);\\n\\t#endif\\n\\treflectedLight.directDiffuse += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\\n\\t#ifdef CLEARCOAT\\n\\t\\tfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );\\n\\t\\tfloat ccDotNL = ccDotNV;\\n\\t\\tfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );\\n\\t#else\\n\\t\\tfloat clearcoatDHR = 0.0;\\n\\t#endif\\n\\tfloat clearcoatInv = 1.0 - clearcoatDHR;\\n\\tvec3 singleScattering = vec3( 0.0 );\\n\\tvec3 multiScattering = vec3( 0.0 );\\n\\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\\n\\tBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );\\n\\tvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );\\n\\treflectedLight.indirectSpecular += clearcoatInv * 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}\",lights_fragment_begin:\"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n#ifdef CLEARCOAT\\n\\tgeometry.clearcoatNormal = clearcoatNormal;\\n#endif\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\tPointLightShadow pointLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_POINT_LIGHT_SHADOWS )\\n\\t\\tpointLightShadow = pointLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_SPOT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_SPOT_LIGHT_SHADOWS \u003e 0\\n\\tSpotLightShadow spotLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_SPOT_LIGHT_SHADOWS )\\n\\t\\tspotLightShadow = spotLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_DIR_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\tDirectionalLightShadow directionalLightShadow;\\n\\t#endif\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_DIR_LIGHT_SHADOWS )\\n\\t\\tdirectionalLightShadow = directionalLightShadows[ i ];\\n\\t\\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n\\t#pragma unroll_loop_end\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, 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\\tirradiance += getLightProbeIrradiance( lightProbe, geometry );\\n\\t#if ( NUM_HEMI_LIGHTS \u003e 0 )\\n\\t\\t#pragma unroll_loop_start\\n\\t\\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\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\",lights_fragment_maps:\"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\tvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD ) \u0026\u0026 defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) \u0026\u0026 defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );\\n\\t#ifdef CLEARCOAT\\n\\t\\tclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );\\n\\t#endif\\n#endif\",lights_fragment_end:\"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\\n#endif\",logdepthbuf_fragment:\"#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\",logdepthbuf_pars_fragment:\"#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\\n\\tuniform float logDepthBufFC;\\n\\tvarying float vFragDepth;\\n\\tvarying float vIsPerspective;\\n#endif\",logdepthbuf_pars_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t\\tvarying float vIsPerspective;\\n\\t#else\\n\\t\\tuniform float logDepthBufFC;\\n\\t#endif\\n#endif\",logdepthbuf_vertex:\"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t\\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\\n\\t#else\\n\\t\\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\\n\\t\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\t\\tgl_Position.z *= gl_Position.w;\\n\\t\\t}\\n\\t#endif\\n#endif\",map_fragment:\"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\",map_pars_fragment:\"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\",map_particle_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n#endif\\n#ifdef USE_MAP\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\\n#endif\",map_particle_pars_fragment:\"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\\n\\tuniform mat3 uvTransform;\\n#endif\\n#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\",metalnessmap_fragment:\"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\",metalnessmap_pars_fragment:\"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\",morphnormal_vertex:\"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal *= morphTargetBaseInfluence;\\n\\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\\n#endif\",morphtarget_pars_vertex:\"#ifdef USE_MORPHTARGETS\\n\\tuniform float morphTargetBaseInfluence;\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\t\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\",morphtarget_vertex:\"#ifdef USE_MORPHTARGETS\\n\\ttransformed *= morphTargetBaseInfluence;\\n\\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\\n\\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\\n\\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\\n\\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\t\\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\\n\\t\\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\\n\\t\\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\\n\\t\\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\",normal_fragment_begin:\"float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\\n#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * faceDirection;\\n\\t#endif\\n\\t#ifdef USE_TANGENT\\n\\t\\tvec3 tangent = normalize( vTangent );\\n\\t\\tvec3 bitangent = normalize( vBitangent );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\ttangent = tangent * faceDirection;\\n\\t\\t\\tbitangent = bitangent * faceDirection;\\n\\t\\t#endif\\n\\t\\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\\n\\t\\t\\tmat3 vTBN = mat3( tangent, bitangent, normal );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\nvec3 geometryNormal = normal;\",normal_fragment_maps:\"#ifdef OBJECTSPACE_NORMALMAP\\n\\tnormal = texture2D( normalMap, vUv ).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( TANGENTSPACE_NORMALMAP )\\n\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tmapN.xy *= normalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tnormal = normalize( vTBN * mapN );\\n\\t#else\\n\\t\\tnormal = perturbNormal2Arb( -vViewPosition, normal, mapN, faceDirection );\\n\\t#endif\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd(), faceDirection );\\n#endif\",normalmap_pars_fragment:\"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n#endif\\n#ifdef OBJECTSPACE_NORMALMAP\\n\\tuniform mat3 normalMatrix;\\n#endif\\n#if ! defined ( USE_TANGENT ) \u0026\u0026 ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.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 : faceDirection * inversesqrt( det );\\n\\t\\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\\n\\t}\\n#endif\",clearcoat_normal_fragment_begin:\"#ifdef CLEARCOAT\\n\\tvec3 clearcoatNormal = geometryNormal;\\n#endif\",clearcoat_normal_fragment_maps:\"#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\\n\\tclearcoatMapN.xy *= clearcoatNormalScale;\\n\\t#ifdef USE_TANGENT\\n\\t\\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\\n\\t#else\\n\\t\\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\\n\\t#endif\\n#endif\",clearcoat_pars_fragment:\"#ifdef USE_CLEARCOATMAP\\n\\tuniform sampler2D clearcoatMap;\\n#endif\\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\\n\\tuniform sampler2D clearcoatRoughnessMap;\\n#endif\\n#ifdef USE_CLEARCOAT_NORMALMAP\\n\\tuniform sampler2D clearcoatNormalMap;\\n\\tuniform vec2 clearcoatNormalScale;\\n#endif\",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.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nvec4 pack2HalfToRGBA( 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( 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 linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( 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 invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\",premultiplied_alpha_fragment:\"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\",project_vertex:\"vec4 mvPosition = vec4( transformed, 1.0 );\\n#ifdef USE_INSTANCING\\n\\tmvPosition = instanceMatrix * mvPosition;\\n#endif\\nmvPosition = modelViewMatrix * mvPosition;\\ngl_Position = projectionMatrix * mvPosition;\",dithering_fragment:\"#ifdef DITHERING\\n\\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\",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\",roughnessmap_fragment:\"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\",roughnessmap_pars_fragment:\"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\",shadowmap_pars_fragment:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 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 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 \u003e 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\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 \u003e 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 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 shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x \u003e= 0.0, shadowCoord.x \u003c= 1.0, shadowCoord.y \u003e= 0.0, shadowCoord.y \u003c= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z \u003c= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\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 shadow;\\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 \u003e= almostOne ) {\\n\\t\\t\\tif ( v.z \u003e 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x \u003e= 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 \u003e= 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 shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\",shadowmap_pars_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 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 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 \u003e 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\\n\\t\\tstruct SpotLightShadow {\\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 \u003e 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 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\",shadowmap_vertex:\"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0 || NUM_SPOT_LIGHT_SHADOWS \u003e 0 || NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\t\\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\tvec4 shadowWorldPosition;\\n\\t#endif\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n#endif\",shadowmask_pars_fragment:\"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\\n\\tDirectionalLightShadow directionalLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, 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 \u003e 0\\n\\tSpotLightShadow spotLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tspotLight = spotLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#pragma unroll_loop_end\\n\\t#endif\\n\\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\\n\\tPointLightShadow pointLight;\\n\\t#pragma unroll_loop_start\\n\\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\\n\\t\\tpointLight = pointLightShadows[ i ];\\n\\t\\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, 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}\",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\",skinning_pars_vertex:\"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform highp sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\",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\",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\",specularmap_fragment:\"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\",specularmap_pars_fragment:\"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\",tonemapping_fragment:\"#if defined( TONE_MAPPING )\\n\\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\",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 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}\\nvec3 CustomToneMapping( vec3 color ) { return color; }\",transmission_fragment:\"#ifdef USE_TRANSMISSION\\n\\t#ifdef USE_TRANSMISSIONMAP\\n\\t\\ttotalTransmission *= texture2D( transmissionMap, vUv ).r;\\n\\t#endif\\n\\t#ifdef USE_THICKNESSNMAP\\n\\t\\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\\n\\t#endif\\n\\tvec3 pos = vWorldPosition.xyz / vWorldPosition.w;\\n\\tvec3 v = normalize( cameraPosition - pos );\\n\\tvec3 viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\\n\\tfloat ior = ( 1.0 + 0.4 * reflectivity ) / ( 1.0 - 0.4 * reflectivity );\\n\\tvec3 f0 = vec3( pow( ior - 1.0, 2.0 ) / pow( ior + 1.0, 2.0 ) );\\n\\tvec3 f90 = vec3( 1.0 );\\n\\tvec3 f_transmission = totalTransmission * getIBLVolumeRefraction(\\n\\t\\tnormal, v, viewDir, roughnessFactor, diffuseColor.rgb, f0, f90,\\n\\t\\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\\n\\t\\tattenuationColor, attenuationDistance);\\n\\tdiffuseColor.rgb = mix( diffuseColor.rgb, f_transmission, totalTransmission );\\n#endif\",transmission_pars_fragment:\"#ifdef USE_TRANSMISSION\\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 vec4 vWorldPosition;\\n\\tvec3 getVolumeTransmissionRay(vec3 n, vec3 v, float thickness, float ior, 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(float roughness, float ior) {\\n\\t\\treturn roughness * clamp(ior * 2.0 - 2.0, 0.0, 1.0);\\n\\t}\\n\\tvec3 getTransmissionSample(vec2 fragCoord, float roughness, float ior) {\\n\\t\\tfloat framebufferLod = log2(transmissionSamplerSize.x) * applyIorToRoughness(roughness, ior);\\n\\t\\treturn texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod).rgb;\\n\\t}\\n\\tvec3 applyVolumeAttenuation(vec3 radiance, float transmissionDistance, vec3 attenuationColor, float attenuationDistance) {\\n\\t\\tif (attenuationDistance == 0.0) {\\n\\t\\t\\treturn radiance;\\n\\t\\t} else {\\n\\t\\t\\tvec3 attenuationCoefficient = -log(attenuationColor) / attenuationDistance;\\n\\t\\t\\tvec3 transmittance = exp(-attenuationCoefficient * transmissionDistance);\\t\\t\\treturn transmittance * radiance;\\n\\t\\t}\\n\\t}\\n\\tvec3 getIBLVolumeRefraction(vec3 n, vec3 v, vec3 viewDir, float perceptualRoughness, vec3 baseColor, vec3 f0, vec3 f90,\\n\\t\\tvec3 position, mat4 modelMatrix, mat4 viewMatrix, mat4 projMatrix, float ior, float thickness, vec3 attenuationColor, float attenuationDistance) {\\n\\t\\tvec3 transmissionRay = getVolumeTransmissionRay(n, v, thickness, ior, modelMatrix);\\n\\t\\tvec3 refractedRayExit = position + transmissionRay;\\n\\t\\tvec4 ndcPos = projMatrix * viewMatrix * vec4(refractedRayExit, 1.0);\\n\\t\\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\\n\\t\\trefractionCoords += 1.0;\\n\\t\\trefractionCoords /= 2.0;\\n\\t\\tvec3 transmittedLight = getTransmissionSample(refractionCoords, perceptualRoughness, ior);\\n\\t\\tvec3 attenuatedColor = applyVolumeAttenuation(transmittedLight, length(transmissionRay), attenuationColor, attenuationDistance);\\n\\t\\tfloat NdotV = saturate(dot(n, viewDir));\\n\\t\\tvec2 brdf = integrateSpecularBRDF(NdotV, perceptualRoughness);\\n\\t\\tvec3 specularColor = f0 * brdf.x + f90 * brdf.y;\\n\\t\\treturn (1.0 - specularColor) * attenuatedColor * baseColor;\\n\\t}\\n#endif\",uv_pars_fragment:\"#if ( defined( USE_UV ) \u0026\u0026 ! defined( UVS_VERTEX_ONLY ) )\\n\\tvarying vec2 vUv;\\n#endif\",uv_pars_vertex:\"#ifdef USE_UV\\n\\t#ifdef UVS_VERTEX_ONLY\\n\\t\\tvec2 vUv;\\n\\t#else\\n\\t\\tvarying vec2 vUv;\\n\\t#endif\\n\\tuniform mat3 uvTransform;\\n#endif\",uv_vertex:\"#ifdef USE_UV\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\",uv2_pars_fragment:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\",uv2_pars_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n\\tuniform mat3 uv2Transform;\\n#endif\",uv2_vertex:\"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\\n#endif\",worldpos_vertex:\"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\\n\\tvec4 worldPosition = vec4( transformed, 1.0 );\\n\\t#ifdef USE_INSTANCING\\n\\t\\tworldPosition = instanceMatrix * worldPosition;\\n\\t#endif\\n\\tworldPosition = modelMatrix * worldPosition;\\n#endif\",background_frag:\"uniform sampler2D t2D;\\nvarying vec2 vUv;\\nvoid main() {\\n\\tvec4 texColor = texture2D( t2D, vUv );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",background_vert:\"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}\",cube_frag:\"#include \u003cenvmap_common_pars_fragment\u003e\\nuniform float opacity;\\nvarying vec3 vWorldDirection;\\n#include \u003ccube_uv_reflection_fragment\u003e\\nvoid main() {\\n\\tvec3 vReflect = vWorldDirection;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = envColor;\\n\\tgl_FragColor.a *= opacity;\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",cube_vert:\"varying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\tgl_Position.z = gl_Position.w;\\n}\",depth_frag:\"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003clogdepthbuf_fragment\u003e\\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#endif\\n}\",depth_vert:\"#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvarying vec2 vHighPrecisionZW;\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \u003cbeginnormal_vertex\u003e\\n\\t\\t#include \u003cmorphnormal_vertex\u003e\\n\\t\\t#include \u003cskinnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvHighPrecisionZW = gl_Position.zw;\\n}\",distanceRGBA_frag:\"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main () {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\",distanceRGBA_vert:\"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \u003cbeginnormal_vertex\u003e\\n\\t\\t#include \u003cmorphnormal_vertex\u003e\\n\\t\\t#include \u003cskinnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvWorldPosition = worldPosition.xyz;\\n}\",equirect_frag:\"uniform sampler2D tEquirect;\\nvarying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvec3 direction = normalize( vWorldDirection );\\n\\tvec2 sampleUV = equirectUv( direction );\\n\\tvec4 texColor = texture2D( tEquirect, sampleUV );\\n\\tgl_FragColor = mapTexelToLinear( texColor );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n}\",equirect_vert:\"varying vec3 vWorldDirection;\\n#include \u003ccommon\u003e\\nvoid main() {\\n\\tvWorldDirection = transformDirection( position, modelMatrix );\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n}\",linedashed_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tif ( mod( vLineDistance, totalSize ) \u003e dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n}\",linedashed_vert:\"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\tvLineDistance = scale * lineDistance;\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshbasic_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\n\\t\\tvec4 lightMapTexel= texture2D( lightMap, vUv2 );\\n\\t\\treflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \u003caomap_fragment\u003e\\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshbasic_vert:\"#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#ifdef USE_ENVMAP\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshlambert_frag:\"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cshadowmask_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vIndirectFront;\\n\\t#endif\\n\\t#include \u003clightmap_fragment\u003e\\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshlambert_vert:\"#define LAMBERT\\nvarying vec3 vLightFront;\\nvarying vec3 vIndirectFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n\\tvarying vec3 vIndirectBack;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003clights_lambert_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshmatcap_frag:\"#define MATCAP\\nuniform vec3 diffuse;\\nuniform float opacity;\\nuniform sampler2D matcap;\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\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\\tmatcapColor = matcapTexelToLinear( matcapColor );\\n\\t#else\\n\\t\\tvec4 matcapColor = vec4( 1.0 );\\n\\t#endif\\n\\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshmatcap_vert:\"#define MATCAP\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#ifndef FLAT_SHADED\\n\\t\\tvNormal = normalize( transformedNormal );\\n\\t#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n}\",meshtoon_frag:\"#define TOON\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cgradientmap_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003clights_toon_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#include \u003clights_toon_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshtoon_vert:\"#define TOON\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshphong_frag:\"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003clights_phong_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003cspecularmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003cspecularmap_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\t#include \u003clights_phong_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \u003cenvmap_fragment\u003e\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshphong_vert:\"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cenvmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cenvmap_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",meshphysical_frag:\"#define STANDARD\\n#ifdef PHYSICAL\\n\\t#define REFLECTIVITY\\n\\t#define CLEARCOAT\\n#endif\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifdef USE_TRANSMISSION\\n\\tuniform float transmission;\\n\\tuniform float thickness;\\n\\tuniform vec3 attenuationColor;\\n\\tuniform float attenuationDistance;\\n#endif\\n#ifdef REFLECTIVITY\\n\\tuniform float reflectivity;\\n#endif\\n#ifdef CLEARCOAT\\n\\tuniform float clearcoat;\\n\\tuniform float clearcoatRoughness;\\n#endif\\n#ifdef USE_SHEEN\\n\\tuniform vec3 sheen;\\n#endif\\nvarying vec3 vViewPosition;\\n#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#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cdithering_pars_fragment\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cuv2_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003caomap_pars_fragment\u003e\\n#include \u003clightmap_pars_fragment\u003e\\n#include \u003cemissivemap_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003ctransmission_pars_fragment\u003e\\n#include \u003ccube_uv_reflection_fragment\u003e\\n#include \u003cenvmap_common_pars_fragment\u003e\\n#include \u003cenvmap_physical_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003clights_physical_pars_fragment\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003cclearcoat_pars_fragment\u003e\\n#include \u003croughnessmap_pars_fragment\u003e\\n#include \u003cmetalnessmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#ifdef USE_TRANSMISSION\\n\\t\\tfloat totalTransmission = transmission;\\n\\t\\tfloat thicknessFactor = thickness;\\n\\t#endif\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\t#include \u003croughnessmap_fragment\u003e\\n\\t#include \u003cmetalnessmap_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\t#include \u003cclearcoat_normal_fragment_begin\u003e\\n\\t#include \u003cclearcoat_normal_fragment_maps\u003e\\n\\t#include \u003cemissivemap_fragment\u003e\\n\\tvec3 rawDiffuseColor = diffuseColor.rgb;\\n\\t#include \u003ctransmission_fragment\u003e\\n\\t#include \u003clights_physical_fragment\u003e\\n\\t#include \u003clights_fragment_begin\u003e\\n\\t#include \u003clights_fragment_maps\u003e\\n\\t#include \u003clights_fragment_end\u003e\\n\\t#include \u003caomap_fragment\u003e\\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n\\t#include \u003cdithering_fragment\u003e\\n}\",meshphysical_vert:\"#define STANDARD\\nvarying vec3 vViewPosition;\\n#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#ifdef USE_TRANSMISSION\\n\\tvarying vec4 vWorldPosition;\\n#endif\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cuv2_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cuv2_vertex\u003e\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#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\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n#ifdef USE_TRANSMISSION\\n\\tvWorldPosition = worldPosition;\\n#endif\\n}\",normal_frag:\"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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#include \u003cpacking\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cbumpmap_pars_fragment\u003e\\n#include \u003cnormalmap_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cnormal_fragment_begin\u003e\\n\\t#include \u003cnormal_fragment_maps\u003e\\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\",normal_vert:\"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#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#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cdisplacementmap_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003cskinning_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n#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\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cskinning_vertex\u003e\\n\\t#include \u003cdisplacementmap_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\",points_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_fragment\u003e\\n#include \u003cmap_particle_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_particle_fragment\u003e\\n\\t#include \u003ccolor_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n\\t#include \u003cpremultiplied_alpha_fragment\u003e\\n}\",points_vert:\"uniform float size;\\nuniform float scale;\\n#include \u003ccommon\u003e\\n#include \u003ccolor_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cmorphtarget_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003ccolor_vertex\u003e\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cmorphtarget_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\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 \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",shadow_frag:\"uniform vec3 color;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cpacking\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003cbsdfs\u003e\\n#include \u003clights_pars_begin\u003e\\n#include \u003cshadowmap_pars_fragment\u003e\\n#include \u003cshadowmask_pars_fragment\u003e\\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n}\",shadow_vert:\"#include \u003ccommon\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003cshadowmap_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cbegin_vertex\u003e\\n\\t#include \u003cproject_vertex\u003e\\n\\t#include \u003cworldpos_vertex\u003e\\n\\t#include \u003cbeginnormal_vertex\u003e\\n\\t#include \u003cmorphnormal_vertex\u003e\\n\\t#include \u003cskinbase_vertex\u003e\\n\\t#include \u003cskinnormal_vertex\u003e\\n\\t#include \u003cdefaultnormal_vertex\u003e\\n\\t#include \u003cshadowmap_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\",sprite_frag:\"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_fragment\u003e\\n#include \u003cmap_pars_fragment\u003e\\n#include \u003calphamap_pars_fragment\u003e\\n#include \u003cfog_pars_fragment\u003e\\n#include \u003clogdepthbuf_pars_fragment\u003e\\n#include \u003cclipping_planes_pars_fragment\u003e\\nvoid main() {\\n\\t#include \u003cclipping_planes_fragment\u003e\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \u003clogdepthbuf_fragment\u003e\\n\\t#include \u003cmap_fragment\u003e\\n\\t#include \u003calphamap_fragment\u003e\\n\\t#include \u003calphatest_fragment\u003e\\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \u003ctonemapping_fragment\u003e\\n\\t#include \u003cencodings_fragment\u003e\\n\\t#include \u003cfog_fragment\u003e\\n}\",sprite_vert:\"uniform float rotation;\\nuniform vec2 center;\\n#include \u003ccommon\u003e\\n#include \u003cuv_pars_vertex\u003e\\n#include \u003cfog_pars_vertex\u003e\\n#include \u003clogdepthbuf_pars_vertex\u003e\\n#include \u003cclipping_planes_pars_vertex\u003e\\nvoid main() {\\n\\t#include \u003cuv_vertex\u003e\\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 \u003clogdepthbuf_vertex\u003e\\n\\t#include \u003cclipping_planes_vertex\u003e\\n\\t#include \u003cfog_vertex\u003e\\n}\"},Gs={common:{diffuse:{value:new Ir(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new Jn},uv2Transform:{value:new Jn},alphaMap:{value:null}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},refractionRatio:{value:.98},maxMipLevel:{value:0}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new Zn(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Ir(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Ir(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Jn}},sprite:{diffuse:{value:new Ir(16777215)},opacity:{value:1},center:{value:new Zn(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new Jn}}},ks={basic:{uniforms:Es([Gs.common,Gs.specularmap,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.fog]),vertexShader:Us.meshbasic_vert,fragmentShader:Us.meshbasic_frag},lambert:{uniforms:Es([Gs.common,Gs.specularmap,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)}}]),vertexShader:Us.meshlambert_vert,fragmentShader:Us.meshlambert_frag},phong:{uniforms:Es([Gs.common,Gs.specularmap,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)},specular:{value:new Ir(1118481)},shininess:{value:30}}]),vertexShader:Us.meshphong_vert,fragmentShader:Us.meshphong_frag},standard:{uniforms:Es([Gs.common,Gs.envmap,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.roughnessmap,Gs.metalnessmap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Us.meshphysical_vert,fragmentShader:Us.meshphysical_frag},toon:{uniforms:Es([Gs.common,Gs.aomap,Gs.lightmap,Gs.emissivemap,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.gradientmap,Gs.fog,Gs.lights,{emissive:{value:new Ir(0)}}]),vertexShader:Us.meshtoon_vert,fragmentShader:Us.meshtoon_frag},matcap:{uniforms:Es([Gs.common,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,Gs.fog,{matcap:{value:null}}]),vertexShader:Us.meshmatcap_vert,fragmentShader:Us.meshmatcap_frag},points:{uniforms:Es([Gs.points,Gs.fog]),vertexShader:Us.points_vert,fragmentShader:Us.points_frag},dashed:{uniforms:Es([Gs.common,Gs.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Us.linedashed_vert,fragmentShader:Us.linedashed_frag},depth:{uniforms:Es([Gs.common,Gs.displacementmap]),vertexShader:Us.depth_vert,fragmentShader:Us.depth_frag},normal:{uniforms:Es([Gs.common,Gs.bumpmap,Gs.normalmap,Gs.displacementmap,{opacity:{value:1}}]),vertexShader:Us.normal_vert,fragmentShader:Us.normal_frag},sprite:{uniforms:Es([Gs.sprite,Gs.fog]),vertexShader:Us.sprite_vert,fragmentShader:Us.sprite_frag},background:{uniforms:{uvTransform:{value:new Jn},t2D:{value:null}},vertexShader:Us.background_vert,fragmentShader:Us.background_frag},cube:{uniforms:Es([Gs.envmap,{opacity:{value:1}}]),vertexShader:Us.cube_vert,fragmentShader:Us.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Us.equirect_vert,fragmentShader:Us.equirect_frag},distanceRGBA:{uniforms:Es([Gs.common,Gs.displacementmap,{referencePosition:{value:new oi},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Us.distanceRGBA_vert,fragmentShader:Us.distanceRGBA_frag},shadow:{uniforms:Es([Gs.lights,Gs.fog,{color:{value:new Ir(0)},opacity:{value:1}}]),vertexShader:Us.shadow_vert,fragmentShader:Us.shadow_frag}};function Vs(t,e,n,i,r){const s=new Ir(0);let a,o,l=0,c=null,u=0,h=null;function d(t,e){n.buffers.color.setClear(t.r,t.g,t.b,e,r)}return{getClearColor:function(){return s},setClearColor:function(t,e=1){s.set(t),l=e,d(s,l)},getClearAlpha:function(){return l},setClearAlpha:function(t){l=t,d(s,l)},render:function(n,r){let p=!1,g=!0===r.isScene?r.background:null;g\u0026\u0026g.isTexture\u0026\u0026(g=e.get(g));const v=t.xr,y=v.getSession\u0026\u0026v.getSession();y\u0026\u0026\"additive\"===y.environmentBlendMode\u0026\u0026(g=null),null===g?d(s,l):g\u0026\u0026g.isColor\u0026\u0026(d(g,1),p=!0),(t.autoClear||p)\u0026\u0026t.clear(t.autoClearColor,t.autoClearDepth,t.autoClearStencil),g\u0026\u0026(g.isCubeTexture||g.mapping===ct)?(void 0===o\u0026\u0026(o=new ws(new Ss(1,1,1),new Ls({name:\"BackgroundCubeMaterial\",uniforms:Ts(ks.cube.uniforms),vertexShader:ks.cube.vertexShader,fragmentShader:ks.cube.fragmentShader,side:m,depthTest:!1,depthWrite:!1,fog:!1})),o.geometry.deleteAttribute(\"normal\"),o.geometry.deleteAttribute(\"uv\"),o.onBeforeRender=function(t,e,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(o.material,\"envMap\",{get:function(){return this.uniforms.envMap.value}}),i.update(o)),o.material.uniforms.envMap.value=g,o.material.uniforms.flipEnvMap.value=g.isCubeTexture\u0026\u0026g._needsFlipEnvMap?-1:1,c===g\u0026\u0026u===g.version\u0026\u0026h===t.toneMapping||(o.material.needsUpdate=!0,c=g,u=g.version,h=t.toneMapping),n.unshift(o,o.geometry,o.material,0,0,null)):g\u0026\u0026g.isTexture\u0026\u0026(void 0===a\u0026\u0026(a=new ws(new Hs(2,2),new Ls({name:\"BackgroundMaterial\",uniforms:Ts(ks.background.uniforms),vertexShader:ks.background.vertexShader,fragmentShader:ks.background.fragmentShader,side:f,depthTest:!1,depthWrite:!1,fog:!1})),a.geometry.deleteAttribute(\"normal\"),Object.defineProperty(a.material,\"map\",{get:function(){return this.uniforms.t2D.value}}),i.update(a)),a.material.uniforms.t2D.value=g,!0===g.matrixAutoUpdate\u0026\u0026g.updateMatrix(),a.material.uniforms.uvTransform.value.copy(g.matrix),c===g\u0026\u0026u===g.version\u0026\u0026h===t.toneMapping||(a.material.needsUpdate=!0,c=g,u=g.version,h=t.toneMapping),n.unshift(a,a.geometry,a.material,0,0,null))}}}function Ws(t,e,n,i){const r=t.getParameter(34921),s=i.isWebGL2?null:e.get(\"OES_vertex_array_object\"),a=i.isWebGL2||null!==s,o={},l=d(null);let c=l;function u(e){return i.isWebGL2?t.bindVertexArray(e):s.bindVertexArrayOES(e)}function h(e){return i.isWebGL2?t.deleteVertexArray(e):s.deleteVertexArrayOES(e)}function d(t){const e=[],n=[],i=[];for(let t=0;t\u003cr;t++)e[t]=0,n[t]=0,i[t]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:e,enabledAttributes:n,attributeDivisors:i,object:t,attributes:{},index:null}}function p(){const t=c.newAttributes;for(let e=0,n=t.length;e\u003cn;e++)t[e]=0}function f(t){m(t,0)}function m(n,r){const s=c.newAttributes,a=c.enabledAttributes,o=c.attributeDivisors;if(s[n]=1,0===a[n]\u0026\u0026(t.enableVertexAttribArray(n),a[n]=1),o[n]!==r){(i.isWebGL2?t:e.get(\"ANGLE_instanced_arrays\"))[i.isWebGL2?\"vertexAttribDivisor\":\"vertexAttribDivisorANGLE\"](n,r),o[n]=r}}function g(){const e=c.newAttributes,n=c.enabledAttributes;for(let i=0,r=n.length;i\u003cr;i++)n[i]!==e[i]\u0026\u0026(t.disableVertexAttribArray(i),n[i]=0)}function v(e,n,r,s,a,o){!0!==i.isWebGL2||5124!==r\u0026\u00265125!==r?t.vertexAttribPointer(e,n,r,s,a,o):t.vertexAttribIPointer(e,n,r,a,o)}function y(){x(),c!==l\u0026\u0026(c=l,u(c.object))}function x(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:function(r,l,h,y,x){let _=!1;if(a){const e=function(e,n,r){const a=!0===r.wireframe;let l=o[e.id];void 0===l\u0026\u0026(l={},o[e.id]=l);let c=l[n.id];void 0===c\u0026\u0026(c={},l[n.id]=c);let u=c[a];void 0===u\u0026\u0026(u=d(i.isWebGL2?t.createVertexArray():s.createVertexArrayOES()),c[a]=u);return u}(y,h,l);c!==e\u0026\u0026(c=e,u(c.object)),_=function(t,e){const n=c.attributes,i=t.attributes;let r=0;for(const t in i){const e=n[t],s=i[t];if(void 0===e)return!0;if(e.attribute!==s)return!0;if(e.data!==s.data)return!0;r++}return c.attributesNum!==r||c.index!==e}(y,x),_\u0026\u0026function(t,e){const n={},i=t.attributes;let r=0;for(const t in i){const e=i[t],s={};s.attribute=e,e.data\u0026\u0026(s.data=e.data),n[t]=s,r++}c.attributes=n,c.attributesNum=r,c.index=e}(y,x)}else{const t=!0===l.wireframe;c.geometry===y.id\u0026\u0026c.program===h.id\u0026\u0026c.wireframe===t||(c.geometry=y.id,c.program=h.id,c.wireframe=t,_=!0)}!0===r.isInstancedMesh\u0026\u0026(_=!0),null!==x\u0026\u0026n.update(x,34963),_\u0026\u0026(!function(r,s,a,o){if(!1===i.isWebGL2\u0026\u0026(r.isInstancedMesh||o.isInstancedBufferGeometry)\u0026\u0026null===e.get(\"ANGLE_instanced_arrays\"))return;p();const l=o.attributes,c=a.getAttributes(),u=s.defaultAttributeValues;for(const e in c){const i=c[e];if(i\u003e=0){const s=l[e];if(void 0!==s){const e=s.normalized,r=s.itemSize,a=n.get(s);if(void 0===a)continue;const l=a.buffer,c=a.type,u=a.bytesPerElement;if(s.isInterleavedBufferAttribute){const n=s.data,a=n.stride,h=s.offset;n\u0026\u0026n.isInstancedInterleavedBuffer?(m(i,n.meshPerAttribute),void 0===o._maxInstanceCount\u0026\u0026(o._maxInstanceCount=n.meshPerAttribute*n.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,a*u,h*u)}else s.isInstancedBufferAttribute?(m(i,s.meshPerAttribute),void 0===o._maxInstanceCount\u0026\u0026(o._maxInstanceCount=s.meshPerAttribute*s.count)):f(i),t.bindBuffer(34962,l),v(i,r,c,e,0,0)}else if(\"instanceMatrix\"===e){const e=n.get(r.instanceMatrix);if(void 0===e)continue;const s=e.buffer,a=e.type;m(i+0,1),m(i+1,1),m(i+2,1),m(i+3,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i+0,4,a,!1,64,0),t.vertexAttribPointer(i+1,4,a,!1,64,16),t.vertexAttribPointer(i+2,4,a,!1,64,32),t.vertexAttribPointer(i+3,4,a,!1,64,48)}else if(\"instanceColor\"===e){const e=n.get(r.instanceColor);if(void 0===e)continue;const s=e.buffer,a=e.type;m(i,1),t.bindBuffer(34962,s),t.vertexAttribPointer(i,3,a,!1,12,0)}else if(void 0!==u){const n=u[e];if(void 0!==n)switch(n.length){case 2:t.vertexAttrib2fv(i,n);break;case 3:t.vertexAttrib3fv(i,n);break;case 4:t.vertexAttrib4fv(i,n);break;default:t.vertexAttrib1fv(i,n)}}}}g()}(r,l,h,y),null!==x\u0026\u0026t.bindBuffer(34963,n.get(x).buffer))},reset:y,resetDefaultState:x,dispose:function(){y();for(const t in o){const e=o[t];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete o[t]}},releaseStatesOfGeometry:function(t){if(void 0===o[t.id])return;const e=o[t.id];for(const t in e){const n=e[t];for(const t in n)h(n[t].object),delete n[t];delete e[t]}delete o[t.id]},releaseStatesOfProgram:function(t){for(const e in o){const n=o[e];if(void 0===n[t.id])continue;const i=n[t.id];for(const t in i)h(i[t].object),delete i[t];delete n[t.id]}},initAttributes:p,enableAttribute:f,disableUnusedAttributes:g}}function js(t,e,n,i){const r=i.isWebGL2;let s;this.setMode=function(t){s=t},this.render=function(e,i){t.drawArrays(s,e,i),n.update(i,s,1)},this.renderInstances=function(i,a,o){if(0===o)return;let l,c;if(r)l=t,c=\"drawArraysInstanced\";else if(l=e.get(\"ANGLE_instanced_arrays\"),c=\"drawArraysInstancedANGLE\",null===l)return void console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");l[c](s,i,a,o),n.update(a,s,o)}}function qs(t,e,n){let i;function r(e){if(\"highp\"===e){if(t.getShaderPrecisionFormat(35633,36338).precision\u003e0\u0026\u0026t.getShaderPrecisionFormat(35632,36338).precision\u003e0)return\"highp\";e=\"mediump\"}return\"mediump\"===e\u0026\u0026t.getShaderPrecisionFormat(35633,36337).precision\u003e0\u0026\u0026t.getShaderPrecisionFormat(35632,36337).precision\u003e0?\"mediump\":\"lowp\"}const s=\"undefined\"!=typeof WebGL2RenderingContext\u0026\u0026t instanceof WebGL2RenderingContext||\"undefined\"!=typeof WebGL2ComputeRenderingContext\u0026\u0026t instanceof WebGL2ComputeRenderingContext;let a=void 0!==n.precision?n.precision:\"highp\";const o=r(a);o!==a\u0026\u0026(console.warn(\"THREE.WebGLRenderer:\",a,\"not supported, using\",o,\"instead.\"),a=o);const l=s||e.has(\"WEBGL_draw_buffers\"),c=!0===n.logarithmicDepthBuffer,u=t.getParameter(34930),h=t.getParameter(35660),d=t.getParameter(3379),p=t.getParameter(34076),f=t.getParameter(34921),m=t.getParameter(36347),g=t.getParameter(36348),v=t.getParameter(36349),y=h\u003e0,x=s||e.has(\"OES_texture_float\");return{isWebGL2:s,drawBuffers:l,getMaxAnisotropy:function(){if(void 0!==i)return i;if(!0===e.has(\"EXT_texture_filter_anisotropic\")){const n=e.get(\"EXT_texture_filter_anisotropic\");i=t.getParameter(n.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i},getMaxPrecision:r,precision:a,logarithmicDepthBuffer:c,maxTextures:u,maxVertexTextures:h,maxTextureSize:d,maxCubemapSize:p,maxAttributes:f,maxVertexUniforms:m,maxVaryings:g,maxFragmentUniforms:v,vertexTextures:y,floatFragmentTextures:x,floatVertexTextures:y\u0026\u0026x,maxSamples:s?t.getParameter(36183):0}}function Xs(t){const e=this;let n=null,i=0,r=!1,s=!1;const a=new pr,o=new Jn,l={value:null,needsUpdate:!1};function c(){l.value!==n\u0026\u0026(l.value=n,l.needsUpdate=i\u003e0),e.numPlanes=i,e.numIntersection=0}function u(t,n,i,r){const s=null!==t?t.length:0;let c=null;if(0!==s){if(c=l.value,!0!==r||null===c){const e=i+4*s,r=n.matrixWorldInverse;o.getNormalMatrix(r),(null===c||c.length\u003ce)\u0026\u0026(c=new Float32Array(e));for(let e=0,n=i;e!==s;++e,n+=4)a.copy(t[e]).applyMatrix4(r,o),a.normal.toArray(c,n),c[n+3]=a.constant}l.value=c,l.needsUpdate=!0}return e.numPlanes=s,e.numIntersection=0,c}this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(t,e,s){const a=0!==t.length||e||0!==i||r;return r=e,n=u(t,s,0),i=t.length,a},this.beginShadows=function(){s=!0,u(null)},this.endShadows=function(){s=!1,c()},this.setState=function(e,a,o){const h=e.clippingPlanes,d=e.clipIntersection,p=e.clipShadows,f=t.get(e);if(!r||null===h||0===h.length||s\u0026\u0026!p)s?u(null):c();else{const t=s?0:i,e=4*t;let r=f.clippingState||null;l.value=r,r=u(h,a,e,o);for(let t=0;t!==e;++t)r[t]=n[t];f.clippingState=r,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=t}}}function Ys(t){let e=new WeakMap;function n(t,e){return e===ot?t.mapping=st:e===lt\u0026\u0026(t.mapping=at),t}function i(t){const n=t.target;n.removeEventListener(\"dispose\",i);const r=e.get(n);void 0!==r\u0026\u0026(e.delete(n),r.dispose())}return{get:function(r){if(r\u0026\u0026r.isTexture){const s=r.mapping;if(s===ot||s===lt){if(e.has(r)){return n(e.get(r).texture,r.mapping)}{const s=r.image;if(s\u0026\u0026s.height\u003e0){const a=t.getRenderTarget(),o=new Is(s.height/2);return o.fromEquirectangularTexture(t,r),e.set(r,o),t.setRenderTarget(a),r.addEventListener(\"dispose\",i),n(o.texture,r.mapping)}return null}}}return r},dispose:function(){e=new WeakMap}}}function Zs(t){const e={};function n(n){if(void 0!==e[n])return e[n];let i;switch(n){case\"WEBGL_depth_texture\":i=t.getExtension(\"WEBGL_depth_texture\")||t.getExtension(\"MOZ_WEBGL_depth_texture\")||t.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case\"EXT_texture_filter_anisotropic\":i=t.getExtension(\"EXT_texture_filter_anisotropic\")||t.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||t.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case\"WEBGL_compressed_texture_s3tc\":i=t.getExtension(\"WEBGL_compressed_texture_s3tc\")||t.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case\"WEBGL_compressed_texture_pvrtc\":i=t.getExtension(\"WEBGL_compressed_texture_pvrtc\")||t.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;default:i=t.getExtension(n)}return e[n]=i,i}return{has:function(t){return null!==n(t)},init:function(t){t.isWebGL2?n(\"EXT_color_buffer_float\"):(n(\"WEBGL_depth_texture\"),n(\"OES_texture_float\"),n(\"OES_texture_half_float\"),n(\"OES_texture_half_float_linear\"),n(\"OES_standard_derivatives\"),n(\"OES_element_index_uint\"),n(\"OES_vertex_array_object\"),n(\"ANGLE_instanced_arrays\")),n(\"OES_texture_float_linear\"),n(\"EXT_color_buffer_half_float\")},get:function(t){const e=n(t);return null===e\u0026\u0026console.warn(\"THREE.WebGLRenderer: \"+t+\" extension not supported.\"),e}}}function Js(t,e,n,i){const r={},s=new WeakMap;function a(t){const o=t.target;null!==o.index\u0026\u0026e.remove(o.index);for(const t in o.attributes)e.remove(o.attributes[t]);o.removeEventListener(\"dispose\",a),delete r[o.id];const l=s.get(o);l\u0026\u0026(e.remove(l),s.delete(o)),i.releaseStatesOfGeometry(o),!0===o.isInstancedBufferGeometry\u0026\u0026delete o._maxInstanceCount,n.memory.geometries--}function o(t){const n=[],i=t.index,r=t.attributes.position;let a=0;if(null!==i){const t=i.array;a=i.version;for(let e=0,i=t.length;e\u003ci;e+=3){const i=t[e+0],r=t[e+1],s=t[e+2];n.push(i,r,r,s,s,i)}}else{const t=r.array;a=r.version;for(let e=0,i=t.length/3-1;e\u003ci;e+=3){const t=e+0,i=e+1,r=e+2;n.push(t,i,i,r,r,t)}}const o=new(Yr(n)\u003e65535?Wr:kr)(n,1);o.version=a;const l=s.get(t);l\u0026\u0026e.remove(l),s.set(t,o)}return{get:function(t,e){return!0===r[e.id]||(e.addEventListener(\"dispose\",a),r[e.id]=!0,n.memory.geometries++),e},update:function(t){const n=t.attributes;for(const t in n)e.update(n[t],34962);const i=t.morphAttributes;for(const t in i){const n=i[t];for(let t=0,i=n.length;t\u003ci;t++)e.update(n[t],34962)}},getWireframeAttribute:function(t){const e=s.get(t);if(e){const n=t.index;null!==n\u0026\u0026e.version\u003cn.version\u0026\u0026o(t)}else o(t);return s.get(t)}}}function Qs(t,e,n,i){const r=i.isWebGL2;let s,a,o;this.setMode=function(t){s=t},this.setIndex=function(t){a=t.type,o=t.bytesPerElement},this.render=function(e,i){t.drawElements(s,i,a,e*o),n.update(i,s,1)},this.renderInstances=function(i,l,c){if(0===c)return;let u,h;if(r)u=t,h=\"drawElementsInstanced\";else if(u=e.get(\"ANGLE_instanced_arrays\"),h=\"drawElementsInstancedANGLE\",null===u)return void console.error(\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");u[h](s,l,a,i*o,c),n.update(l,s,c)}}function Ks(t){const e={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:e,programs:null,autoReset:!0,reset:function(){e.frame++,e.calls=0,e.triangles=0,e.points=0,e.lines=0},update:function(t,n,i){switch(e.calls++,n){case 4:e.triangles+=i*(t/3);break;case 1:e.lines+=i*(t/2);break;case 3:e.lines+=i*(t-1);break;case 2:e.lines+=i*t;break;case 0:e.points+=i*t;break;default:console.error(\"THREE.WebGLInfo: Unknown draw mode:\",n)}}}}function $s(t,e){return t[0]-e[0]}function ta(t,e){return Math.abs(e[1])-Math.abs(t[1])}function ea(t){const e={},n=new Float32Array(8),i=[];for(let t=0;t\u003c8;t++)i[t]=[t,0];return{update:function(r,s,a,o){const l=r.morphTargetInfluences,c=void 0===l?0:l.length;let u=e[s.id];if(void 0===u){u=[];for(let t=0;t\u003cc;t++)u[t]=[t,0];e[s.id]=u}for(let t=0;t\u003cc;t++){const e=u[t];e[0]=t,e[1]=l[t]}u.sort(ta);for(let t=0;t\u003c8;t++)t\u003cc\u0026\u0026u[t][1]?(i[t][0]=u[t][0],i[t][1]=u[t][1]):(i[t][0]=Number.MAX_SAFE_INTEGER,i[t][1]=0);i.sort($s);const h=a.morphTargets\u0026\u0026s.morphAttributes.position,d=a.morphNormals\u0026\u0026s.morphAttributes.normal;let p=0;for(let t=0;t\u003c8;t++){const e=i[t],r=e[0],a=e[1];r!==Number.MAX_SAFE_INTEGER\u0026\u0026a?(h\u0026\u0026s.getAttribute(\"morphTarget\"+t)!==h[r]\u0026\u0026s.setAttribute(\"morphTarget\"+t,h[r]),d\u0026\u0026s.getAttribute(\"morphNormal\"+t)!==d[r]\u0026\u0026s.setAttribute(\"morphNormal\"+t,d[r]),n[t]=a,p+=a):(h\u0026\u0026!0===s.hasAttribute(\"morphTarget\"+t)\u0026\u0026s.deleteAttribute(\"morphTarget\"+t),d\u0026\u0026!0===s.hasAttribute(\"morphNormal\"+t)\u0026\u0026s.deleteAttribute(\"morphNormal\"+t),n[t]=0)}const f=s.morphTargetsRelative?1:1-p;o.getUniforms().setValue(t,\"morphTargetBaseInfluence\",f),o.getUniforms().setValue(t,\"morphTargetInfluences\",n)}}}function na(t,e,n,i){let r=new WeakMap;function s(t){const e=t.target;e.removeEventListener(\"dispose\",s),n.remove(e.instanceMatrix),null!==e.instanceColor\u0026\u0026n.remove(e.instanceColor)}return{update:function(t){const a=i.render.frame,o=t.geometry,l=e.get(t,o);return r.get(l)!==a\u0026\u0026(e.update(l),r.set(l,a)),t.isInstancedMesh\u0026\u0026(!1===t.hasEventListener(\"dispose\",s)\u0026\u0026t.addEventListener(\"dispose\",s),n.update(t.instanceMatrix,34962),null!==t.instanceColor\u0026\u0026n.update(t.instanceColor,34962)),l},dispose:function(){r=new WeakMap}}}ks.physical={uniforms:Es([ks.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new Zn(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new Ir(0)},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new Zn},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new Ir(0)}}]),vertexShader:Us.meshphysical_vert,fragmentShader:Us.meshphysical_frag};class ia extends ti{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=ft,this.minFilter=ft,this.wrapR=dt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}ia.prototype.isDataTexture2DArray=!0;class ra extends ti{constructor(t=null,e=1,n=1,i=1){super(null),this.image={data:t,width:e,height:n,depth:i},this.magFilter=ft,this.minFilter=ft,this.wrapR=dt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}ra.prototype.isDataTexture3D=!0;const sa=new ti,aa=new ia,oa=new ra,la=new Ds,ca=[],ua=[],ha=new Float32Array(16),da=new Float32Array(9),pa=new Float32Array(4);function fa(t,e,n){const i=t[0];if(i\u003c=0||i\u003e0)return t;const r=e*n;let s=ca[r];if(void 0===s\u0026\u0026(s=new Float32Array(r),ca[r]=s),0!==e){i.toArray(s,0);for(let i=1,r=0;i!==e;++i)r+=n,t[i].toArray(s,r)}return s}function ma(t,e){if(t.length!==e.length)return!1;for(let n=0,i=t.length;n\u003ci;n++)if(t[n]!==e[n])return!1;return!0}function ga(t,e){for(let n=0,i=e.length;n\u003ci;n++)t[n]=e[n]}function va(t,e){let n=ua[e];void 0===n\u0026\u0026(n=new Int32Array(e),ua[e]=n);for(let i=0;i!==e;++i)n[i]=t.allocateTextureUnit();return n}function ya(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1f(this.addr,e),n[0]=e)}function xa(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y||(t.uniform2f(this.addr,e.x,e.y),n[0]=e.x,n[1]=e.y);else{if(ma(n,e))return;t.uniform2fv(this.addr,e),ga(n,e)}}function _a(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y\u0026\u0026n[2]===e.z||(t.uniform3f(this.addr,e.x,e.y,e.z),n[0]=e.x,n[1]=e.y,n[2]=e.z);else if(void 0!==e.r)n[0]===e.r\u0026\u0026n[1]===e.g\u0026\u0026n[2]===e.b||(t.uniform3f(this.addr,e.r,e.g,e.b),n[0]=e.r,n[1]=e.g,n[2]=e.b);else{if(ma(n,e))return;t.uniform3fv(this.addr,e),ga(n,e)}}function ba(t,e){const n=this.cache;if(void 0!==e.x)n[0]===e.x\u0026\u0026n[1]===e.y\u0026\u0026n[2]===e.z\u0026\u0026n[3]===e.w||(t.uniform4f(this.addr,e.x,e.y,e.z,e.w),n[0]=e.x,n[1]=e.y,n[2]=e.z,n[3]=e.w);else{if(ma(n,e))return;t.uniform4fv(this.addr,e),ga(n,e)}}function wa(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ma(n,e))return;t.uniformMatrix2fv(this.addr,!1,e),ga(n,e)}else{if(ma(n,i))return;pa.set(i),t.uniformMatrix2fv(this.addr,!1,pa),ga(n,i)}}function Ma(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ma(n,e))return;t.uniformMatrix3fv(this.addr,!1,e),ga(n,e)}else{if(ma(n,i))return;da.set(i),t.uniformMatrix3fv(this.addr,!1,da),ga(n,i)}}function Sa(t,e){const n=this.cache,i=e.elements;if(void 0===i){if(ma(n,e))return;t.uniformMatrix4fv(this.addr,!1,e),ga(n,e)}else{if(ma(n,i))return;ha.set(i),t.uniformMatrix4fv(this.addr,!1,ha),ga(n,i)}}function Ta(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1i(this.addr,e),n[0]=e)}function Ea(t,e){const n=this.cache;ma(n,e)||(t.uniform2iv(this.addr,e),ga(n,e))}function Aa(t,e){const n=this.cache;ma(n,e)||(t.uniform3iv(this.addr,e),ga(n,e))}function La(t,e){const n=this.cache;ma(n,e)||(t.uniform4iv(this.addr,e),ga(n,e))}function Ra(t,e){const n=this.cache;n[0]!==e\u0026\u0026(t.uniform1ui(this.addr,e),n[0]=e)}function Ca(t,e){const n=this.cache;ma(n,e)||(t.uniform2uiv(this.addr,e),ga(n,e))}function Pa(t,e){const n=this.cache;ma(n,e)||(t.uniform3uiv(this.addr,e),ga(n,e))}function Da(t,e){const n=this.cache;ma(n,e)||(t.uniform4uiv(this.addr,e),ga(n,e))}function Ia(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTexture2D(e||sa,r)}function Na(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTexture3D(e||oa,r)}function za(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.safeSetTextureCube(e||la,r)}function Ba(t,e,n){const i=this.cache,r=n.allocateTextureUnit();i[0]!==r\u0026\u0026(t.uniform1i(this.addr,r),i[0]=r),n.setTexture2DArray(e||aa,r)}function Oa(t,e){t.uniform1fv(this.addr,e)}function Fa(t,e){const n=fa(e,this.size,2);t.uniform2fv(this.addr,n)}function Ha(t,e){const n=fa(e,this.size,3);t.uniform3fv(this.addr,n)}function Ua(t,e){const n=fa(e,this.size,4);t.uniform4fv(this.addr,n)}function Ga(t,e){const n=fa(e,this.size,4);t.uniformMatrix2fv(this.addr,!1,n)}function ka(t,e){const n=fa(e,this.size,9);t.uniformMatrix3fv(this.addr,!1,n)}function Va(t,e){const n=fa(e,this.size,16);t.uniformMatrix4fv(this.addr,!1,n)}function Wa(t,e){t.uniform1iv(this.addr,e)}function ja(t,e){t.uniform2iv(this.addr,e)}function qa(t,e){t.uniform3iv(this.addr,e)}function Xa(t,e){t.uniform4iv(this.addr,e)}function Ya(t,e){t.uniform1uiv(this.addr,e)}function Za(t,e){t.uniform2uiv(this.addr,e)}function Ja(t,e){t.uniform3uiv(this.addr,e)}function Qa(t,e){t.uniform4uiv(this.addr,e)}function Ka(t,e,n){const i=e.length,r=va(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTexture2D(e[t]||sa,r[t])}function $a(t,e,n){const i=e.length,r=va(n,i);t.uniform1iv(this.addr,r);for(let t=0;t!==i;++t)n.safeSetTextureCube(e[t]||la,r[t])}function to(t,e,n){this.id=t,this.addr=n,this.cache=[],this.setValue=function(t){switch(t){case 5126:return ya;case 35664:return xa;case 35665:return _a;case 35666:return ba;case 35674:return wa;case 35675:return Ma;case 35676:return Sa;case 5124:case 35670:return Ta;case 35667:case 35671:return Ea;case 35668:case 35672:return Aa;case 35669:case 35673:return La;case 5125:return Ra;case 36294:return Ca;case 36295:return Pa;case 36296:return Da;case 35678:case 36198:case 36298:case 36306:case 35682:return Ia;case 35679:case 36299:case 36307:return Na;case 35680:case 36300:case 36308:case 36293:return za;case 36289:case 36303:case 36311:case 36292:return Ba}}(e.type)}function eo(t,e,n){this.id=t,this.addr=n,this.cache=[],this.size=e.size,this.setValue=function(t){switch(t){case 5126:return Oa;case 35664:return Fa;case 35665:return Ha;case 35666:return Ua;case 35674:return Ga;case 35675:return ka;case 35676:return Va;case 5124:case 35670:return Wa;case 35667:case 35671:return ja;case 35668:case 35672:return qa;case 35669:case 35673:return Xa;case 5125:return Ya;case 36294:return Za;case 36295:return Ja;case 36296:return Qa;case 35678:case 36198:case 36298:case 36306:case 35682:return Ka;case 35680:case 36300:case 36308:case 36293:return $a}}(e.type)}function no(t){this.id=t,this.seq=[],this.map={}}eo.prototype.updateCache=function(t){const e=this.cache;t instanceof Float32Array\u0026\u0026e.length!==t.length\u0026\u0026(this.cache=new Float32Array(t.length)),ga(e,t)},no.prototype.setValue=function(t,e,n){const i=this.seq;for(let r=0,s=i.length;r!==s;++r){const s=i[r];s.setValue(t,e[s.id],n)}};const io=/(\\w+)(\\])?(\\[|\\.)?/g;function ro(t,e){t.seq.push(e),t.map[e.id]=e}function so(t,e,n){const i=t.name,r=i.length;for(io.lastIndex=0;;){const s=io.exec(i),a=io.lastIndex;let o=s[1];const l=\"]\"===s[2],c=s[3];if(l\u0026\u0026(o|=0),void 0===c||\"[\"===c\u0026\u0026a+2===r){ro(n,void 0===c?new to(o,t,e):new eo(o,t,e));break}{let t=n.map[o];void 0===t\u0026\u0026(t=new no(o),ro(n,t)),n=t}}}function ao(t,e){this.seq=[],this.map={};const n=t.getProgramParameter(e,35718);for(let i=0;i\u003cn;++i){const n=t.getActiveUniform(e,i);so(n,t.getUniformLocation(e,n.name),this)}}function oo(t,e,n){const i=t.createShader(e);return t.shaderSource(i,n),t.compileShader(i),i}ao.prototype.setValue=function(t,e,n,i){const r=this.map[e];void 0!==r\u0026\u0026r.setValue(t,n,i)},ao.prototype.setOptional=function(t,e,n){const i=e[n];void 0!==i\u0026\u0026this.setValue(t,n,i)},ao.upload=function(t,e,n,i){for(let r=0,s=e.length;r!==s;++r){const s=e[r],a=n[s.id];!1!==a.needsUpdate\u0026\u0026s.setValue(t,a.value,i)}},ao.seqWithValue=function(t,e){const n=[];for(let i=0,r=t.length;i!==r;++i){const r=t[i];r.id in e\u0026\u0026n.push(r)}return n};let lo=0;function co(t){switch(t){case Je:return[\"Linear\",\"( value )\"];case Qe:return[\"sRGB\",\"( value )\"];case $e:return[\"RGBE\",\"( value )\"];case en:return[\"RGBM\",\"( value, 7.0 )\"];case nn:return[\"RGBM\",\"( value, 16.0 )\"];case rn:return[\"RGBD\",\"( value, 256.0 )\"];case Ke:return[\"Gamma\",\"( value, float( GAMMA_FACTOR ) )\"];case tn:return[\"LogLuv\",\"( value )\"];default:return console.warn(\"THREE.WebGLProgram: Unsupported encoding:\",t),[\"Linear\",\"( value )\"]}}function uo(t,e,n){const i=t.getShaderParameter(e,35713),r=t.getShaderInfoLog(e).trim();if(i\u0026\u0026\"\"===r)return\"\";return\"THREE.WebGLShader: gl.getShaderInfoLog() \"+n+\"\\n\"+r+function(t){const e=t.split(\"\\n\");for(let t=0;t\u003ce.length;t++)e[t]=t+1+\": \"+e[t];return e.join(\"\\n\")}(t.getShaderSource(e))}function ho(t,e){const n=co(e);return\"vec4 \"+t+\"( vec4 value ) { return \"+n[0]+\"ToLinear\"+n[1]+\"; }\"}function po(t,e){const n=co(e);return\"vec4 \"+t+\"( vec4 value ) { return LinearTo\"+n[0]+n[1]+\"; }\"}function fo(t,e){let n;switch(e){case $:n=\"Linear\";break;case tt:n=\"Reinhard\";break;case et:n=\"OptimizedCineon\";break;case nt:n=\"ACESFilmic\";break;case it:n=\"Custom\";break;default:console.warn(\"THREE.WebGLProgram: Unsupported toneMapping:\",e),n=\"Linear\"}return\"vec3 \"+t+\"( vec3 color ) { return \"+n+\"ToneMapping( color ); }\"}function mo(t){return\"\"!==t}function go(t,e){return t.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function vo(t,e){return t.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const yo=/^[ \\t]*#include +\u003c([\\w\\d./]+)\u003e/gm;function xo(t){return t.replace(yo,_o)}function _o(t,e){const n=Us[e];if(void 0===n)throw new Error(\"Can not resolve #include \u003c\"+e+\"\u003e\");return xo(n)}const bo=/#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i \u003c (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g,wo=/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*\u003c\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;function Mo(t){return t.replace(wo,To).replace(bo,So)}function So(t,e,n,i){return console.warn(\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\"),To(t,e,n,i)}function To(t,e,n,i){let r=\"\";for(let t=parseInt(e);t\u003cparseInt(n);t++)r+=i.replace(/\\[\\s*i\\s*\\]/g,\"[ \"+t+\" ]\").replace(/UNROLLED_LOOP_INDEX/g,t);return r}function Eo(t){let e=\"precision \"+t.precision+\" float;\\nprecision \"+t.precision+\" int;\";return\"highp\"===t.precision?e+=\"\\n#define HIGH_PRECISION\":\"mediump\"===t.precision?e+=\"\\n#define MEDIUM_PRECISION\":\"lowp\"===t.precision\u0026\u0026(e+=\"\\n#define LOW_PRECISION\"),e}function Ao(t,e,n,i){const r=t.getContext(),s=n.defines;let a=n.vertexShader,o=n.fragmentShader;const l=function(t){let e=\"SHADOWMAP_TYPE_BASIC\";return t.shadowMapType===h?e=\"SHADOWMAP_TYPE_PCF\":t.shadowMapType===d?e=\"SHADOWMAP_TYPE_PCF_SOFT\":t.shadowMapType===p\u0026\u0026(e=\"SHADOWMAP_TYPE_VSM\"),e}(n),c=function(t){let e=\"ENVMAP_TYPE_CUBE\";if(t.envMap)switch(t.envMapMode){case st:case at:e=\"ENVMAP_TYPE_CUBE\";break;case ct:case ut:e=\"ENVMAP_TYPE_CUBE_UV\"}return e}(n),u=function(t){let e=\"ENVMAP_MODE_REFLECTION\";if(t.envMap)switch(t.envMapMode){case at:case ut:e=\"ENVMAP_MODE_REFRACTION\"}return e}(n),f=function(t){let e=\"ENVMAP_BLENDING_NONE\";if(t.envMap)switch(t.combine){case Z:e=\"ENVMAP_BLENDING_MULTIPLY\";break;case J:e=\"ENVMAP_BLENDING_MIX\";break;case Q:e=\"ENVMAP_BLENDING_ADD\"}return e}(n),m=t.gammaFactor\u003e0?t.gammaFactor:1,g=n.isWebGL2?\"\":function(t){return[t.extensionDerivatives||t.envMapCubeUV||t.bumpMap||t.tangentSpaceNormalMap||t.clearcoatNormalMap||t.flatShading||\"physical\"===t.shaderID?\"#extension GL_OES_standard_derivatives : enable\":\"\",(t.extensionFragDepth||t.logarithmicDepthBuffer)\u0026\u0026t.rendererExtensionFragDepth?\"#extension GL_EXT_frag_depth : enable\":\"\",t.extensionDrawBuffers\u0026\u0026t.rendererExtensionDrawBuffers?\"#extension GL_EXT_draw_buffers : require\":\"\",(t.extensionShaderTextureLOD||t.envMap||t.transmission\u003e0)\u0026\u0026t.rendererExtensionShaderTextureLod?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter(mo).join(\"\\n\")}(n),v=function(t){const e=[];for(const n in t){const i=t[n];!1!==i\u0026\u0026e.push(\"#define \"+n+\" \"+i)}return e.join(\"\\n\")}(s),y=r.createProgram();let x,_,b=n.glslVersion?\"#version \"+n.glslVersion+\"\\n\":\"\";n.isRawShaderMaterial?(x=[v].filter(mo).join(\"\\n\"),x.length\u003e0\u0026\u0026(x+=\"\\n\"),_=[g,v].filter(mo).join(\"\\n\"),_.length\u003e0\u0026\u0026(_+=\"\\n\")):(x=[Eo(n),\"#define SHADER_NAME \"+n.shaderName,v,n.instancing?\"#define USE_INSTANCING\":\"\",n.instancingColor?\"#define USE_INSTANCING_COLOR\":\"\",n.supportsVertexTextures?\"#define VERTEX_TEXTURES\":\"\",\"#define GAMMA_FACTOR \"+m,\"#define MAX_BONES \"+n.maxBones,n.useFog\u0026\u0026n.fog?\"#define USE_FOG\":\"\",n.useFog\u0026\u0026n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+u:\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.displacementMap\u0026\u0026n.supportsVertexTextures?\"#define USE_DISPLACEMENTMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.skinning?\"#define USE_SKINNING\":\"\",n.useVertexTexture?\"#define BONE_TEXTURE\":\"\",n.morphTargets?\"#define USE_MORPHTARGETS\":\"\",n.morphNormals\u0026\u0026!1===n.flatShading?\"#define USE_MORPHNORMALS\":\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer\u0026\u0026n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",\"#ifdef USE_INSTANCING\",\"\\tattribute mat4 instanceMatrix;\",\"#endif\",\"#ifdef USE_INSTANCING_COLOR\",\"\\tattribute vec3 instanceColor;\",\"#endif\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_TANGENT\",\"\\tattribute vec4 tangent;\",\"#endif\",\"#if defined( USE_COLOR_ALPHA )\",\"\\tattribute vec4 color;\",\"#elif defined( USE_COLOR )\",\"\\tattribute vec3 color;\",\"#endif\",\"#ifdef USE_MORPHTARGETS\",\"\\tattribute vec3 morphTarget0;\",\"\\tattribute vec3 morphTarget1;\",\"\\tattribute vec3 morphTarget2;\",\"\\tattribute vec3 morphTarget3;\",\"\\t#ifdef USE_MORPHNORMALS\",\"\\t\\tattribute vec3 morphNormal0;\",\"\\t\\tattribute vec3 morphNormal1;\",\"\\t\\tattribute vec3 morphNormal2;\",\"\\t\\tattribute vec3 morphNormal3;\",\"\\t#else\",\"\\t\\tattribute vec3 morphTarget4;\",\"\\t\\tattribute vec3 morphTarget5;\",\"\\t\\tattribute vec3 morphTarget6;\",\"\\t\\tattribute vec3 morphTarget7;\",\"\\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\\tattribute vec4 skinIndex;\",\"\\tattribute vec4 skinWeight;\",\"#endif\",\"\\n\"].filter(mo).join(\"\\n\"),_=[g,Eo(n),\"#define SHADER_NAME \"+n.shaderName,v,n.alphaTest?\"#define ALPHATEST \"+n.alphaTest+(n.alphaTest%1?\"\":\".0\"):\"\",\"#define GAMMA_FACTOR \"+m,n.useFog\u0026\u0026n.fog?\"#define USE_FOG\":\"\",n.useFog\u0026\u0026n.fogExp2?\"#define FOG_EXP2\":\"\",n.map?\"#define USE_MAP\":\"\",n.matcap?\"#define USE_MATCAP\":\"\",n.envMap?\"#define USE_ENVMAP\":\"\",n.envMap?\"#define \"+c:\"\",n.envMap?\"#define \"+u:\"\",n.envMap?\"#define \"+f:\"\",n.lightMap?\"#define USE_LIGHTMAP\":\"\",n.aoMap?\"#define USE_AOMAP\":\"\",n.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",n.bumpMap?\"#define USE_BUMPMAP\":\"\",n.normalMap?\"#define USE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",n.normalMap\u0026\u0026n.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",n.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",n.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",n.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",n.specularMap?\"#define USE_SPECULARMAP\":\"\",n.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",n.metalnessMap?\"#define USE_METALNESSMAP\":\"\",n.alphaMap?\"#define USE_ALPHAMAP\":\"\",n.sheen?\"#define USE_SHEEN\":\"\",n.transmission?\"#define USE_TRANSMISSION\":\"\",n.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",n.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",n.vertexTangents?\"#define USE_TANGENT\":\"\",n.vertexColors||n.instancingColor?\"#define USE_COLOR\":\"\",n.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",n.vertexUvs?\"#define USE_UV\":\"\",n.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",n.gradientMap?\"#define USE_GRADIENTMAP\":\"\",n.flatShading?\"#define FLAT_SHADED\":\"\",n.doubleSided?\"#define DOUBLE_SIDED\":\"\",n.flipSided?\"#define FLIP_SIDED\":\"\",n.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",n.shadowMapEnabled?\"#define \"+l:\"\",n.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",n.physicallyCorrectLights?\"#define PHYSICALLY_CORRECT_LIGHTS\":\"\",n.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",n.logarithmicDepthBuffer\u0026\u0026n.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",(n.extensionShaderTextureLOD||n.envMap)\u0026\u0026n.rendererExtensionShaderTextureLod?\"#define TEXTURE_LOD_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",n.toneMapping!==K?\"#define TONE_MAPPING\":\"\",n.toneMapping!==K?Us.tonemapping_pars_fragment:\"\",n.toneMapping!==K?fo(\"toneMapping\",n.toneMapping):\"\",n.dithering?\"#define DITHERING\":\"\",Us.encodings_pars_fragment,n.map?ho(\"mapTexelToLinear\",n.mapEncoding):\"\",n.matcap?ho(\"matcapTexelToLinear\",n.matcapEncoding):\"\",n.envMap?ho(\"envMapTexelToLinear\",n.envMapEncoding):\"\",n.emissiveMap?ho(\"emissiveMapTexelToLinear\",n.emissiveMapEncoding):\"\",n.lightMap?ho(\"lightMapTexelToLinear\",n.lightMapEncoding):\"\",po(\"linearToOutputTexel\",n.outputEncoding),n.depthPacking?\"#define DEPTH_PACKING \"+n.depthPacking:\"\",\"\\n\"].filter(mo).join(\"\\n\")),a=xo(a),a=go(a,n),a=vo(a,n),o=xo(o),o=go(o,n),o=vo(o,n),a=Mo(a),o=Mo(o),n.isWebGL2\u0026\u0026!0!==n.isRawShaderMaterial\u0026\u0026(b=\"#version 300 es\\n\",x=[\"#define attribute in\",\"#define varying out\",\"#define texture2D texture\"].join(\"\\n\")+\"\\n\"+x,_=[\"#define varying in\",n.glslVersion===zn?\"\":\"out highp vec4 pc_fragColor;\",n.glslVersion===zn?\"\":\"#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\"+_);const w=b+_+o,M=oo(r,35633,b+x+a),S=oo(r,35632,w);if(r.attachShader(y,M),r.attachShader(y,S),void 0!==n.index0AttributeName?r.bindAttribLocation(y,0,n.index0AttributeName):!0===n.morphTargets\u0026\u0026r.bindAttribLocation(y,0,\"position\"),r.linkProgram(y),t.debug.checkShaderErrors){const t=r.getProgramInfoLog(y).trim(),e=r.getShaderInfoLog(M).trim(),n=r.getShaderInfoLog(S).trim();let i=!0,s=!0;if(!1===r.getProgramParameter(y,35714)){i=!1;const e=uo(r,M,\"vertex\"),n=uo(r,S,\"fragment\");console.error(\"THREE.WebGLProgram: shader error: \",r.getError(),\"35715\",r.getProgramParameter(y,35715),\"gl.getProgramInfoLog\",t,e,n)}else\"\"!==t?console.warn(\"THREE.WebGLProgram: gl.getProgramInfoLog()\",t):\"\"!==e\u0026\u0026\"\"!==n||(s=!1);s\u0026\u0026(this.diagnostics={runnable:i,programLog:t,vertexShader:{log:e,prefix:x},fragmentShader:{log:n,prefix:_}})}let T,E;return r.deleteShader(M),r.deleteShader(S),this.getUniforms=function(){return void 0===T\u0026\u0026(T=new ao(r,y)),T},this.getAttributes=function(){return void 0===E\u0026\u0026(E=function(t,e){const n={},i=t.getProgramParameter(e,35721);for(let r=0;r\u003ci;r++){const i=t.getActiveAttrib(e,r).name;n[i]=t.getAttribLocation(e,i)}return n}(r,y)),E},this.destroy=function(){i.releaseStatesOfProgram(this),r.deleteProgram(y),this.program=void 0},this.name=n.shaderName,this.id=lo++,this.cacheKey=e,this.usedTimes=1,this.program=y,this.vertexShader=M,this.fragmentShader=S,this}function Lo(t,e,n,i,r,s){const a=[],o=i.isWebGL2,l=i.logarithmicDepthBuffer,c=i.floatVertexTextures,u=i.maxVertexUniforms,h=i.vertexTextures;let d=i.precision;const p={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\"},f=[\"precision\",\"isWebGL2\",\"supportsVertexTextures\",\"outputEncoding\",\"instancing\",\"instancingColor\",\"map\",\"mapEncoding\",\"matcap\",\"matcapEncoding\",\"envMap\",\"envMapMode\",\"envMapEncoding\",\"envMapCubeUV\",\"lightMap\",\"lightMapEncoding\",\"aoMap\",\"emissiveMap\",\"emissiveMapEncoding\",\"bumpMap\",\"normalMap\",\"objectSpaceNormalMap\",\"tangentSpaceNormalMap\",\"clearcoatMap\",\"clearcoatRoughnessMap\",\"clearcoatNormalMap\",\"displacementMap\",\"specularMap\",\"roughnessMap\",\"metalnessMap\",\"gradientMap\",\"alphaMap\",\"combine\",\"vertexColors\",\"vertexAlphas\",\"vertexTangents\",\"vertexUvs\",\"uvsVertexOnly\",\"fog\",\"useFog\",\"fogExp2\",\"flatShading\",\"sizeAttenuation\",\"logarithmicDepthBuffer\",\"skinning\",\"maxBones\",\"useVertexTexture\",\"morphTargets\",\"morphNormals\",\"premultipliedAlpha\",\"numDirLights\",\"numPointLights\",\"numSpotLights\",\"numHemiLights\",\"numRectAreaLights\",\"numDirLightShadows\",\"numPointLightShadows\",\"numSpotLightShadows\",\"shadowMapEnabled\",\"shadowMapType\",\"toneMapping\",\"physicallyCorrectLights\",\"alphaTest\",\"doubleSided\",\"flipSided\",\"numClippingPlanes\",\"numClipIntersection\",\"depthPacking\",\"dithering\",\"sheen\",\"transmission\",\"transmissionMap\",\"thicknessMap\"];function v(t){let e;return t\u0026\u0026t.isTexture?e=t.encoding:t\u0026\u0026t.isWebGLRenderTarget?(console.warn(\"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\"),e=t.texture.encoding):e=Je,e}return{getParameters:function(r,a,f,y,x){const _=y.fog,b=r.isMeshStandardMaterial?y.environment:null,w=e.get(r.envMap||b),M=p[r.type],S=x.isSkinnedMesh?function(t){const e=t.skeleton.bones;if(c)return 1024;{const t=u,n=Math.floor((t-20)/4),i=Math.min(n,e.length);return i\u003ce.length?(console.warn(\"THREE.WebGLRenderer: Skeleton has \"+e.length+\" bones. This GPU supports \"+i+\".\"),0):i}}(x):0;let T,E;if(null!==r.precision\u0026\u0026(d=i.getMaxPrecision(r.precision),d!==r.precision\u0026\u0026console.warn(\"THREE.WebGLProgram.getParameters:\",r.precision,\"not supported, using\",d,\"instead.\")),M){const t=ks[M];T=t.vertexShader,E=t.fragmentShader}else T=r.vertexShader,E=r.fragmentShader;const A=t.getRenderTarget();return{isWebGL2:o,shaderID:M,shaderName:r.type,vertexShader:T,fragmentShader:E,defines:r.defines,isRawShaderMaterial:!0===r.isRawShaderMaterial,glslVersion:r.glslVersion,precision:d,instancing:!0===x.isInstancedMesh,instancingColor:!0===x.isInstancedMesh\u0026\u0026null!==x.instanceColor,supportsVertexTextures:h,outputEncoding:null!==A?v(A.texture):t.outputEncoding,map:!!r.map,mapEncoding:v(r.map),matcap:!!r.matcap,matcapEncoding:v(r.matcap),envMap:!!w,envMapMode:w\u0026\u0026w.mapping,envMapEncoding:v(w),envMapCubeUV:!!w\u0026\u0026(w.mapping===ct||w.mapping===ut),lightMap:!!r.lightMap,lightMapEncoding:v(r.lightMap),aoMap:!!r.aoMap,emissiveMap:!!r.emissiveMap,emissiveMapEncoding:v(r.emissiveMap),bumpMap:!!r.bumpMap,normalMap:!!r.normalMap,objectSpaceNormalMap:r.normalMapType===ln,tangentSpaceNormalMap:r.normalMapType===on,clearcoatMap:!!r.clearcoatMap,clearcoatRoughnessMap:!!r.clearcoatRoughnessMap,clearcoatNormalMap:!!r.clearcoatNormalMap,displacementMap:!!r.displacementMap,roughnessMap:!!r.roughnessMap,metalnessMap:!!r.metalnessMap,specularMap:!!r.specularMap,alphaMap:!!r.alphaMap,gradientMap:!!r.gradientMap,sheen:!!r.sheen,transmission:!!r.transmission,transmissionMap:!!r.transmissionMap,thicknessMap:!!r.thicknessMap,combine:r.combine,vertexTangents:r.normalMap\u0026\u0026r.vertexTangents,vertexColors:r.vertexColors,vertexAlphas:!0===r.vertexColors\u0026\u0026x.geometry\u0026\u0026x.geometry.attributes.color\u0026\u00264===x.geometry.attributes.color.itemSize,vertexUvs:!!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatMap||r.clearcoatRoughnessMap||r.clearcoatNormalMap||r.displacementMap||r.transmission||r.transmissionMap||r.thicknessMap),uvsVertexOnly:!(r.map||r.bumpMap||r.normalMap||r.specularMap||r.alphaMap||r.emissiveMap||r.roughnessMap||r.metalnessMap||r.clearcoatNormalMap||r.transmission||r.transmissionMap||r.thicknessMap||!r.displacementMap),fog:!!_,useFog:r.fog,fogExp2:_\u0026\u0026_.isFogExp2,flatShading:!!r.flatShading,sizeAttenuation:r.sizeAttenuation,logarithmicDepthBuffer:l,skinning:!0===x.isSkinnedMesh\u0026\u0026S\u003e0,maxBones:S,useVertexTexture:c,morphTargets:r.morphTargets,morphNormals:r.morphNormals,numDirLights:a.directional.length,numPointLights:a.point.length,numSpotLights:a.spot.length,numRectAreaLights:a.rectArea.length,numHemiLights:a.hemi.length,numDirLightShadows:a.directionalShadowMap.length,numPointLightShadows:a.pointShadowMap.length,numSpotLightShadows:a.spotShadowMap.length,numClippingPlanes:s.numPlanes,numClipIntersection:s.numIntersection,dithering:r.dithering,shadowMapEnabled:t.shadowMap.enabled\u0026\u0026f.length\u003e0,shadowMapType:t.shadowMap.type,toneMapping:r.toneMapped?t.toneMapping:K,physicallyCorrectLights:t.physicallyCorrectLights,premultipliedAlpha:r.premultipliedAlpha,alphaTest:r.alphaTest,doubleSided:r.side===g,flipSided:r.side===m,depthPacking:void 0!==r.depthPacking\u0026\u0026r.depthPacking,index0AttributeName:r.index0AttributeName,extensionDerivatives:r.extensions\u0026\u0026r.extensions.derivatives,extensionFragDepth:r.extensions\u0026\u0026r.extensions.fragDepth,extensionDrawBuffers:r.extensions\u0026\u0026r.extensions.drawBuffers,extensionShaderTextureLOD:r.extensions\u0026\u0026r.extensions.shaderTextureLOD,rendererExtensionFragDepth:o||n.has(\"EXT_frag_depth\"),rendererExtensionDrawBuffers:o||n.has(\"WEBGL_draw_buffers\"),rendererExtensionShaderTextureLod:o||n.has(\"EXT_shader_texture_lod\"),customProgramCacheKey:r.customProgramCacheKey()}},getProgramCacheKey:function(e){const n=[];if(e.shaderID?n.push(e.shaderID):(n.push(e.fragmentShader),n.push(e.vertexShader)),void 0!==e.defines)for(const t in e.defines)n.push(t),n.push(e.defines[t]);if(!1===e.isRawShaderMaterial){for(let t=0;t\u003cf.length;t++)n.push(e[f[t]]);n.push(t.outputEncoding),n.push(t.gammaFactor)}return n.push(e.customProgramCacheKey),n.join()},getUniforms:function(t){const e=p[t.type];let n;if(e){const t=ks[e];n=As.clone(t.uniforms)}else n=t.uniforms;return n},acquireProgram:function(e,n){let i;for(let t=0,e=a.length;t\u003ce;t++){const e=a[t];if(e.cacheKey===n){i=e,++i.usedTimes;break}}return void 0===i\u0026\u0026(i=new Ao(t,n,e,r),a.push(i)),i},releaseProgram:function(t){if(0==--t.usedTimes){const e=a.indexOf(t);a[e]=a[a.length-1],a.pop(),t.destroy()}},programs:a}}function Ro(){let t=new WeakMap;return{get:function(e){let n=t.get(e);return void 0===n\u0026\u0026(n={},t.set(e,n)),n},remove:function(e){t.delete(e)},update:function(e,n,i){t.get(e)[n]=i},dispose:function(){t=new WeakMap}}}function Co(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.program!==e.program?t.program.id-e.program.id:t.material.id!==e.material.id?t.material.id-e.material.id:t.z!==e.z?t.z-e.z:t.id-e.id}function Po(t,e){return t.groupOrder!==e.groupOrder?t.groupOrder-e.groupOrder:t.renderOrder!==e.renderOrder?t.renderOrder-e.renderOrder:t.z!==e.z?e.z-t.z:t.id-e.id}function Do(t){const e=[];let n=0;const i=[],r=[],s=[],a={id:-1};function o(i,r,s,o,l,c){let u=e[n];const h=t.get(s);return void 0===u?(u={id:i.id,object:i,geometry:r,material:s,program:h.program||a,groupOrder:o,renderOrder:i.renderOrder,z:l,group:c},e[n]=u):(u.id=i.id,u.object=i,u.geometry=r,u.material=s,u.program=h.program||a,u.groupOrder=o,u.renderOrder=i.renderOrder,u.z=l,u.group=c),n++,u}return{opaque:i,transmissive:r,transparent:s,init:function(){n=0,i.length=0,r.length=0,s.length=0},push:function(t,e,n,a,l,c){const u=o(t,e,n,a,l,c);n.transmission\u003e0?r.push(u):!0===n.transparent?s.push(u):i.push(u)},unshift:function(t,e,n,a,l,c){const u=o(t,e,n,a,l,c);n.transmission\u003e0?r.unshift(u):!0===n.transparent?s.unshift(u):i.unshift(u)},finish:function(){for(let t=n,i=e.length;t\u003ci;t++){const n=e[t];if(null===n.id)break;n.id=null,n.object=null,n.geometry=null,n.material=null,n.program=null,n.group=null}},sort:function(t,e){i.length\u003e1\u0026\u0026i.sort(t||Co),r.length\u003e1\u0026\u0026r.sort(e||Po),s.length\u003e1\u0026\u0026s.sort(e||Po)}}}function Io(t){let e=new WeakMap;return{get:function(n,i){let r;return!1===e.has(n)?(r=new Do(t),e.set(n,[r])):i\u003e=e.get(n).length?(r=new Do(t),e.get(n).push(r)):r=e.get(n)[i],r},dispose:function(){e=new WeakMap}}}function No(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":n={direction:new oi,color:new Ir};break;case\"SpotLight\":n={position:new oi,direction:new oi,color:new Ir,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\"PointLight\":n={position:new oi,color:new Ir,distance:0,decay:0};break;case\"HemisphereLight\":n={direction:new oi,skyColor:new Ir,groundColor:new Ir};break;case\"RectAreaLight\":n={color:new Ir,position:new oi,halfWidth:new oi,halfHeight:new oi}}return t[e.id]=n,n}}}let zo=0;function Bo(t,e){return(e.castShadow?1:0)-(t.castShadow?1:0)}function Oo(t,e){const n=new No,i=function(){const t={};return{get:function(e){if(void 0!==t[e.id])return t[e.id];let n;switch(e.type){case\"DirectionalLight\":case\"SpotLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Zn};break;case\"PointLight\":n={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new Zn,shadowCameraNear:1,shadowCameraFar:1e3}}return t[e.id]=n,n}}}(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let t=0;t\u003c9;t++)r.probe.push(new oi);const s=new oi,a=new Fi,o=new Fi;return{setup:function(s){let a=0,o=0,l=0;for(let t=0;t\u003c9;t++)r.probe[t].set(0,0,0);let c=0,u=0,h=0,d=0,p=0,f=0,m=0,g=0;s.sort(Bo);for(let t=0,e=s.length;t\u003ce;t++){const e=s[t],v=e.color,y=e.intensity,x=e.distance,_=e.shadow\u0026\u0026e.shadow.map?e.shadow.map.texture:null;if(e.isAmbientLight)a+=v.r*y,o+=v.g*y,l+=v.b*y;else if(e.isLightProbe)for(let t=0;t\u003c9;t++)r.probe[t].addScaledVector(e.sh.coefficients[t],y);else if(e.isDirectionalLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity),e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.directionalShadow[c]=n,r.directionalShadowMap[c]=_,r.directionalShadowMatrix[c]=e.shadow.matrix,f++}r.directional[c]=t,c++}else if(e.isSpotLight){const t=n.get(e);if(t.position.setFromMatrixPosition(e.matrixWorld),t.color.copy(v).multiplyScalar(y),t.distance=x,t.coneCos=Math.cos(e.angle),t.penumbraCos=Math.cos(e.angle*(1-e.penumbra)),t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,r.spotShadow[h]=n,r.spotShadowMap[h]=_,r.spotShadowMatrix[h]=e.shadow.matrix,g++}r.spot[h]=t,h++}else if(e.isRectAreaLight){const t=n.get(e);t.color.copy(v).multiplyScalar(y),t.halfWidth.set(.5*e.width,0,0),t.halfHeight.set(0,.5*e.height,0),r.rectArea[d]=t,d++}else if(e.isPointLight){const t=n.get(e);if(t.color.copy(e.color).multiplyScalar(e.intensity),t.distance=e.distance,t.decay=e.decay,e.castShadow){const t=e.shadow,n=i.get(e);n.shadowBias=t.bias,n.shadowNormalBias=t.normalBias,n.shadowRadius=t.radius,n.shadowMapSize=t.mapSize,n.shadowCameraNear=t.camera.near,n.shadowCameraFar=t.camera.far,r.pointShadow[u]=n,r.pointShadowMap[u]=_,r.pointShadowMatrix[u]=e.shadow.matrix,m++}r.point[u]=t,u++}else if(e.isHemisphereLight){const t=n.get(e);t.skyColor.copy(e.color).multiplyScalar(y),t.groundColor.copy(e.groundColor).multiplyScalar(y),r.hemi[p]=t,p++}}d\u003e0\u0026\u0026(e.isWebGL2||!0===t.has(\"OES_texture_float_linear\")?(r.rectAreaLTC1=Gs.LTC_FLOAT_1,r.rectAreaLTC2=Gs.LTC_FLOAT_2):!0===t.has(\"OES_texture_half_float_linear\")?(r.rectAreaLTC1=Gs.LTC_HALF_1,r.rectAreaLTC2=Gs.LTC_HALF_2):console.error(\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\")),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=l;const v=r.hash;v.directionalLength===c\u0026\u0026v.pointLength===u\u0026\u0026v.spotLength===h\u0026\u0026v.rectAreaLength===d\u0026\u0026v.hemiLength===p\u0026\u0026v.numDirectionalShadows===f\u0026\u0026v.numPointShadows===m\u0026\u0026v.numSpotShadows===g||(r.directional.length=c,r.spot.length=h,r.rectArea.length=d,r.point.length=u,r.hemi.length=p,r.directionalShadow.length=f,r.directionalShadowMap.length=f,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=g,r.spotShadowMap.length=g,r.directionalShadowMatrix.length=f,r.pointShadowMatrix.length=m,r.spotShadowMatrix.length=g,v.directionalLength=c,v.pointLength=u,v.spotLength=h,v.rectAreaLength=d,v.hemiLength=p,v.numDirectionalShadows=f,v.numPointShadows=m,v.numSpotShadows=g,r.version=zo++)},setupView:function(t,e){let n=0,i=0,l=0,c=0,u=0;const h=e.matrixWorldInverse;for(let e=0,d=t.length;e\u003cd;e++){const d=t[e];if(d.isDirectionalLight){const t=r.directional[n];t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),n++}else if(d.isSpotLight){const t=r.spot[l];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),t.direction.setFromMatrixPosition(d.matrixWorld),s.setFromMatrixPosition(d.target.matrixWorld),t.direction.sub(s),t.direction.transformDirection(h),l++}else if(d.isRectAreaLight){const t=r.rectArea[c];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),o.identity(),a.copy(d.matrixWorld),a.premultiply(h),o.extractRotation(a),t.halfWidth.set(.5*d.width,0,0),t.halfHeight.set(0,.5*d.height,0),t.halfWidth.applyMatrix4(o),t.halfHeight.applyMatrix4(o),c++}else if(d.isPointLight){const t=r.point[i];t.position.setFromMatrixPosition(d.matrixWorld),t.position.applyMatrix4(h),i++}else if(d.isHemisphereLight){const t=r.hemi[u];t.direction.setFromMatrixPosition(d.matrixWorld),t.direction.transformDirection(h),t.direction.normalize(),u++}}},state:r}}function Fo(t,e){const n=new Oo(t,e),i=[],r=[];return{init:function(){i.length=0,r.length=0},state:{lightsArray:i,shadowsArray:r,lights:n},setupLights:function(){n.setup(i)},setupLightsView:function(t){n.setupView(i,t)},pushLight:function(t){i.push(t)},pushShadow:function(t){r.push(t)}}}function Ho(t,e){let n=new WeakMap;return{get:function(i,r=0){let s;return!1===n.has(i)?(s=new Fo(t,e),n.set(i,[s])):r\u003e=n.get(i).length?(s=new Fo(t,e),n.get(i).push(s)):s=n.get(i)[r],s},dispose:function(){n=new WeakMap}}}class Uo extends Er{constructor(t){super(),this.type=\"MeshDepthMaterial\",this.depthPacking=sn,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.depthPacking=t.depthPacking,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this}}Uo.prototype.isMeshDepthMaterial=!0;class Go extends Er{constructor(t){super(),this.type=\"MeshDistanceMaterial\",this.referencePosition=new oi,this.nearDistance=1,this.farDistance=1e3,this.morphTargets=!1,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.fog=!1,this.setValues(t)}copy(t){return super.copy(t),this.referencePosition.copy(t.referencePosition),this.nearDistance=t.nearDistance,this.farDistance=t.farDistance,this.morphTargets=t.morphTargets,this.map=t.map,this.alphaMap=t.alphaMap,this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this}}Go.prototype.isMeshDistanceMaterial=!0;function ko(t,e,n){let i=new Bs;const r=new Zn,s=new Zn,a=new ni,o=[],l=[],c={},u=n.maxTextureSize,d={0:m,1:f,2:g},v=new Ls({defines:{SAMPLE_RATE:2/8,HALF_SAMPLE_RATE:1/8},uniforms:{shadow_pass:{value:null},resolution:{value:new Zn},radius:{value:4}},vertexShader:\"void main() {\\n\\tgl_Position = vec4( position, 1.0 );\\n}\",fragmentShader:\"uniform sampler2D shadow_pass;\\nuniform vec2 resolution;\\nuniform float radius;\\n#include \u003cpacking\u003e\\nvoid main() {\\n\\tfloat mean = 0.0;\\n\\tfloat squared_mean = 0.0;\\n\\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\\n\\tfor ( float i = -1.0; i \u003c 1.0 ; i += SAMPLE_RATE) {\\n\\t\\t#ifdef HORIZONTAL_PASS\\n\\t\\t\\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 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, i ) * radius ) / resolution ) );\\n\\t\\t\\tmean += depth;\\n\\t\\t\\tsquared_mean += depth * depth;\\n\\t\\t#endif\\n\\t}\\n\\tmean = mean * HALF_SAMPLE_RATE;\\n\\tsquared_mean = squared_mean * HALF_SAMPLE_RATE;\\n\\tfloat std_dev = sqrt( squared_mean - mean * mean );\\n\\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\\n}\"}),y=v.clone();y.defines.HORIZONTAL_PASS=1;const _=new rs;_.setAttribute(\"position\",new Or(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const b=new ws(_,v),w=this;function M(n,i){const r=e.update(b);v.uniforms.shadow_pass.value=n.map.texture,v.uniforms.resolution.value=n.mapSize,v.uniforms.radius.value=n.radius,t.setRenderTarget(n.mapPass),t.clear(),t.renderBufferDirect(i,null,r,v,b,null),y.uniforms.shadow_pass.value=n.mapPass.texture,y.uniforms.resolution.value=n.mapSize,y.uniforms.radius.value=n.radius,t.setRenderTarget(n.map),t.clear(),t.renderBufferDirect(i,null,r,y,b,null)}function S(t){const e=t\u003c\u003c0;let n=o[e];return void 0===n\u0026\u0026(n=new Uo({depthPacking:an,morphTargets:t}),o[e]=n),n}function T(t){const e=t\u003c\u003c0;let n=l[e];return void 0===n\u0026\u0026(n=new Go({morphTargets:t}),l[e]=n),n}function E(e,n,i,r,s,a,o){let l=null,u=S,h=e.customDepthMaterial;if(!0===r.isPointLight\u0026\u0026(u=T,h=e.customDistanceMaterial),void 0===h){let t=!1;!0===i.morphTargets\u0026\u0026(t=n.morphAttributes\u0026\u0026n.morphAttributes.position\u0026\u0026n.morphAttributes.position.length\u003e0),l=u(t)}else l=h;if(t.localClippingEnabled\u0026\u0026!0===i.clipShadows\u0026\u00260!==i.clippingPlanes.length){const t=l.uuid,e=i.uuid;let n=c[t];void 0===n\u0026\u0026(n={},c[t]=n);let r=n[e];void 0===r\u0026\u0026(r=l.clone(),n[e]=r),l=r}return l.visible=i.visible,l.wireframe=i.wireframe,l.side=o===p?null!==i.shadowSide?i.shadowSide:i.side:null!==i.shadowSide?i.shadowSide:d[i.side],l.clipShadows=i.clipShadows,l.clippingPlanes=i.clippingPlanes,l.clipIntersection=i.clipIntersection,l.wireframeLinewidth=i.wireframeLinewidth,l.linewidth=i.linewidth,!0===r.isPointLight\u0026\u0026!0===l.isMeshDistanceMaterial\u0026\u0026(l.referencePosition.setFromMatrixPosition(r.matrixWorld),l.nearDistance=s,l.farDistance=a),l}function A(n,r,s,a,o){if(!1===n.visible)return;if(n.layers.test(r.layers)\u0026\u0026(n.isMesh||n.isLine||n.isPoints)\u0026\u0026(n.castShadow||n.receiveShadow\u0026\u0026o===p)\u0026\u0026(!n.frustumCulled||i.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(s.matrixWorldInverse,n.matrixWorld);const i=e.update(n),r=n.material;if(Array.isArray(r)){const e=i.groups;for(let l=0,c=e.length;l\u003cc;l++){const c=e[l],u=r[c.materialIndex];if(u\u0026\u0026u.visible){const e=E(n,i,u,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,c)}}}else if(r.visible){const e=E(n,i,r,a,s.near,s.far,o);t.renderBufferDirect(s,null,i,e,n,null)}}const l=n.children;for(let t=0,e=l.length;t\u003ce;t++)A(l[t],r,s,a,o)}this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=h,this.render=function(e,n,o){if(!1===w.enabled)return;if(!1===w.autoUpdate\u0026\u0026!1===w.needsUpdate)return;if(0===e.length)return;const l=t.getRenderTarget(),c=t.getActiveCubeFace(),h=t.getActiveMipmapLevel(),d=t.state;d.setBlending(x),d.buffers.color.setClear(1,1,1,1),d.buffers.depth.setTest(!0),d.setScissorTest(!1);for(let l=0,c=e.length;l\u003cc;l++){const c=e[l],h=c.shadow;if(void 0===h){console.warn(\"THREE.WebGLShadowMap:\",c,\"has no shadow.\");continue}if(!1===h.autoUpdate\u0026\u0026!1===h.needsUpdate)continue;r.copy(h.mapSize);const f=h.getFrameExtents();if(r.multiply(f),s.copy(h.mapSize),(r.x\u003eu||r.y\u003eu)\u0026\u0026(r.x\u003eu\u0026\u0026(s.x=Math.floor(u/f.x),r.x=s.x*f.x,h.mapSize.x=s.x),r.y\u003eu\u0026\u0026(s.y=Math.floor(u/f.y),r.y=s.y*f.y,h.mapSize.y=s.y)),null===h.map\u0026\u0026!h.isPointLightShadow\u0026\u0026this.type===p){const t={minFilter:xt,magFilter:xt,format:Ft};h.map=new ii(r.x,r.y,t),h.map.texture.name=c.name+\".shadowMap\",h.mapPass=new ii(r.x,r.y,t),h.camera.updateProjectionMatrix()}if(null===h.map){const t={minFilter:ft,magFilter:ft,format:Ft};h.map=new ii(r.x,r.y,t),h.map.texture.name=c.name+\".shadowMap\",h.camera.updateProjectionMatrix()}t.setRenderTarget(h.map),t.clear();const m=h.getViewportCount();for(let t=0;t\u003cm;t++){const e=h.getViewport(t);a.set(s.x*e.x,s.y*e.y,s.x*e.z,s.y*e.w),d.viewport(a),h.updateMatrices(c,t),i=h.getFrustum(),A(n,o,h.camera,c,this.type)}h.isPointLightShadow||this.type!==p||M(h,o),h.needsUpdate=!1}w.needsUpdate=!1,t.setRenderTarget(l,c,h)}}function Vo(t,e,n){const i=n.isWebGL2;const r=new function(){let e=!1;const n=new ni;let i=null;const r=new ni(0,0,0,0);return{setMask:function(n){i===n||e||(t.colorMask(n,n,n,n),i=n)},setLocked:function(t){e=t},setClear:function(e,i,s,a,o){!0===o\u0026\u0026(e*=a,i*=a,s*=a),n.set(e,i,s,a),!1===r.equals(n)\u0026\u0026(t.clearColor(e,i,s,a),r.copy(n))},reset:function(){e=!1,i=null,r.set(-1,0,0,0)}}},s=new function(){let e=!1,n=null,i=null,r=null;return{setTest:function(t){t?yt(2929):xt(2929)},setMask:function(i){n===i||e||(t.depthMask(i),n=i)},setFunc:function(e){if(i!==e){if(e)switch(e){case G:t.depthFunc(512);break;case k:t.depthFunc(519);break;case V:t.depthFunc(513);break;case W:t.depthFunc(515);break;case j:t.depthFunc(514);break;case q:t.depthFunc(518);break;case X:t.depthFunc(516);break;case Y:t.depthFunc(517);break;default:t.depthFunc(515)}else t.depthFunc(515);i=e}},setLocked:function(t){e=t},setClear:function(e){r!==e\u0026\u0026(t.clearDepth(e),r=e)},reset:function(){e=!1,n=null,i=null,r=null}}},c=new function(){let e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null;return{setTest:function(t){e||(t?yt(2960):xt(2960))},setMask:function(i){n===i||e||(t.stencilMask(i),n=i)},setFunc:function(e,n,a){i===e\u0026\u0026r===n\u0026\u0026s===a||(t.stencilFunc(e,n,a),i=e,r=n,s=a)},setOp:function(e,n,i){a===e\u0026\u0026o===n\u0026\u0026l===i||(t.stencilOp(e,n,i),a=e,o=n,l=i)},setLocked:function(t){e=t},setClear:function(e){c!==e\u0026\u0026(t.clearStencil(e),c=e)},reset:function(){e=!1,n=null,i=null,r=null,s=null,a=null,o=null,l=null,c=null}}};let u={},h=null,d={},p=null,f=!1,v=null,y=null,Z=null,J=null,Q=null,K=null,$=null,tt=!1,et=null,nt=null,it=null,rt=null,st=null;const at=t.getParameter(35661);let ot=!1,lt=0;const ct=t.getParameter(7938);-1!==ct.indexOf(\"WebGL\")?(lt=parseFloat(/^WebGL (\\d)/.exec(ct)[1]),ot=lt\u003e=1):-1!==ct.indexOf(\"OpenGL ES\")\u0026\u0026(lt=parseFloat(/^OpenGL ES (\\d)/.exec(ct)[1]),ot=lt\u003e=2);let ut=null,ht={};const dt=t.getParameter(3088),pt=t.getParameter(2978),ft=(new ni).fromArray(dt),mt=(new ni).fromArray(pt);function gt(e,n,i){const r=new Uint8Array(4),s=t.createTexture();t.bindTexture(e,s),t.texParameteri(e,10241,9728),t.texParameteri(e,10240,9728);for(let e=0;e\u003ci;e++)t.texImage2D(n+e,0,6408,1,1,0,6408,5121,r);return s}const vt={};function yt(e){!0!==u[e]\u0026\u0026(t.enable(e),u[e]=!0)}function xt(e){!1!==u[e]\u0026\u0026(t.disable(e),u[e]=!1)}vt[3553]=gt(3553,3553,1),vt[34067]=gt(34067,34069,6),r.setClear(0,0,0,1),s.setClear(1),c.setClear(0),yt(2929),s.setFunc(W),Mt(!1),St(o),yt(2884),wt(x);const _t={[T]:32774,[E]:32778,[A]:32779};if(i)_t[L]=32775,_t[R]=32776;else{const t=e.get(\"EXT_blend_minmax\");null!==t\u0026\u0026(_t[L]=t.MIN_EXT,_t[R]=t.MAX_EXT)}const bt={[C]:0,[P]:1,[D]:768,[N]:770,[U]:776,[F]:774,[B]:772,[I]:769,[z]:771,[H]:775,[O]:773};function wt(e,n,i,r,s,a,o,l){if(e!==x){if(!1===f\u0026\u0026(yt(3042),f=!0),e===S)s=s||n,a=a||i,o=o||r,n===y\u0026\u0026s===Q||(t.blendEquationSeparate(_t[n],_t[s]),y=n,Q=s),i===Z\u0026\u0026r===J\u0026\u0026a===K\u0026\u0026o===$||(t.blendFuncSeparate(bt[i],bt[r],bt[a],bt[o]),Z=i,J=r,K=a,$=o),v=e,tt=null;else if(e!==v||l!==tt){if(y===T\u0026\u0026Q===T||(t.blendEquation(32774),y=T,Q=T),l)switch(e){case _:t.blendFuncSeparate(1,771,1,771);break;case b:t.blendFunc(1,1);break;case w:t.blendFuncSeparate(0,0,769,771);break;case M:t.blendFuncSeparate(0,768,0,770);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}else switch(e){case _:t.blendFuncSeparate(770,771,1,771);break;case b:t.blendFunc(770,1);break;case w:t.blendFunc(0,769);break;case M:t.blendFunc(0,768);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",e)}Z=null,J=null,K=null,$=null,v=e,tt=l}}else!0===f\u0026\u0026(xt(3042),f=!1)}function Mt(e){et!==e\u0026\u0026(e?t.frontFace(2304):t.frontFace(2305),et=e)}function St(e){e!==a?(yt(2884),e!==nt\u0026\u0026(e===o?t.cullFace(1029):e===l?t.cullFace(1028):t.cullFace(1032))):xt(2884),nt=e}function Tt(e,n,i){e?(yt(32823),rt===n\u0026\u0026st===i||(t.polygonOffset(n,i),rt=n,st=i)):xt(32823)}function Et(e){void 0===e\u0026\u0026(e=33984+at-1),ut!==e\u0026\u0026(t.activeTexture(e),ut=e)}return{buffers:{color:r,depth:s,stencil:c},enable:yt,disable:xt,bindFramebuffer:function(e,n){return null===n\u0026\u0026null!==h\u0026\u0026(n=h),d[e]!==n\u0026\u0026(t.bindFramebuffer(e,n),d[e]=n,i\u0026\u0026(36009===e\u0026\u0026(d[36160]=n),36160===e\u0026\u0026(d[36009]=n)),!0)},bindXRFramebuffer:function(e){e!==h\u0026\u0026(t.bindFramebuffer(36160,e),h=e)},useProgram:function(e){return p!==e\u0026\u0026(t.useProgram(e),p=e,!0)},setBlending:wt,setMaterial:function(t,e){t.side===g?xt(2884):yt(2884);let n=t.side===m;e\u0026\u0026(n=!n),Mt(n),t.blending===_\u0026\u0026!1===t.transparent?wt(x):wt(t.blending,t.blendEquation,t.blendSrc,t.blendDst,t.blendEquationAlpha,t.blendSrcAlpha,t.blendDstAlpha,t.premultipliedAlpha),s.setFunc(t.depthFunc),s.setTest(t.depthTest),s.setMask(t.depthWrite),r.setMask(t.colorWrite);const i=t.stencilWrite;c.setTest(i),i\u0026\u0026(c.setMask(t.stencilWriteMask),c.setFunc(t.stencilFunc,t.stencilRef,t.stencilFuncMask),c.setOp(t.stencilFail,t.stencilZFail,t.stencilZPass)),Tt(t.polygonOffset,t.polygonOffsetFactor,t.polygonOffsetUnits),!0===t.alphaToCoverage?yt(32926):xt(32926)},setFlipSided:Mt,setCullFace:St,setLineWidth:function(e){e!==it\u0026\u0026(ot\u0026\u0026t.lineWidth(e),it=e)},setPolygonOffset:Tt,setScissorTest:function(t){t?yt(3089):xt(3089)},activeTexture:Et,bindTexture:function(e,n){null===ut\u0026\u0026Et();let i=ht[ut];void 0===i\u0026\u0026(i={type:void 0,texture:void 0},ht[ut]=i),i.type===e\u0026\u0026i.texture===n||(t.bindTexture(e,n||vt[e]),i.type=e,i.texture=n)},unbindTexture:function(){const e=ht[ut];void 0!==e\u0026\u0026void 0!==e.type\u0026\u0026(t.bindTexture(e.type,null),e.type=void 0,e.texture=void 0)},compressedTexImage2D:function(){try{t.compressedTexImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage2D:function(){try{t.texImage2D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},texImage3D:function(){try{t.texImage3D.apply(t,arguments)}catch(t){console.error(\"THREE.WebGLState:\",t)}},scissor:function(e){!1===ft.equals(e)\u0026\u0026(t.scissor(e.x,e.y,e.z,e.w),ft.copy(e))},viewport:function(e){!1===mt.equals(e)\u0026\u0026(t.viewport(e.x,e.y,e.z,e.w),mt.copy(e))},reset:function(){t.disable(3042),t.disable(2884),t.disable(2929),t.disable(32823),t.disable(3089),t.disable(2960),t.disable(32926),t.blendEquation(32774),t.blendFunc(1,0),t.blendFuncSeparate(1,0,1,0),t.colorMask(!0,!0,!0,!0),t.clearColor(0,0,0,0),t.depthMask(!0),t.depthFunc(513),t.clearDepth(1),t.stencilMask(4294967295),t.stencilFunc(519,0,4294967295),t.stencilOp(7680,7680,7680),t.clearStencil(0),t.cullFace(1029),t.frontFace(2305),t.polygonOffset(0,0),t.activeTexture(33984),t.bindFramebuffer(36160,null),!0===i\u0026\u0026(t.bindFramebuffer(36009,null),t.bindFramebuffer(36008,null)),t.useProgram(null),t.lineWidth(1),t.scissor(0,0,t.canvas.width,t.canvas.height),t.viewport(0,0,t.canvas.width,t.canvas.height),u={},ut=null,ht={},h=null,d={},p=null,f=!1,v=null,y=null,Z=null,J=null,Q=null,K=null,$=null,tt=!1,et=null,nt=null,it=null,rt=null,st=null,ft.set(0,0,t.canvas.width,t.canvas.height),mt.set(0,0,t.canvas.width,t.canvas.height),r.reset(),s.reset(),c.reset()}}}function Wo(t,e,n,i,r,s,a){const o=r.isWebGL2,l=r.maxTextures,c=r.maxCubemapSize,u=r.maxTextureSize,h=r.maxSamples,d=new WeakMap;let p,f=!1;try{f=\"undefined\"!=typeof OffscreenCanvas\u0026\u0026null!==new OffscreenCanvas(1,1).getContext(\"2d\")}catch(t){}function m(t,e){return f?new OffscreenCanvas(t,e):document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\")}function g(t,e,n,i){let r=1;if((t.width\u003ei||t.height\u003ei)\u0026\u0026(r=i/Math.max(t.width,t.height)),r\u003c1||!0===e){if(\"undefined\"!=typeof HTMLImageElement\u0026\u0026t instanceof HTMLImageElement||\"undefined\"!=typeof HTMLCanvasElement\u0026\u0026t instanceof HTMLCanvasElement||\"undefined\"!=typeof ImageBitmap\u0026\u0026t instanceof ImageBitmap){const i=e?Xn:Math.floor,s=i(r*t.width),a=i(r*t.height);void 0===p\u0026\u0026(p=m(s,a));const o=n?m(s,a):p;o.width=s,o.height=a;return o.getContext(\"2d\").drawImage(t,0,0,s,a),console.warn(\"THREE.WebGLRenderer: Texture has been resized from (\"+t.width+\"x\"+t.height+\") to (\"+s+\"x\"+a+\").\"),o}return\"data\"in t\u0026\u0026console.warn(\"THREE.WebGLRenderer: Image in DataTexture is too big (\"+t.width+\"x\"+t.height+\").\"),t}return t}function v(t){return jn(t.width)\u0026\u0026jn(t.height)}function y(t,e){return t.generateMipmaps\u0026\u0026e\u0026\u0026t.minFilter!==ft\u0026\u0026t.minFilter!==xt}function x(e,n,r,s){t.generateMipmap(e);i.get(n).__maxMipLevel=Math.log2(Math.max(r,s))}function _(n,i,r){if(!1===o)return i;if(null!==n){if(void 0!==t[n])return t[n];console.warn(\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\"+n+\"'\")}let s=i;return 6403===i\u0026\u0026(5126===r\u0026\u0026(s=33326),5131===r\u0026\u0026(s=33325),5121===r\u0026\u0026(s=33321)),6407===i\u0026\u0026(5126===r\u0026\u0026(s=34837),5131===r\u0026\u0026(s=34843),5121===r\u0026\u0026(s=32849)),6408===i\u0026\u0026(5126===r\u0026\u0026(s=34836),5131===r\u0026\u0026(s=34842),5121===r\u0026\u0026(s=32856)),33325!==s\u0026\u002633326!==s\u0026\u002634842!==s\u0026\u002634836!==s||e.get(\"EXT_color_buffer_float\"),s}function b(t){return t===ft||t===mt||t===vt?9728:9729}function w(e){const n=e.target;n.removeEventListener(\"dispose\",w),function(e){const n=i.get(e);if(void 0===n.__webglInit)return;t.deleteTexture(n.__webglTexture),i.remove(e)}(n),n.isVideoTexture\u0026\u0026d.delete(n),a.memory.textures--}function M(e){const n=e.target;n.removeEventListener(\"dispose\",M),function(e){const n=e.texture,r=i.get(e),s=i.get(n);if(!e)return;void 0!==s.__webglTexture\u0026\u0026(t.deleteTexture(s.__webglTexture),a.memory.textures--);e.depthTexture\u0026\u0026e.depthTexture.dispose();if(e.isWebGLCubeRenderTarget)for(let e=0;e\u003c6;e++)t.deleteFramebuffer(r.__webglFramebuffer[e]),r.__webglDepthbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthbuffer[e]);else t.deleteFramebuffer(r.__webglFramebuffer),r.__webglDepthbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthbuffer),r.__webglMultisampledFramebuffer\u0026\u0026t.deleteFramebuffer(r.__webglMultisampledFramebuffer),r.__webglColorRenderbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglColorRenderbuffer),r.__webglDepthRenderbuffer\u0026\u0026t.deleteRenderbuffer(r.__webglDepthRenderbuffer);if(e.isWebGLMultipleRenderTargets)for(let e=0,r=n.length;e\u003cr;e++){const r=i.get(n[e]);r.__webglTexture\u0026\u0026(t.deleteTexture(r.__webglTexture),a.memory.textures--),i.remove(n[e])}i.remove(n),i.remove(e)}(n)}let S=0;function T(t,e){const r=i.get(t);if(t.isVideoTexture\u0026\u0026function(t){const e=a.render.frame;d.get(t)!==e\u0026\u0026(d.set(t,e),t.update())}(t),t.version\u003e0\u0026\u0026r.__version!==t.version){const n=t.image;if(void 0===n)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is undefined\");else{if(!1!==n.complete)return void P(r,t,e);console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\")}}n.activeTexture(33984+e),n.bindTexture(3553,r.__webglTexture)}function E(e,r){const a=i.get(e);e.version\u003e0\u0026\u0026a.__version!==e.version?function(e,i,r){if(6!==i.image.length)return;C(e,i),n.activeTexture(33984+r),n.bindTexture(34067,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const a=i\u0026\u0026(i.isCompressedTexture||i.image[0].isCompressedTexture),l=i.image[0]\u0026\u0026i.image[0].isDataTexture,u=[];for(let t=0;t\u003c6;t++)u[t]=a||l?l?i.image[t].image:i.image[t]:g(i.image[t],!1,!0,c);const h=u[0],d=v(h)||o,p=s.convert(i.format),f=s.convert(i.type),m=_(i.internalFormat,p,f);let b;if(R(34067,i,d),a){for(let t=0;t\u003c6;t++){b=u[t].mipmaps;for(let e=0;e\u003cb.length;e++){const r=b[e];i.format!==Ft\u0026\u0026i.format!==Ot?null!==p?n.compressedTexImage2D(34069+t,e,m,r.width,r.height,0,r.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):n.texImage2D(34069+t,e,m,r.width,r.height,0,p,f,r.data)}}e.__maxMipLevel=b.length-1}else{b=i.mipmaps;for(let t=0;t\u003c6;t++)if(l){n.texImage2D(34069+t,0,m,u[t].width,u[t].height,0,p,f,u[t].data);for(let e=0;e\u003cb.length;e++){const i=b[e].image[t].image;n.texImage2D(34069+t,e+1,m,i.width,i.height,0,p,f,i.data)}}else{n.texImage2D(34069+t,0,m,p,f,u[t]);for(let e=0;e\u003cb.length;e++){const i=b[e];n.texImage2D(34069+t,e+1,m,p,f,i.image[t])}}e.__maxMipLevel=b.length}y(i,d)\u0026\u0026x(34067,i,h.width,h.height);e.__version=i.version,i.onUpdate\u0026\u0026i.onUpdate(i)}(a,e,r):(n.activeTexture(33984+r),n.bindTexture(34067,a.__webglTexture))}const A={[ht]:10497,[dt]:33071,[pt]:33648},L={[ft]:9728,[mt]:9984,[vt]:9986,[xt]:9729,[_t]:9985,[wt]:9987};function R(n,s,a){if(a?(t.texParameteri(n,10242,A[s.wrapS]),t.texParameteri(n,10243,A[s.wrapT]),32879!==n\u0026\u002635866!==n||t.texParameteri(n,32882,A[s.wrapR]),t.texParameteri(n,10240,L[s.magFilter]),t.texParameteri(n,10241,L[s.minFilter])):(t.texParameteri(n,10242,33071),t.texParameteri(n,10243,33071),32879!==n\u0026\u002635866!==n||t.texParameteri(n,32882,33071),s.wrapS===dt\u0026\u0026s.wrapT===dt||console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\"),t.texParameteri(n,10240,b(s.magFilter)),t.texParameteri(n,10241,b(s.minFilter)),s.minFilter!==ft\u0026\u0026s.minFilter!==xt\u0026\u0026console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\")),!0===e.has(\"EXT_texture_filter_anisotropic\")){const a=e.get(\"EXT_texture_filter_anisotropic\");if(s.type===Ct\u0026\u0026!1===e.has(\"OES_texture_float_linear\"))return;if(!1===o\u0026\u0026s.type===Pt\u0026\u0026!1===e.has(\"OES_texture_half_float_linear\"))return;(s.anisotropy\u003e1||i.get(s).__currentAnisotropy)\u0026\u0026(t.texParameterf(n,a.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(s.anisotropy,r.getMaxAnisotropy())),i.get(s).__currentAnisotropy=s.anisotropy)}}function C(e,n){void 0===e.__webglInit\u0026\u0026(e.__webglInit=!0,n.addEventListener(\"dispose\",w),e.__webglTexture=t.createTexture(),a.memory.textures++)}function P(e,i,r){let a=3553;i.isDataTexture2DArray\u0026\u0026(a=35866),i.isDataTexture3D\u0026\u0026(a=32879),C(e,i),n.activeTexture(33984+r),n.bindTexture(a,e.__webglTexture),t.pixelStorei(37440,i.flipY),t.pixelStorei(37441,i.premultiplyAlpha),t.pixelStorei(3317,i.unpackAlignment),t.pixelStorei(37443,0);const l=function(t){return!o\u0026\u0026(t.wrapS!==dt||t.wrapT!==dt||t.minFilter!==ft\u0026\u0026t.minFilter!==xt)}(i)\u0026\u0026!1===v(i.image),c=g(i.image,l,!1,u),h=v(c)||o,d=s.convert(i.format);let p,f=s.convert(i.type),m=_(i.internalFormat,d,f);R(a,i,h);const b=i.mipmaps;if(i.isDepthTexture)m=6402,o?m=i.type===Ct?36012:i.type===Rt?33190:i.type===zt?35056:33189:i.type===Ct\u0026\u0026console.error(\"WebGLRenderer: Floating point depth texture requires WebGL2.\"),i.format===kt\u0026\u00266402===m\u0026\u0026i.type!==At\u0026\u0026i.type!==Rt\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),i.type=At,f=s.convert(i.type)),i.format===Vt\u0026\u00266402===m\u0026\u0026(m=34041,i.type!==zt\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),i.type=zt,f=s.convert(i.type))),n.texImage2D(3553,0,m,c.width,c.height,0,d,f,null);else if(i.isDataTexture)if(b.length\u003e0\u0026\u0026h){for(let t=0,e=b.length;t\u003ce;t++)p=b[t],n.texImage2D(3553,t,m,p.width,p.height,0,d,f,p.data);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,c.width,c.height,0,d,f,c.data),e.__maxMipLevel=0;else if(i.isCompressedTexture){for(let t=0,e=b.length;t\u003ce;t++)p=b[t],i.format!==Ft\u0026\u0026i.format!==Ot?null!==d?n.compressedTexImage2D(3553,t,m,p.width,p.height,0,p.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):n.texImage2D(3553,t,m,p.width,p.height,0,d,f,p.data);e.__maxMipLevel=b.length-1}else if(i.isDataTexture2DArray)n.texImage3D(35866,0,m,c.width,c.height,c.depth,0,d,f,c.data),e.__maxMipLevel=0;else if(i.isDataTexture3D)n.texImage3D(32879,0,m,c.width,c.height,c.depth,0,d,f,c.data),e.__maxMipLevel=0;else if(b.length\u003e0\u0026\u0026h){for(let t=0,e=b.length;t\u003ce;t++)p=b[t],n.texImage2D(3553,t,m,d,f,p);i.generateMipmaps=!1,e.__maxMipLevel=b.length-1}else n.texImage2D(3553,0,m,d,f,c),e.__maxMipLevel=0;y(i,h)\u0026\u0026x(a,i,c.width,c.height),e.__version=i.version,i.onUpdate\u0026\u0026i.onUpdate(i)}function D(e,r,a,o,l){const c=s.convert(a.format),u=s.convert(a.type),h=_(a.internalFormat,c,u);32879===l||35866===l?n.texImage3D(l,0,h,r.width,r.height,r.depth,0,c,u,null):n.texImage2D(l,0,h,r.width,r.height,0,c,u,null),n.bindFramebuffer(36160,e),t.framebufferTexture2D(36160,o,l,i.get(a).__webglTexture,0),n.bindFramebuffer(36160,null)}function I(e,n,i){if(t.bindRenderbuffer(36161,e),n.depthBuffer\u0026\u0026!n.stencilBuffer){let r=33189;if(i){const e=n.depthTexture;e\u0026\u0026e.isDepthTexture\u0026\u0026(e.type===Ct?r=36012:e.type===Rt\u0026\u0026(r=33190));const i=z(n);t.renderbufferStorageMultisample(36161,i,r,n.width,n.height)}else t.renderbufferStorage(36161,r,n.width,n.height);t.framebufferRenderbuffer(36160,36096,36161,e)}else if(n.depthBuffer\u0026\u0026n.stencilBuffer){if(i){const e=z(n);t.renderbufferStorageMultisample(36161,e,35056,n.width,n.height)}else t.renderbufferStorage(36161,34041,n.width,n.height);t.framebufferRenderbuffer(36160,33306,36161,e)}else{const e=!0===n.isWebGLMultipleRenderTargets?n.texture[0]:n.texture,r=s.convert(e.format),a=s.convert(e.type),o=_(e.internalFormat,r,a);if(i){const e=z(n);t.renderbufferStorageMultisample(36161,e,o,n.width,n.height)}else t.renderbufferStorage(36161,o,n.width,n.height)}t.bindRenderbuffer(36161,null)}function N(e){const r=i.get(e),s=!0===e.isWebGLCubeRenderTarget;if(e.depthTexture){if(s)throw new Error(\"target.depthTexture not supported in Cube render targets\");!function(e,r){if(r\u0026\u0026r.isWebGLCubeRenderTarget)throw new Error(\"Depth Texture with cube render targets is not supported\");if(n.bindFramebuffer(36160,e),!r.depthTexture||!r.depthTexture.isDepthTexture)throw new Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");i.get(r.depthTexture).__webglTexture\u0026\u0026r.depthTexture.image.width===r.width\u0026\u0026r.depthTexture.image.height===r.height||(r.depthTexture.image.width=r.width,r.depthTexture.image.height=r.height,r.depthTexture.needsUpdate=!0),T(r.depthTexture,0);const s=i.get(r.depthTexture).__webglTexture;if(r.depthTexture.format===kt)t.framebufferTexture2D(36160,36096,3553,s,0);else{if(r.depthTexture.format!==Vt)throw new Error(\"Unknown depthTexture format\");t.framebufferTexture2D(36160,33306,3553,s,0)}}(r.__webglFramebuffer,e)}else if(s){r.__webglDepthbuffer=[];for(let i=0;i\u003c6;i++)n.bindFramebuffer(36160,r.__webglFramebuffer[i]),r.__webglDepthbuffer[i]=t.createRenderbuffer(),I(r.__webglDepthbuffer[i],e,!1)}else n.bindFramebuffer(36160,r.__webglFramebuffer),r.__webglDepthbuffer=t.createRenderbuffer(),I(r.__webglDepthbuffer,e,!1);n.bindFramebuffer(36160,null)}function z(t){return o\u0026\u0026t.isWebGLMultisampleRenderTarget?Math.min(h,t.samples):0}let B=!1,O=!1;this.allocateTextureUnit=function(){const t=S;return t\u003e=l\u0026\u0026console.warn(\"THREE.WebGLTextures: Trying to use \"+t+\" texture units while this GPU supports only \"+l),S+=1,t},this.resetTextureUnits=function(){S=0},this.setTexture2D=T,this.setTexture2DArray=function(t,e){const r=i.get(t);t.version\u003e0\u0026\u0026r.__version!==t.version?P(r,t,e):(n.activeTexture(33984+e),n.bindTexture(35866,r.__webglTexture))},this.setTexture3D=function(t,e){const r=i.get(t);t.version\u003e0\u0026\u0026r.__version!==t.version?P(r,t,e):(n.activeTexture(33984+e),n.bindTexture(32879,r.__webglTexture))},this.setTextureCube=E,this.setupRenderTarget=function(e){const l=e.texture,c=i.get(e),u=i.get(l);e.addEventListener(\"dispose\",M),!0!==e.isWebGLMultipleRenderTargets\u0026\u0026(u.__webglTexture=t.createTexture(),u.__version=l.version,a.memory.textures++);const h=!0===e.isWebGLCubeRenderTarget,d=!0===e.isWebGLMultipleRenderTargets,p=!0===e.isWebGLMultisampleRenderTarget,f=l.isDataTexture3D||l.isDataTexture2DArray,m=v(e)||o;if(!o||l.format!==Ot||l.type!==Ct\u0026\u0026l.type!==Pt||(l.format=Ft,console.warn(\"THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead.\")),h){c.__webglFramebuffer=[];for(let e=0;e\u003c6;e++)c.__webglFramebuffer[e]=t.createFramebuffer()}else if(c.__webglFramebuffer=t.createFramebuffer(),d)if(r.drawBuffers){const n=e.texture;for(let e=0,r=n.length;e\u003cr;e++){const r=i.get(n[e]);void 0===r.__webglTexture\u0026\u0026(r.__webglTexture=t.createTexture(),a.memory.textures++)}}else console.warn(\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\");else if(p)if(o){c.__webglMultisampledFramebuffer=t.createFramebuffer(),c.__webglColorRenderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(36161,c.__webglColorRenderbuffer);const i=s.convert(l.format),r=s.convert(l.type),a=_(l.internalFormat,i,r),o=z(e);t.renderbufferStorageMultisample(36161,o,a,e.width,e.height),n.bindFramebuffer(36160,c.__webglMultisampledFramebuffer),t.framebufferRenderbuffer(36160,36064,36161,c.__webglColorRenderbuffer),t.bindRenderbuffer(36161,null),e.depthBuffer\u0026\u0026(c.__webglDepthRenderbuffer=t.createRenderbuffer(),I(c.__webglDepthRenderbuffer,e,!0)),n.bindFramebuffer(36160,null)}else console.warn(\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\");if(h){n.bindTexture(34067,u.__webglTexture),R(34067,l,m);for(let t=0;t\u003c6;t++)D(c.__webglFramebuffer[t],e,l,36064,34069+t);y(l,m)\u0026\u0026x(34067,l,e.width,e.height),n.bindTexture(34067,null)}else if(d){const t=e.texture;for(let r=0,s=t.length;r\u003cs;r++){const s=t[r],a=i.get(s);n.bindTexture(3553,a.__webglTexture),R(3553,s,m),D(c.__webglFramebuffer,e,s,36064+r,3553),y(s,m)\u0026\u0026x(3553,s,e.width,e.height)}n.bindTexture(3553,null)}else{let t=3553;if(f)if(o){t=l.isDataTexture3D?32879:35866}else console.warn(\"THREE.DataTexture3D and THREE.DataTexture2DArray only supported with WebGL2.\");n.bindTexture(t,u.__webglTexture),R(t,l,m),D(c.__webglFramebuffer,e,l,36064,t),y(l,m)\u0026\u0026x(3553,l,e.width,e.height),n.bindTexture(3553,null)}e.depthBuffer\u0026\u0026N(e)},this.updateRenderTargetMipmap=function(t){const e=v(t)||o,r=!0===t.isWebGLMultipleRenderTargets?t.texture:[t.texture];for(let s=0,a=r.length;s\u003ca;s++){const a=r[s];if(y(a,e)){const e=t.isWebGLCubeRenderTarget?34067:3553,r=i.get(a).__webglTexture;n.bindTexture(e,r),x(e,a,t.width,t.height),n.bindTexture(e,null)}}},this.updateMultisampleRenderTarget=function(e){if(e.isWebGLMultisampleRenderTarget)if(o){const r=e.width,s=e.height;let a=16384;e.depthBuffer\u0026\u0026(a|=256),e.stencilBuffer\u0026\u0026(a|=1024);const o=i.get(e);n.bindFramebuffer(36008,o.__webglMultisampledFramebuffer),n.bindFramebuffer(36009,o.__webglFramebuffer),t.blitFramebuffer(0,0,r,s,0,0,r,s,a,9728),n.bindFramebuffer(36008,null),n.bindFramebuffer(36009,o.__webglMultisampledFramebuffer)}else console.warn(\"THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.\")},this.safeSetTexture2D=function(t,e){t\u0026\u0026t.isWebGLRenderTarget\u0026\u0026(!1===B\u0026\u0026(console.warn(\"THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead.\"),B=!0),t=t.texture),T(t,e)},this.safeSetTextureCube=function(t,e){t\u0026\u0026t.isWebGLCubeRenderTarget\u0026\u0026(!1===O\u0026\u0026(console.warn(\"THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead.\"),O=!0),t=t.texture),E(t,e)}}function jo(t,e,n){const i=n.isWebGL2;return{convert:function(t){let n;if(t===St)return 5121;if(t===Dt)return 32819;if(t===It)return 32820;if(t===Nt)return 33635;if(t===Tt)return 5120;if(t===Et)return 5122;if(t===At)return 5123;if(t===Lt)return 5124;if(t===Rt)return 5125;if(t===Ct)return 5126;if(t===Pt)return i?5131:(n=e.get(\"OES_texture_half_float\"),null!==n?n.HALF_FLOAT_OES:null);if(t===Bt)return 6406;if(t===Ot)return 6407;if(t===Ft)return 6408;if(t===Ht)return 6409;if(t===Ut)return 6410;if(t===kt)return 6402;if(t===Vt)return 34041;if(t===Wt)return 6403;if(t===jt)return 36244;if(t===qt)return 33319;if(t===Xt)return 33320;if(t===Yt)return 36248;if(t===Zt)return 36249;if(t===Jt||t===Qt||t===Kt||t===$t){if(n=e.get(\"WEBGL_compressed_texture_s3tc\"),null===n)return null;if(t===Jt)return n.COMPRESSED_RGB_S3TC_DXT1_EXT;if(t===Qt)return n.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(t===Kt)return n.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(t===$t)return n.COMPRESSED_RGBA_S3TC_DXT5_EXT}if(t===te||t===ee||t===ne||t===ie){if(n=e.get(\"WEBGL_compressed_texture_pvrtc\"),null===n)return null;if(t===te)return n.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(t===ee)return n.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(t===ne)return n.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(t===ie)return n.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}if(t===re)return n=e.get(\"WEBGL_compressed_texture_etc1\"),null!==n?n.COMPRESSED_RGB_ETC1_WEBGL:null;if((t===se||t===ae)\u0026\u0026(n=e.get(\"WEBGL_compressed_texture_etc\"),null!==n)){if(t===se)return n.COMPRESSED_RGB8_ETC2;if(t===ae)return n.COMPRESSED_RGBA8_ETC2_EAC}return t===oe||t===le||t===ce||t===ue||t===he||t===de||t===pe||t===fe||t===me||t===ge||t===ve||t===ye||t===xe||t===_e||t===we||t===Me||t===Se||t===Te||t===Ee||t===Ae||t===Le||t===Re||t===Ce||t===Pe||t===De||t===Ie||t===Ne||t===ze?(n=e.get(\"WEBGL_compressed_texture_astc\"),null!==n?t:null):t===be?(n=e.get(\"EXT_texture_compression_bptc\"),null!==n?t:null):t===zt?i?34042:(n=e.get(\"WEBGL_depth_texture\"),null!==n?n.UNSIGNED_INT_24_8_WEBGL:null):void 0}}}class qo extends Cs{constructor(t=[]){super(),this.cameras=t}}qo.prototype.isArrayCamera=!0;class Xo extends cr{constructor(){super(),this.type=\"Group\"}}Xo.prototype.isGroup=!0;const Yo={type:\"move\"};class Zo{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return null===this._hand\u0026\u0026(this._hand=new Xo,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return null===this._targetRay\u0026\u0026(this._targetRay=new Xo,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new oi,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new oi),this._targetRay}getGripSpace(){return null===this._grip\u0026\u0026(this._grip=new Xo,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new oi,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new oi),this._grip}dispatchEvent(t){return null!==this._targetRay\u0026\u0026this._targetRay.dispatchEvent(t),null!==this._grip\u0026\u0026this._grip.dispatchEvent(t),null!==this._hand\u0026\u0026this._hand.dispatchEvent(t),this}disconnect(t){return this.dispatchEvent({type:\"disconnected\",data:t}),null!==this._targetRay\u0026\u0026(this._targetRay.visible=!1),null!==this._grip\u0026\u0026(this._grip.visible=!1),null!==this._hand\u0026\u0026(this._hand.visible=!1),this}update(t,e,n){let i=null,r=null,s=null;const a=this._targetRay,o=this._grip,l=this._hand;if(t\u0026\u0026\"visible-blurred\"!==e.session.visibilityState)if(null!==a\u0026\u0026(i=e.getPose(t.targetRaySpace,n),null!==i\u0026\u0026(a.matrix.fromArray(i.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),i.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(i.linearVelocity)):a.hasLinearVelocity=!1,i.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(i.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(Yo))),l\u0026\u0026t.hand){s=!0;for(const i of t.hand.values()){const t=e.getJointPose(i,n);if(void 0===l.joints[i.jointName]){const t=new Xo;t.matrixAutoUpdate=!1,t.visible=!1,l.joints[i.jointName]=t,l.add(t)}const r=l.joints[i.jointName];null!==t\u0026\u0026(r.matrix.fromArray(t.transform.matrix),r.matrix.decompose(r.position,r.rotation,r.scale),r.jointRadius=t.radius),r.visible=null!==t}const i=l.joints[\"index-finger-tip\"],r=l.joints[\"thumb-tip\"],a=i.position.distanceTo(r.position),o=.02,c=.005;l.inputState.pinching\u0026\u0026a\u003eo+c?(l.inputState.pinching=!1,this.dispatchEvent({type:\"pinchend\",handedness:t.handedness,target:this})):!l.inputState.pinching\u0026\u0026a\u003c=o-c\u0026\u0026(l.inputState.pinching=!0,this.dispatchEvent({type:\"pinchstart\",handedness:t.handedness,target:this}))}else null!==o\u0026\u0026t.gripSpace\u0026\u0026(r=e.getPose(t.gripSpace,n),null!==r\u0026\u0026(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1));return null!==a\u0026\u0026(a.visible=null!==i),null!==o\u0026\u0026(o.visible=null!==r),null!==l\u0026\u0026(l.visible=null!==s),this}}class Jo extends Bn{constructor(t,e){super();const n=this,i=t.state;let r=null,s=1,a=null,o=\"local-floor\",l=null;const c=[],u=new Map,h=new Cs;h.layers.enable(1),h.viewport=new ni;const d=new Cs;d.layers.enable(2),d.viewport=new ni;const p=[h,d],f=new qo;f.layers.enable(1),f.layers.enable(2);let m=null,g=null;function v(t){const e=u.get(t.inputSource);e\u0026\u0026e.dispatchEvent({type:t.type,data:t.inputSource})}function y(){u.forEach((function(t,e){t.disconnect(e)})),u.clear(),m=null,g=null,i.bindXRFramebuffer(null),t.setRenderTarget(t.getRenderTarget()),S.stop(),n.isPresenting=!1,n.dispatchEvent({type:\"sessionend\"})}function x(t){const e=r.inputSources;for(let t=0;t\u003cc.length;t++)u.set(e[t],c[t]);for(let e=0;e\u003ct.removed.length;e++){const n=t.removed[e],i=u.get(n);i\u0026\u0026(i.dispatchEvent({type:\"disconnected\",data:n}),u.delete(n))}for(let e=0;e\u003ct.added.length;e++){const n=t.added[e],i=u.get(n);i\u0026\u0026i.dispatchEvent({type:\"connected\",data:n})}}this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(t){let e=c[t];return void 0===e\u0026\u0026(e=new Zo,c[t]=e),e.getTargetRaySpace()},this.getControllerGrip=function(t){let e=c[t];return void 0===e\u0026\u0026(e=new Zo,c[t]=e),e.getGripSpace()},this.getHand=function(t){let e=c[t];return void 0===e\u0026\u0026(e=new Zo,c[t]=e),e.getHandSpace()},this.setFramebufferScaleFactor=function(t){s=t,!0===n.isPresenting\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\")},this.setReferenceSpaceType=function(t){o=t,!0===n.isPresenting\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change reference space type while presenting.\")},this.getReferenceSpace=function(){return a},this.getSession=function(){return r},this.setSession=async function(t){if(r=t,null!==r){r.addEventListener(\"select\",v),r.addEventListener(\"selectstart\",v),r.addEventListener(\"selectend\",v),r.addEventListener(\"squeeze\",v),r.addEventListener(\"squeezestart\",v),r.addEventListener(\"squeezeend\",v),r.addEventListener(\"end\",y),r.addEventListener(\"inputsourceschange\",x);const t=e.getContextAttributes();!0!==t.xrCompatible\u0026\u0026await e.makeXRCompatible();const i={antialias:t.antialias,alpha:t.alpha,depth:t.depth,stencil:t.stencil,framebufferScaleFactor:s},l=new XRWebGLLayer(r,e,i);r.updateRenderState({baseLayer:l}),a=await r.requestReferenceSpace(o),S.setContext(r),S.start(),n.isPresenting=!0,n.dispatchEvent({type:\"sessionstart\"})}};const _=new oi,b=new oi;function w(t,e){null===e?t.matrixWorld.copy(t.matrix):t.matrixWorld.multiplyMatrices(e.matrixWorld,t.matrix),t.matrixWorldInverse.copy(t.matrixWorld).invert()}this.updateCamera=function(t){if(null===r)return;f.near=d.near=h.near=t.near,f.far=d.far=h.far=t.far,m===f.near\u0026\u0026g===f.far||(r.updateRenderState({depthNear:f.near,depthFar:f.far}),m=f.near,g=f.far);const e=t.parent,n=f.cameras;w(f,e);for(let t=0;t\u003cn.length;t++)w(n[t],e);t.matrixWorld.copy(f.matrixWorld),t.matrix.copy(f.matrix),t.matrix.decompose(t.position,t.quaternion,t.scale);const i=t.children;for(let t=0,e=i.length;t\u003ce;t++)i[t].updateMatrixWorld(!0);2===n.length?function(t,e,n){_.setFromMatrixPosition(e.matrixWorld),b.setFromMatrixPosition(n.matrixWorld);const i=_.distanceTo(b),r=e.projectionMatrix.elements,s=n.projectionMatrix.elements,a=r[14]/(r[10]-1),o=r[14]/(r[10]+1),l=(r[9]+1)/r[5],c=(r[9]-1)/r[5],u=(r[8]-1)/r[0],h=(s[8]+1)/s[0],d=a*u,p=a*h,f=i/(-u+h),m=f*-u;e.matrixWorld.decompose(t.position,t.quaternion,t.scale),t.translateX(m),t.translateZ(f),t.matrixWorld.compose(t.position,t.quaternion,t.scale),t.matrixWorldInverse.copy(t.matrixWorld).invert();const g=a+f,v=o+f,y=d-m,x=p+(i-m),w=l*o/v*g,M=c*o/v*g;t.projectionMatrix.makePerspective(y,x,w,M,g,v)}(f,h,d):f.projectionMatrix.copy(h.projectionMatrix)},this.getCamera=function(){return f};let M=null;const S=new Os;S.setAnimationLoop((function(t,e){if(l=e.getViewerPose(a),null!==l){const t=l.views,e=r.renderState.baseLayer;i.bindXRFramebuffer(e.framebuffer);let n=!1;t.length!==f.cameras.length\u0026\u0026(f.cameras.length=0,n=!0);for(let i=0;i\u003ct.length;i++){const r=t[i],s=e.getViewport(r),a=p[i];a.matrix.fromArray(r.transform.matrix),a.projectionMatrix.fromArray(r.projectionMatrix),a.viewport.set(s.x,s.y,s.width,s.height),0===i\u0026\u0026f.matrix.copy(a.matrix),!0===n\u0026\u0026f.cameras.push(a)}}const n=r.inputSources;for(let t=0;t\u003cc.length;t++){const i=c[t],r=n[t];i.update(r,e,a)}M\u0026\u0026M(t,e)})),this.setAnimationLoop=function(t){M=t},this.dispose=function(){}}}function Qo(t){function e(e,n){e.opacity.value=n.opacity,n.color\u0026\u0026e.diffuse.value.copy(n.color),n.emissive\u0026\u0026e.emissive.value.copy(n.emissive).multiplyScalar(n.emissiveIntensity),n.map\u0026\u0026(e.map.value=n.map),n.alphaMap\u0026\u0026(e.alphaMap.value=n.alphaMap),n.specularMap\u0026\u0026(e.specularMap.value=n.specularMap);const i=t.get(n).envMap;if(i){e.envMap.value=i,e.flipEnvMap.value=i.isCubeTexture\u0026\u0026i._needsFlipEnvMap?-1:1,e.reflectivity.value=n.reflectivity,e.refractionRatio.value=n.refractionRatio;const r=t.get(i).__maxMipLevel;void 0!==r\u0026\u0026(e.maxMipLevel.value=r)}let r,s;n.lightMap\u0026\u0026(e.lightMap.value=n.lightMap,e.lightMapIntensity.value=n.lightMapIntensity),n.aoMap\u0026\u0026(e.aoMap.value=n.aoMap,e.aoMapIntensity.value=n.aoMapIntensity),n.map?r=n.map:n.specularMap?r=n.specularMap:n.displacementMap?r=n.displacementMap:n.normalMap?r=n.normalMap:n.bumpMap?r=n.bumpMap:n.roughnessMap?r=n.roughnessMap:n.metalnessMap?r=n.metalnessMap:n.alphaMap?r=n.alphaMap:n.emissiveMap?r=n.emissiveMap:n.clearcoatMap?r=n.clearcoatMap:n.clearcoatNormalMap?r=n.clearcoatNormalMap:n.clearcoatRoughnessMap\u0026\u0026(r=n.clearcoatRoughnessMap),void 0!==r\u0026\u0026(r.isWebGLRenderTarget\u0026\u0026(r=r.texture),!0===r.matrixAutoUpdate\u0026\u0026r.updateMatrix(),e.uvTransform.value.copy(r.matrix)),n.aoMap?s=n.aoMap:n.lightMap\u0026\u0026(s=n.lightMap),void 0!==s\u0026\u0026(s.isWebGLRenderTarget\u0026\u0026(s=s.texture),!0===s.matrixAutoUpdate\u0026\u0026s.updateMatrix(),e.uv2Transform.value.copy(s.matrix))}function n(e,n){e.roughness.value=n.roughness,e.metalness.value=n.metalness,n.roughnessMap\u0026\u0026(e.roughnessMap.value=n.roughnessMap),n.metalnessMap\u0026\u0026(e.metalnessMap.value=n.metalnessMap),n.emissiveMap\u0026\u0026(e.emissiveMap.value=n.emissiveMap),n.bumpMap\u0026\u0026(e.bumpMap.value=n.bumpMap,e.bumpScale.value=n.bumpScale,n.side===m\u0026\u0026(e.bumpScale.value*=-1)),n.normalMap\u0026\u0026(e.normalMap.value=n.normalMap,e.normalScale.value.copy(n.normalScale),n.side===m\u0026\u0026e.normalScale.value.negate()),n.displacementMap\u0026\u0026(e.displacementMap.value=n.displacementMap,e.displacementScale.value=n.displacementScale,e.displacementBias.value=n.displacementBias);t.get(n).envMap\u0026\u0026(e.envMapIntensity.value=n.envMapIntensity)}return{refreshFogUniforms:function(t,e){t.fogColor.value.copy(e.color),e.isFog?(t.fogNear.value=e.near,t.fogFar.value=e.far):e.isFogExp2\u0026\u0026(t.fogDensity.value=e.density)},refreshMaterialUniforms:function(t,i,r,s,a){i.isMeshBasicMaterial?e(t,i):i.isMeshLambertMaterial?(e(t,i),function(t,e){e.emissiveMap\u0026\u0026(t.emissiveMap.value=e.emissiveMap)}(t,i)):i.isMeshToonMaterial?(e(t,i),function(t,e){e.gradientMap\u0026\u0026(t.gradientMap.value=e.gradientMap);e.emissiveMap\u0026\u0026(t.emissiveMap.value=e.emissiveMap);e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshPhongMaterial?(e(t,i),function(t,e){t.specular.value.copy(e.specular),t.shininess.value=Math.max(e.shininess,1e-4),e.emissiveMap\u0026\u0026(t.emissiveMap.value=e.emissiveMap);e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshStandardMaterial?(e(t,i),i.isMeshPhysicalMaterial?function(t,e,i){n(t,e),t.reflectivity.value=e.reflectivity,t.clearcoat.value=e.clearcoat,t.clearcoatRoughness.value=e.clearcoatRoughness,e.sheen\u0026\u0026t.sheen.value.copy(e.sheen);e.clearcoatMap\u0026\u0026(t.clearcoatMap.value=e.clearcoatMap);e.clearcoatRoughnessMap\u0026\u0026(t.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap);e.clearcoatNormalMap\u0026\u0026(t.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),t.clearcoatNormalMap.value=e.clearcoatNormalMap,e.side===m\u0026\u0026t.clearcoatNormalScale.value.negate());t.transmission.value=e.transmission,e.transmissionMap\u0026\u0026(t.transmissionMap.value=e.transmissionMap);e.transmission\u003e0\u0026\u0026(t.transmissionSamplerMap.value=i.texture,t.transmissionSamplerSize.value.set(i.width,i.height));t.thickness.value=e.thickness,e.thicknessMap\u0026\u0026(t.thicknessMap.value=e.thicknessMap);t.attenuationDistance.value=e.attenuationDistance,t.attenuationColor.value.copy(e.attenuationColor)}(t,i,a):n(t,i)):i.isMeshMatcapMaterial?(e(t,i),function(t,e){e.matcap\u0026\u0026(t.matcap.value=e.matcap);e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDepthMaterial?(e(t,i),function(t,e){e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isMeshDistanceMaterial?(e(t,i),function(t,e){e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias);t.referencePosition.value.copy(e.referencePosition),t.nearDistance.value=e.nearDistance,t.farDistance.value=e.farDistance}(t,i)):i.isMeshNormalMaterial?(e(t,i),function(t,e){e.bumpMap\u0026\u0026(t.bumpMap.value=e.bumpMap,t.bumpScale.value=e.bumpScale,e.side===m\u0026\u0026(t.bumpScale.value*=-1));e.normalMap\u0026\u0026(t.normalMap.value=e.normalMap,t.normalScale.value.copy(e.normalScale),e.side===m\u0026\u0026t.normalScale.value.negate());e.displacementMap\u0026\u0026(t.displacementMap.value=e.displacementMap,t.displacementScale.value=e.displacementScale,t.displacementBias.value=e.displacementBias)}(t,i)):i.isLineBasicMaterial?(function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity}(t,i),i.isLineDashedMaterial\u0026\u0026function(t,e){t.dashSize.value=e.dashSize,t.totalSize.value=e.dashSize+e.gapSize,t.scale.value=e.scale}(t,i)):i.isPointsMaterial?function(t,e,n,i){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.size.value=e.size*n,t.scale.value=.5*i,e.map\u0026\u0026(t.map.value=e.map);e.alphaMap\u0026\u0026(t.alphaMap.value=e.alphaMap);let r;e.map?r=e.map:e.alphaMap\u0026\u0026(r=e.alphaMap);void 0!==r\u0026\u0026(!0===r.matrixAutoUpdate\u0026\u0026r.updateMatrix(),t.uvTransform.value.copy(r.matrix))}(t,i,r,s):i.isSpriteMaterial?function(t,e){t.diffuse.value.copy(e.color),t.opacity.value=e.opacity,t.rotation.value=e.rotation,e.map\u0026\u0026(t.map.value=e.map);e.alphaMap\u0026\u0026(t.alphaMap.value=e.alphaMap);let n;e.map?n=e.map:e.alphaMap\u0026\u0026(n=e.alphaMap);void 0!==n\u0026\u0026(!0===n.matrixAutoUpdate\u0026\u0026n.updateMatrix(),t.uvTransform.value.copy(n.matrix))}(t,i):i.isShadowMaterial?(t.color.value.copy(i.color),t.opacity.value=i.opacity):i.isShaderMaterial\u0026\u0026(i.uniformsNeedUpdate=!1)}}}function Ko(t){const e=void 0!==(t=t||{}).canvas?t.canvas:function(){const t=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"canvas\");return t.style.display=\"block\",t}(),n=void 0!==t.context?t.context:null,i=void 0!==t.alpha\u0026\u0026t.alpha,r=void 0===t.depth||t.depth,s=void 0===t.stencil||t.stencil,a=void 0!==t.antialias\u0026\u0026t.antialias,o=void 0===t.premultipliedAlpha||t.premultipliedAlpha,l=void 0!==t.preserveDrawingBuffer\u0026\u0026t.preserveDrawingBuffer,c=void 0!==t.powerPreference?t.powerPreference:\"default\",u=void 0!==t.failIfMajorPerformanceCaveat\u0026\u0026t.failIfMajorPerformanceCaveat;let h=null,d=null;const p=[],f=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.gammaFactor=2,this.outputEncoding=Je,this.physicallyCorrectLights=!1,this.toneMapping=K,this.toneMappingExposure=1;const m=this;let g=!1,v=0,y=0,x=null,_=-1,b=null;const w=new ni,M=new ni;let S=null,T=e.width,E=e.height,A=1,L=null,R=null;const C=new ni(0,0,T,E),P=new ni(0,0,T,E);let D=!1;const I=[],N=new Bs;let z=!1,B=!1,O=null;const F=new Fi,H=new oi,U={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function G(){return null===x?A:1}let k,V,W,j,q,X,Y,Z,J,Q,$,tt,et,nt,it,rt,st,at,ot,lt,ct,ut,ht=n;function pt(t,n){for(let i=0;i\u003ct.length;i++){const r=t[i],s=e.getContext(r,n);if(null!==s)return s}return null}try{const t={alpha:i,depth:r,stencil:s,antialias:a,premultipliedAlpha:o,preserveDrawingBuffer:l,powerPreference:c,failIfMajorPerformanceCaveat:u};if(e.addEventListener(\"webglcontextlost\",vt,!1),e.addEventListener(\"webglcontextrestored\",yt,!1),null===ht){const e=[\"webgl2\",\"webgl\",\"experimental-webgl\"];if(!0===m.isWebGL1Renderer\u0026\u0026e.shift(),ht=pt(e,t),null===ht)throw pt(e)?new Error(\"Error creating WebGL context with your selected attributes.\"):new Error(\"Error creating WebGL context.\")}void 0===ht.getShaderPrecisionFormat\u0026\u0026(ht.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(t){throw console.error(\"THREE.WebGLRenderer: \"+t.message),t}function mt(){k=new Zs(ht),V=new qs(ht,k,t),k.init(V),ct=new jo(ht,k,V),W=new Vo(ht,k,V),I[0]=1029,j=new Ks(ht),q=new Ro,X=new Wo(ht,k,W,q,V,ct,j),Y=new Ys(m),Z=new Fs(ht,V),ut=new Ws(ht,k,Z,V),J=new Js(ht,Z,j,ut),Q=new na(ht,J,Z,j),at=new ea(ht),it=new Xs(q),$=new Lo(m,Y,k,V,ut,it),tt=new Qo(q),et=new Io(q),nt=new Ho(k,V),st=new Vs(m,Y,W,Q,o),rt=new ko(m,Q,V),ot=new js(ht,k,j,V),lt=new Qs(ht,k,j,V),j.programs=$.programs,m.capabilities=V,m.extensions=k,m.properties=q,m.renderLists=et,m.shadowMap=rt,m.state=W,m.info=j}mt();const gt=new Jo(m,ht);function vt(t){t.preventDefault(),console.log(\"THREE.WebGLRenderer: Context Lost.\"),g=!0}function yt(){console.log(\"THREE.WebGLRenderer: Context Restored.\"),g=!1;const t=j.autoReset,e=rt.enabled,n=rt.autoUpdate,i=rt.needsUpdate,r=rt.type;mt(),j.autoReset=t,rt.enabled=e,rt.autoUpdate=n,rt.needsUpdate=i,rt.type=r}function xt(t){const e=t.target;e.removeEventListener(\"dispose\",xt),function(t){(function(t){const e=q.get(t).programs;void 0!==e\u0026\u0026e.forEach((function(t){$.releaseProgram(t)}))})(t),q.remove(t)}(e)}this.xr=gt,this.getContext=function(){return ht},this.getContextAttributes=function(){return ht.getContextAttributes()},this.forceContextLoss=function(){const t=k.get(\"WEBGL_lose_context\");t\u0026\u0026t.loseContext()},this.forceContextRestore=function(){const t=k.get(\"WEBGL_lose_context\");t\u0026\u0026t.restoreContext()},this.getPixelRatio=function(){return A},this.setPixelRatio=function(t){void 0!==t\u0026\u0026(A=t,this.setSize(T,E,!1))},this.getSize=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getsize() now requires a Vector2 as an argument\"),t=new Zn),t.set(T,E)},this.setSize=function(t,n,i){gt.isPresenting?console.warn(\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\"):(T=t,E=n,e.width=Math.floor(t*A),e.height=Math.floor(n*A),!1!==i\u0026\u0026(e.style.width=t+\"px\",e.style.height=n+\"px\"),this.setViewport(0,0,t,n))},this.getDrawingBufferSize=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument\"),t=new Zn),t.set(T*A,E*A).floor()},this.setDrawingBufferSize=function(t,n,i){T=t,E=n,A=i,e.width=Math.floor(t*i),e.height=Math.floor(n*i),this.setViewport(0,0,t,n)},this.getCurrentViewport=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument\"),t=new ni),t.copy(w)},this.getViewport=function(t){return t.copy(C)},this.setViewport=function(t,e,n,i){t.isVector4?C.set(t.x,t.y,t.z,t.w):C.set(t,e,n,i),W.viewport(w.copy(C).multiplyScalar(A).floor())},this.getScissor=function(t){return t.copy(P)},this.setScissor=function(t,e,n,i){t.isVector4?P.set(t.x,t.y,t.z,t.w):P.set(t,e,n,i),W.scissor(M.copy(P).multiplyScalar(A).floor())},this.getScissorTest=function(){return D},this.setScissorTest=function(t){W.setScissorTest(D=t)},this.setOpaqueSort=function(t){L=t},this.setTransparentSort=function(t){R=t},this.getClearColor=function(t){return void 0===t\u0026\u0026(console.warn(\"WebGLRenderer: .getClearColor() now requires a Color as an argument\"),t=new Ir),t.copy(st.getClearColor())},this.setClearColor=function(){st.setClearColor.apply(st,arguments)},this.getClearAlpha=function(){return st.getClearAlpha()},this.setClearAlpha=function(){st.setClearAlpha.apply(st,arguments)},this.clear=function(t,e,n){let i=0;(void 0===t||t)\u0026\u0026(i|=16384),(void 0===e||e)\u0026\u0026(i|=256),(void 0===n||n)\u0026\u0026(i|=1024),ht.clear(i)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\"webglcontextlost\",vt,!1),e.removeEventListener(\"webglcontextrestored\",yt,!1),et.dispose(),nt.dispose(),q.dispose(),Y.dispose(),Q.dispose(),ut.dispose(),gt.dispose(),gt.removeEventListener(\"sessionstart\",bt),gt.removeEventListener(\"sessionend\",Mt),O\u0026\u0026(O.dispose(),O=null),Tt.stop()},this.renderBufferImmediate=function(t,e){ut.initAttributes();const n=q.get(t);t.hasPositions\u0026\u0026!n.position\u0026\u0026(n.position=ht.createBuffer()),t.hasNormals\u0026\u0026!n.normal\u0026\u0026(n.normal=ht.createBuffer()),t.hasUvs\u0026\u0026!n.uv\u0026\u0026(n.uv=ht.createBuffer()),t.hasColors\u0026\u0026!n.color\u0026\u0026(n.color=ht.createBuffer());const i=e.getAttributes();t.hasPositions\u0026\u0026(ht.bindBuffer(34962,n.position),ht.bufferData(34962,t.positionArray,35048),ut.enableAttribute(i.position),ht.vertexAttribPointer(i.position,3,5126,!1,0,0)),t.hasNormals\u0026\u0026(ht.bindBuffer(34962,n.normal),ht.bufferData(34962,t.normalArray,35048),ut.enableAttribute(i.normal),ht.vertexAttribPointer(i.normal,3,5126,!1,0,0)),t.hasUvs\u0026\u0026(ht.bindBuffer(34962,n.uv),ht.bufferData(34962,t.uvArray,35048),ut.enableAttribute(i.uv),ht.vertexAttribPointer(i.uv,2,5126,!1,0,0)),t.hasColors\u0026\u0026(ht.bindBuffer(34962,n.color),ht.bufferData(34962,t.colorArray,35048),ut.enableAttribute(i.color),ht.vertexAttribPointer(i.color,3,5126,!1,0,0)),ut.disableUnusedAttributes(),ht.drawArrays(4,0,t.count),t.count=0},this.renderBufferDirect=function(t,e,n,i,r,s){null===e\u0026\u0026(e=U);const a=r.isMesh\u0026\u0026r.matrixWorld.determinant()\u003c0,o=Dt(t,e,i,r);W.setMaterial(i,a);let l=n.index;const c=n.attributes.position;if(null===l){if(void 0===c||0===c.count)return}else if(0===l.count)return;let u,h=1;!0===i.wireframe\u0026\u0026(l=J.getWireframeAttribute(n),h=2),(i.morphTargets||i.morphNormals)\u0026\u0026at.update(r,n,i,o),ut.setup(r,i,o,n,l);let d=ot;null!==l\u0026\u0026(u=Z.get(l),d=lt,d.setIndex(u));const p=null!==l?l.count:c.count,f=n.drawRange.start*h,m=n.drawRange.count*h,g=null!==s?s.start*h:0,v=null!==s?s.count*h:1/0,y=Math.max(f,g),x=Math.min(p,f+m,g+v)-1,_=Math.max(0,x-y+1);if(0!==_){if(r.isMesh)!0===i.wireframe?(W.setLineWidth(i.wireframeLinewidth*G()),d.setMode(1)):d.setMode(4);else if(r.isLine){let t=i.linewidth;void 0===t\u0026\u0026(t=1),W.setLineWidth(t*G()),r.isLineSegments?d.setMode(1):r.isLineLoop?d.setMode(2):d.setMode(3)}else r.isPoints?d.setMode(0):r.isSprite\u0026\u0026d.setMode(4);if(r.isInstancedMesh)d.renderInstances(y,_,r.count);else if(n.isInstancedBufferGeometry){const t=Math.min(n.instanceCount,n._maxInstanceCount);d.renderInstances(y,_,t)}else d.render(y,_)}},this.compile=function(t,e){d=nt.get(t),d.init(),t.traverseVisible((function(t){t.isLight\u0026\u0026t.layers.test(e.layers)\u0026\u0026(d.pushLight(t),t.castShadow\u0026\u0026d.pushShadow(t))})),d.setupLights(),t.traverse((function(e){const n=e.material;if(n)if(Array.isArray(n))for(let i=0;i\u003cn.length;i++){Lt(n[i],t,e)}else Lt(n,t,e)}))};let _t=null;function bt(){Tt.stop()}function Mt(){Tt.start()}const Tt=new Os;function Et(t,e,n){const i=!0===e.isScene?e.overrideMaterial:null;for(let r=0,s=t.length;r\u003cs;r++){const s=t[r],a=s.object,o=s.geometry,l=null===i?s.material:i,c=s.group;if(n.isArrayCamera){const t=n.cameras;for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];a.layers.test(i.layers)\u0026\u0026(W.viewport(w.copy(i.viewport)),d.setupLightsView(i),At(a,e,i,o,l,c))}}else At(a,e,n,o,l,c)}}function At(t,e,n,i,r,s){if(t.onBeforeRender(m,e,n,i,r,s),t.modelViewMatrix.multiplyMatrices(n.matrixWorldInverse,t.matrixWorld),t.normalMatrix.getNormalMatrix(t.modelViewMatrix),t.isImmediateRenderObject){const i=Dt(n,e,r,t);W.setMaterial(r),ut.reset(),function(t,e){t.render((function(t){m.renderBufferImmediate(t,e)}))}(t,i)}else m.renderBufferDirect(n,e,i,r,t,s);t.onAfterRender(m,e,n,i,r,s)}function Lt(t,e,n){!0!==e.isScene\u0026\u0026(e=U);const i=q.get(t),r=d.state.lights,s=d.state.shadowsArray,a=r.state.version,o=$.getParameters(t,r.state,s,e,n),l=$.getProgramCacheKey(o);let c=i.programs;i.environment=t.isMeshStandardMaterial?e.environment:null,i.fog=e.fog,i.envMap=Y.get(t.envMap||i.environment),void 0===c\u0026\u0026(t.addEventListener(\"dispose\",xt),c=new Map,i.programs=c);let u=c.get(l);if(void 0!==u){if(i.currentProgram===u\u0026\u0026i.lightsStateVersion===a)return Rt(t,o),u}else o.uniforms=$.getUniforms(t),t.onBuild(o,m),t.onBeforeCompile(o,m),u=$.acquireProgram(o,l),c.set(l,u),i.uniforms=o.uniforms;const h=i.uniforms;(t.isShaderMaterial||t.isRawShaderMaterial)\u0026\u0026!0!==t.clipping||(h.clippingPlanes=it.uniform),Rt(t,o),i.needsLights=function(t){return t.isMeshLambertMaterial||t.isMeshToonMaterial||t.isMeshPhongMaterial||t.isMeshStandardMaterial||t.isShadowMaterial||t.isShaderMaterial\u0026\u0026!0===t.lights}(t),i.lightsStateVersion=a,i.needsLights\u0026\u0026(h.ambientLightColor.value=r.state.ambient,h.lightProbe.value=r.state.probe,h.directionalLights.value=r.state.directional,h.directionalLightShadows.value=r.state.directionalShadow,h.spotLights.value=r.state.spot,h.spotLightShadows.value=r.state.spotShadow,h.rectAreaLights.value=r.state.rectArea,h.ltc_1.value=r.state.rectAreaLTC1,h.ltc_2.value=r.state.rectAreaLTC2,h.pointLights.value=r.state.point,h.pointLightShadows.value=r.state.pointShadow,h.hemisphereLights.value=r.state.hemi,h.directionalShadowMap.value=r.state.directionalShadowMap,h.directionalShadowMatrix.value=r.state.directionalShadowMatrix,h.spotShadowMap.value=r.state.spotShadowMap,h.spotShadowMatrix.value=r.state.spotShadowMatrix,h.pointShadowMap.value=r.state.pointShadowMap,h.pointShadowMatrix.value=r.state.pointShadowMatrix);const p=u.getUniforms(),f=ao.seqWithValue(p.seq,h);return i.currentProgram=u,i.uniformsList=f,u}function Rt(t,e){const n=q.get(t);n.outputEncoding=e.outputEncoding,n.instancing=e.instancing,n.skinning=e.skinning,n.numClippingPlanes=e.numClippingPlanes,n.numIntersection=e.numClipIntersection,n.vertexAlphas=e.vertexAlphas}function Dt(t,e,n,i){!0!==e.isScene\u0026\u0026(e=U),X.resetTextureUnits();const r=e.fog,s=n.isMeshStandardMaterial?e.environment:null,a=null===x?m.outputEncoding:x.texture.encoding,o=Y.get(n.envMap||s),l=!0===n.vertexColors\u0026\u0026i.geometry\u0026\u0026i.geometry.attributes.color\u0026\u00264===i.geometry.attributes.color.itemSize,c=q.get(n),u=d.state.lights;if(!0===z\u0026\u0026(!0===B||t!==b)){const e=t===b\u0026\u0026n.id===_;it.setState(n,t,e)}let h=!1;n.version===c.__version?c.needsLights\u0026\u0026c.lightsStateVersion!==u.state.version||c.outputEncoding!==a||i.isInstancedMesh\u0026\u0026!1===c.instancing?h=!0:i.isInstancedMesh||!0!==c.instancing?i.isSkinnedMesh\u0026\u0026!1===c.skinning?h=!0:i.isSkinnedMesh||!0!==c.skinning?c.envMap!==o||n.fog\u0026\u0026c.fog!==r?h=!0:void 0===c.numClippingPlanes||c.numClippingPlanes===it.numPlanes\u0026\u0026c.numIntersection===it.numIntersection?c.vertexAlphas!==l\u0026\u0026(h=!0):h=!0:h=!0:h=!0:(h=!0,c.__version=n.version);let p=c.currentProgram;!0===h\u0026\u0026(p=Lt(n,e,i));let f=!1,g=!1,v=!1;const y=p.getUniforms(),w=c.uniforms;if(W.useProgram(p.program)\u0026\u0026(f=!0,g=!0,v=!0),n.id!==_\u0026\u0026(_=n.id,g=!0),f||b!==t){if(y.setValue(ht,\"projectionMatrix\",t.projectionMatrix),V.logarithmicDepthBuffer\u0026\u0026y.setValue(ht,\"logDepthBufFC\",2/(Math.log(t.far+1)/Math.LN2)),b!==t\u0026\u0026(b=t,g=!0,v=!0),n.isShaderMaterial||n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshStandardMaterial||n.envMap){const e=y.map.cameraPosition;void 0!==e\u0026\u0026e.setValue(ht,H.setFromMatrixPosition(t.matrixWorld))}(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial)\u0026\u0026y.setValue(ht,\"isOrthographic\",!0===t.isOrthographicCamera),(n.isMeshPhongMaterial||n.isMeshToonMaterial||n.isMeshLambertMaterial||n.isMeshBasicMaterial||n.isMeshStandardMaterial||n.isShaderMaterial||n.isShadowMaterial||i.isSkinnedMesh)\u0026\u0026y.setValue(ht,\"viewMatrix\",t.matrixWorldInverse)}if(i.isSkinnedMesh){y.setOptional(ht,i,\"bindMatrix\"),y.setOptional(ht,i,\"bindMatrixInverse\");const t=i.skeleton;t\u0026\u0026(V.floatVertexTextures?(null===t.boneTexture\u0026\u0026t.computeBoneTexture(),y.setValue(ht,\"boneTexture\",t.boneTexture,X),y.setValue(ht,\"boneTextureSize\",t.boneTextureSize)):y.setOptional(ht,t,\"boneMatrices\"))}var M,S;return(g||c.receiveShadow!==i.receiveShadow)\u0026\u0026(c.receiveShadow=i.receiveShadow,y.setValue(ht,\"receiveShadow\",i.receiveShadow)),g\u0026\u0026(y.setValue(ht,\"toneMappingExposure\",m.toneMappingExposure),c.needsLights\u0026\u0026(S=v,(M=w).ambientLightColor.needsUpdate=S,M.lightProbe.needsUpdate=S,M.directionalLights.needsUpdate=S,M.directionalLightShadows.needsUpdate=S,M.pointLights.needsUpdate=S,M.pointLightShadows.needsUpdate=S,M.spotLights.needsUpdate=S,M.spotLightShadows.needsUpdate=S,M.rectAreaLights.needsUpdate=S,M.hemisphereLights.needsUpdate=S),r\u0026\u0026n.fog\u0026\u0026tt.refreshFogUniforms(w,r),tt.refreshMaterialUniforms(w,n,A,E,O),ao.upload(ht,c.uniformsList,w,X)),n.isShaderMaterial\u0026\u0026!0===n.uniformsNeedUpdate\u0026\u0026(ao.upload(ht,c.uniformsList,w,X),n.uniformsNeedUpdate=!1),n.isSpriteMaterial\u0026\u0026y.setValue(ht,\"center\",i.center),y.setValue(ht,\"modelViewMatrix\",i.modelViewMatrix),y.setValue(ht,\"normalMatrix\",i.normalMatrix),y.setValue(ht,\"modelMatrix\",i.matrixWorld),p}Tt.setAnimationLoop((function(t){_t\u0026\u0026_t(t)})),\"undefined\"!=typeof window\u0026\u0026Tt.setContext(window),this.setAnimationLoop=function(t){_t=t,gt.setAnimationLoop(t),null===t?Tt.stop():Tt.start()},gt.addEventListener(\"sessionstart\",bt),gt.addEventListener(\"sessionend\",Mt),this.render=function(t,e){if(void 0!==e\u0026\u0026!0!==e.isCamera)return void console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");if(!0===g)return;!0===t.autoUpdate\u0026\u0026t.updateMatrixWorld(),null===e.parent\u0026\u0026e.updateMatrixWorld(),!0===gt.enabled\u0026\u0026!0===gt.isPresenting\u0026\u0026(!0===gt.cameraAutoUpdate\u0026\u0026gt.updateCamera(e),e=gt.getCamera()),!0===t.isScene\u0026\u0026t.onBeforeRender(m,t,e,x),d=nt.get(t,f.length),d.init(),f.push(d),F.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),N.setFromProjectionMatrix(F),B=this.localClippingEnabled,z=it.init(this.clippingPlanes,B,e),h=et.get(t,p.length),h.init(),p.push(h),function t(e,n,i,r){if(!1===e.visible)return;if(e.layers.test(n.layers))if(e.isGroup)i=e.renderOrder;else if(e.isLOD)!0===e.autoUpdate\u0026\u0026e.update(n);else if(e.isLight)d.pushLight(e),e.castShadow\u0026\u0026d.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||N.intersectsSprite(e)){r\u0026\u0026H.setFromMatrixPosition(e.matrixWorld).applyMatrix4(F);const t=Q.update(e),n=e.material;n.visible\u0026\u0026h.push(e,t,n,i,H.z,null)}}else if(e.isImmediateRenderObject)r\u0026\u0026H.setFromMatrixPosition(e.matrixWorld).applyMatrix4(F),h.push(e,null,e.material,i,H.z,null);else if((e.isMesh||e.isLine||e.isPoints)\u0026\u0026(e.isSkinnedMesh\u0026\u0026e.skeleton.frame!==j.render.frame\u0026\u0026(e.skeleton.update(),e.skeleton.frame=j.render.frame),!e.frustumCulled||N.intersectsObject(e))){r\u0026\u0026H.setFromMatrixPosition(e.matrixWorld).applyMatrix4(F);const t=Q.update(e),n=e.material;if(Array.isArray(n)){const r=t.groups;for(let s=0,a=r.length;s\u003ca;s++){const a=r[s],o=n[a.materialIndex];o\u0026\u0026o.visible\u0026\u0026h.push(e,t,o,i,H.z,a)}}else n.visible\u0026\u0026h.push(e,t,n,i,H.z,null)}const s=e.children;for(let e=0,a=s.length;e\u003ca;e++)t(s[e],n,i,r)}(t,e,0,m.sortObjects),h.finish(),!0===m.sortObjects\u0026\u0026h.sort(L,R),!0===z\u0026\u0026it.beginShadows();const n=d.state.shadowsArray;rt.render(n,t,e),d.setupLights(),d.setupLightsView(e),!0===z\u0026\u0026it.endShadows(),!0===this.info.autoReset\u0026\u0026this.info.reset(),st.render(h,t);const i=h.opaque,r=h.transmissive,s=h.transparent;i.length\u003e0\u0026\u0026Et(i,t,e),r.length\u003e0\u0026\u0026function(t,e,n,i){null===O\u0026\u0026(O=new ii(1024,1024,{generateMipmaps:!0,minFilter:wt,magFilter:ft,wrapS:dt,wrapT:dt}));const r=m.getRenderTarget();m.setRenderTarget(O),m.clear(),Et(t,n,i),X.updateRenderTargetMipmap(O),m.setRenderTarget(r),Et(e,n,i)}(i,r,t,e),s.length\u003e0\u0026\u0026Et(s,t,e),null!==x\u0026\u0026(X.updateRenderTargetMipmap(x),X.updateMultisampleRenderTarget(x)),!0===t.isScene\u0026\u0026t.onAfterRender(m,t,e),W.buffers.depth.setTest(!0),W.buffers.depth.setMask(!0),W.buffers.color.setMask(!0),W.setPolygonOffset(!1),ut.resetDefaultState(),_=-1,b=null,f.pop(),d=f.length\u003e0?f[f.length-1]:null,p.pop(),h=p.length\u003e0?p[p.length-1]:null},this.getActiveCubeFace=function(){return v},this.getActiveMipmapLevel=function(){return y},this.getRenderTarget=function(){return x},this.setRenderTarget=function(t,e=0,n=0){x=t,v=e,y=n,t\u0026\u0026void 0===q.get(t).__webglFramebuffer\u0026\u0026X.setupRenderTarget(t);let i=null,r=!1,s=!1;if(t){const n=t.texture;(n.isDataTexture3D||n.isDataTexture2DArray)\u0026\u0026(s=!0);const a=q.get(t).__webglFramebuffer;t.isWebGLCubeRenderTarget?(i=a[e],r=!0):i=t.isWebGLMultisampleRenderTarget?q.get(t).__webglMultisampledFramebuffer:a,w.copy(t.viewport),M.copy(t.scissor),S=t.scissorTest}else w.copy(C).multiplyScalar(A).floor(),M.copy(P).multiplyScalar(A).floor(),S=D;if(W.bindFramebuffer(36160,i)\u0026\u0026V.drawBuffers){let e=!1;if(t)if(t.isWebGLMultipleRenderTargets){const n=t.texture;if(I.length!==n.length||36064!==I[0]){for(let t=0,e=n.length;t\u003ce;t++)I[t]=36064+t;I.length=n.length,e=!0}}else 1===I.length\u0026\u002636064===I[0]||(I[0]=36064,I.length=1,e=!0);else 1===I.length\u0026\u00261029===I[0]||(I[0]=1029,I.length=1,e=!0);e\u0026\u0026(V.isWebGL2?ht.drawBuffers(I):k.get(\"WEBGL_draw_buffers\").drawBuffersWEBGL(I))}if(W.viewport(w),W.scissor(M),W.setScissorTest(S),r){const i=q.get(t.texture);ht.framebufferTexture2D(36160,36064,34069+e,i.__webglTexture,n)}else if(s){const i=q.get(t.texture),r=e||0;ht.framebufferTextureLayer(36160,36064,i.__webglTexture,n||0,r)}},this.readRenderTargetPixels=function(t,e,n,i,r,s,a){if(!t||!t.isWebGLRenderTarget)return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");let o=q.get(t).__webglFramebuffer;if(t.isWebGLCubeRenderTarget\u0026\u0026void 0!==a\u0026\u0026(o=o[a]),o){W.bindFramebuffer(36160,o);try{const a=t.texture,o=a.format,l=a.type;if(o!==Ft\u0026\u0026ct.convert(o)!==ht.getParameter(35739))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\");const c=l===Pt\u0026\u0026(k.has(\"EXT_color_buffer_half_float\")||V.isWebGL2\u0026\u0026k.has(\"EXT_color_buffer_float\"));if(!(l===St||ct.convert(l)===ht.getParameter(35738)||l===Ct\u0026\u0026(V.isWebGL2||k.has(\"OES_texture_float\")||k.has(\"WEBGL_color_buffer_float\"))||c))return void console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\");36053===ht.checkFramebufferStatus(36160)?e\u003e=0\u0026\u0026e\u003c=t.width-i\u0026\u0026n\u003e=0\u0026\u0026n\u003c=t.height-r\u0026\u0026ht.readPixels(e,n,i,r,ct.convert(o),ct.convert(l),s):console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.\")}finally{const t=null!==x?q.get(x).__webglFramebuffer:null;W.bindFramebuffer(36160,t)}}},this.copyFramebufferToTexture=function(t,e,n=0){const i=Math.pow(2,-n),r=Math.floor(e.image.width*i),s=Math.floor(e.image.height*i);let a=ct.convert(e.format);V.isWebGL2\u0026\u0026(6407===a\u0026\u0026(a=32849),6408===a\u0026\u0026(a=32856)),X.setTexture2D(e,0),ht.copyTexImage2D(3553,n,a,t.x,t.y,r,s,0),W.unbindTexture()},this.copyTextureToTexture=function(t,e,n,i=0){const r=e.image.width,s=e.image.height,a=ct.convert(n.format),o=ct.convert(n.type);X.setTexture2D(n,0),ht.pixelStorei(37440,n.flipY),ht.pixelStorei(37441,n.premultiplyAlpha),ht.pixelStorei(3317,n.unpackAlignment),e.isDataTexture?ht.texSubImage2D(3553,i,t.x,t.y,r,s,a,o,e.image.data):e.isCompressedTexture?ht.compressedTexSubImage2D(3553,i,t.x,t.y,e.mipmaps[0].width,e.mipmaps[0].height,a,e.mipmaps[0].data):ht.texSubImage2D(3553,i,t.x,t.y,a,o,e.image),0===i\u0026\u0026n.generateMipmaps\u0026\u0026ht.generateMipmap(3553),W.unbindTexture()},this.copyTextureToTexture3D=function(t,e,n,i,r=0){if(m.isWebGL1Renderer)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\");const{width:s,height:a,data:o}=n.image,l=ct.convert(i.format),c=ct.convert(i.type);let u;if(i.isDataTexture3D)X.setTexture3D(i,0),u=32879;else{if(!i.isDataTexture2DArray)return void console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\");X.setTexture2DArray(i,0),u=35866}ht.pixelStorei(37440,i.flipY),ht.pixelStorei(37441,i.premultiplyAlpha),ht.pixelStorei(3317,i.unpackAlignment);const h=ht.getParameter(3314),d=ht.getParameter(32878),p=ht.getParameter(3316),f=ht.getParameter(3315),g=ht.getParameter(32877);ht.pixelStorei(3314,s),ht.pixelStorei(32878,a),ht.pixelStorei(3316,t.min.x),ht.pixelStorei(3315,t.min.y),ht.pixelStorei(32877,t.min.z),ht.texSubImage3D(u,r,e.x,e.y,e.z,t.max.x-t.min.x+1,t.max.y-t.min.y+1,t.max.z-t.min.z+1,l,c,o),ht.pixelStorei(3314,h),ht.pixelStorei(32878,d),ht.pixelStorei(3316,p),ht.pixelStorei(3315,f),ht.pixelStorei(32877,g),0===r\u0026\u0026i.generateMipmaps\u0026\u0026ht.generateMipmap(u),W.unbindTexture()},this.initTexture=function(t){X.setTexture2D(t,0),W.unbindTexture()},this.resetState=function(){v=0,y=0,x=null,W.reset(),ut.reset()},\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}class $o extends Ko{}$o.prototype.isWebGL1Renderer=!0;class tl{constructor(t,e=25e-5){this.name=\"\",this.color=new Ir(t),this.density=e}clone(){return new tl(this.color,this.density)}toJSON(){return{type:\"FogExp2\",color:this.color.getHex(),density:this.density}}}tl.prototype.isFogExp2=!0;class el{constructor(t,e=1,n=1e3){this.name=\"\",this.color=new Ir(t),this.near=e,this.far=n}clone(){return new el(this.color,this.near,this.far)}toJSON(){return{type:\"Fog\",color:this.color.getHex(),near:this.near,far:this.far}}}el.prototype.isFog=!0;class nl extends cr{constructor(){super(),this.type=\"Scene\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}copy(t,e){return super.copy(t,e),null!==t.background\u0026\u0026(this.background=t.background.clone()),null!==t.environment\u0026\u0026(this.environment=t.environment.clone()),null!==t.fog\u0026\u0026(this.fog=t.fog.clone()),null!==t.overrideMaterial\u0026\u0026(this.overrideMaterial=t.overrideMaterial.clone()),this.autoUpdate=t.autoUpdate,this.matrixAutoUpdate=t.matrixAutoUpdate,this}toJSON(t){const e=super.toJSON(t);return null!==this.background\u0026\u0026(e.object.background=this.background.toJSON(t)),null!==this.environment\u0026\u0026(e.object.environment=this.environment.toJSON(t)),null!==this.fog\u0026\u0026(e.object.fog=this.fog.toJSON()),e}}nl.prototype.isScene=!0;class il{constructor(t,e){this.array=t,this.stride=e,this.count=void 0!==t?t.length/e:0,this.usage=Tn,this.updateRange={offset:0,count:-1},this.version=0,this.uuid=Gn()}onUploadCallback(){}set needsUpdate(t){!0===t\u0026\u0026this.version++}setUsage(t){return this.usage=t,this}copy(t){return this.array=new t.array.constructor(t.array),this.count=t.count,this.stride=t.stride,this.usage=t.usage,this}copyAt(t,e,n){t*=this.stride,n*=e.stride;for(let i=0,r=this.stride;i\u003cr;i++)this.array[t+i]=e.array[n+i];return this}set(t,e=0){return this.array.set(t,e),this}clone(t){void 0===t.arrayBuffers\u0026\u0026(t.arrayBuffers={}),void 0===this.array.buffer._uuid\u0026\u0026(this.array.buffer._uuid=Gn()),void 0===t.arrayBuffers[this.array.buffer._uuid]\u0026\u0026(t.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);const e=new this.array.constructor(t.arrayBuffers[this.array.buffer._uuid]),n=new this.constructor(e,this.stride);return n.setUsage(this.usage),n}onUpload(t){return this.onUploadCallback=t,this}toJSON(t){return void 0===t.arrayBuffers\u0026\u0026(t.arrayBuffers={}),void 0===this.array.buffer._uuid\u0026\u0026(this.array.buffer._uuid=Gn()),void 0===t.arrayBuffers[this.array.buffer._uuid]\u0026\u0026(t.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer))),{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}}il.prototype.isInterleavedBuffer=!0;const rl=new oi;class sl{constructor(t,e,n,i){this.name=\"\",this.data=t,this.itemSize=e,this.offset=n,this.normalized=!0===i}get count(){return this.data.count}get array(){return this.data.array}set needsUpdate(t){this.data.needsUpdate=t}applyMatrix4(t){for(let e=0,n=this.data.count;e\u003cn;e++)rl.x=this.getX(e),rl.y=this.getY(e),rl.z=this.getZ(e),rl.applyMatrix4(t),this.setXYZ(e,rl.x,rl.y,rl.z);return this}applyNormalMatrix(t){for(let e=0,n=this.count;e\u003cn;e++)rl.x=this.getX(e),rl.y=this.getY(e),rl.z=this.getZ(e),rl.applyNormalMatrix(t),this.setXYZ(e,rl.x,rl.y,rl.z);return this}transformDirection(t){for(let e=0,n=this.count;e\u003cn;e++)rl.x=this.getX(e),rl.y=this.getY(e),rl.z=this.getZ(e),rl.transformDirection(t),this.setXYZ(e,rl.x,rl.y,rl.z);return this}setX(t,e){return this.data.array[t*this.data.stride+this.offset]=e,this}setY(t,e){return this.data.array[t*this.data.stride+this.offset+1]=e,this}setZ(t,e){return this.data.array[t*this.data.stride+this.offset+2]=e,this}setW(t,e){return this.data.array[t*this.data.stride+this.offset+3]=e,this}getX(t){return this.data.array[t*this.data.stride+this.offset]}getY(t){return this.data.array[t*this.data.stride+this.offset+1]}getZ(t){return this.data.array[t*this.data.stride+this.offset+2]}getW(t){return this.data.array[t*this.data.stride+this.offset+3]}setXY(t,e,n){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this}setXYZ(t,e,n,i){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this}setXYZW(t,e,n,i,r){return t=t*this.data.stride+this.offset,this.data.array[t+0]=e,this.data.array[t+1]=n,this.data.array[t+2]=i,this.data.array[t+3]=r,this}clone(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e\u003cthis.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e\u003cthis.itemSize;e++)t.push(this.data.array[n+e])}return new Or(new this.array.constructor(t),this.itemSize,this.normalized)}return void 0===t.interleavedBuffers\u0026\u0026(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]\u0026\u0026(t.interleavedBuffers[this.data.uuid]=this.data.clone(t)),new sl(t.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)}toJSON(t){if(void 0===t){console.log(\"THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.\");const t=[];for(let e=0;e\u003cthis.count;e++){const n=e*this.data.stride+this.offset;for(let e=0;e\u003cthis.itemSize;e++)t.push(this.data.array[n+e])}return{itemSize:this.itemSize,type:this.array.constructor.name,array:t,normalized:this.normalized}}return void 0===t.interleavedBuffers\u0026\u0026(t.interleavedBuffers={}),void 0===t.interleavedBuffers[this.data.uuid]\u0026\u0026(t.interleavedBuffers[this.data.uuid]=this.data.toJSON(t)),{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}}sl.prototype.isInterleavedBufferAttribute=!0;class al extends Er{constructor(t){super(),this.type=\"SpriteMaterial\",this.color=new Ir(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.rotation=t.rotation,this.sizeAttenuation=t.sizeAttenuation,this}}let ol;al.prototype.isSpriteMaterial=!0;const ll=new oi,cl=new oi,ul=new oi,hl=new Zn,dl=new Zn,pl=new Fi,fl=new oi,ml=new oi,gl=new oi,vl=new Zn,yl=new Zn,xl=new Zn;class _l extends cr{constructor(t){if(super(),this.type=\"Sprite\",void 0===ol){ol=new rs;const t=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),e=new il(t,5);ol.setIndex([0,1,2,0,2,3]),ol.setAttribute(\"position\",new sl(e,3,0,!1)),ol.setAttribute(\"uv\",new sl(e,2,3,!1))}this.geometry=ol,this.material=void 0!==t?t:new al,this.center=new Zn(.5,.5)}raycast(t,e){null===t.camera\u0026\u0026console.error('THREE.Sprite: \"Raycaster.camera\" needs to be set in order to raycast against sprites.'),cl.setFromMatrixScale(this.matrixWorld),pl.copy(t.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(t.camera.matrixWorldInverse,this.matrixWorld),ul.setFromMatrixPosition(this.modelViewMatrix),t.camera.isPerspectiveCamera\u0026\u0026!1===this.material.sizeAttenuation\u0026\u0026cl.multiplyScalar(-ul.z);const n=this.material.rotation;let i,r;0!==n\u0026\u0026(r=Math.cos(n),i=Math.sin(n));const s=this.center;bl(fl.set(-.5,-.5,0),ul,s,cl,i,r),bl(ml.set(.5,-.5,0),ul,s,cl,i,r),bl(gl.set(.5,.5,0),ul,s,cl,i,r),vl.set(0,0),yl.set(1,0),xl.set(1,1);let a=t.ray.intersectTriangle(fl,ml,gl,!1,ll);if(null===a\u0026\u0026(bl(ml.set(-.5,.5,0),ul,s,cl,i,r),yl.set(0,1),a=t.ray.intersectTriangle(fl,gl,ml,!1,ll),null===a))return;const o=t.ray.origin.distanceTo(ll);o\u003ct.near||o\u003et.far||e.push({distance:o,point:ll.clone(),uv:Sr.getUV(ll,fl,ml,gl,vl,yl,xl,new Zn),face:null,object:this})}copy(t){return super.copy(t),void 0!==t.center\u0026\u0026this.center.copy(t.center),this.material=t.material,this}}function bl(t,e,n,i,r,s){hl.subVectors(t,n).addScalar(.5).multiply(i),void 0!==r?(dl.x=s*hl.x-r*hl.y,dl.y=r*hl.x+s*hl.y):dl.copy(hl),t.copy(e),t.x+=dl.x,t.y+=dl.y,t.applyMatrix4(pl)}_l.prototype.isSprite=!0;const wl=new oi,Ml=new oi;class Sl extends cr{constructor(){super(),this._currentLevel=0,this.type=\"LOD\",Object.defineProperties(this,{levels:{enumerable:!0,value:[]},isLOD:{value:!0}}),this.autoUpdate=!0}copy(t){super.copy(t,!1);const e=t.levels;for(let t=0,n=e.length;t\u003cn;t++){const n=e[t];this.addLevel(n.object.clone(),n.distance)}return this.autoUpdate=t.autoUpdate,this}addLevel(t,e=0){e=Math.abs(e);const n=this.levels;let i;for(i=0;i\u003cn.length\u0026\u0026!(e\u003cn[i].distance);i++);return n.splice(i,0,{distance:e,object:t}),this.add(t),this}getCurrentLevel(){return this._currentLevel}getObjectForDistance(t){const e=this.levels;if(e.length\u003e0){let n,i;for(n=1,i=e.length;n\u003ci\u0026\u0026!(t\u003ce[n].distance);n++);return e[n-1].object}return null}raycast(t,e){if(this.levels.length\u003e0){wl.setFromMatrixPosition(this.matrixWorld);const n=t.ray.origin.distanceTo(wl);this.getObjectForDistance(n).raycast(t,e)}}update(t){const e=this.levels;if(e.length\u003e1){wl.setFromMatrixPosition(t.matrixWorld),Ml.setFromMatrixPosition(this.matrixWorld);const n=wl.distanceTo(Ml)/t.zoom;let i,r;for(e[0].object.visible=!0,i=1,r=e.length;i\u003cr\u0026\u0026n\u003e=e[i].distance;i++)e[i-1].object.visible=!1,e[i].object.visible=!0;for(this._currentLevel=i-1;i\u003cr;i++)e[i].object.visible=!1}}toJSON(t){const e=super.toJSON(t);!1===this.autoUpdate\u0026\u0026(e.object.autoUpdate=!1),e.object.levels=[];const n=this.levels;for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];e.object.levels.push({object:i.object.uuid,distance:i.distance})}return e}}const Tl=new oi,El=new ni,Al=new ni,Ll=new oi,Rl=new Fi;class Cl extends ws{constructor(t,e){super(t,e),this.type=\"SkinnedMesh\",this.bindMode=\"attached\",this.bindMatrix=new Fi,this.bindMatrixInverse=new Fi}copy(t){return super.copy(t),this.bindMode=t.bindMode,this.bindMatrix.copy(t.bindMatrix),this.bindMatrixInverse.copy(t.bindMatrixInverse),this.skeleton=t.skeleton,this}bind(t,e){this.skeleton=t,void 0===e\u0026\u0026(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),e=this.matrixWorld),this.bindMatrix.copy(e),this.bindMatrixInverse.copy(e).invert()}pose(){this.skeleton.pose()}normalizeSkinWeights(){const t=new ni,e=this.geometry.attributes.skinWeight;for(let n=0,i=e.count;n\u003ci;n++){t.x=e.getX(n),t.y=e.getY(n),t.z=e.getZ(n),t.w=e.getW(n);const i=1/t.manhattanLength();i!==1/0?t.multiplyScalar(i):t.set(1,0,0,0),e.setXYZW(n,t.x,t.y,t.z,t.w)}}updateMatrixWorld(t){super.updateMatrixWorld(t),\"attached\"===this.bindMode?this.bindMatrixInverse.copy(this.matrixWorld).invert():\"detached\"===this.bindMode?this.bindMatrixInverse.copy(this.bindMatrix).invert():console.warn(\"THREE.SkinnedMesh: Unrecognized bindMode: \"+this.bindMode)}boneTransform(t,e){const n=this.skeleton,i=this.geometry;El.fromBufferAttribute(i.attributes.skinIndex,t),Al.fromBufferAttribute(i.attributes.skinWeight,t),Tl.fromBufferAttribute(i.attributes.position,t).applyMatrix4(this.bindMatrix),e.set(0,0,0);for(let t=0;t\u003c4;t++){const i=Al.getComponent(t);if(0!==i){const r=El.getComponent(t);Rl.multiplyMatrices(n.bones[r].matrixWorld,n.boneInverses[r]),e.addScaledVector(Ll.copy(Tl).applyMatrix4(Rl),i)}}return e.applyMatrix4(this.bindMatrixInverse)}}Cl.prototype.isSkinnedMesh=!0;class Pl extends cr{constructor(){super(),this.type=\"Bone\"}}Pl.prototype.isBone=!0;class Dl extends ti{constructor(t,e,n,i,r,s,a,o,l,c,u,h){super(null,s,a,o,l,c,i,r,u,h),this.image={data:t||null,width:e||1,height:n||1},this.magFilter=void 0!==l?l:ft,this.minFilter=void 0!==c?c:ft,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1,this.needsUpdate=!0}}Dl.prototype.isDataTexture=!0;const Il=new Fi,Nl=new Fi;class zl{constructor(t=[],e=[]){this.uuid=Gn(),this.bones=t.slice(0),this.boneInverses=e,this.boneMatrices=null,this.boneTexture=null,this.boneTextureSize=0,this.frame=-1,this.init()}init(){const t=this.bones,e=this.boneInverses;if(this.boneMatrices=new Float32Array(16*t.length),0===e.length)this.calculateInverses();else if(t.length!==e.length){console.warn(\"THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.\"),this.boneInverses=[];for(let t=0,e=this.bones.length;t\u003ce;t++)this.boneInverses.push(new Fi)}}calculateInverses(){this.boneInverses.length=0;for(let t=0,e=this.bones.length;t\u003ce;t++){const e=new Fi;this.bones[t]\u0026\u0026e.copy(this.bones[t].matrixWorld).invert(),this.boneInverses.push(e)}}pose(){for(let t=0,e=this.bones.length;t\u003ce;t++){const e=this.bones[t];e\u0026\u0026e.matrixWorld.copy(this.boneInverses[t]).invert()}for(let t=0,e=this.bones.length;t\u003ce;t++){const e=this.bones[t];e\u0026\u0026(e.parent\u0026\u0026e.parent.isBone?(e.matrix.copy(e.parent.matrixWorld).invert(),e.matrix.multiply(e.matrixWorld)):e.matrix.copy(e.matrixWorld),e.matrix.decompose(e.position,e.quaternion,e.scale))}}update(){const t=this.bones,e=this.boneInverses,n=this.boneMatrices,i=this.boneTexture;for(let i=0,r=t.length;i\u003cr;i++){const r=t[i]?t[i].matrixWorld:Nl;Il.multiplyMatrices(r,e[i]),Il.toArray(n,16*i)}null!==i\u0026\u0026(i.needsUpdate=!0)}clone(){return new zl(this.bones,this.boneInverses)}computeBoneTexture(){let t=Math.sqrt(4*this.bones.length);t=qn(t),t=Math.max(t,4);const e=new Float32Array(t*t*4);e.set(this.boneMatrices);const n=new Dl(e,t,t,Ft,Ct);return this.boneMatrices=e,this.boneTexture=n,this.boneTextureSize=t,this}getBoneByName(t){for(let e=0,n=this.bones.length;e\u003cn;e++){const n=this.bones[e];if(n.name===t)return n}}dispose(){null!==this.boneTexture\u0026\u0026(this.boneTexture.dispose(),this.boneTexture=null)}fromJSON(t,e){this.uuid=t.uuid;for(let n=0,i=t.bones.length;n\u003ci;n++){const i=t.bones[n];let r=e[i];void 0===r\u0026\u0026(console.warn(\"THREE.Skeleton: No bone found with UUID:\",i),r=new Pl),this.bones.push(r),this.boneInverses.push((new Fi).fromArray(t.boneInverses[n]))}return this.init(),this}toJSON(){const t={metadata:{version:4.5,type:\"Skeleton\",generator:\"Skeleton.toJSON\"},bones:[],boneInverses:[]};t.uuid=this.uuid;const e=this.bones,n=this.boneInverses;for(let i=0,r=e.length;i\u003cr;i++){const r=e[i];t.bones.push(r.uuid);const s=n[i];t.boneInverses.push(s.toArray())}return t}}const Bl=new Fi,Ol=new Fi,Fl=[],Hl=new ws;class Ul extends ws{constructor(t,e,n){super(t,e),this.instanceMatrix=new Or(new Float32Array(16*n),16),this.instanceColor=null,this.count=n,this.frustumCulled=!1}copy(t){return super.copy(t),this.instanceMatrix.copy(t.instanceMatrix),null!==t.instanceColor\u0026\u0026(this.instanceColor=t.instanceColor.clone()),this.count=t.count,this}getColorAt(t,e){e.fromArray(this.instanceColor.array,3*t)}getMatrixAt(t,e){e.fromArray(this.instanceMatrix.array,16*t)}raycast(t,e){const n=this.matrixWorld,i=this.count;if(Hl.geometry=this.geometry,Hl.material=this.material,void 0!==Hl.material)for(let r=0;r\u003ci;r++){this.getMatrixAt(r,Bl),Ol.multiplyMatrices(n,Bl),Hl.matrixWorld=Ol,Hl.raycast(t,Fl);for(let t=0,n=Fl.length;t\u003cn;t++){const n=Fl[t];n.instanceId=r,n.object=this,e.push(n)}Fl.length=0}}setColorAt(t,e){null===this.instanceColor\u0026\u0026(this.instanceColor=new Or(new Float32Array(3*this.count),3)),e.toArray(this.instanceColor.array,3*t)}setMatrixAt(t,e){e.toArray(this.instanceMatrix.array,16*t)}updateMorphTargets(){}dispose(){this.dispatchEvent({type:\"dispose\"})}}Ul.prototype.isInstancedMesh=!0;class Gl extends Er{constructor(t){super(),this.type=\"LineBasicMaterial\",this.color=new Ir(16777215),this.linewidth=1,this.linecap=\"round\",this.linejoin=\"round\",this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.linewidth=t.linewidth,this.linecap=t.linecap,this.linejoin=t.linejoin,this.morphTargets=t.morphTargets,this}}Gl.prototype.isLineBasicMaterial=!0;const kl=new oi,Vl=new oi,Wl=new Fi,jl=new Oi,ql=new Ri;class Xl extends cr{constructor(t=new rs,e=new Gl){super(),this.type=\"Line\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[0];for(let t=1,i=e.count;t\u003ci;t++)kl.fromBufferAttribute(e,t-1),Vl.fromBufferAttribute(e,t),n[t]=n[t-1],n[t]+=kl.distanceTo(Vl);t.setAttribute(\"lineDistance\",new qr(n,1))}else console.warn(\"THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry\u0026\u0026console.error(\"THREE.Line.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Line.threshold,s=n.drawRange;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),ql.copy(n.boundingSphere),ql.applyMatrix4(i),ql.radius+=r,!1===t.ray.intersectsSphere(ql))return;Wl.copy(i).invert(),jl.copy(t.ray).applyMatrix4(Wl);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a,l=new oi,c=new oi,u=new oi,h=new oi,d=this.isLineSegments?2:1;if(n.isBufferGeometry){const i=n.index,r=n.attributes.position;if(null!==i){for(let n=Math.max(0,s.start),a=Math.min(i.count,s.start+s.count)-1;n\u003ca;n+=d){const s=i.getX(n),a=i.getX(n+1);l.fromBufferAttribute(r,s),c.fromBufferAttribute(r,a);if(jl.distanceSqToSegment(l,c,h,u)\u003eo)continue;h.applyMatrix4(this.matrixWorld);const d=t.ray.origin.distanceTo(h);d\u003ct.near||d\u003et.far||e.push({distance:d,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}else{for(let n=Math.max(0,s.start),i=Math.min(r.count,s.start+s.count)-1;n\u003ci;n+=d){l.fromBufferAttribute(r,n),c.fromBufferAttribute(r,n+1);if(jl.distanceSqToSegment(l,c,h,u)\u003eo)continue;h.applyMatrix4(this.matrixWorld);const i=t.ray.origin.distanceTo(h);i\u003ct.near||i\u003et.far||e.push({distance:i,point:u.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this})}}}else n.isGeometry\u0026\u0026console.error(\"THREE.Line.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}Xl.prototype.isLine=!0;const Yl=new oi,Zl=new oi;class Jl extends Xl{constructor(t,e){super(t,e),this.type=\"LineSegments\"}computeLineDistances(){const t=this.geometry;if(t.isBufferGeometry)if(null===t.index){const e=t.attributes.position,n=[];for(let t=0,i=e.count;t\u003ci;t+=2)Yl.fromBufferAttribute(e,t),Zl.fromBufferAttribute(e,t+1),n[t]=0===t?0:n[t-1],n[t+1]=n[t]+Yl.distanceTo(Zl);t.setAttribute(\"lineDistance\",new qr(n,1))}else console.warn(\"THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.\");else t.isGeometry\u0026\u0026console.error(\"THREE.LineSegments.computeLineDistances() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");return this}}Jl.prototype.isLineSegments=!0;class Ql extends Xl{constructor(t,e){super(t,e),this.type=\"LineLoop\"}}Ql.prototype.isLineLoop=!0;class Kl extends Er{constructor(t){super(),this.type=\"PointsMaterial\",this.color=new Ir(16777215),this.map=null,this.alphaMap=null,this.size=1,this.sizeAttenuation=!0,this.morphTargets=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.alphaMap=t.alphaMap,this.size=t.size,this.sizeAttenuation=t.sizeAttenuation,this.morphTargets=t.morphTargets,this}}Kl.prototype.isPointsMaterial=!0;const $l=new Fi,tc=new Oi,ec=new Ri,nc=new oi;class ic extends cr{constructor(t=new rs,e=new Kl){super(),this.type=\"Points\",this.geometry=t,this.material=e,this.updateMorphTargets()}copy(t){return super.copy(t),this.material=t.material,this.geometry=t.geometry,this}raycast(t,e){const n=this.geometry,i=this.matrixWorld,r=t.params.Points.threshold,s=n.drawRange;if(null===n.boundingSphere\u0026\u0026n.computeBoundingSphere(),ec.copy(n.boundingSphere),ec.applyMatrix4(i),ec.radius+=r,!1===t.ray.intersectsSphere(ec))return;$l.copy(i).invert(),tc.copy(t.ray).applyMatrix4($l);const a=r/((this.scale.x+this.scale.y+this.scale.z)/3),o=a*a;if(n.isBufferGeometry){const r=n.index,a=n.attributes.position;if(null!==r){for(let n=Math.max(0,s.start),l=Math.min(r.count,s.start+s.count);n\u003cl;n++){const s=r.getX(n);nc.fromBufferAttribute(a,s),rc(nc,s,o,i,t,e,this)}}else{for(let n=Math.max(0,s.start),r=Math.min(a.count,s.start+s.count);n\u003cr;n++)nc.fromBufferAttribute(a,n),rc(nc,n,o,i,t,e,this)}}else console.error(\"THREE.Points.raycast() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\")}updateMorphTargets(){const t=this.geometry;if(t.isBufferGeometry){const e=t.morphAttributes,n=Object.keys(e);if(n.length\u003e0){const t=e[n[0]];if(void 0!==t){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,n=t.length;e\u003cn;e++){const n=t[e].name||String(e);this.morphTargetInfluences.push(0),this.morphTargetDictionary[n]=e}}}}else{const e=t.morphTargets;void 0!==e\u0026\u0026e.length\u003e0\u0026\u0026console.error(\"THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.\")}}}function rc(t,e,n,i,r,s,a){const o=tc.distanceSqToPoint(t);if(o\u003cn){const n=new oi;tc.closestPointToPoint(t,n),n.applyMatrix4(i);const l=r.ray.origin.distanceTo(n);if(l\u003cr.near||l\u003er.far)return;s.push({distance:l,distanceToRay:Math.sqrt(o),point:n,index:e,face:null,object:a})}}ic.prototype.isPoints=!0;class sc extends ti{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.format=void 0!==a?a:Ot,this.minFilter=void 0!==s?s:xt,this.magFilter=void 0!==r?r:xt,this.generateMipmaps=!1;const c=this;\"requestVideoFrameCallback\"in t\u0026\u0026t.requestVideoFrameCallback((function e(){c.needsUpdate=!0,t.requestVideoFrameCallback(e)}))}clone(){return new this.constructor(this.image).copy(this)}update(){const t=this.image;!1===\"requestVideoFrameCallback\"in t\u0026\u0026t.readyState\u003e=t.HAVE_CURRENT_DATA\u0026\u0026(this.needsUpdate=!0)}}sc.prototype.isVideoTexture=!0;class ac extends ti{constructor(t,e,n,i,r,s,a,o,l,c,u,h){super(null,s,a,o,l,c,i,r,u,h),this.image={width:e,height:n},this.mipmaps=t,this.flipY=!1,this.generateMipmaps=!1}}ac.prototype.isCompressedTexture=!0;class oc extends ti{constructor(t,e,n,i,r,s,a,o,l){super(t,e,n,i,r,s,a,o,l),this.needsUpdate=!0}}oc.prototype.isCanvasTexture=!0;class lc extends ti{constructor(t,e,n,i,r,s,a,o,l,c){if((c=void 0!==c?c:kt)!==kt\u0026\u0026c!==Vt)throw new Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");void 0===n\u0026\u0026c===kt\u0026\u0026(n=At),void 0===n\u0026\u0026c===Vt\u0026\u0026(n=zt),super(null,i,r,s,a,o,c,n,l),this.image={width:t,height:e},this.magFilter=void 0!==a?a:ft,this.minFilter=void 0!==o?o:ft,this.flipY=!1,this.generateMipmaps=!1}}lc.prototype.isDepthTexture=!0;class cc extends rs{constructor(t=1,e=8,n=0,i=2*Math.PI){super(),this.type=\"CircleGeometry\",this.parameters={radius:t,segments:e,thetaStart:n,thetaLength:i},e=Math.max(3,e);const r=[],s=[],a=[],o=[],l=new oi,c=new Zn;s.push(0,0,0),a.push(0,0,1),o.push(.5,.5);for(let r=0,u=3;r\u003c=e;r++,u+=3){const h=n+r/e*i;l.x=t*Math.cos(h),l.y=t*Math.sin(h),s.push(l.x,l.y,l.z),a.push(0,0,1),c.x=(s[u]/t+1)/2,c.y=(s[u+1]/t+1)/2,o.push(c.x,c.y)}for(let t=1;t\u003c=e;t++)r.push(t,t+1,0);this.setIndex(r),this.setAttribute(\"position\",new qr(s,3)),this.setAttribute(\"normal\",new qr(a,3)),this.setAttribute(\"uv\",new qr(o,2))}}class uc extends rs{constructor(t=1,e=1,n=1,i=8,r=1,s=!1,a=0,o=2*Math.PI){super(),this.type=\"CylinderGeometry\",this.parameters={radiusTop:t,radiusBottom:e,height:n,radialSegments:i,heightSegments:r,openEnded:s,thetaStart:a,thetaLength:o};const l=this;i=Math.floor(i),r=Math.floor(r);const c=[],u=[],h=[],d=[];let p=0;const f=[],m=n/2;let g=0;function v(n){const r=p,s=new Zn,f=new oi;let v=0;const y=!0===n?t:e,x=!0===n?1:-1;for(let t=1;t\u003c=i;t++)u.push(0,m*x,0),h.push(0,x,0),d.push(.5,.5),p++;const _=p;for(let t=0;t\u003c=i;t++){const e=t/i*o+a,n=Math.cos(e),r=Math.sin(e);f.x=y*r,f.y=m*x,f.z=y*n,u.push(f.x,f.y,f.z),h.push(0,x,0),s.x=.5*n+.5,s.y=.5*r*x+.5,d.push(s.x,s.y),p++}for(let t=0;t\u003ci;t++){const e=r+t,i=_+t;!0===n?c.push(i,i+1,e):c.push(i+1,i,e),v+=3}l.addGroup(g,v,!0===n?1:2),g+=v}!function(){const s=new oi,v=new oi;let y=0;const x=(e-t)/n;for(let l=0;l\u003c=r;l++){const c=[],g=l/r,y=g*(e-t)+t;for(let t=0;t\u003c=i;t++){const e=t/i,r=e*o+a,l=Math.sin(r),f=Math.cos(r);v.x=y*l,v.y=-g*n+m,v.z=y*f,u.push(v.x,v.y,v.z),s.set(l,x,f).normalize(),h.push(s.x,s.y,s.z),d.push(e,1-g),c.push(p++)}f.push(c)}for(let t=0;t\u003ci;t++)for(let e=0;e\u003cr;e++){const n=f[e][t],i=f[e+1][t],r=f[e+1][t+1],s=f[e][t+1];c.push(n,i,s),c.push(i,r,s),y+=6}l.addGroup(g,y,0),g+=y}(),!1===s\u0026\u0026(t\u003e0\u0026\u0026v(!0),e\u003e0\u0026\u0026v(!1)),this.setIndex(c),this.setAttribute(\"position\",new qr(u,3)),this.setAttribute(\"normal\",new qr(h,3)),this.setAttribute(\"uv\",new qr(d,2))}}class hc extends uc{constructor(t=1,e=1,n=8,i=1,r=!1,s=0,a=2*Math.PI){super(0,t,e,n,i,r,s,a),this.type=\"ConeGeometry\",this.parameters={radius:t,height:e,radialSegments:n,heightSegments:i,openEnded:r,thetaStart:s,thetaLength:a}}}class dc extends rs{constructor(t,e,n=1,i=0){super(),this.type=\"PolyhedronGeometry\",this.parameters={vertices:t,indices:e,radius:n,detail:i};const r=[],s=[];function a(t,e,n,i){const r=i+1,s=[];for(let i=0;i\u003c=r;i++){s[i]=[];const a=t.clone().lerp(n,i/r),o=e.clone().lerp(n,i/r),l=r-i;for(let t=0;t\u003c=l;t++)s[i][t]=0===t\u0026\u0026i===r?a:a.clone().lerp(o,t/l)}for(let t=0;t\u003cr;t++)for(let e=0;e\u003c2*(r-t)-1;e++){const n=Math.floor(e/2);e%2==0?(o(s[t][n+1]),o(s[t+1][n]),o(s[t][n])):(o(s[t][n+1]),o(s[t+1][n+1]),o(s[t+1][n]))}}function o(t){r.push(t.x,t.y,t.z)}function l(e,n){const i=3*e;n.x=t[i+0],n.y=t[i+1],n.z=t[i+2]}function c(t,e,n,i){i\u003c0\u0026\u00261===t.x\u0026\u0026(s[e]=t.x-1),0===n.x\u0026\u00260===n.z\u0026\u0026(s[e]=i/2/Math.PI+.5)}function u(t){return Math.atan2(t.z,-t.x)}!function(t){const n=new oi,i=new oi,r=new oi;for(let s=0;s\u003ce.length;s+=3)l(e[s+0],n),l(e[s+1],i),l(e[s+2],r),a(n,i,r,t)}(i),function(t){const e=new oi;for(let n=0;n\u003cr.length;n+=3)e.x=r[n+0],e.y=r[n+1],e.z=r[n+2],e.normalize().multiplyScalar(t),r[n+0]=e.x,r[n+1]=e.y,r[n+2]=e.z}(n),function(){const t=new oi;for(let n=0;n\u003cr.length;n+=3){t.x=r[n+0],t.y=r[n+1],t.z=r[n+2];const i=u(t)/2/Math.PI+.5,a=(e=t,Math.atan2(-e.y,Math.sqrt(e.x*e.x+e.z*e.z))/Math.PI+.5);s.push(i,1-a)}var e;(function(){const t=new oi,e=new oi,n=new oi,i=new oi,a=new Zn,o=new Zn,l=new Zn;for(let h=0,d=0;h\u003cr.length;h+=9,d+=6){t.set(r[h+0],r[h+1],r[h+2]),e.set(r[h+3],r[h+4],r[h+5]),n.set(r[h+6],r[h+7],r[h+8]),a.set(s[d+0],s[d+1]),o.set(s[d+2],s[d+3]),l.set(s[d+4],s[d+5]),i.copy(t).add(e).add(n).divideScalar(3);const p=u(i);c(a,d+0,t,p),c(o,d+2,e,p),c(l,d+4,n,p)}})(),function(){for(let t=0;t\u003cs.length;t+=6){const e=s[t+0],n=s[t+2],i=s[t+4],r=Math.max(e,n,i),a=Math.min(e,n,i);r\u003e.9\u0026\u0026a\u003c.1\u0026\u0026(e\u003c.2\u0026\u0026(s[t+0]+=1),n\u003c.2\u0026\u0026(s[t+2]+=1),i\u003c.2\u0026\u0026(s[t+4]+=1))}}()}(),this.setAttribute(\"position\",new qr(r,3)),this.setAttribute(\"normal\",new qr(r.slice(),3)),this.setAttribute(\"uv\",new qr(s,2)),0===i?this.computeVertexNormals():this.normalizeNormals()}}class pc extends dc{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2,i=1/n;super([-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,-i,-n,0,-i,n,0,i,-n,0,i,n,-i,-n,0,-i,n,0,i,-n,0,i,n,0,-n,0,-i,n,0,-i,-n,0,i,n,0,i],[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],t,e),this.type=\"DodecahedronGeometry\",this.parameters={radius:t,detail:e}}}const fc=new oi,mc=new oi,gc=new oi,vc=new Sr;class yc extends rs{constructor(t,e){if(super(),this.type=\"EdgesGeometry\",this.parameters={thresholdAngle:e},e=void 0!==e?e:1,!0===t.isGeometry)return void console.error(\"THREE.EdgesGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");const n=Math.pow(10,4),i=Math.cos(Hn*e),r=t.getIndex(),s=t.getAttribute(\"position\"),a=r?r.count:s.count,o=[0,0,0],l=[\"a\",\"b\",\"c\"],c=new Array(3),u={},h=[];for(let t=0;t\u003ca;t+=3){r?(o[0]=r.getX(t),o[1]=r.getX(t+1),o[2]=r.getX(t+2)):(o[0]=t,o[1]=t+1,o[2]=t+2);const{a:e,b:a,c:d}=vc;if(e.fromBufferAttribute(s,o[0]),a.fromBufferAttribute(s,o[1]),d.fromBufferAttribute(s,o[2]),vc.getNormal(gc),c[0]=`${Math.round(e.x*n)},${Math.round(e.y*n)},${Math.round(e.z*n)}`,c[1]=`${Math.round(a.x*n)},${Math.round(a.y*n)},${Math.round(a.z*n)}`,c[2]=`${Math.round(d.x*n)},${Math.round(d.y*n)},${Math.round(d.z*n)}`,c[0]!==c[1]\u0026\u0026c[1]!==c[2]\u0026\u0026c[2]!==c[0])for(let t=0;t\u003c3;t++){const e=(t+1)%3,n=c[t],r=c[e],s=vc[l[t]],a=vc[l[e]],d=`${n}_${r}`,p=`${r}_${n}`;p in u\u0026\u0026u[p]?(gc.dot(u[p].normal)\u003c=i\u0026\u0026(h.push(s.x,s.y,s.z),h.push(a.x,a.y,a.z)),u[p]=null):d in u||(u[d]={index0:o[t],index1:o[e],normal:gc.clone()})}}for(const t in u)if(u[t]){const{index0:e,index1:n}=u[t];fc.fromBufferAttribute(s,e),mc.fromBufferAttribute(s,n),h.push(fc.x,fc.y,fc.z),h.push(mc.x,mc.y,mc.z)}this.setAttribute(\"position\",new qr(h,3))}}const xc=function(t,e,n){n=n||2;const i=e\u0026\u0026e.length,r=i?e[0]*n:t.length;let s=_c(t,0,r,n,!0);const a=[];if(!s||s.next===s.prev)return a;let o,l,c,u,h,d,p;if(i\u0026\u0026(s=function(t,e,n,i){const r=[];let s,a,o,l,c;for(s=0,a=e.length;s\u003ca;s++)o=e[s]*i,l=s\u003ca-1?e[s+1]*i:t.length,c=_c(t,o,l,i,!1),c===c.next\u0026\u0026(c.steiner=!0),r.push(Pc(c));for(r.sort(Ac),s=0;s\u003cr.length;s++)Lc(r[s],n),n=bc(n,n.next);return n}(t,e,s,n)),t.length\u003e80*n){o=c=t[0],l=u=t[1];for(let e=n;e\u003cr;e+=n)h=t[e],d=t[e+1],h\u003co\u0026\u0026(o=h),d\u003cl\u0026\u0026(l=d),h\u003ec\u0026\u0026(c=h),d\u003eu\u0026\u0026(u=d);p=Math.max(c-o,u-l),p=0!==p?1/p:0}return wc(s,a,n,o,l,p),a};function _c(t,e,n,i,r){let s,a;if(r===function(t,e,n,i){let r=0;for(let s=e,a=n-i;s\u003cn;s+=i)r+=(t[a]-t[s])*(t[s+1]+t[a+1]),a=s;return r}(t,e,n,i)\u003e0)for(s=e;s\u003cn;s+=i)a=Gc(s,t[s],t[s+1],a);else for(s=n-i;s\u003e=e;s-=i)a=Gc(s,t[s],t[s+1],a);return a\u0026\u0026zc(a,a.next)\u0026\u0026(kc(a),a=a.next),a}function bc(t,e){if(!t)return t;e||(e=t);let n,i=t;do{if(n=!1,i.steiner||!zc(i,i.next)\u0026\u00260!==Nc(i.prev,i,i.next))i=i.next;else{if(kc(i),i=e=i.prev,i===i.next)break;n=!0}}while(n||i!==e);return e}function wc(t,e,n,i,r,s,a){if(!t)return;!a\u0026\u0026s\u0026\u0026function(t,e,n,i){let r=t;do{null===r.z\u0026\u0026(r.z=Cc(r.x,r.y,e,n,i)),r.prevZ=r.prev,r.nextZ=r.next,r=r.next}while(r!==t);r.prevZ.nextZ=null,r.prevZ=null,function(t){let e,n,i,r,s,a,o,l,c=1;do{for(n=t,t=null,s=null,a=0;n;){for(a++,i=n,o=0,e=0;e\u003cc\u0026\u0026(o++,i=i.nextZ,i);e++);for(l=c;o\u003e0||l\u003e0\u0026\u0026i;)0!==o\u0026\u0026(0===l||!i||n.z\u003c=i.z)?(r=n,n=n.nextZ,o--):(r=i,i=i.nextZ,l--),s?s.nextZ=r:t=r,r.prevZ=s,s=r;n=i}s.nextZ=null,c*=2}while(a\u003e1)}(r)}(t,i,r,s);let o,l,c=t;for(;t.prev!==t.next;)if(o=t.prev,l=t.next,s?Sc(t,i,r,s):Mc(t))e.push(o.i/n),e.push(t.i/n),e.push(l.i/n),kc(t),t=l.next,c=l.next;else if((t=l)===c){a?1===a?wc(t=Tc(bc(t),e,n),e,n,i,r,s,2):2===a\u0026\u0026Ec(t,e,n,i,r,s):wc(bc(t),e,n,i,r,s,1);break}}function Mc(t){const e=t.prev,n=t,i=t.next;if(Nc(e,n,i)\u003e=0)return!1;let r=t.next.next;for(;r!==t.prev;){if(Dc(e.x,e.y,n.x,n.y,i.x,i.y,r.x,r.y)\u0026\u0026Nc(r.prev,r,r.next)\u003e=0)return!1;r=r.next}return!0}function Sc(t,e,n,i){const r=t.prev,s=t,a=t.next;if(Nc(r,s,a)\u003e=0)return!1;const o=r.x\u003cs.x?r.x\u003ca.x?r.x:a.x:s.x\u003ca.x?s.x:a.x,l=r.y\u003cs.y?r.y\u003ca.y?r.y:a.y:s.y\u003ca.y?s.y:a.y,c=r.x\u003es.x?r.x\u003ea.x?r.x:a.x:s.x\u003ea.x?s.x:a.x,u=r.y\u003es.y?r.y\u003ea.y?r.y:a.y:s.y\u003ea.y?s.y:a.y,h=Cc(o,l,e,n,i),d=Cc(c,u,e,n,i);let p=t.prevZ,f=t.nextZ;for(;p\u0026\u0026p.z\u003e=h\u0026\u0026f\u0026\u0026f.z\u003c=d;){if(p!==t.prev\u0026\u0026p!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)\u0026\u0026Nc(p.prev,p,p.next)\u003e=0)return!1;if(p=p.prevZ,f!==t.prev\u0026\u0026f!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,f.x,f.y)\u0026\u0026Nc(f.prev,f,f.next)\u003e=0)return!1;f=f.nextZ}for(;p\u0026\u0026p.z\u003e=h;){if(p!==t.prev\u0026\u0026p!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,p.x,p.y)\u0026\u0026Nc(p.prev,p,p.next)\u003e=0)return!1;p=p.prevZ}for(;f\u0026\u0026f.z\u003c=d;){if(f!==t.prev\u0026\u0026f!==t.next\u0026\u0026Dc(r.x,r.y,s.x,s.y,a.x,a.y,f.x,f.y)\u0026\u0026Nc(f.prev,f,f.next)\u003e=0)return!1;f=f.nextZ}return!0}function Tc(t,e,n){let i=t;do{const r=i.prev,s=i.next.next;!zc(r,s)\u0026\u0026Bc(r,i,i.next,s)\u0026\u0026Hc(r,s)\u0026\u0026Hc(s,r)\u0026\u0026(e.push(r.i/n),e.push(i.i/n),e.push(s.i/n),kc(i),kc(i.next),i=t=s),i=i.next}while(i!==t);return bc(i)}function Ec(t,e,n,i,r,s){let a=t;do{let t=a.next.next;for(;t!==a.prev;){if(a.i!==t.i\u0026\u0026Ic(a,t)){let o=Uc(a,t);return a=bc(a,a.next),o=bc(o,o.next),wc(a,e,n,i,r,s),void wc(o,e,n,i,r,s)}t=t.next}a=a.next}while(a!==t)}function Ac(t,e){return t.x-e.x}function Lc(t,e){if(e=function(t,e){let n=e;const i=t.x,r=t.y;let s,a=-1/0;do{if(r\u003c=n.y\u0026\u0026r\u003e=n.next.y\u0026\u0026n.next.y!==n.y){const t=n.x+(r-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(t\u003c=i\u0026\u0026t\u003ea){if(a=t,t===i){if(r===n.y)return n;if(r===n.next.y)return n.next}s=n.x\u003cn.next.x?n:n.next}}n=n.next}while(n!==e);if(!s)return null;if(i===a)return s;const o=s,l=s.x,c=s.y;let u,h=1/0;n=s;do{i\u003e=n.x\u0026\u0026n.x\u003e=l\u0026\u0026i!==n.x\u0026\u0026Dc(r\u003cc?i:a,r,l,c,r\u003cc?a:i,r,n.x,n.y)\u0026\u0026(u=Math.abs(r-n.y)/(i-n.x),Hc(n,t)\u0026\u0026(u\u003ch||u===h\u0026\u0026(n.x\u003es.x||n.x===s.x\u0026\u0026Rc(s,n)))\u0026\u0026(s=n,h=u)),n=n.next}while(n!==o);return s}(t,e)){const n=Uc(e,t);bc(e,e.next),bc(n,n.next)}}function Rc(t,e){return Nc(t.prev,t,e.prev)\u003c0\u0026\u0026Nc(e.next,t,t.next)\u003c0}function Cc(t,e,n,i,r){return(t=1431655765\u0026((t=858993459\u0026((t=252645135\u0026((t=16711935\u0026((t=32767*(t-n)*r)|t\u003c\u003c8))|t\u003c\u003c4))|t\u003c\u003c2))|t\u003c\u003c1))|(e=1431655765\u0026((e=858993459\u0026((e=252645135\u0026((e=16711935\u0026((e=32767*(e-i)*r)|e\u003c\u003c8))|e\u003c\u003c4))|e\u003c\u003c2))|e\u003c\u003c1))\u003c\u003c1}function Pc(t){let e=t,n=t;do{(e.x\u003cn.x||e.x===n.x\u0026\u0026e.y\u003cn.y)\u0026\u0026(n=e),e=e.next}while(e!==t);return n}function Dc(t,e,n,i,r,s,a,o){return(r-a)*(e-o)-(t-a)*(s-o)\u003e=0\u0026\u0026(t-a)*(i-o)-(n-a)*(e-o)\u003e=0\u0026\u0026(n-a)*(s-o)-(r-a)*(i-o)\u003e=0}function Ic(t,e){return t.next.i!==e.i\u0026\u0026t.prev.i!==e.i\u0026\u0026!function(t,e){let n=t;do{if(n.i!==t.i\u0026\u0026n.next.i!==t.i\u0026\u0026n.i!==e.i\u0026\u0026n.next.i!==e.i\u0026\u0026Bc(n,n.next,t,e))return!0;n=n.next}while(n!==t);return!1}(t,e)\u0026\u0026(Hc(t,e)\u0026\u0026Hc(e,t)\u0026\u0026function(t,e){let n=t,i=!1;const r=(t.x+e.x)/2,s=(t.y+e.y)/2;do{n.y\u003es!=n.next.y\u003es\u0026\u0026n.next.y!==n.y\u0026\u0026r\u003c(n.next.x-n.x)*(s-n.y)/(n.next.y-n.y)+n.x\u0026\u0026(i=!i),n=n.next}while(n!==t);return i}(t,e)\u0026\u0026(Nc(t.prev,t,e.prev)||Nc(t,e.prev,e))||zc(t,e)\u0026\u0026Nc(t.prev,t,t.next)\u003e0\u0026\u0026Nc(e.prev,e,e.next)\u003e0)}function Nc(t,e,n){return(e.y-t.y)*(n.x-e.x)-(e.x-t.x)*(n.y-e.y)}function zc(t,e){return t.x===e.x\u0026\u0026t.y===e.y}function Bc(t,e,n,i){const r=Fc(Nc(t,e,n)),s=Fc(Nc(t,e,i)),a=Fc(Nc(n,i,t)),o=Fc(Nc(n,i,e));return r!==s\u0026\u0026a!==o||(!(0!==r||!Oc(t,n,e))||(!(0!==s||!Oc(t,i,e))||(!(0!==a||!Oc(n,t,i))||!(0!==o||!Oc(n,e,i)))))}function Oc(t,e,n){return e.x\u003c=Math.max(t.x,n.x)\u0026\u0026e.x\u003e=Math.min(t.x,n.x)\u0026\u0026e.y\u003c=Math.max(t.y,n.y)\u0026\u0026e.y\u003e=Math.min(t.y,n.y)}function Fc(t){return t\u003e0?1:t\u003c0?-1:0}function Hc(t,e){return Nc(t.prev,t,t.next)\u003c0?Nc(t,e,t.next)\u003e=0\u0026\u0026Nc(t,t.prev,e)\u003e=0:Nc(t,e,t.prev)\u003c0||Nc(t,t.next,e)\u003c0}function Uc(t,e){const n=new Vc(t.i,t.x,t.y),i=new Vc(e.i,e.x,e.y),r=t.next,s=e.prev;return t.next=e,e.prev=t,n.next=r,r.prev=n,i.next=n,n.prev=i,s.next=i,i.prev=s,i}function Gc(t,e,n,i){const r=new Vc(t,e,n);return i?(r.next=i.next,r.prev=i,i.next.prev=r,i.next=r):(r.prev=r,r.next=r),r}function kc(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ\u0026\u0026(t.prevZ.nextZ=t.nextZ),t.nextZ\u0026\u0026(t.nextZ.prevZ=t.prevZ)}function Vc(t,e,n){this.i=t,this.x=e,this.y=n,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}class Wc{static area(t){const e=t.length;let n=0;for(let i=e-1,r=0;r\u003ce;i=r++)n+=t[i].x*t[r].y-t[r].x*t[i].y;return.5*n}static isClockWise(t){return Wc.area(t)\u003c0}static triangulateShape(t,e){const n=[],i=[],r=[];jc(t),qc(n,t);let s=t.length;e.forEach(jc);for(let t=0;t\u003ce.length;t++)i.push(s),s+=e[t].length,qc(n,e[t]);const a=xc(n,i);for(let t=0;t\u003ca.length;t+=3)r.push(a.slice(t,t+3));return r}}function jc(t){const e=t.length;e\u003e2\u0026\u0026t[e-1].equals(t[0])\u0026\u0026t.pop()}function qc(t,e){for(let n=0;n\u003ce.length;n++)t.push(e[n].x),t.push(e[n].y)}class Xc extends rs{constructor(t,e){super(),this.type=\"ExtrudeGeometry\",this.parameters={shapes:t,options:e},t=Array.isArray(t)?t:[t];const n=this,i=[],r=[];for(let e=0,n=t.length;e\u003cn;e++){s(t[e])}function s(t){const s=[],a=void 0!==e.curveSegments?e.curveSegments:12,o=void 0!==e.steps?e.steps:1;let l=void 0!==e.depth?e.depth:100,c=void 0===e.bevelEnabled||e.bevelEnabled,u=void 0!==e.bevelThickness?e.bevelThickness:6,h=void 0!==e.bevelSize?e.bevelSize:u-2,d=void 0!==e.bevelOffset?e.bevelOffset:0,p=void 0!==e.bevelSegments?e.bevelSegments:3;const f=e.extrudePath,m=void 0!==e.UVGenerator?e.UVGenerator:Yc;void 0!==e.amount\u0026\u0026(console.warn(\"THREE.ExtrudeBufferGeometry: amount has been renamed to depth.\"),l=e.amount);let g,v,y,x,_,b=!1;f\u0026\u0026(g=f.getSpacedPoints(o),b=!0,c=!1,v=f.computeFrenetFrames(o,!1),y=new oi,x=new oi,_=new oi),c||(p=0,u=0,h=0,d=0);const w=t.extractPoints(a);let M=w.shape;const S=w.holes;if(!Wc.isClockWise(M)){M=M.reverse();for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];Wc.isClockWise(e)\u0026\u0026(S[t]=e.reverse())}}const T=Wc.triangulateShape(M,S),E=M;for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];M=M.concat(e)}function A(t,e,n){return e||console.error(\"THREE.ExtrudeGeometry: vec does not exist\"),e.clone().multiplyScalar(n).add(t)}const L=M.length,R=T.length;function C(t,e,n){let i,r,s;const a=t.x-e.x,o=t.y-e.y,l=n.x-t.x,c=n.y-t.y,u=a*a+o*o,h=a*c-o*l;if(Math.abs(h)\u003eNumber.EPSILON){const h=Math.sqrt(u),d=Math.sqrt(l*l+c*c),p=e.x-o/h,f=e.y+a/h,m=((n.x-c/d-p)*c-(n.y+l/d-f)*l)/(a*c-o*l);i=p+a*m-t.x,r=f+o*m-t.y;const g=i*i+r*r;if(g\u003c=2)return new Zn(i,r);s=Math.sqrt(g/2)}else{let t=!1;a\u003eNumber.EPSILON?l\u003eNumber.EPSILON\u0026\u0026(t=!0):a\u003c-Number.EPSILON?l\u003c-Number.EPSILON\u0026\u0026(t=!0):Math.sign(o)===Math.sign(c)\u0026\u0026(t=!0),t?(i=-o,r=a,s=Math.sqrt(u)):(i=a,r=o,s=Math.sqrt(u/2))}return new Zn(i/s,r/s)}const P=[];for(let t=0,e=E.length,n=e-1,i=t+1;t\u003ce;t++,n++,i++)n===e\u0026\u0026(n=0),i===e\u0026\u0026(i=0),P[t]=C(E[t],E[n],E[i]);const D=[];let I,N=P.concat();for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];I=[];for(let t=0,n=e.length,i=n-1,r=t+1;t\u003cn;t++,i++,r++)i===n\u0026\u0026(i=0),r===n\u0026\u0026(r=0),I[t]=C(e[t],e[i],e[r]);D.push(I),N=N.concat(I)}for(let t=0;t\u003cp;t++){const e=t/p,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t\u003ce;t++){const e=A(E[t],P[t],i);O(e.x,e.y,-n)}for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];I=D[t];for(let t=0,r=e.length;t\u003cr;t++){const r=A(e[t],I[t],i);O(r.x,r.y,-n)}}}const z=h+d;for(let t=0;t\u003cL;t++){const e=c?A(M[t],N[t],z):M[t];b?(x.copy(v.normals[0]).multiplyScalar(e.x),y.copy(v.binormals[0]).multiplyScalar(e.y),_.copy(g[0]).add(x).add(y),O(_.x,_.y,_.z)):O(e.x,e.y,0)}for(let t=1;t\u003c=o;t++)for(let e=0;e\u003cL;e++){const n=c?A(M[e],N[e],z):M[e];b?(x.copy(v.normals[t]).multiplyScalar(n.x),y.copy(v.binormals[t]).multiplyScalar(n.y),_.copy(g[t]).add(x).add(y),O(_.x,_.y,_.z)):O(n.x,n.y,l/o*t)}for(let t=p-1;t\u003e=0;t--){const e=t/p,n=u*Math.cos(e*Math.PI/2),i=h*Math.sin(e*Math.PI/2)+d;for(let t=0,e=E.length;t\u003ce;t++){const e=A(E[t],P[t],i);O(e.x,e.y,l+n)}for(let t=0,e=S.length;t\u003ce;t++){const e=S[t];I=D[t];for(let t=0,r=e.length;t\u003cr;t++){const r=A(e[t],I[t],i);b?O(r.x,r.y+g[o-1].y,g[o-1].x+n):O(r.x,r.y,l+n)}}}function B(t,e){let n=t.length;for(;--n\u003e=0;){const i=n;let r=n-1;r\u003c0\u0026\u0026(r=t.length-1);for(let t=0,n=o+2*p;t\u003cn;t++){const n=L*t,s=L*(t+1);H(e+i+n,e+r+n,e+r+s,e+i+s)}}}function O(t,e,n){s.push(t),s.push(e),s.push(n)}function F(t,e,r){U(t),U(e),U(r);const s=i.length/3,a=m.generateTopUV(n,i,s-3,s-2,s-1);G(a[0]),G(a[1]),G(a[2])}function H(t,e,r,s){U(t),U(e),U(s),U(e),U(r),U(s);const a=i.length/3,o=m.generateSideWallUV(n,i,a-6,a-3,a-2,a-1);G(o[0]),G(o[1]),G(o[3]),G(o[1]),G(o[2]),G(o[3])}function U(t){i.push(s[3*t+0]),i.push(s[3*t+1]),i.push(s[3*t+2])}function G(t){r.push(t.x),r.push(t.y)}!function(){const t=i.length/3;if(c){let t=0,e=L*t;for(let t=0;t\u003cR;t++){const n=T[t];F(n[2]+e,n[1]+e,n[0]+e)}t=o+2*p,e=L*t;for(let t=0;t\u003cR;t++){const n=T[t];F(n[0]+e,n[1]+e,n[2]+e)}}else{for(let t=0;t\u003cR;t++){const e=T[t];F(e[2],e[1],e[0])}for(let t=0;t\u003cR;t++){const e=T[t];F(e[0]+L*o,e[1]+L*o,e[2]+L*o)}}n.addGroup(t,i.length/3-t,0)}(),function(){const t=i.length/3;let e=0;B(E,e),e+=E.length;for(let t=0,n=S.length;t\u003cn;t++){const n=S[t];B(n,e),e+=n.length}n.addGroup(t,i.length/3-t,1)}()}this.setAttribute(\"position\",new qr(i,3)),this.setAttribute(\"uv\",new qr(r,2)),this.computeVertexNormals()}toJSON(){const t=super.toJSON();return function(t,e,n){if(n.shapes=[],Array.isArray(t))for(let e=0,i=t.length;e\u003ci;e++){const i=t[e];n.shapes.push(i.uuid)}else n.shapes.push(t.uuid);void 0!==e.extrudePath\u0026\u0026(n.options.extrudePath=e.extrudePath.toJSON());return n}(this.parameters.shapes,this.parameters.options,t)}}const Yc={generateTopUV:function(t,e,n,i,r){const s=e[3*n],a=e[3*n+1],o=e[3*i],l=e[3*i+1],c=e[3*r],u=e[3*r+1];return[new Zn(s,a),new Zn(o,l),new Zn(c,u)]},generateSideWallUV:function(t,e,n,i,r,s){const a=e[3*n],o=e[3*n+1],l=e[3*n+2],c=e[3*i],u=e[3*i+1],h=e[3*i+2],d=e[3*r],p=e[3*r+1],f=e[3*r+2],m=e[3*s],g=e[3*s+1],v=e[3*s+2];return Math.abs(o-u)\u003cMath.abs(a-c)?[new Zn(a,1-l),new Zn(c,1-h),new Zn(d,1-f),new Zn(m,1-v)]:[new Zn(o,1-l),new Zn(u,1-h),new Zn(p,1-f),new Zn(g,1-v)]}};class Zc extends dc{constructor(t=1,e=0){const n=(1+Math.sqrt(5))/2;super([-1,n,0,1,n,0,-1,-n,0,1,-n,0,0,-1,n,0,1,n,0,-1,-n,0,1,-n,n,0,-1,n,0,1,-n,0,-1,-n,0,1],[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],t,e),this.type=\"IcosahedronGeometry\",this.parameters={radius:t,detail:e}}}class Jc extends rs{constructor(t,e=12,n=0,i=2*Math.PI){super(),this.type=\"LatheGeometry\",this.parameters={points:t,segments:e,phiStart:n,phiLength:i},e=Math.floor(e),i=kn(i,0,2*Math.PI);const r=[],s=[],a=[],o=1/e,l=new oi,c=new Zn;for(let r=0;r\u003c=e;r++){const u=n+r*o*i,h=Math.sin(u),d=Math.cos(u);for(let n=0;n\u003c=t.length-1;n++)l.x=t[n].x*h,l.y=t[n].y,l.z=t[n].x*d,s.push(l.x,l.y,l.z),c.x=r/e,c.y=n/(t.length-1),a.push(c.x,c.y)}for(let n=0;n\u003ce;n++)for(let e=0;e\u003ct.length-1;e++){const i=e+n*t.length,s=i,a=i+t.length,o=i+t.length+1,l=i+1;r.push(s,a,l),r.push(a,o,l)}if(this.setIndex(r),this.setAttribute(\"position\",new qr(s,3)),this.setAttribute(\"uv\",new qr(a,2)),this.computeVertexNormals(),i===2*Math.PI){const n=this.attributes.normal.array,i=new oi,r=new oi,s=new oi,a=e*t.length*3;for(let e=0,o=0;e\u003ct.length;e++,o+=3)i.x=n[o+0],i.y=n[o+1],i.z=n[o+2],r.x=n[a+o+0],r.y=n[a+o+1],r.z=n[a+o+2],s.addVectors(i,r).normalize(),n[o+0]=n[a+o+0]=s.x,n[o+1]=n[a+o+1]=s.y,n[o+2]=n[a+o+2]=s.z}}}class Qc extends dc{constructor(t=1,e=0){super([1,0,0,-1,0,0,0,1,0,0,-1,0,0,0,1,0,0,-1],[0,2,4,0,4,3,0,3,5,0,5,2,1,2,5,1,5,3,1,3,4,1,4,2],t,e),this.type=\"OctahedronGeometry\",this.parameters={radius:t,detail:e}}}class Kc extends rs{constructor(t,e,n){super(),this.type=\"ParametricGeometry\",this.parameters={func:t,slices:e,stacks:n};const i=[],r=[],s=[],a=[],o=1e-5,l=new oi,c=new oi,u=new oi,h=new oi,d=new oi;t.length\u003c3\u0026\u0026console.error(\"THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.\");const p=e+1;for(let i=0;i\u003c=n;i++){const p=i/n;for(let n=0;n\u003c=e;n++){const i=n/e;t(i,p,c),r.push(c.x,c.y,c.z),i-o\u003e=0?(t(i-o,p,u),h.subVectors(c,u)):(t(i+o,p,u),h.subVectors(u,c)),p-o\u003e=0?(t(i,p-o,u),d.subVectors(c,u)):(t(i,p+o,u),d.subVectors(u,c)),l.crossVectors(h,d).normalize(),s.push(l.x,l.y,l.z),a.push(i,p)}}for(let t=0;t\u003cn;t++)for(let n=0;n\u003ce;n++){const e=t*p+n,r=t*p+n+1,s=(t+1)*p+n+1,a=(t+1)*p+n;i.push(e,r,a),i.push(r,s,a)}this.setIndex(i),this.setAttribute(\"position\",new qr(r,3)),this.setAttribute(\"normal\",new qr(s,3)),this.setAttribute(\"uv\",new qr(a,2))}}class $c extends rs{constructor(t=.5,e=1,n=8,i=1,r=0,s=2*Math.PI){super(),this.type=\"RingGeometry\",this.parameters={innerRadius:t,outerRadius:e,thetaSegments:n,phiSegments:i,thetaStart:r,thetaLength:s},n=Math.max(3,n);const a=[],o=[],l=[],c=[];let u=t;const h=(e-t)/(i=Math.max(1,i)),d=new oi,p=new Zn;for(let t=0;t\u003c=i;t++){for(let t=0;t\u003c=n;t++){const i=r+t/n*s;d.x=u*Math.cos(i),d.y=u*Math.sin(i),o.push(d.x,d.y,d.z),l.push(0,0,1),p.x=(d.x/e+1)/2,p.y=(d.y/e+1)/2,c.push(p.x,p.y)}u+=h}for(let t=0;t\u003ci;t++){const e=t*(n+1);for(let t=0;t\u003cn;t++){const i=t+e,r=i,s=i+n+1,o=i+n+2,l=i+1;a.push(r,s,l),a.push(s,o,l)}}this.setIndex(a),this.setAttribute(\"position\",new qr(o,3)),this.setAttribute(\"normal\",new qr(l,3)),this.setAttribute(\"uv\",new qr(c,2))}}class tu extends rs{constructor(t,e=12){super(),this.type=\"ShapeGeometry\",this.parameters={shapes:t,curveSegments:e};const n=[],i=[],r=[],s=[];let a=0,o=0;if(!1===Array.isArray(t))l(t);else for(let e=0;e\u003ct.length;e++)l(t[e]),this.addGroup(a,o,e),a+=o,o=0;function l(t){const a=i.length/3,l=t.extractPoints(e);let c=l.shape;const u=l.holes;!1===Wc.isClockWise(c)\u0026\u0026(c=c.reverse());for(let t=0,e=u.length;t\u003ce;t++){const e=u[t];!0===Wc.isClockWise(e)\u0026\u0026(u[t]=e.reverse())}const h=Wc.triangulateShape(c,u);for(let t=0,e=u.length;t\u003ce;t++){const e=u[t];c=c.concat(e)}for(let t=0,e=c.length;t\u003ce;t++){const e=c[t];i.push(e.x,e.y,0),r.push(0,0,1),s.push(e.x,e.y)}for(let t=0,e=h.length;t\u003ce;t++){const e=h[t],i=e[0]+a,r=e[1]+a,s=e[2]+a;n.push(i,r,s),o+=3}}this.setIndex(n),this.setAttribute(\"position\",new qr(i,3)),this.setAttribute(\"normal\",new qr(r,3)),this.setAttribute(\"uv\",new qr(s,2))}toJSON(){const t=super.toJSON();return function(t,e){if(e.shapes=[],Array.isArray(t))for(let n=0,i=t.length;n\u003ci;n++){const i=t[n];e.shapes.push(i.uuid)}else e.shapes.push(t.uuid);return e}(this.parameters.shapes,t)}}class eu extends rs{constructor(t=1,e=8,n=6,i=0,r=2*Math.PI,s=0,a=Math.PI){super(),this.type=\"SphereGeometry\",this.parameters={radius:t,widthSegments:e,heightSegments:n,phiStart:i,phiLength:r,thetaStart:s,thetaLength:a},e=Math.max(3,Math.floor(e)),n=Math.max(2,Math.floor(n));const o=Math.min(s+a,Math.PI);let l=0;const c=[],u=new oi,h=new oi,d=[],p=[],f=[],m=[];for(let d=0;d\u003c=n;d++){const g=[],v=d/n;let y=0;0==d\u0026\u00260==s?y=.5/e:d==n\u0026\u0026o==Math.PI\u0026\u0026(y=-.5/e);for(let n=0;n\u003c=e;n++){const o=n/e;u.x=-t*Math.cos(i+o*r)*Math.sin(s+v*a),u.y=t*Math.cos(s+v*a),u.z=t*Math.sin(i+o*r)*Math.sin(s+v*a),p.push(u.x,u.y,u.z),h.copy(u).normalize(),f.push(h.x,h.y,h.z),m.push(o+y,1-v),g.push(l++)}c.push(g)}for(let t=0;t\u003cn;t++)for(let i=0;i\u003ce;i++){const e=c[t][i+1],r=c[t][i],a=c[t+1][i],l=c[t+1][i+1];(0!==t||s\u003e0)\u0026\u0026d.push(e,r,l),(t!==n-1||o\u003cMath.PI)\u0026\u0026d.push(r,a,l)}this.setIndex(d),this.setAttribute(\"position\",new qr(p,3)),this.setAttribute(\"normal\",new qr(f,3)),this.setAttribute(\"uv\",new qr(m,2))}}class nu extends dc{constructor(t=1,e=0){super([1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],t,e),this.type=\"TetrahedronGeometry\",this.parameters={radius:t,detail:e}}}class iu extends Xc{constructor(t,e={}){const n=e.font;if(!n||!n.isFont)return console.error(\"THREE.TextGeometry: font parameter is not an instance of THREE.Font.\"),new rs;const i=n.generateShapes(t,e.size);e.depth=void 0!==e.height?e.height:50,void 0===e.bevelThickness\u0026\u0026(e.bevelThickness=10),void 0===e.bevelSize\u0026\u0026(e.bevelSize=8),void 0===e.bevelEnabled\u0026\u0026(e.bevelEnabled=!1),super(i,e),this.type=\"TextGeometry\"}}class ru extends rs{constructor(t=1,e=.4,n=8,i=6,r=2*Math.PI){super(),this.type=\"TorusGeometry\",this.parameters={radius:t,tube:e,radialSegments:n,tubularSegments:i,arc:r},n=Math.floor(n),i=Math.floor(i);const s=[],a=[],o=[],l=[],c=new oi,u=new oi,h=new oi;for(let s=0;s\u003c=n;s++)for(let d=0;d\u003c=i;d++){const p=d/i*r,f=s/n*Math.PI*2;u.x=(t+e*Math.cos(f))*Math.cos(p),u.y=(t+e*Math.cos(f))*Math.sin(p),u.z=e*Math.sin(f),a.push(u.x,u.y,u.z),c.x=t*Math.cos(p),c.y=t*Math.sin(p),h.subVectors(u,c).normalize(),o.push(h.x,h.y,h.z),l.push(d/i),l.push(s/n)}for(let t=1;t\u003c=n;t++)for(let e=1;e\u003c=i;e++){const n=(i+1)*t+e-1,r=(i+1)*(t-1)+e-1,a=(i+1)*(t-1)+e,o=(i+1)*t+e;s.push(n,r,o),s.push(r,a,o)}this.setIndex(s),this.setAttribute(\"position\",new qr(a,3)),this.setAttribute(\"normal\",new qr(o,3)),this.setAttribute(\"uv\",new qr(l,2))}}class su extends rs{constructor(t=1,e=.4,n=64,i=8,r=2,s=3){super(),this.type=\"TorusKnotGeometry\",this.parameters={radius:t,tube:e,tubularSegments:n,radialSegments:i,p:r,q:s},n=Math.floor(n),i=Math.floor(i);const a=[],o=[],l=[],c=[],u=new oi,h=new oi,d=new oi,p=new oi,f=new oi,m=new oi,g=new oi;for(let a=0;a\u003c=n;++a){const y=a/n*r*Math.PI*2;v(y,r,s,t,d),v(y+.01,r,s,t,p),m.subVectors(p,d),g.addVectors(p,d),f.crossVectors(m,g),g.crossVectors(f,m),f.normalize(),g.normalize();for(let t=0;t\u003c=i;++t){const r=t/i*Math.PI*2,s=-e*Math.cos(r),p=e*Math.sin(r);u.x=d.x+(s*g.x+p*f.x),u.y=d.y+(s*g.y+p*f.y),u.z=d.z+(s*g.z+p*f.z),o.push(u.x,u.y,u.z),h.subVectors(u,d).normalize(),l.push(h.x,h.y,h.z),c.push(a/n),c.push(t/i)}}for(let t=1;t\u003c=n;t++)for(let e=1;e\u003c=i;e++){const n=(i+1)*(t-1)+(e-1),r=(i+1)*t+(e-1),s=(i+1)*t+e,o=(i+1)*(t-1)+e;a.push(n,r,o),a.push(r,s,o)}function v(t,e,n,i,r){const s=Math.cos(t),a=Math.sin(t),o=n/e*t,l=Math.cos(o);r.x=i*(2+l)*.5*s,r.y=i*(2+l)*a*.5,r.z=i*Math.sin(o)*.5}this.setIndex(a),this.setAttribute(\"position\",new qr(o,3)),this.setAttribute(\"normal\",new qr(l,3)),this.setAttribute(\"uv\",new qr(c,2))}}class au extends rs{constructor(t,e=64,n=1,i=8,r=!1){super(),this.type=\"TubeGeometry\",this.parameters={path:t,tubularSegments:e,radius:n,radialSegments:i,closed:r};const s=t.computeFrenetFrames(e,r);this.tangents=s.tangents,this.normals=s.normals,this.binormals=s.binormals;const a=new oi,o=new oi,l=new Zn;let c=new oi;const u=[],h=[],d=[],p=[];function f(r){c=t.getPointAt(r/e,c);const l=s.normals[r],d=s.binormals[r];for(let t=0;t\u003c=i;t++){const e=t/i*Math.PI*2,r=Math.sin(e),s=-Math.cos(e);o.x=s*l.x+r*d.x,o.y=s*l.y+r*d.y,o.z=s*l.z+r*d.z,o.normalize(),h.push(o.x,o.y,o.z),a.x=c.x+n*o.x,a.y=c.y+n*o.y,a.z=c.z+n*o.z,u.push(a.x,a.y,a.z)}}!function(){for(let t=0;t\u003ce;t++)f(t);f(!1===r?e:0),function(){for(let t=0;t\u003c=e;t++)for(let n=0;n\u003c=i;n++)l.x=t/e,l.y=n/i,d.push(l.x,l.y)}(),function(){for(let t=1;t\u003c=e;t++)for(let e=1;e\u003c=i;e++){const n=(i+1)*(t-1)+(e-1),r=(i+1)*t+(e-1),s=(i+1)*t+e,a=(i+1)*(t-1)+e;p.push(n,r,a),p.push(r,s,a)}}()}(),this.setIndex(p),this.setAttribute(\"position\",new qr(u,3)),this.setAttribute(\"normal\",new qr(h,3)),this.setAttribute(\"uv\",new qr(d,2))}toJSON(){const t=super.toJSON();return t.path=this.parameters.path.toJSON(),t}}class ou extends rs{constructor(t){if(super(),this.type=\"WireframeGeometry\",!0===t.isGeometry)return void console.error(\"THREE.WireframeGeometry no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.\");const e=[],n=[0,0],i={},r=new oi;if(null!==t.index){const s=t.attributes.position,a=t.index;let o=t.groups;0===o.length\u0026\u0026(o=[{start:0,count:a.count,materialIndex:0}]);for(let t=0,e=o.length;t\u003ce;++t){const e=o[t],r=e.start;for(let t=r,s=r+e.count;t\u003cs;t+=3)for(let e=0;e\u003c3;e++){const r=a.getX(t+e),s=a.getX(t+(e+1)%3);n[0]=Math.min(r,s),n[1]=Math.max(r,s);const o=n[0]+\",\"+n[1];void 0===i[o]\u0026\u0026(i[o]={index1:n[0],index2:n[1]})}}for(const t in i){const n=i[t];r.fromBufferAttribute(s,n.index1),e.push(r.x,r.y,r.z),r.fromBufferAttribute(s,n.index2),e.push(r.x,r.y,r.z)}}else{const n=t.attributes.position;for(let t=0,i=n.count/3;t\u003ci;t++)for(let i=0;i\u003c3;i++){const s=3*t+i;r.fromBufferAttribute(n,s),e.push(r.x,r.y,r.z);const a=3*t+(i+1)%3;r.fromBufferAttribute(n,a),e.push(r.x,r.y,r.z)}}this.setAttribute(\"position\",new qr(e,3))}}var lu=Object.freeze({__proto__:null,BoxGeometry:Ss,BoxBufferGeometry:Ss,CircleGeometry:cc,CircleBufferGeometry:cc,ConeGeometry:hc,ConeBufferGeometry:hc,CylinderGeometry:uc,CylinderBufferGeometry:uc,DodecahedronGeometry:pc,DodecahedronBufferGeometry:pc,EdgesGeometry:yc,ExtrudeGeometry:Xc,ExtrudeBufferGeometry:Xc,IcosahedronGeometry:Zc,IcosahedronBufferGeometry:Zc,LatheGeometry:Jc,LatheBufferGeometry:Jc,OctahedronGeometry:Qc,OctahedronBufferGeometry:Qc,ParametricGeometry:Kc,ParametricBufferGeometry:Kc,PlaneGeometry:Hs,PlaneBufferGeometry:Hs,PolyhedronGeometry:dc,PolyhedronBufferGeometry:dc,RingGeometry:$c,RingBufferGeometry:$c,ShapeGeometry:tu,ShapeBufferGeometry:tu,SphereGeometry:eu,SphereBufferGeometry:eu,TetrahedronGeometry:nu,TetrahedronBufferGeometry:nu,TextGeometry:iu,TextBufferGeometry:iu,TorusGeometry:ru,TorusBufferGeometry:ru,TorusKnotGeometry:su,TorusKnotBufferGeometry:su,TubeGeometry:au,TubeBufferGeometry:au,WireframeGeometry:ou});class cu extends Er{constructor(t){super(),this.type=\"ShadowMaterial\",this.color=new Ir(0),this.transparent=!0,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this}}cu.prototype.isShadowMaterial=!0;class uu extends Ls{constructor(t){super(t),this.type=\"RawShaderMaterial\"}}uu.prototype.isRawShaderMaterial=!0;class hu extends Er{constructor(t){super(),this.defines={STANDARD:\"\"},this.type=\"MeshStandardMaterial\",this.color=new Ir(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 Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.vertexTangents=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\"\"},this.color.copy(t.color),this.roughness=t.roughness,this.metalness=t.metalness,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.roughnessMap=t.roughnessMap,this.metalnessMap=t.metalnessMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.envMapIntensity=t.envMapIntensity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this.vertexTangents=t.vertexTangents,this}}hu.prototype.isMeshStandardMaterial=!0;class du extends hu{constructor(t){super(),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.type=\"MeshPhysicalMaterial\",this.clearcoat=0,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new Zn(1,1),this.clearcoatNormalMap=null,this.reflectivity=.5,Object.defineProperty(this,\"ior\",{get:function(){return(1+.4*this.reflectivity)/(1-.4*this.reflectivity)},set:function(t){this.reflectivity=kn(2.5*(t-1)/(t+1),0,1)}}),this.sheen=null,this.transmission=0,this.transmissionMap=null,this.thickness=.01,this.thicknessMap=null,this.attenuationDistance=0,this.attenuationColor=new Ir(1,1,1),this.setValues(t)}copy(t){return super.copy(t),this.defines={STANDARD:\"\",PHYSICAL:\"\"},this.clearcoat=t.clearcoat,this.clearcoatMap=t.clearcoatMap,this.clearcoatRoughness=t.clearcoatRoughness,this.clearcoatRoughnessMap=t.clearcoatRoughnessMap,this.clearcoatNormalMap=t.clearcoatNormalMap,this.clearcoatNormalScale.copy(t.clearcoatNormalScale),this.reflectivity=t.reflectivity,t.sheen?this.sheen=(this.sheen||new Ir).copy(t.sheen):this.sheen=null,this.transmission=t.transmission,this.transmissionMap=t.transmissionMap,this.thickness=t.thickness,this.thicknessMap=t.thicknessMap,this.attenuationDistance=t.attenuationDistance,this.attenuationColor.copy(t.attenuationColor),this}}du.prototype.isMeshPhysicalMaterial=!0;class pu extends Er{constructor(t){super(),this.type=\"MeshPhongMaterial\",this.color=new Ir(16777215),this.specular=new Ir(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Z,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.specular.copy(t.specular),this.shininess=t.shininess,this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}pu.prototype.isMeshPhongMaterial=!0;class fu extends Er{constructor(t){super(),this.defines={TOON:\"\"},this.type=\"MeshToonMaterial\",this.color=new Ir(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.gradientMap=t.gradientMap,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this}}fu.prototype.isMeshToonMaterial=!0;class mu extends Er{constructor(t){super(),this.type=\"MeshNormalMaterial\",this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}mu.prototype.isMeshNormalMaterial=!0;class gu extends Er{constructor(t){super(),this.type=\"MeshLambertMaterial\",this.color=new Ir(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Ir(0),this.emissiveIntensity=1,this.emissiveMap=null,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.combine=Z,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.morphTargets=!1,this.morphNormals=!1,this.setValues(t)}copy(t){return super.copy(t),this.color.copy(t.color),this.map=t.map,this.lightMap=t.lightMap,this.lightMapIntensity=t.lightMapIntensity,this.aoMap=t.aoMap,this.aoMapIntensity=t.aoMapIntensity,this.emissive.copy(t.emissive),this.emissiveMap=t.emissiveMap,this.emissiveIntensity=t.emissiveIntensity,this.specularMap=t.specularMap,this.alphaMap=t.alphaMap,this.envMap=t.envMap,this.combine=t.combine,this.reflectivity=t.reflectivity,this.refractionRatio=t.refractionRatio,this.wireframe=t.wireframe,this.wireframeLinewidth=t.wireframeLinewidth,this.wireframeLinecap=t.wireframeLinecap,this.wireframeLinejoin=t.wireframeLinejoin,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this}}gu.prototype.isMeshLambertMaterial=!0;class vu extends Er{constructor(t){super(),this.defines={MATCAP:\"\"},this.type=\"MeshMatcapMaterial\",this.color=new Ir(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=on,this.normalScale=new Zn(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.morphTargets=!1,this.morphNormals=!1,this.flatShading=!1,this.setValues(t)}copy(t){return super.copy(t),this.defines={MATCAP:\"\"},this.color.copy(t.color),this.matcap=t.matcap,this.map=t.map,this.bumpMap=t.bumpMap,this.bumpScale=t.bumpScale,this.normalMap=t.normalMap,this.normalMapType=t.normalMapType,this.normalScale.copy(t.normalScale),this.displacementMap=t.displacementMap,this.displacementScale=t.displacementScale,this.displacementBias=t.displacementBias,this.alphaMap=t.alphaMap,this.morphTargets=t.morphTargets,this.morphNormals=t.morphNormals,this.flatShading=t.flatShading,this}}vu.prototype.isMeshMatcapMaterial=!0;class yu extends Gl{constructor(t){super(),this.type=\"LineDashedMaterial\",this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(t)}copy(t){return super.copy(t),this.scale=t.scale,this.dashSize=t.dashSize,this.gapSize=t.gapSize,this}}yu.prototype.isLineDashedMaterial=!0;var xu=Object.freeze({__proto__:null,ShadowMaterial:cu,SpriteMaterial:al,RawShaderMaterial:uu,ShaderMaterial:Ls,PointsMaterial:Kl,MeshPhysicalMaterial:du,MeshStandardMaterial:hu,MeshPhongMaterial:pu,MeshToonMaterial:fu,MeshNormalMaterial:mu,MeshLambertMaterial:gu,MeshDepthMaterial:Uo,MeshDistanceMaterial:Go,MeshBasicMaterial:Nr,MeshMatcapMaterial:vu,LineDashedMaterial:yu,LineBasicMaterial:Gl,Material:Er});const _u={arraySlice:function(t,e,n){return _u.isTypedArray(t)?new t.constructor(t.subarray(e,void 0!==n?n:t.length)):t.slice(e,n)},convertArray:function(t,e,n){return!t||!n\u0026\u0026t.constructor===e?t:\"number\"==typeof e.BYTES_PER_ELEMENT?new e(t):Array.prototype.slice.call(t)},isTypedArray:function(t){return ArrayBuffer.isView(t)\u0026\u0026!(t instanceof DataView)},getKeyframeOrder:function(t){const e=t.length,n=new Array(e);for(let t=0;t!==e;++t)n[t]=t;return n.sort((function(e,n){return t[e]-t[n]})),n},sortedArray:function(t,e,n){const i=t.length,r=new t.constructor(i);for(let s=0,a=0;a!==i;++s){const i=n[s]*e;for(let n=0;n!==e;++n)r[a++]=t[i+n]}return r},flattenJSON:function(t,e,n,i){let r=1,s=t[0];for(;void 0!==s\u0026\u0026void 0===s[i];)s=t[r++];if(void 0===s)return;let a=s[i];if(void 0!==a)if(Array.isArray(a))do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),n.push.apply(n,a)),s=t[r++]}while(void 0!==s);else if(void 0!==a.toArray)do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),a.toArray(n,n.length)),s=t[r++]}while(void 0!==s);else do{a=s[i],void 0!==a\u0026\u0026(e.push(s.time),n.push(a)),s=t[r++]}while(void 0!==s)},subclip:function(t,e,n,i,r=30){const s=t.clone();s.name=e;const a=[];for(let t=0;t\u003cs.tracks.length;++t){const e=s.tracks[t],o=e.getValueSize(),l=[],c=[];for(let t=0;t\u003ce.times.length;++t){const s=e.times[t]*r;if(!(s\u003cn||s\u003e=i)){l.push(e.times[t]);for(let n=0;n\u003co;++n)c.push(e.values[t*o+n])}}0!==l.length\u0026\u0026(e.times=_u.convertArray(l,e.times.constructor),e.values=_u.convertArray(c,e.values.constructor),a.push(e))}s.tracks=a;let o=1/0;for(let t=0;t\u003cs.tracks.length;++t)o\u003es.tracks[t].times[0]\u0026\u0026(o=s.tracks[t].times[0]);for(let t=0;t\u003cs.tracks.length;++t)s.tracks[t].shift(-1*o);return s.resetDuration(),s},makeClipAdditive:function(t,e=0,n=t,i=30){i\u003c=0\u0026\u0026(i=30);const r=n.tracks.length,s=e/i;for(let e=0;e\u003cr;++e){const i=n.tracks[e],r=i.ValueTypeName;if(\"bool\"===r||\"string\"===r)continue;const a=t.tracks.find((function(t){return t.name===i.name\u0026\u0026t.ValueTypeName===r}));if(void 0===a)continue;let o=0;const l=i.getValueSize();i.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline\u0026\u0026(o=l/3);let c=0;const u=a.getValueSize();a.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline\u0026\u0026(c=u/3);const h=i.times.length-1;let d;if(s\u003c=i.times[0]){const t=o,e=l-o;d=_u.arraySlice(i.values,t,e)}else if(s\u003e=i.times[h]){const t=h*l+o,e=t+l-o;d=_u.arraySlice(i.values,t,e)}else{const t=i.createInterpolant(),e=o,n=l-o;t.evaluate(s),d=_u.arraySlice(t.resultBuffer,e,n)}if(\"quaternion\"===r){(new ai).fromArray(d).normalize().conjugate().toArray(d)}const p=a.times.length;for(let t=0;t\u003cp;++t){const e=t*u+c;if(\"quaternion\"===r)ai.multiplyQuaternionsFlat(a.values,e,d,0,a.values,e);else{const t=u-2*c;for(let n=0;n\u003ct;++n)a.values[e+n]-=d[n]}}}return t.blendMode=qe,t}};class bu{constructor(t,e,n,i){this.parameterPositions=t,this._cachedIndex=0,this.resultBuffer=void 0!==i?i:new e.constructor(n),this.sampleValues=e,this.valueSize=n,this.settings=null,this.DefaultSettings_={}}evaluate(t){const e=this.parameterPositions;let n=this._cachedIndex,i=e[n],r=e[n-1];t:{e:{let s;n:{i:if(!(t\u003ci)){for(let s=n+2;;){if(void 0===i){if(t\u003cr)break i;return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,t,r)}if(n===s)break;if(r=i,i=e[++n],t\u003ci)break e}s=e.length;break n}if(t\u003e=r)break t;{const a=e[1];t\u003ca\u0026\u0026(n=2,r=a);for(let s=n-2;;){if(void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(n===s)break;if(i=r,r=e[--n-1],t\u003e=r)break e}s=n,n=0}}for(;n\u003cs;){const i=n+s\u003e\u003e\u003e1;t\u003ce[i]?s=i:n=i+1}if(i=e[n],r=e[n-1],void 0===r)return this._cachedIndex=0,this.beforeStart_(0,t,i);if(void 0===i)return n=e.length,this._cachedIndex=n,this.afterEnd_(n-1,r,t)}this._cachedIndex=n,this.intervalChanged_(n,r,i)}return this.interpolate_(n,r,t,i)}getSettings_(){return this.settings||this.DefaultSettings_}copySampleValue_(t){const e=this.resultBuffer,n=this.sampleValues,i=this.valueSize,r=t*i;for(let t=0;t!==i;++t)e[t]=n[r+t];return e}interpolate_(){throw new Error(\"call to abstract method\")}intervalChanged_(){}}bu.prototype.beforeStart_=bu.prototype.copySampleValue_,bu.prototype.afterEnd_=bu.prototype.copySampleValue_;class wu extends bu{constructor(t,e,n,i){super(t,e,n,i),this._weightPrev=-0,this._offsetPrev=-0,this._weightNext=-0,this._offsetNext=-0,this.DefaultSettings_={endingStart:ke,endingEnd:ke}}intervalChanged_(t,e,n){const i=this.parameterPositions;let r=t-2,s=t+1,a=i[r],o=i[s];if(void 0===a)switch(this.getSettings_().endingStart){case Ve:r=t,a=2*e-n;break;case We:r=i.length-2,a=e+i[r]-i[r+1];break;default:r=t,a=n}if(void 0===o)switch(this.getSettings_().endingEnd){case Ve:s=t,o=2*n-e;break;case We:s=1,o=n+i[1]-i[0];break;default:s=t-1,o=e}const l=.5*(n-e),c=this.valueSize;this._weightPrev=l/(e-a),this._weightNext=l/(o-n),this._offsetPrev=r*c,this._offsetNext=s*c}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=this._offsetPrev,u=this._offsetNext,h=this._weightPrev,d=this._weightNext,p=(n-e)/(i-e),f=p*p,m=f*p,g=-h*m+2*h*f-h*p,v=(1+h)*m+(-1.5-2*h)*f+(-.5+h)*p+1,y=(-1-d)*m+(1.5+d)*f+.5*p,x=d*m-d*f;for(let t=0;t!==a;++t)r[t]=g*s[c+t]+v*s[l+t]+y*s[o+t]+x*s[u+t];return r}}class Mu extends bu{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=t*a,l=o-a,c=(n-e)/(i-e),u=1-c;for(let t=0;t!==a;++t)r[t]=s[l+t]*u+s[o+t]*c;return r}}class Su extends bu{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t){return this.copySampleValue_(t-1)}}class Tu{constructor(t,e,n,i){if(void 0===t)throw new Error(\"THREE.KeyframeTrack: track name is undefined\");if(void 0===e||0===e.length)throw new Error(\"THREE.KeyframeTrack: no keyframes in track named \"+t);this.name=t,this.times=_u.convertArray(e,this.TimeBufferType),this.values=_u.convertArray(n,this.ValueBufferType),this.setInterpolation(i||this.DefaultInterpolation)}static toJSON(t){const e=t.constructor;let n;if(e.toJSON!==this.toJSON)n=e.toJSON(t);else{n={name:t.name,times:_u.convertArray(t.times,Array),values:_u.convertArray(t.values,Array)};const e=t.getInterpolation();e!==t.DefaultInterpolation\u0026\u0026(n.interpolation=e)}return n.type=t.ValueTypeName,n}InterpolantFactoryMethodDiscrete(t){return new Su(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodLinear(t){return new Mu(this.times,this.values,this.getValueSize(),t)}InterpolantFactoryMethodSmooth(t){return new wu(this.times,this.values,this.getValueSize(),t)}setInterpolation(t){let e;switch(t){case He:e=this.InterpolantFactoryMethodDiscrete;break;case Ue:e=this.InterpolantFactoryMethodLinear;break;case Ge:e=this.InterpolantFactoryMethodSmooth}if(void 0===e){const e=\"unsupported interpolation for \"+this.ValueTypeName+\" keyframe track named \"+this.name;if(void 0===this.createInterpolant){if(t===this.DefaultInterpolation)throw new Error(e);this.setInterpolation(this.DefaultInterpolation)}return console.warn(\"THREE.KeyframeTrack:\",e),this}return this.createInterpolant=e,this}getInterpolation(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return He;case this.InterpolantFactoryMethodLinear:return Ue;case this.InterpolantFactoryMethodSmooth:return Ge}}getValueSize(){return this.values.length/this.times.length}shift(t){if(0!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]+=t}return this}scale(t){if(1!==t){const e=this.times;for(let n=0,i=e.length;n!==i;++n)e[n]*=t}return this}trim(t,e){const n=this.times,i=n.length;let r=0,s=i-1;for(;r!==i\u0026\u0026n[r]\u003ct;)++r;for(;-1!==s\u0026\u0026n[s]\u003ee;)--s;if(++s,0!==r||s!==i){r\u003e=s\u0026\u0026(s=Math.max(s,1),r=s-1);const t=this.getValueSize();this.times=_u.arraySlice(n,r,s),this.values=_u.arraySlice(this.values,r*t,s*t)}return this}validate(){let t=!0;const e=this.getValueSize();e-Math.floor(e)!=0\u0026\u0026(console.error(\"THREE.KeyframeTrack: Invalid value size in track.\",this),t=!1);const n=this.times,i=this.values,r=n.length;0===r\u0026\u0026(console.error(\"THREE.KeyframeTrack: Track is empty.\",this),t=!1);let s=null;for(let e=0;e!==r;e++){const i=n[e];if(\"number\"==typeof i\u0026\u0026isNaN(i)){console.error(\"THREE.KeyframeTrack: Time is not a valid number.\",this,e,i),t=!1;break}if(null!==s\u0026\u0026s\u003ei){console.error(\"THREE.KeyframeTrack: Out of order keys.\",this,e,i,s),t=!1;break}s=i}if(void 0!==i\u0026\u0026_u.isTypedArray(i))for(let e=0,n=i.length;e!==n;++e){const n=i[e];if(isNaN(n)){console.error(\"THREE.KeyframeTrack: Value is not a valid number.\",this,e,n),t=!1;break}}return t}optimize(){const t=_u.arraySlice(this.times),e=_u.arraySlice(this.values),n=this.getValueSize(),i=this.getInterpolation()===Ge,r=t.length-1;let s=1;for(let a=1;a\u003cr;++a){let r=!1;const o=t[a];if(o!==t[a+1]\u0026\u0026(1!==a||o!==t[0]))if(i)r=!0;else{const t=a*n,i=t-n,s=t+n;for(let a=0;a!==n;++a){const n=e[t+a];if(n!==e[i+a]||n!==e[s+a]){r=!0;break}}}if(r){if(a!==s){t[s]=t[a];const i=a*n,r=s*n;for(let t=0;t!==n;++t)e[r+t]=e[i+t]}++s}}if(r\u003e0){t[s]=t[r];for(let t=r*n,i=s*n,a=0;a!==n;++a)e[i+a]=e[t+a];++s}return s!==t.length?(this.times=_u.arraySlice(t,0,s),this.values=_u.arraySlice(e,0,s*n)):(this.times=t,this.values=e),this}clone(){const t=_u.arraySlice(this.times,0),e=_u.arraySlice(this.values,0),n=new(0,this.constructor)(this.name,t,e);return n.createInterpolant=this.createInterpolant,n}}Tu.prototype.TimeBufferType=Float32Array,Tu.prototype.ValueBufferType=Float32Array,Tu.prototype.DefaultInterpolation=Ue;class Eu extends Tu{}Eu.prototype.ValueTypeName=\"bool\",Eu.prototype.ValueBufferType=Array,Eu.prototype.DefaultInterpolation=He,Eu.prototype.InterpolantFactoryMethodLinear=void 0,Eu.prototype.InterpolantFactoryMethodSmooth=void 0;class Au extends Tu{}Au.prototype.ValueTypeName=\"color\";class Lu extends Tu{}Lu.prototype.ValueTypeName=\"number\";class Ru extends bu{constructor(t,e,n,i){super(t,e,n,i)}interpolate_(t,e,n,i){const r=this.resultBuffer,s=this.sampleValues,a=this.valueSize,o=(n-e)/(i-e);let l=t*a;for(let t=l+a;l!==t;l+=4)ai.slerpFlat(r,0,s,l-a,s,l,o);return r}}class Cu extends Tu{InterpolantFactoryMethodLinear(t){return new Ru(this.times,this.values,this.getValueSize(),t)}}Cu.prototype.ValueTypeName=\"quaternion\",Cu.prototype.DefaultInterpolation=Ue,Cu.prototype.InterpolantFactoryMethodSmooth=void 0;class Pu extends Tu{}Pu.prototype.ValueTypeName=\"string\",Pu.prototype.ValueBufferType=Array,Pu.prototype.DefaultInterpolation=He,Pu.prototype.InterpolantFactoryMethodLinear=void 0,Pu.prototype.InterpolantFactoryMethodSmooth=void 0;class Du extends Tu{}Du.prototype.ValueTypeName=\"vector\";class Iu{constructor(t,e=-1,n,i=je){this.name=t,this.tracks=n,this.duration=e,this.blendMode=i,this.uuid=Gn(),this.duration\u003c0\u0026\u0026this.resetDuration()}static parse(t){const e=[],n=t.tracks,i=1/(t.fps||1);for(let t=0,r=n.length;t!==r;++t)e.push(Nu(n[t]).scale(i));const r=new this(t.name,t.duration,e,t.blendMode);return r.uuid=t.uuid,r}static toJSON(t){const e=[],n=t.tracks,i={name:t.name,duration:t.duration,tracks:e,uuid:t.uuid,blendMode:t.blendMode};for(let t=0,i=n.length;t!==i;++t)e.push(Tu.toJSON(n[t]));return i}static CreateFromMorphTargetSequence(t,e,n,i){const r=e.length,s=[];for(let t=0;t\u003cr;t++){let a=[],o=[];a.push((t+r-1)%r,t,(t+1)%r),o.push(0,1,0);const l=_u.getKeyframeOrder(a);a=_u.sortedArray(a,1,l),o=_u.sortedArray(o,1,l),i||0!==a[0]||(a.push(r),o.push(o[0])),s.push(new Lu(\".morphTargetInfluences[\"+e[t].name+\"]\",a,o).scale(1/n))}return new this(t,-1,s)}static findByName(t,e){let n=t;if(!Array.isArray(t)){const e=t;n=e.geometry\u0026\u0026e.geometry.animations||e.animations}for(let t=0;t\u003cn.length;t++)if(n[t].name===e)return n[t];return null}static CreateClipsFromMorphTargetSequences(t,e,n){const i={},r=/^([\\w-]*?)([\\d]+)$/;for(let e=0,n=t.length;e\u003cn;e++){const n=t[e],s=n.name.match(r);if(s\u0026\u0026s.length\u003e1){const t=s[1];let e=i[t];e||(i[t]=e=[]),e.push(n)}}const s=[];for(const t in i)s.push(this.CreateFromMorphTargetSequence(t,i[t],e,n));return s}static parseAnimation(t,e){if(!t)return console.error(\"THREE.AnimationClip: No animation in JSONLoader data.\"),null;const n=function(t,e,n,i,r){if(0!==n.length){const s=[],a=[];_u.flattenJSON(n,s,a,i),0!==s.length\u0026\u0026r.push(new t(e,s,a))}},i=[],r=t.name||\"default\",s=t.fps||30,a=t.blendMode;let o=t.length||-1;const l=t.hierarchy||[];for(let t=0;t\u003cl.length;t++){const r=l[t].keys;if(r\u0026\u00260!==r.length)if(r[0].morphTargets){const t={};let e;for(e=0;e\u003cr.length;e++)if(r[e].morphTargets)for(let n=0;n\u003cr[e].morphTargets.length;n++)t[r[e].morphTargets[n]]=-1;for(const n in t){const t=[],s=[];for(let i=0;i!==r[e].morphTargets.length;++i){const i=r[e];t.push(i.time),s.push(i.morphTarget===n?1:0)}i.push(new Lu(\".morphTargetInfluence[\"+n+\"]\",t,s))}o=t.length*(s||1)}else{const s=\".bones[\"+e[t].name+\"]\";n(Du,s+\".position\",r,\"pos\",i),n(Cu,s+\".quaternion\",r,\"rot\",i),n(Du,s+\".scale\",r,\"scl\",i)}}if(0===i.length)return null;return new this(r,o,i,a)}resetDuration(){let t=0;for(let e=0,n=this.tracks.length;e!==n;++e){const n=this.tracks[e];t=Math.max(t,n.times[n.times.length-1])}return this.duration=t,this}trim(){for(let t=0;t\u003cthis.tracks.length;t++)this.tracks[t].trim(0,this.duration);return this}validate(){let t=!0;for(let e=0;e\u003cthis.tracks.length;e++)t=t\u0026\u0026this.tracks[e].validate();return t}optimize(){for(let t=0;t\u003cthis.tracks.length;t++)this.tracks[t].optimize();return this}clone(){const t=[];for(let e=0;e\u003cthis.tracks.length;e++)t.push(this.tracks[e].clone());return new this.constructor(this.name,this.duration,t,this.blendMode)}toJSON(){return this.constructor.toJSON(this)}}function Nu(t){if(void 0===t.type)throw new Error(\"THREE.KeyframeTrack: track type undefined, can not parse\");const e=function(t){switch(t.toLowerCase()){case\"scalar\":case\"double\":case\"float\":case\"number\":case\"integer\":return Lu;case\"vector\":case\"vector2\":case\"vector3\":case\"vector4\":return Du;case\"color\":return Au;case\"quaternion\":return Cu;case\"bool\":case\"boolean\":return Eu;case\"string\":return Pu}throw new Error(\"THREE.KeyframeTrack: Unsupported typeName: \"+t)}(t.type);if(void 0===t.times){const e=[],n=[];_u.flattenJSON(t.keys,e,n,\"value\"),t.times=e,t.values=n}return void 0!==e.parse?e.parse(t):new e(t.name,t.times,t.values,t.interpolation)}const zu={enabled:!1,files:{},add:function(t,e){!1!==this.enabled\u0026\u0026(this.files[t]=e)},get:function(t){if(!1!==this.enabled)return this.files[t]},remove:function(t){delete this.files[t]},clear:function(){this.files={}}};class Bu{constructor(t,e,n){const i=this;let r=!1,s=0,a=0,o=void 0;const l=[];this.onStart=void 0,this.onLoad=t,this.onProgress=e,this.onError=n,this.itemStart=function(t){a++,!1===r\u0026\u0026void 0!==i.onStart\u0026\u0026i.onStart(t,s,a),r=!0},this.itemEnd=function(t){s++,void 0!==i.onProgress\u0026\u0026i.onProgress(t,s,a),s===a\u0026\u0026(r=!1,void 0!==i.onLoad\u0026\u0026i.onLoad())},this.itemError=function(t){void 0!==i.onError\u0026\u0026i.onError(t)},this.resolveURL=function(t){return o?o(t):t},this.setURLModifier=function(t){return o=t,this},this.addHandler=function(t,e){return l.push(t,e),this},this.removeHandler=function(t){const e=l.indexOf(t);return-1!==e\u0026\u0026l.splice(e,2),this},this.getHandler=function(t){for(let e=0,n=l.length;e\u003cn;e+=2){const n=l[e],i=l[e+1];if(n.global\u0026\u0026(n.lastIndex=0),n.test(t))return i}return null}}}const Ou=new Bu;class Fu{constructor(t){this.manager=void 0!==t?t:Ou,this.crossOrigin=\"anonymous\",this.withCredentials=!1,this.path=\"\",this.resourcePath=\"\",this.requestHeader={}}load(){}loadAsync(t,e){const n=this;return new Promise((function(i,r){n.load(t,i,e,r)}))}parse(){}setCrossOrigin(t){return this.crossOrigin=t,this}setWithCredentials(t){return this.withCredentials=t,this}setPath(t){return this.path=t,this}setResourcePath(t){return this.resourcePath=t,this}setRequestHeader(t){return this.requestHeader=t,this}}const Hu={};class Uu extends Fu{constructor(t){super(t)}load(t,e,n,i){void 0===t\u0026\u0026(t=\"\"),void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=zu.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;if(void 0!==Hu[t])return void Hu[t].push({onLoad:e,onProgress:n,onError:i});const a=t.match(/^data:(.*?)(;base64)?,(.*)$/);let o;if(a){const n=a[1],s=!!a[2];let o=a[3];o=decodeURIComponent(o),s\u0026\u0026(o=atob(o));try{let i;const s=(this.responseType||\"\").toLowerCase();switch(s){case\"arraybuffer\":case\"blob\":const t=new Uint8Array(o.length);for(let e=0;e\u003co.length;e++)t[e]=o.charCodeAt(e);i=\"blob\"===s?new Blob([t.buffer],{type:n}):t.buffer;break;case\"document\":const e=new DOMParser;i=e.parseFromString(o,n);break;case\"json\":i=JSON.parse(o);break;default:i=o}setTimeout((function(){e\u0026\u0026e(i),r.manager.itemEnd(t)}),0)}catch(e){setTimeout((function(){i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)}),0)}}else{Hu[t]=[],Hu[t].push({onLoad:e,onProgress:n,onError:i}),o=new XMLHttpRequest,o.open(\"GET\",t,!0),o.addEventListener(\"load\",(function(e){const n=this.response,i=Hu[t];if(delete Hu[t],200===this.status||0===this.status){0===this.status\u0026\u0026console.warn(\"THREE.FileLoader: HTTP Status 0 received.\"),zu.add(t,n);for(let t=0,e=i.length;t\u003ce;t++){const e=i[t];e.onLoad\u0026\u0026e.onLoad(n)}r.manager.itemEnd(t)}else{for(let t=0,n=i.length;t\u003cn;t++){const n=i[t];n.onError\u0026\u0026n.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}}),!1),o.addEventListener(\"progress\",(function(e){const n=Hu[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onProgress\u0026\u0026i.onProgress(e)}}),!1),o.addEventListener(\"error\",(function(e){const n=Hu[t];delete Hu[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onError\u0026\u0026i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),o.addEventListener(\"abort\",(function(e){const n=Hu[t];delete Hu[t];for(let t=0,i=n.length;t\u003ci;t++){const i=n[t];i.onError\u0026\u0026i.onError(e)}r.manager.itemError(t),r.manager.itemEnd(t)}),!1),void 0!==this.responseType\u0026\u0026(o.responseType=this.responseType),void 0!==this.withCredentials\u0026\u0026(o.withCredentials=this.withCredentials),o.overrideMimeType\u0026\u0026o.overrideMimeType(void 0!==this.mimeType?this.mimeType:\"text/plain\");for(const t in this.requestHeader)o.setRequestHeader(t,this.requestHeader[t]);o.send(null)}return r.manager.itemStart(t),o}setResponseType(t){return this.responseType=t,this}setMimeType(t){return this.mimeType=t,this}}class Gu extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=[];for(let n=0;n\u003ct.length;n++){const i=Iu.parse(t[n]);e.push(i)}return e}}class ku extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=[],a=new ac,o=new Uu(this.manager);o.setPath(this.path),o.setResponseType(\"arraybuffer\"),o.setRequestHeader(this.requestHeader),o.setWithCredentials(r.withCredentials);let l=0;function c(c){o.load(t[c],(function(t){const n=r.parse(t,!0);s[c]={width:n.width,height:n.height,format:n.format,mipmaps:n.mipmaps},l+=1,6===l\u0026\u0026(1===n.mipmapCount\u0026\u0026(a.minFilter=xt),a.image=s,a.format=n.format,a.needsUpdate=!0,e\u0026\u0026e(a))}),n,i)}if(Array.isArray(t))for(let e=0,n=t.length;e\u003cn;++e)c(e);else o.load(t,(function(t){const n=r.parse(t,!0);if(n.isCubemap){const t=n.mipmaps.length/n.mipmapCount;for(let e=0;e\u003ct;e++){s[e]={mipmaps:[]};for(let t=0;t\u003cn.mipmapCount;t++)s[e].mipmaps.push(n.mipmaps[e*n.mipmapCount+t]),s[e].format=n.format,s[e].width=n.width,s[e].height=n.height}a.image=s}else a.image.width=n.width,a.image.height=n.height,a.mipmaps=n.mipmaps;1===n.mipmapCount\u0026\u0026(a.minFilter=xt),a.format=n.format,a.needsUpdate=!0,e\u0026\u0026e(a)}),n,i);return a}}class Vu extends Fu{constructor(t){super(t)}load(t,e,n,i){void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=zu.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;const a=document.createElementNS(\"http://www.w3.org/1999/xhtml\",\"img\");function o(){a.removeEventListener(\"load\",o,!1),a.removeEventListener(\"error\",l,!1),zu.add(t,this),e\u0026\u0026e(this),r.manager.itemEnd(t)}function l(e){a.removeEventListener(\"load\",o,!1),a.removeEventListener(\"error\",l,!1),i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)}return a.addEventListener(\"load\",o,!1),a.addEventListener(\"error\",l,!1),\"data:\"!==t.substr(0,5)\u0026\u0026void 0!==this.crossOrigin\u0026\u0026(a.crossOrigin=this.crossOrigin),r.manager.itemStart(t),a.src=t,a}}class Wu extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=new Ds,s=new Vu(this.manager);s.setCrossOrigin(this.crossOrigin),s.setPath(this.path);let a=0;function o(n){s.load(t[n],(function(t){r.images[n]=t,a++,6===a\u0026\u0026(r.needsUpdate=!0,e\u0026\u0026e(r))}),void 0,i)}for(let e=0;e\u003ct.length;++e)o(e);return r}}class ju extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Dl,a=new Uu(this.manager);return a.setResponseType(\"arraybuffer\"),a.setRequestHeader(this.requestHeader),a.setPath(this.path),a.setWithCredentials(r.withCredentials),a.load(t,(function(t){const n=r.parse(t);n\u0026\u0026(void 0!==n.image?s.image=n.image:void 0!==n.data\u0026\u0026(s.image.width=n.width,s.image.height=n.height,s.image.data=n.data),s.wrapS=void 0!==n.wrapS?n.wrapS:dt,s.wrapT=void 0!==n.wrapT?n.wrapT:dt,s.magFilter=void 0!==n.magFilter?n.magFilter:xt,s.minFilter=void 0!==n.minFilter?n.minFilter:xt,s.anisotropy=void 0!==n.anisotropy?n.anisotropy:1,void 0!==n.encoding\u0026\u0026(s.encoding=n.encoding),void 0!==n.flipY\u0026\u0026(s.flipY=n.flipY),void 0!==n.format\u0026\u0026(s.format=n.format),void 0!==n.type\u0026\u0026(s.type=n.type),void 0!==n.mipmaps\u0026\u0026(s.mipmaps=n.mipmaps,s.minFilter=wt),1===n.mipmapCount\u0026\u0026(s.minFilter=xt),void 0!==n.generateMipmaps\u0026\u0026(s.generateMipmaps=n.generateMipmaps),s.needsUpdate=!0,e\u0026\u0026e(s,n))}),n,i),s}}class qu extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=new ti,s=new Vu(this.manager);return s.setCrossOrigin(this.crossOrigin),s.setPath(this.path),s.load(t,(function(n){r.image=n;const i=t.search(/\\.jpe?g($|\\?)/i)\u003e0||0===t.search(/^data\\:image\\/jpeg/);r.format=i?Ot:Ft,r.needsUpdate=!0,void 0!==e\u0026\u0026e(r)}),n,i),r}}class Xu{constructor(){this.type=\"Curve\",this.arcLengthDivisions=200}getPoint(){return console.warn(\"THREE.Curve: .getPoint() not implemented.\"),null}getPointAt(t,e){const n=this.getUtoTmapping(t);return this.getPoint(n,e)}getPoints(t=5){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPoint(n/t));return e}getSpacedPoints(t=5){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPointAt(n/t));return e}getLength(){const t=this.getLengths();return t[t.length-1]}getLengths(t=this.arcLengthDivisions){if(this.cacheArcLengths\u0026\u0026this.cacheArcLengths.length===t+1\u0026\u0026!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const e=[];let n,i=this.getPoint(0),r=0;e.push(0);for(let s=1;s\u003c=t;s++)n=this.getPoint(s/t),r+=n.distanceTo(i),e.push(r),i=n;return this.cacheArcLengths=e,e}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(t,e){const n=this.getLengths();let i=0;const r=n.length;let s;s=e||t*n[r-1];let a,o=0,l=r-1;for(;o\u003c=l;)if(i=Math.floor(o+(l-o)/2),a=n[i]-s,a\u003c0)o=i+1;else{if(!(a\u003e0)){l=i;break}l=i-1}if(i=l,n[i]===s)return i/(r-1);const c=n[i];return(i+(s-c)/(n[i+1]-c))/(r-1)}getTangent(t,e){let n=t-1e-4,i=t+1e-4;n\u003c0\u0026\u0026(n=0),i\u003e1\u0026\u0026(i=1);const r=this.getPoint(n),s=this.getPoint(i),a=e||(r.isVector2?new Zn:new oi);return a.copy(s).sub(r).normalize(),a}getTangentAt(t,e){const n=this.getUtoTmapping(t);return this.getTangent(n,e)}computeFrenetFrames(t,e){const n=new oi,i=[],r=[],s=[],a=new oi,o=new Fi;for(let e=0;e\u003c=t;e++){const n=e/t;i[e]=this.getTangentAt(n,new oi),i[e].normalize()}r[0]=new oi,s[0]=new oi;let l=Number.MAX_VALUE;const c=Math.abs(i[0].x),u=Math.abs(i[0].y),h=Math.abs(i[0].z);c\u003c=l\u0026\u0026(l=c,n.set(1,0,0)),u\u003c=l\u0026\u0026(l=u,n.set(0,1,0)),h\u003c=l\u0026\u0026n.set(0,0,1),a.crossVectors(i[0],n).normalize(),r[0].crossVectors(i[0],a),s[0].crossVectors(i[0],r[0]);for(let e=1;e\u003c=t;e++){if(r[e]=r[e-1].clone(),s[e]=s[e-1].clone(),a.crossVectors(i[e-1],i[e]),a.length()\u003eNumber.EPSILON){a.normalize();const t=Math.acos(kn(i[e-1].dot(i[e]),-1,1));r[e].applyMatrix4(o.makeRotationAxis(a,t))}s[e].crossVectors(i[e],r[e])}if(!0===e){let e=Math.acos(kn(r[0].dot(r[t]),-1,1));e/=t,i[0].dot(a.crossVectors(r[0],r[t]))\u003e0\u0026\u0026(e=-e);for(let n=1;n\u003c=t;n++)r[n].applyMatrix4(o.makeRotationAxis(i[n],e*n)),s[n].crossVectors(i[n],r[n])}return{tangents:i,normals:r,binormals:s}}clone(){return(new this.constructor).copy(this)}copy(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}toJSON(){const t={metadata:{version:4.5,type:\"Curve\",generator:\"Curve.toJSON\"}};return t.arcLengthDivisions=this.arcLengthDivisions,t.type=this.type,t}fromJSON(t){return this.arcLengthDivisions=t.arcLengthDivisions,this}}class Yu extends Xu{constructor(t=0,e=0,n=1,i=1,r=0,s=2*Math.PI,a=!1,o=0){super(),this.type=\"EllipseCurve\",this.aX=t,this.aY=e,this.xRadius=n,this.yRadius=i,this.aStartAngle=r,this.aEndAngle=s,this.aClockwise=a,this.aRotation=o}getPoint(t,e){const n=e||new Zn,i=2*Math.PI;let r=this.aEndAngle-this.aStartAngle;const s=Math.abs(r)\u003cNumber.EPSILON;for(;r\u003c0;)r+=i;for(;r\u003ei;)r-=i;r\u003cNumber.EPSILON\u0026\u0026(r=s?0:i),!0!==this.aClockwise||s||(r===i?r=-i:r-=i);const a=this.aStartAngle+t*r;let o=this.aX+this.xRadius*Math.cos(a),l=this.aY+this.yRadius*Math.sin(a);if(0!==this.aRotation){const t=Math.cos(this.aRotation),e=Math.sin(this.aRotation),n=o-this.aX,i=l-this.aY;o=n*t-i*e+this.aX,l=n*e+i*t+this.aY}return n.set(o,l)}copy(t){return super.copy(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}toJSON(){const t=super.toJSON();return t.aX=this.aX,t.aY=this.aY,t.xRadius=this.xRadius,t.yRadius=this.yRadius,t.aStartAngle=this.aStartAngle,t.aEndAngle=this.aEndAngle,t.aClockwise=this.aClockwise,t.aRotation=this.aRotation,t}fromJSON(t){return super.fromJSON(t),this.aX=t.aX,this.aY=t.aY,this.xRadius=t.xRadius,this.yRadius=t.yRadius,this.aStartAngle=t.aStartAngle,this.aEndAngle=t.aEndAngle,this.aClockwise=t.aClockwise,this.aRotation=t.aRotation,this}}Yu.prototype.isEllipseCurve=!0;class Zu extends Yu{constructor(t,e,n,i,r,s){super(t,e,n,n,i,r,s),this.type=\"ArcCurve\"}}function Ju(){let t=0,e=0,n=0,i=0;function r(r,s,a,o){t=r,e=a,n=-3*r+3*s-2*a-o,i=2*r-2*s+a+o}return{initCatmullRom:function(t,e,n,i,s){r(e,n,s*(n-t),s*(i-e))},initNonuniformCatmullRom:function(t,e,n,i,s,a,o){let l=(e-t)/s-(n-t)/(s+a)+(n-e)/a,c=(n-e)/a-(i-e)/(a+o)+(i-n)/o;l*=a,c*=a,r(e,n,l,c)},calc:function(r){const s=r*r;return t+e*r+n*s+i*(s*r)}}}Zu.prototype.isArcCurve=!0;const Qu=new oi,Ku=new Ju,$u=new Ju,th=new Ju;class eh extends Xu{constructor(t=[],e=!1,n=\"centripetal\",i=.5){super(),this.type=\"CatmullRomCurve3\",this.points=t,this.closed=e,this.curveType=n,this.tension=i}getPoint(t,e=new oi){const n=e,i=this.points,r=i.length,s=(r-(this.closed?0:1))*t;let a,o,l=Math.floor(s),c=s-l;this.closed?l+=l\u003e0?0:(Math.floor(Math.abs(l)/r)+1)*r:0===c\u0026\u0026l===r-1\u0026\u0026(l=r-2,c=1),this.closed||l\u003e0?a=i[(l-1)%r]:(Qu.subVectors(i[0],i[1]).add(i[0]),a=Qu);const u=i[l%r],h=i[(l+1)%r];if(this.closed||l+2\u003cr?o=i[(l+2)%r]:(Qu.subVectors(i[r-1],i[r-2]).add(i[r-1]),o=Qu),\"centripetal\"===this.curveType||\"chordal\"===this.curveType){const t=\"chordal\"===this.curveType?.5:.25;let e=Math.pow(a.distanceToSquared(u),t),n=Math.pow(u.distanceToSquared(h),t),i=Math.pow(h.distanceToSquared(o),t);n\u003c1e-4\u0026\u0026(n=1),e\u003c1e-4\u0026\u0026(e=n),i\u003c1e-4\u0026\u0026(i=n),Ku.initNonuniformCatmullRom(a.x,u.x,h.x,o.x,e,n,i),$u.initNonuniformCatmullRom(a.y,u.y,h.y,o.y,e,n,i),th.initNonuniformCatmullRom(a.z,u.z,h.z,o.z,e,n,i)}else\"catmullrom\"===this.curveType\u0026\u0026(Ku.initCatmullRom(a.x,u.x,h.x,o.x,this.tension),$u.initCatmullRom(a.y,u.y,h.y,o.y,this.tension),th.initCatmullRom(a.z,u.z,h.z,o.z,this.tension));return n.set(Ku.calc(c),$u.calc(c),th.calc(c)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push(n.clone())}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e\u003cn;e++){const n=this.points[e];t.points.push(n.toArray())}return t.closed=this.closed,t.curveType=this.curveType,t.tension=this.tension,t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push((new oi).fromArray(n))}return this.closed=t.closed,this.curveType=t.curveType,this.tension=t.tension,this}}function nh(t,e,n,i,r){const s=.5*(i-e),a=.5*(r-n),o=t*t;return(2*n-2*i+s+a)*(t*o)+(-3*n+3*i-2*s-a)*o+s*t+n}function ih(t,e,n,i){return function(t,e){const n=1-t;return n*n*e}(t,e)+function(t,e){return 2*(1-t)*t*e}(t,n)+function(t,e){return t*t*e}(t,i)}function rh(t,e,n,i,r){return function(t,e){const n=1-t;return n*n*n*e}(t,e)+function(t,e){const n=1-t;return 3*n*n*t*e}(t,n)+function(t,e){return 3*(1-t)*t*t*e}(t,i)+function(t,e){return t*t*t*e}(t,r)}eh.prototype.isCatmullRomCurve3=!0;class sh extends Xu{constructor(t=new Zn,e=new Zn,n=new Zn,i=new Zn){super(),this.type=\"CubicBezierCurve\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new Zn){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(rh(t,i.x,r.x,s.x,a.x),rh(t,i.y,r.y,s.y,a.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}sh.prototype.isCubicBezierCurve=!0;class ah extends Xu{constructor(t=new oi,e=new oi,n=new oi,i=new oi){super(),this.type=\"CubicBezierCurve3\",this.v0=t,this.v1=e,this.v2=n,this.v3=i}getPoint(t,e=new oi){const n=e,i=this.v0,r=this.v1,s=this.v2,a=this.v3;return n.set(rh(t,i.x,r.x,s.x,a.x),rh(t,i.y,r.y,s.y,a.y),rh(t,i.z,r.z,s.z,a.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this.v3.copy(t.v3),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t.v3=this.v3.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this.v3.fromArray(t.v3),this}}ah.prototype.isCubicBezierCurve3=!0;class oh extends Xu{constructor(t=new Zn,e=new Zn){super(),this.type=\"LineCurve\",this.v1=t,this.v2=e}getPoint(t,e=new Zn){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}getTangent(t,e){const n=e||new Zn;return n.copy(this.v2).sub(this.v1).normalize(),n}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}oh.prototype.isLineCurve=!0;class lh extends Xu{constructor(t=new oi,e=new oi){super(),this.type=\"LineCurve3\",this.isLineCurve3=!0,this.v1=t,this.v2=e}getPoint(t,e=new oi){const n=e;return 1===t?n.copy(this.v2):(n.copy(this.v2).sub(this.v1),n.multiplyScalar(t).add(this.v1)),n}getPointAt(t,e){return this.getPoint(t,e)}copy(t){return super.copy(t),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}class ch extends Xu{constructor(t=new Zn,e=new Zn,n=new Zn){super(),this.type=\"QuadraticBezierCurve\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new Zn){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(ih(t,i.x,r.x,s.x),ih(t,i.y,r.y,s.y)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}ch.prototype.isQuadraticBezierCurve=!0;class uh extends Xu{constructor(t=new oi,e=new oi,n=new oi){super(),this.type=\"QuadraticBezierCurve3\",this.v0=t,this.v1=e,this.v2=n}getPoint(t,e=new oi){const n=e,i=this.v0,r=this.v1,s=this.v2;return n.set(ih(t,i.x,r.x,s.x),ih(t,i.y,r.y,s.y),ih(t,i.z,r.z,s.z)),n}copy(t){return super.copy(t),this.v0.copy(t.v0),this.v1.copy(t.v1),this.v2.copy(t.v2),this}toJSON(){const t=super.toJSON();return t.v0=this.v0.toArray(),t.v1=this.v1.toArray(),t.v2=this.v2.toArray(),t}fromJSON(t){return super.fromJSON(t),this.v0.fromArray(t.v0),this.v1.fromArray(t.v1),this.v2.fromArray(t.v2),this}}uh.prototype.isQuadraticBezierCurve3=!0;class hh extends Xu{constructor(t=[]){super(),this.type=\"SplineCurve\",this.points=t}getPoint(t,e=new Zn){const n=e,i=this.points,r=(i.length-1)*t,s=Math.floor(r),a=r-s,o=i[0===s?s:s-1],l=i[s],c=i[s\u003ei.length-2?i.length-1:s+1],u=i[s\u003ei.length-3?i.length-1:s+2];return n.set(nh(a,o.x,l.x,c.x,u.x),nh(a,o.y,l.y,c.y,u.y)),n}copy(t){super.copy(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.points=[];for(let e=0,n=this.points.length;e\u003cn;e++){const n=this.points[e];t.points.push(n.toArray())}return t}fromJSON(t){super.fromJSON(t),this.points=[];for(let e=0,n=t.points.length;e\u003cn;e++){const n=t.points[e];this.points.push((new Zn).fromArray(n))}return this}}hh.prototype.isSplineCurve=!0;var dh=Object.freeze({__proto__:null,ArcCurve:Zu,CatmullRomCurve3:eh,CubicBezierCurve:sh,CubicBezierCurve3:ah,EllipseCurve:Yu,LineCurve:oh,LineCurve3:lh,QuadraticBezierCurve:ch,QuadraticBezierCurve3:uh,SplineCurve:hh});class ph extends Xu{constructor(){super(),this.type=\"CurvePath\",this.curves=[],this.autoClose=!1}add(t){this.curves.push(t)}closePath(){const t=this.curves[0].getPoint(0),e=this.curves[this.curves.length-1].getPoint(1);t.equals(e)||this.curves.push(new oh(e,t))}getPoint(t){const e=t*this.getLength(),n=this.getCurveLengths();let i=0;for(;i\u003cn.length;){if(n[i]\u003e=e){const t=n[i]-e,r=this.curves[i],s=r.getLength(),a=0===s?0:1-t/s;return r.getPointAt(a)}i++}return null}getLength(){const t=this.getCurveLengths();return t[t.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths\u0026\u0026this.cacheLengths.length===this.curves.length)return this.cacheLengths;const t=[];let e=0;for(let n=0,i=this.curves.length;n\u003ci;n++)e+=this.curves[n].getLength(),t.push(e);return this.cacheLengths=t,t}getSpacedPoints(t=40){const e=[];for(let n=0;n\u003c=t;n++)e.push(this.getPoint(n/t));return this.autoClose\u0026\u0026e.push(e[0]),e}getPoints(t=12){const e=[];let n;for(let i=0,r=this.curves;i\u003cr.length;i++){const s=r[i],a=s\u0026\u0026s.isEllipseCurve?2*t:s\u0026\u0026(s.isLineCurve||s.isLineCurve3)?1:s\u0026\u0026s.isSplineCurve?t*s.points.length:t,o=s.getPoints(a);for(let t=0;t\u003co.length;t++){const i=o[t];n\u0026\u0026n.equals(i)||(e.push(i),n=i)}}return this.autoClose\u0026\u0026e.length\u003e1\u0026\u0026!e[e.length-1].equals(e[0])\u0026\u0026e.push(e[0]),e}copy(t){super.copy(t),this.curves=[];for(let e=0,n=t.curves.length;e\u003cn;e++){const n=t.curves[e];this.curves.push(n.clone())}return this.autoClose=t.autoClose,this}toJSON(){const t=super.toJSON();t.autoClose=this.autoClose,t.curves=[];for(let e=0,n=this.curves.length;e\u003cn;e++){const n=this.curves[e];t.curves.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.autoClose=t.autoClose,this.curves=[];for(let e=0,n=t.curves.length;e\u003cn;e++){const n=t.curves[e];this.curves.push((new dh[n.type]).fromJSON(n))}return this}}class fh extends ph{constructor(t){super(),this.type=\"Path\",this.currentPoint=new Zn,t\u0026\u0026this.setFromPoints(t)}setFromPoints(t){this.moveTo(t[0].x,t[0].y);for(let e=1,n=t.length;e\u003cn;e++)this.lineTo(t[e].x,t[e].y);return this}moveTo(t,e){return this.currentPoint.set(t,e),this}lineTo(t,e){const n=new oh(this.currentPoint.clone(),new Zn(t,e));return this.curves.push(n),this.currentPoint.set(t,e),this}quadraticCurveTo(t,e,n,i){const r=new ch(this.currentPoint.clone(),new Zn(t,e),new Zn(n,i));return this.curves.push(r),this.currentPoint.set(n,i),this}bezierCurveTo(t,e,n,i,r,s){const a=new sh(this.currentPoint.clone(),new Zn(t,e),new Zn(n,i),new Zn(r,s));return this.curves.push(a),this.currentPoint.set(r,s),this}splineThru(t){const e=[this.currentPoint.clone()].concat(t),n=new hh(e);return this.curves.push(n),this.currentPoint.copy(t[t.length-1]),this}arc(t,e,n,i,r,s){const a=this.currentPoint.x,o=this.currentPoint.y;return this.absarc(t+a,e+o,n,i,r,s),this}absarc(t,e,n,i,r,s){return this.absellipse(t,e,n,n,i,r,s),this}ellipse(t,e,n,i,r,s,a,o){const l=this.currentPoint.x,c=this.currentPoint.y;return this.absellipse(t+l,e+c,n,i,r,s,a,o),this}absellipse(t,e,n,i,r,s,a,o){const l=new Yu(t,e,n,i,r,s,a,o);if(this.curves.length\u003e0){const t=l.getPoint(0);t.equals(this.currentPoint)||this.lineTo(t.x,t.y)}this.curves.push(l);const c=l.getPoint(1);return this.currentPoint.copy(c),this}copy(t){return super.copy(t),this.currentPoint.copy(t.currentPoint),this}toJSON(){const t=super.toJSON();return t.currentPoint=this.currentPoint.toArray(),t}fromJSON(t){return super.fromJSON(t),this.currentPoint.fromArray(t.currentPoint),this}}class mh extends fh{constructor(t){super(t),this.uuid=Gn(),this.type=\"Shape\",this.holes=[]}getPointsHoles(t){const e=[];for(let n=0,i=this.holes.length;n\u003ci;n++)e[n]=this.holes[n].getPoints(t);return e}extractPoints(t){return{shape:this.getPoints(t),holes:this.getPointsHoles(t)}}copy(t){super.copy(t),this.holes=[];for(let e=0,n=t.holes.length;e\u003cn;e++){const n=t.holes[e];this.holes.push(n.clone())}return this}toJSON(){const t=super.toJSON();t.uuid=this.uuid,t.holes=[];for(let e=0,n=this.holes.length;e\u003cn;e++){const n=this.holes[e];t.holes.push(n.toJSON())}return t}fromJSON(t){super.fromJSON(t),this.uuid=t.uuid,this.holes=[];for(let e=0,n=t.holes.length;e\u003cn;e++){const n=t.holes[e];this.holes.push((new fh).fromJSON(n))}return this}}class gh extends cr{constructor(t,e=1){super(),this.type=\"Light\",this.color=new Ir(t),this.intensity=e}dispose(){}copy(t){return super.copy(t),this.color.copy(t.color),this.intensity=t.intensity,this}toJSON(t){const e=super.toJSON(t);return e.object.color=this.color.getHex(),e.object.intensity=this.intensity,void 0!==this.groundColor\u0026\u0026(e.object.groundColor=this.groundColor.getHex()),void 0!==this.distance\u0026\u0026(e.object.distance=this.distance),void 0!==this.angle\u0026\u0026(e.object.angle=this.angle),void 0!==this.decay\u0026\u0026(e.object.decay=this.decay),void 0!==this.penumbra\u0026\u0026(e.object.penumbra=this.penumbra),void 0!==this.shadow\u0026\u0026(e.object.shadow=this.shadow.toJSON()),e}}gh.prototype.isLight=!0;class vh extends gh{constructor(t,e,n){super(t,n),this.type=\"HemisphereLight\",this.position.copy(cr.DefaultUp),this.updateMatrix(),this.groundColor=new Ir(e)}copy(t){return gh.prototype.copy.call(this,t),this.groundColor.copy(t.groundColor),this}}vh.prototype.isHemisphereLight=!0;const yh=new Fi,xh=new oi,_h=new oi;class bh{constructor(t){this.camera=t,this.bias=0,this.normalBias=0,this.radius=1,this.mapSize=new Zn(512,512),this.map=null,this.mapPass=null,this.matrix=new Fi,this.autoUpdate=!0,this.needsUpdate=!1,this._frustum=new Bs,this._frameExtents=new Zn(1,1),this._viewportCount=1,this._viewports=[new ni(0,0,1,1)]}getViewportCount(){return this._viewportCount}getFrustum(){return this._frustum}updateMatrices(t){const e=this.camera,n=this.matrix;xh.setFromMatrixPosition(t.matrixWorld),e.position.copy(xh),_h.setFromMatrixPosition(t.target.matrixWorld),e.lookAt(_h),e.updateMatrixWorld(),yh.multiplyMatrices(e.projectionMatrix,e.matrixWorldInverse),this._frustum.setFromProjectionMatrix(yh),n.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1),n.multiply(e.projectionMatrix),n.multiply(e.matrixWorldInverse)}getViewport(t){return this._viewports[t]}getFrameExtents(){return this._frameExtents}dispose(){this.map\u0026\u0026this.map.dispose(),this.mapPass\u0026\u0026this.mapPass.dispose()}copy(t){return this.camera=t.camera.clone(),this.bias=t.bias,this.radius=t.radius,this.mapSize.copy(t.mapSize),this}clone(){return(new this.constructor).copy(this)}toJSON(){const t={};return 0!==this.bias\u0026\u0026(t.bias=this.bias),0!==this.normalBias\u0026\u0026(t.normalBias=this.normalBias),1!==this.radius\u0026\u0026(t.radius=this.radius),512===this.mapSize.x\u0026\u0026512===this.mapSize.y||(t.mapSize=this.mapSize.toArray()),t.camera=this.camera.toJSON(!1).object,delete t.camera.matrix,t}}class wh extends bh{constructor(){super(new Cs(50,1,.5,500)),this.focus=1}updateMatrices(t){const e=this.camera,n=2*Un*t.angle*this.focus,i=this.mapSize.width/this.mapSize.height,r=t.distance||e.far;n===e.fov\u0026\u0026i===e.aspect\u0026\u0026r===e.far||(e.fov=n,e.aspect=i,e.far=r,e.updateProjectionMatrix()),super.updateMatrices(t)}copy(t){return super.copy(t),this.focus=t.focus,this}}wh.prototype.isSpotLightShadow=!0;class Mh extends gh{constructor(t,e,n=0,i=Math.PI/3,r=0,s=1){super(t,e),this.type=\"SpotLight\",this.position.copy(cr.DefaultUp),this.updateMatrix(),this.target=new cr,this.distance=n,this.angle=i,this.penumbra=r,this.decay=s,this.shadow=new wh}get power(){return this.intensity*Math.PI}set power(t){this.intensity=t/Math.PI}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.angle=t.angle,this.penumbra=t.penumbra,this.decay=t.decay,this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}Mh.prototype.isSpotLight=!0;const Sh=new Fi,Th=new oi,Eh=new oi;class Ah extends bh{constructor(){super(new Cs(90,1,.5,500)),this._frameExtents=new Zn(4,2),this._viewportCount=6,this._viewports=[new ni(2,1,1,1),new ni(0,1,1,1),new ni(3,1,1,1),new ni(1,1,1,1),new ni(3,0,1,1),new ni(1,0,1,1)],this._cubeDirections=[new oi(1,0,0),new oi(-1,0,0),new oi(0,0,1),new oi(0,0,-1),new oi(0,1,0),new oi(0,-1,0)],this._cubeUps=[new oi(0,1,0),new oi(0,1,0),new oi(0,1,0),new oi(0,1,0),new oi(0,0,1),new oi(0,0,-1)]}updateMatrices(t,e=0){const n=this.camera,i=this.matrix,r=t.distance||n.far;r!==n.far\u0026\u0026(n.far=r,n.updateProjectionMatrix()),Th.setFromMatrixPosition(t.matrixWorld),n.position.copy(Th),Eh.copy(n.position),Eh.add(this._cubeDirections[e]),n.up.copy(this._cubeUps[e]),n.lookAt(Eh),n.updateMatrixWorld(),i.makeTranslation(-Th.x,-Th.y,-Th.z),Sh.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse),this._frustum.setFromProjectionMatrix(Sh)}}Ah.prototype.isPointLightShadow=!0;class Lh extends gh{constructor(t,e,n=0,i=1){super(t,e),this.type=\"PointLight\",this.distance=n,this.decay=i,this.shadow=new Ah}get power(){return 4*this.intensity*Math.PI}set power(t){this.intensity=t/(4*Math.PI)}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.distance=t.distance,this.decay=t.decay,this.shadow=t.shadow.clone(),this}}Lh.prototype.isPointLight=!0;class Rh extends Rs{constructor(t=-1,e=1,n=1,i=-1,r=.1,s=2e3){super(),this.type=\"OrthographicCamera\",this.zoom=1,this.view=null,this.left=t,this.right=e,this.top=n,this.bottom=i,this.near=r,this.far=s,this.updateProjectionMatrix()}copy(t,e){return super.copy(t,e),this.left=t.left,this.right=t.right,this.top=t.top,this.bottom=t.bottom,this.near=t.near,this.far=t.far,this.zoom=t.zoom,this.view=null===t.view?null:Object.assign({},t.view),this}setViewOffset(t,e,n,i,r,s){null===this.view\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=t,this.view.fullHeight=e,this.view.offsetX=n,this.view.offsetY=i,this.view.width=r,this.view.height=s,this.updateProjectionMatrix()}clearViewOffset(){null!==this.view\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const t=(this.right-this.left)/(2*this.zoom),e=(this.top-this.bottom)/(2*this.zoom),n=(this.right+this.left)/2,i=(this.top+this.bottom)/2;let r=n-t,s=n+t,a=i+e,o=i-e;if(null!==this.view\u0026\u0026this.view.enabled){const t=(this.right-this.left)/this.view.fullWidth/this.zoom,e=(this.top-this.bottom)/this.view.fullHeight/this.zoom;r+=t*this.view.offsetX,s=r+t*this.view.width,a-=e*this.view.offsetY,o=a-e*this.view.height}this.projectionMatrix.makeOrthographic(r,s,a,o,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(t){const e=super.toJSON(t);return e.object.zoom=this.zoom,e.object.left=this.left,e.object.right=this.right,e.object.top=this.top,e.object.bottom=this.bottom,e.object.near=this.near,e.object.far=this.far,null!==this.view\u0026\u0026(e.object.view=Object.assign({},this.view)),e}}Rh.prototype.isOrthographicCamera=!0;class Ch extends bh{constructor(){super(new Rh(-5,5,5,-5,.5,500))}}Ch.prototype.isDirectionalLightShadow=!0;class Ph extends gh{constructor(t,e){super(t,e),this.type=\"DirectionalLight\",this.position.copy(cr.DefaultUp),this.updateMatrix(),this.target=new cr,this.shadow=new Ch}dispose(){this.shadow.dispose()}copy(t){return super.copy(t),this.target=t.target.clone(),this.shadow=t.shadow.clone(),this}}Ph.prototype.isDirectionalLight=!0;class Dh extends gh{constructor(t,e){super(t,e),this.type=\"AmbientLight\"}}Dh.prototype.isAmbientLight=!0;class Ih extends gh{constructor(t,e,n=10,i=10){super(t,e),this.type=\"RectAreaLight\",this.width=n,this.height=i}copy(t){return super.copy(t),this.width=t.width,this.height=t.height,this}toJSON(t){const e=super.toJSON(t);return e.object.width=this.width,e.object.height=this.height,e}}Ih.prototype.isRectAreaLight=!0;class Nh{constructor(){this.coefficients=[];for(let t=0;t\u003c9;t++)this.coefficients.push(new oi)}set(t){for(let e=0;e\u003c9;e++)this.coefficients[e].copy(t[e]);return this}zero(){for(let t=0;t\u003c9;t++)this.coefficients[t].set(0,0,0);return this}getAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.282095),e.addScaledVector(s[1],.488603*i),e.addScaledVector(s[2],.488603*r),e.addScaledVector(s[3],.488603*n),e.addScaledVector(s[4],n*i*1.092548),e.addScaledVector(s[5],i*r*1.092548),e.addScaledVector(s[6],.315392*(3*r*r-1)),e.addScaledVector(s[7],n*r*1.092548),e.addScaledVector(s[8],.546274*(n*n-i*i)),e}getIrradianceAt(t,e){const n=t.x,i=t.y,r=t.z,s=this.coefficients;return e.copy(s[0]).multiplyScalar(.886227),e.addScaledVector(s[1],1.023328*i),e.addScaledVector(s[2],1.023328*r),e.addScaledVector(s[3],1.023328*n),e.addScaledVector(s[4],.858086*n*i),e.addScaledVector(s[5],.858086*i*r),e.addScaledVector(s[6],.743125*r*r-.247708),e.addScaledVector(s[7],.858086*n*r),e.addScaledVector(s[8],.429043*(n*n-i*i)),e}add(t){for(let e=0;e\u003c9;e++)this.coefficients[e].add(t.coefficients[e]);return this}addScaledSH(t,e){for(let n=0;n\u003c9;n++)this.coefficients[n].addScaledVector(t.coefficients[n],e);return this}scale(t){for(let e=0;e\u003c9;e++)this.coefficients[e].multiplyScalar(t);return this}lerp(t,e){for(let n=0;n\u003c9;n++)this.coefficients[n].lerp(t.coefficients[n],e);return this}equals(t){for(let e=0;e\u003c9;e++)if(!this.coefficients[e].equals(t.coefficients[e]))return!1;return!0}copy(t){return this.set(t.coefficients)}clone(){return(new this.constructor).copy(this)}fromArray(t,e=0){const n=this.coefficients;for(let i=0;i\u003c9;i++)n[i].fromArray(t,e+3*i);return this}toArray(t=[],e=0){const n=this.coefficients;for(let i=0;i\u003c9;i++)n[i].toArray(t,e+3*i);return t}static getBasisAt(t,e){const n=t.x,i=t.y,r=t.z;e[0]=.282095,e[1]=.488603*i,e[2]=.488603*r,e[3]=.488603*n,e[4]=1.092548*n*i,e[5]=1.092548*i*r,e[6]=.315392*(3*r*r-1),e[7]=1.092548*n*r,e[8]=.546274*(n*n-i*i)}}Nh.prototype.isSphericalHarmonics3=!0;class zh extends gh{constructor(t=new Nh,e=1){super(void 0,e),this.sh=t}copy(t){return super.copy(t),this.sh.copy(t.sh),this}fromJSON(t){return this.intensity=t.intensity,this.sh.fromArray(t.sh),this}toJSON(t){const e=super.toJSON(t);return e.object.sh=this.sh.toArray(),e}}zh.prototype.isLightProbe=!0;class Bh extends Fu{constructor(t){super(t),this.textures={}}load(t,e,n,i){const r=this,s=new Uu(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e=this.textures;function n(t){return void 0===e[t]\u0026\u0026console.warn(\"THREE.MaterialLoader: Undefined texture\",t),e[t]}const i=new xu[t.type];if(void 0!==t.uuid\u0026\u0026(i.uuid=t.uuid),void 0!==t.name\u0026\u0026(i.name=t.name),void 0!==t.color\u0026\u0026void 0!==i.color\u0026\u0026i.color.setHex(t.color),void 0!==t.roughness\u0026\u0026(i.roughness=t.roughness),void 0!==t.metalness\u0026\u0026(i.metalness=t.metalness),void 0!==t.sheen\u0026\u0026(i.sheen=(new Ir).setHex(t.sheen)),void 0!==t.emissive\u0026\u0026void 0!==i.emissive\u0026\u0026i.emissive.setHex(t.emissive),void 0!==t.specular\u0026\u0026void 0!==i.specular\u0026\u0026i.specular.setHex(t.specular),void 0!==t.shininess\u0026\u0026(i.shininess=t.shininess),void 0!==t.clearcoat\u0026\u0026(i.clearcoat=t.clearcoat),void 0!==t.clearcoatRoughness\u0026\u0026(i.clearcoatRoughness=t.clearcoatRoughness),void 0!==t.transmission\u0026\u0026(i.transmission=t.transmission),void 0!==t.thickness\u0026\u0026(i.thickness=t.thickness),void 0!==t.attenuationDistance\u0026\u0026(i.attenuationDistance=t.attenuationDistance),void 0!==t.attenuationColor\u0026\u0026void 0!==i.attenuationColor\u0026\u0026i.attenuationColor.setHex(t.attenuationColor),void 0!==t.fog\u0026\u0026(i.fog=t.fog),void 0!==t.flatShading\u0026\u0026(i.flatShading=t.flatShading),void 0!==t.blending\u0026\u0026(i.blending=t.blending),void 0!==t.combine\u0026\u0026(i.combine=t.combine),void 0!==t.side\u0026\u0026(i.side=t.side),void 0!==t.shadowSide\u0026\u0026(i.shadowSide=t.shadowSide),void 0!==t.opacity\u0026\u0026(i.opacity=t.opacity),void 0!==t.transparent\u0026\u0026(i.transparent=t.transparent),void 0!==t.alphaTest\u0026\u0026(i.alphaTest=t.alphaTest),void 0!==t.depthTest\u0026\u0026(i.depthTest=t.depthTest),void 0!==t.depthWrite\u0026\u0026(i.depthWrite=t.depthWrite),void 0!==t.colorWrite\u0026\u0026(i.colorWrite=t.colorWrite),void 0!==t.stencilWrite\u0026\u0026(i.stencilWrite=t.stencilWrite),void 0!==t.stencilWriteMask\u0026\u0026(i.stencilWriteMask=t.stencilWriteMask),void 0!==t.stencilFunc\u0026\u0026(i.stencilFunc=t.stencilFunc),void 0!==t.stencilRef\u0026\u0026(i.stencilRef=t.stencilRef),void 0!==t.stencilFuncMask\u0026\u0026(i.stencilFuncMask=t.stencilFuncMask),void 0!==t.stencilFail\u0026\u0026(i.stencilFail=t.stencilFail),void 0!==t.stencilZFail\u0026\u0026(i.stencilZFail=t.stencilZFail),void 0!==t.stencilZPass\u0026\u0026(i.stencilZPass=t.stencilZPass),void 0!==t.wireframe\u0026\u0026(i.wireframe=t.wireframe),void 0!==t.wireframeLinewidth\u0026\u0026(i.wireframeLinewidth=t.wireframeLinewidth),void 0!==t.wireframeLinecap\u0026\u0026(i.wireframeLinecap=t.wireframeLinecap),void 0!==t.wireframeLinejoin\u0026\u0026(i.wireframeLinejoin=t.wireframeLinejoin),void 0!==t.rotation\u0026\u0026(i.rotation=t.rotation),1!==t.linewidth\u0026\u0026(i.linewidth=t.linewidth),void 0!==t.dashSize\u0026\u0026(i.dashSize=t.dashSize),void 0!==t.gapSize\u0026\u0026(i.gapSize=t.gapSize),void 0!==t.scale\u0026\u0026(i.scale=t.scale),void 0!==t.polygonOffset\u0026\u0026(i.polygonOffset=t.polygonOffset),void 0!==t.polygonOffsetFactor\u0026\u0026(i.polygonOffsetFactor=t.polygonOffsetFactor),void 0!==t.polygonOffsetUnits\u0026\u0026(i.polygonOffsetUnits=t.polygonOffsetUnits),void 0!==t.morphTargets\u0026\u0026(i.morphTargets=t.morphTargets),void 0!==t.morphNormals\u0026\u0026(i.morphNormals=t.morphNormals),void 0!==t.dithering\u0026\u0026(i.dithering=t.dithering),void 0!==t.alphaToCoverage\u0026\u0026(i.alphaToCoverage=t.alphaToCoverage),void 0!==t.premultipliedAlpha\u0026\u0026(i.premultipliedAlpha=t.premultipliedAlpha),void 0!==t.vertexTangents\u0026\u0026(i.vertexTangents=t.vertexTangents),void 0!==t.visible\u0026\u0026(i.visible=t.visible),void 0!==t.toneMapped\u0026\u0026(i.toneMapped=t.toneMapped),void 0!==t.userData\u0026\u0026(i.userData=t.userData),void 0!==t.vertexColors\u0026\u0026(\"number\"==typeof t.vertexColors?i.vertexColors=t.vertexColors\u003e0:i.vertexColors=t.vertexColors),void 0!==t.uniforms)for(const e in t.uniforms){const r=t.uniforms[e];switch(i.uniforms[e]={},r.type){case\"t\":i.uniforms[e].value=n(r.value);break;case\"c\":i.uniforms[e].value=(new Ir).setHex(r.value);break;case\"v2\":i.uniforms[e].value=(new Zn).fromArray(r.value);break;case\"v3\":i.uniforms[e].value=(new oi).fromArray(r.value);break;case\"v4\":i.uniforms[e].value=(new ni).fromArray(r.value);break;case\"m3\":i.uniforms[e].value=(new Jn).fromArray(r.value);break;case\"m4\":i.uniforms[e].value=(new Fi).fromArray(r.value);break;default:i.uniforms[e].value=r.value}}if(void 0!==t.defines\u0026\u0026(i.defines=t.defines),void 0!==t.vertexShader\u0026\u0026(i.vertexShader=t.vertexShader),void 0!==t.fragmentShader\u0026\u0026(i.fragmentShader=t.fragmentShader),void 0!==t.extensions)for(const e in t.extensions)i.extensions[e]=t.extensions[e];if(void 0!==t.shading\u0026\u0026(i.flatShading=1===t.shading),void 0!==t.size\u0026\u0026(i.size=t.size),void 0!==t.sizeAttenuation\u0026\u0026(i.sizeAttenuation=t.sizeAttenuation),void 0!==t.map\u0026\u0026(i.map=n(t.map)),void 0!==t.matcap\u0026\u0026(i.matcap=n(t.matcap)),void 0!==t.alphaMap\u0026\u0026(i.alphaMap=n(t.alphaMap)),void 0!==t.bumpMap\u0026\u0026(i.bumpMap=n(t.bumpMap)),void 0!==t.bumpScale\u0026\u0026(i.bumpScale=t.bumpScale),void 0!==t.normalMap\u0026\u0026(i.normalMap=n(t.normalMap)),void 0!==t.normalMapType\u0026\u0026(i.normalMapType=t.normalMapType),void 0!==t.normalScale){let e=t.normalScale;!1===Array.isArray(e)\u0026\u0026(e=[e,e]),i.normalScale=(new Zn).fromArray(e)}return void 0!==t.displacementMap\u0026\u0026(i.displacementMap=n(t.displacementMap)),void 0!==t.displacementScale\u0026\u0026(i.displacementScale=t.displacementScale),void 0!==t.displacementBias\u0026\u0026(i.displacementBias=t.displacementBias),void 0!==t.roughnessMap\u0026\u0026(i.roughnessMap=n(t.roughnessMap)),void 0!==t.metalnessMap\u0026\u0026(i.metalnessMap=n(t.metalnessMap)),void 0!==t.emissiveMap\u0026\u0026(i.emissiveMap=n(t.emissiveMap)),void 0!==t.emissiveIntensity\u0026\u0026(i.emissiveIntensity=t.emissiveIntensity),void 0!==t.specularMap\u0026\u0026(i.specularMap=n(t.specularMap)),void 0!==t.envMap\u0026\u0026(i.envMap=n(t.envMap)),void 0!==t.envMapIntensity\u0026\u0026(i.envMapIntensity=t.envMapIntensity),void 0!==t.reflectivity\u0026\u0026(i.reflectivity=t.reflectivity),void 0!==t.refractionRatio\u0026\u0026(i.refractionRatio=t.refractionRatio),void 0!==t.lightMap\u0026\u0026(i.lightMap=n(t.lightMap)),void 0!==t.lightMapIntensity\u0026\u0026(i.lightMapIntensity=t.lightMapIntensity),void 0!==t.aoMap\u0026\u0026(i.aoMap=n(t.aoMap)),void 0!==t.aoMapIntensity\u0026\u0026(i.aoMapIntensity=t.aoMapIntensity),void 0!==t.gradientMap\u0026\u0026(i.gradientMap=n(t.gradientMap)),void 0!==t.clearcoatMap\u0026\u0026(i.clearcoatMap=n(t.clearcoatMap)),void 0!==t.clearcoatRoughnessMap\u0026\u0026(i.clearcoatRoughnessMap=n(t.clearcoatRoughnessMap)),void 0!==t.clearcoatNormalMap\u0026\u0026(i.clearcoatNormalMap=n(t.clearcoatNormalMap)),void 0!==t.clearcoatNormalScale\u0026\u0026(i.clearcoatNormalScale=(new Zn).fromArray(t.clearcoatNormalScale)),void 0!==t.transmissionMap\u0026\u0026(i.transmissionMap=n(t.transmissionMap)),void 0!==t.thicknessMap\u0026\u0026(i.thicknessMap=n(t.thicknessMap)),i}setTextures(t){return this.textures=t,this}}class Oh{static decodeText(t){if(\"undefined\"!=typeof TextDecoder)return(new TextDecoder).decode(t);let e=\"\";for(let n=0,i=t.length;n\u003ci;n++)e+=String.fromCharCode(t[n]);try{return decodeURIComponent(escape(e))}catch(t){return e}}static extractUrlBase(t){const e=t.lastIndexOf(\"/\");return-1===e?\"./\":t.substr(0,e+1)}}class Fh extends rs{constructor(){super(),this.type=\"InstancedBufferGeometry\",this.instanceCount=1/0}copy(t){return super.copy(t),this.instanceCount=t.instanceCount,this}clone(){return(new this.constructor).copy(this)}toJSON(){const t=super.toJSON(this);return t.instanceCount=this.instanceCount,t.isInstancedBufferGeometry=!0,t}}Fh.prototype.isInstancedBufferGeometry=!0;class Hh extends Or{constructor(t,e,n,i){\"number\"==typeof n\u0026\u0026(i=n,n=!1,console.error(\"THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument.\")),super(t,e,n),this.meshPerAttribute=i||1}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}toJSON(){const t=super.toJSON();return t.meshPerAttribute=this.meshPerAttribute,t.isInstancedBufferAttribute=!0,t}}Hh.prototype.isInstancedBufferAttribute=!0;class Uh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(r.manager);s.setPath(r.path),s.setRequestHeader(r.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(n){try{e(r.parse(JSON.parse(n)))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}parse(t){const e={},n={};function i(t,i){if(void 0!==e[i])return e[i];const r=t.interleavedBuffers[i],s=function(t,e){if(void 0!==n[e])return n[e];const i=t.arrayBuffers[e],r=new Uint32Array(i).buffer;return n[e]=r,r}(t,r.buffer),a=Jr(r.type,s),o=new il(a,r.stride);return o.uuid=r.uuid,e[i]=o,o}const r=t.isInstancedBufferGeometry?new Fh:new rs,s=t.data.index;if(void 0!==s){const t=Jr(s.type,s.array);r.setIndex(new Or(t,1))}const a=t.data.attributes;for(const e in a){const n=a[e];let s;if(n.isInterleavedBufferAttribute){const e=i(t.data,n.data);s=new sl(e,n.itemSize,n.offset,n.normalized)}else{const t=Jr(n.type,n.array);s=new(n.isInstancedBufferAttribute?Hh:Or)(t,n.itemSize,n.normalized)}void 0!==n.name\u0026\u0026(s.name=n.name),void 0!==n.usage\u0026\u0026s.setUsage(n.usage),void 0!==n.updateRange\u0026\u0026(s.updateRange.offset=n.updateRange.offset,s.updateRange.count=n.updateRange.count),r.setAttribute(e,s)}const o=t.data.morphAttributes;if(o)for(const e in o){const n=o[e],s=[];for(let e=0,r=n.length;e\u003cr;e++){const r=n[e];let a;if(r.isInterleavedBufferAttribute){const e=i(t.data,r.data);a=new sl(e,r.itemSize,r.offset,r.normalized)}else{const t=Jr(r.type,r.array);a=new Or(t,r.itemSize,r.normalized)}void 0!==r.name\u0026\u0026(a.name=r.name),s.push(a)}r.morphAttributes[e]=s}t.data.morphTargetsRelative\u0026\u0026(r.morphTargetsRelative=!0);const l=t.data.groups||t.data.drawcalls||t.data.offsets;if(void 0!==l)for(let t=0,e=l.length;t!==e;++t){const e=l[t];r.addGroup(e.start,e.count,e.materialIndex)}const c=t.data.boundingSphere;if(void 0!==c){const t=new oi;void 0!==c.center\u0026\u0026t.fromArray(c.center),r.boundingSphere=new Ri(t,c.radius)}return t.name\u0026\u0026(r.name=t.name),t.userData\u0026\u0026(r.userData=t.userData),r}}class Gh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=\"\"===this.path?Oh.extractUrlBase(t):this.path;this.resourcePath=this.resourcePath||s;const a=new Uu(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(t,(function(n){let s=null;try{s=JSON.parse(n)}catch(e){return void 0!==i\u0026\u0026i(e),void console.error(\"THREE:ObjectLoader: Can't parse \"+t+\".\",e.message)}const a=s.metadata;void 0!==a\u0026\u0026void 0!==a.type\u0026\u0026\"geometry\"!==a.type.toLowerCase()?r.parse(s,e):console.error(\"THREE.ObjectLoader: Can't load \"+t)}),n,i)}parse(t,e){const n=this.parseAnimations(t.animations),i=this.parseShapes(t.shapes),r=this.parseGeometries(t.geometries,i),s=this.parseImages(t.images,(function(){void 0!==e\u0026\u0026e(l)})),a=this.parseTextures(t.textures,s),o=this.parseMaterials(t.materials,a),l=this.parseObject(t.object,r,o,n),c=this.parseSkeletons(t.skeletons,l);if(this.bindSkeletons(l,c),void 0!==e){let t=!1;for(const e in s)if(s[e]instanceof HTMLImageElement){t=!0;break}!1===t\u0026\u0026e(l)}return l}parseShapes(t){const e={};if(void 0!==t)for(let n=0,i=t.length;n\u003ci;n++){const i=(new mh).fromJSON(t[n]);e[i.uuid]=i}return e}parseSkeletons(t,e){const n={},i={};if(e.traverse((function(t){t.isBone\u0026\u0026(i[t.uuid]=t)})),void 0!==t)for(let e=0,r=t.length;e\u003cr;e++){const r=(new zl).fromJSON(t[e],i);n[r.uuid]=r}return n}parseGeometries(t,e){const n={};let i;if(void 0!==t){const r=new Uh;for(let s=0,a=t.length;s\u003ca;s++){let a;const o=t[s];switch(o.type){case\"PlaneGeometry\":case\"PlaneBufferGeometry\":a=new lu[o.type](o.width,o.height,o.widthSegments,o.heightSegments);break;case\"BoxGeometry\":case\"BoxBufferGeometry\":a=new lu[o.type](o.width,o.height,o.depth,o.widthSegments,o.heightSegments,o.depthSegments);break;case\"CircleGeometry\":case\"CircleBufferGeometry\":a=new lu[o.type](o.radius,o.segments,o.thetaStart,o.thetaLength);break;case\"CylinderGeometry\":case\"CylinderBufferGeometry\":a=new lu[o.type](o.radiusTop,o.radiusBottom,o.height,o.radialSegments,o.heightSegments,o.openEnded,o.thetaStart,o.thetaLength);break;case\"ConeGeometry\":case\"ConeBufferGeometry\":a=new lu[o.type](o.radius,o.height,o.radialSegments,o.heightSegments,o.openEnded,o.thetaStart,o.thetaLength);break;case\"SphereGeometry\":case\"SphereBufferGeometry\":a=new lu[o.type](o.radius,o.widthSegments,o.heightSegments,o.phiStart,o.phiLength,o.thetaStart,o.thetaLength);break;case\"DodecahedronGeometry\":case\"DodecahedronBufferGeometry\":case\"IcosahedronGeometry\":case\"IcosahedronBufferGeometry\":case\"OctahedronGeometry\":case\"OctahedronBufferGeometry\":case\"TetrahedronGeometry\":case\"TetrahedronBufferGeometry\":a=new lu[o.type](o.radius,o.detail);break;case\"RingGeometry\":case\"RingBufferGeometry\":a=new lu[o.type](o.innerRadius,o.outerRadius,o.thetaSegments,o.phiSegments,o.thetaStart,o.thetaLength);break;case\"TorusGeometry\":case\"TorusBufferGeometry\":a=new lu[o.type](o.radius,o.tube,o.radialSegments,o.tubularSegments,o.arc);break;case\"TorusKnotGeometry\":case\"TorusKnotBufferGeometry\":a=new lu[o.type](o.radius,o.tube,o.tubularSegments,o.radialSegments,o.p,o.q);break;case\"TubeGeometry\":case\"TubeBufferGeometry\":a=new lu[o.type]((new dh[o.path.type]).fromJSON(o.path),o.tubularSegments,o.radius,o.radialSegments,o.closed);break;case\"LatheGeometry\":case\"LatheBufferGeometry\":a=new lu[o.type](o.points,o.segments,o.phiStart,o.phiLength);break;case\"PolyhedronGeometry\":case\"PolyhedronBufferGeometry\":a=new lu[o.type](o.vertices,o.indices,o.radius,o.details);break;case\"ShapeGeometry\":case\"ShapeBufferGeometry\":i=[];for(let t=0,n=o.shapes.length;t\u003cn;t++){const n=e[o.shapes[t]];i.push(n)}a=new lu[o.type](i,o.curveSegments);break;case\"ExtrudeGeometry\":case\"ExtrudeBufferGeometry\":i=[];for(let t=0,n=o.shapes.length;t\u003cn;t++){const n=e[o.shapes[t]];i.push(n)}const t=o.options.extrudePath;void 0!==t\u0026\u0026(o.options.extrudePath=(new dh[t.type]).fromJSON(t)),a=new lu[o.type](i,o.options);break;case\"BufferGeometry\":case\"InstancedBufferGeometry\":a=r.parse(o);break;case\"Geometry\":console.error('THREE.ObjectLoader: Loading \"Geometry\" is not supported anymore.');break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type \"'+o.type+'\"');continue}a.uuid=o.uuid,void 0!==o.name\u0026\u0026(a.name=o.name),!0===a.isBufferGeometry\u0026\u0026void 0!==o.userData\u0026\u0026(a.userData=o.userData),n[o.uuid]=a}}return n}parseMaterials(t,e){const n={},i={};if(void 0!==t){const r=new Bh;r.setTextures(e);for(let e=0,s=t.length;e\u003cs;e++){const s=t[e];if(\"MultiMaterial\"===s.type){const t=[];for(let e=0;e\u003cs.materials.length;e++){const i=s.materials[e];void 0===n[i.uuid]\u0026\u0026(n[i.uuid]=r.parse(i)),t.push(n[i.uuid])}i[s.uuid]=t}else void 0===n[s.uuid]\u0026\u0026(n[s.uuid]=r.parse(s)),i[s.uuid]=n[s.uuid]}}return i}parseAnimations(t){const e={};if(void 0!==t)for(let n=0;n\u003ct.length;n++){const i=t[n],r=Iu.parse(i);e[r.uuid]=r}return e}parseImages(t,e){const n=this,i={};let r;function s(t){if(\"string\"==typeof t){const e=t;return function(t){return n.manager.itemStart(t),r.load(t,(function(){n.manager.itemEnd(t)}),void 0,(function(){n.manager.itemError(t),n.manager.itemEnd(t)}))}(/^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test(e)?e:n.resourcePath+e)}return t.data?{data:Jr(t.type,t.data),width:t.width,height:t.height}:null}if(void 0!==t\u0026\u0026t.length\u003e0){const n=new Bu(e);r=new Vu(n),r.setCrossOrigin(this.crossOrigin);for(let e=0,n=t.length;e\u003cn;e++){const n=t[e],r=n.url;if(Array.isArray(r)){i[n.uuid]=[];for(let t=0,e=r.length;t\u003ce;t++){const e=s(r[t]);null!==e\u0026\u0026(e instanceof HTMLImageElement?i[n.uuid].push(e):i[n.uuid].push(new Dl(e.data,e.width,e.height)))}}else{const t=s(n.url);null!==t\u0026\u0026(i[n.uuid]=t)}}}return i}parseTextures(t,e){function n(t,e){return\"number\"==typeof t?t:(console.warn(\"THREE.ObjectLoader.parseTexture: Constant should be in numeric form.\",t),e[t])}const i={};if(void 0!==t)for(let r=0,s=t.length;r\u003cs;r++){const s=t[r];let a;void 0===s.image\u0026\u0026console.warn('THREE.ObjectLoader: No \"image\" specified for',s.uuid),void 0===e[s.image]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined image\",s.image);const o=e[s.image];Array.isArray(o)?(a=new Ds(o),6===o.length\u0026\u0026(a.needsUpdate=!0)):(a=o\u0026\u0026o.data?new Dl(o.data,o.width,o.height):new ti(o),o\u0026\u0026(a.needsUpdate=!0)),a.uuid=s.uuid,void 0!==s.name\u0026\u0026(a.name=s.name),void 0!==s.mapping\u0026\u0026(a.mapping=n(s.mapping,kh)),void 0!==s.offset\u0026\u0026a.offset.fromArray(s.offset),void 0!==s.repeat\u0026\u0026a.repeat.fromArray(s.repeat),void 0!==s.center\u0026\u0026a.center.fromArray(s.center),void 0!==s.rotation\u0026\u0026(a.rotation=s.rotation),void 0!==s.wrap\u0026\u0026(a.wrapS=n(s.wrap[0],Vh),a.wrapT=n(s.wrap[1],Vh)),void 0!==s.format\u0026\u0026(a.format=s.format),void 0!==s.type\u0026\u0026(a.type=s.type),void 0!==s.encoding\u0026\u0026(a.encoding=s.encoding),void 0!==s.minFilter\u0026\u0026(a.minFilter=n(s.minFilter,Wh)),void 0!==s.magFilter\u0026\u0026(a.magFilter=n(s.magFilter,Wh)),void 0!==s.anisotropy\u0026\u0026(a.anisotropy=s.anisotropy),void 0!==s.flipY\u0026\u0026(a.flipY=s.flipY),void 0!==s.premultiplyAlpha\u0026\u0026(a.premultiplyAlpha=s.premultiplyAlpha),void 0!==s.unpackAlignment\u0026\u0026(a.unpackAlignment=s.unpackAlignment),i[s.uuid]=a}return i}parseObject(t,e,n,i){let r,s,a;function o(t){return void 0===e[t]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined geometry\",t),e[t]}function l(t){if(void 0!==t){if(Array.isArray(t)){const e=[];for(let i=0,r=t.length;i\u003cr;i++){const r=t[i];void 0===n[r]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined material\",r),e.push(n[r])}return e}return void 0===n[t]\u0026\u0026console.warn(\"THREE.ObjectLoader: Undefined material\",t),n[t]}}switch(t.type){case\"Scene\":r=new nl,void 0!==t.background\u0026\u0026Number.isInteger(t.background)\u0026\u0026(r.background=new Ir(t.background)),void 0!==t.fog\u0026\u0026(\"Fog\"===t.fog.type?r.fog=new el(t.fog.color,t.fog.near,t.fog.far):\"FogExp2\"===t.fog.type\u0026\u0026(r.fog=new tl(t.fog.color,t.fog.density)));break;case\"PerspectiveCamera\":r=new Cs(t.fov,t.aspect,t.near,t.far),void 0!==t.focus\u0026\u0026(r.focus=t.focus),void 0!==t.zoom\u0026\u0026(r.zoom=t.zoom),void 0!==t.filmGauge\u0026\u0026(r.filmGauge=t.filmGauge),void 0!==t.filmOffset\u0026\u0026(r.filmOffset=t.filmOffset),void 0!==t.view\u0026\u0026(r.view=Object.assign({},t.view));break;case\"OrthographicCamera\":r=new Rh(t.left,t.right,t.top,t.bottom,t.near,t.far),void 0!==t.zoom\u0026\u0026(r.zoom=t.zoom),void 0!==t.view\u0026\u0026(r.view=Object.assign({},t.view));break;case\"AmbientLight\":r=new Dh(t.color,t.intensity);break;case\"DirectionalLight\":r=new Ph(t.color,t.intensity);break;case\"PointLight\":r=new Lh(t.color,t.intensity,t.distance,t.decay);break;case\"RectAreaLight\":r=new Ih(t.color,t.intensity,t.width,t.height);break;case\"SpotLight\":r=new Mh(t.color,t.intensity,t.distance,t.angle,t.penumbra,t.decay);break;case\"HemisphereLight\":r=new vh(t.color,t.groundColor,t.intensity);break;case\"LightProbe\":r=(new zh).fromJSON(t);break;case\"SkinnedMesh\":s=o(t.geometry),a=l(t.material),r=new Cl(s,a),void 0!==t.bindMode\u0026\u0026(r.bindMode=t.bindMode),void 0!==t.bindMatrix\u0026\u0026r.bindMatrix.fromArray(t.bindMatrix),void 0!==t.skeleton\u0026\u0026(r.skeleton=t.skeleton);break;case\"Mesh\":s=o(t.geometry),a=l(t.material),r=new ws(s,a);break;case\"InstancedMesh\":s=o(t.geometry),a=l(t.material);const e=t.count,n=t.instanceMatrix,i=t.instanceColor;r=new Ul(s,a,e),r.instanceMatrix=new Or(new Float32Array(n.array),16),void 0!==i\u0026\u0026(r.instanceColor=new Or(new Float32Array(i.array),i.itemSize));break;case\"LOD\":r=new Sl;break;case\"Line\":r=new Xl(o(t.geometry),l(t.material));break;case\"LineLoop\":r=new Ql(o(t.geometry),l(t.material));break;case\"LineSegments\":r=new Jl(o(t.geometry),l(t.material));break;case\"PointCloud\":case\"Points\":r=new ic(o(t.geometry),l(t.material));break;case\"Sprite\":r=new _l(l(t.material));break;case\"Group\":r=new Xo;break;case\"Bone\":r=new Pl;break;default:r=new cr}if(r.uuid=t.uuid,void 0!==t.name\u0026\u0026(r.name=t.name),void 0!==t.matrix?(r.matrix.fromArray(t.matrix),void 0!==t.matrixAutoUpdate\u0026\u0026(r.matrixAutoUpdate=t.matrixAutoUpdate),r.matrixAutoUpdate\u0026\u0026r.matrix.decompose(r.position,r.quaternion,r.scale)):(void 0!==t.position\u0026\u0026r.position.fromArray(t.position),void 0!==t.rotation\u0026\u0026r.rotation.fromArray(t.rotation),void 0!==t.quaternion\u0026\u0026r.quaternion.fromArray(t.quaternion),void 0!==t.scale\u0026\u0026r.scale.fromArray(t.scale)),void 0!==t.castShadow\u0026\u0026(r.castShadow=t.castShadow),void 0!==t.receiveShadow\u0026\u0026(r.receiveShadow=t.receiveShadow),t.shadow\u0026\u0026(void 0!==t.shadow.bias\u0026\u0026(r.shadow.bias=t.shadow.bias),void 0!==t.shadow.normalBias\u0026\u0026(r.shadow.normalBias=t.shadow.normalBias),void 0!==t.shadow.radius\u0026\u0026(r.shadow.radius=t.shadow.radius),void 0!==t.shadow.mapSize\u0026\u0026r.shadow.mapSize.fromArray(t.shadow.mapSize),void 0!==t.shadow.camera\u0026\u0026(r.shadow.camera=this.parseObject(t.shadow.camera))),void 0!==t.visible\u0026\u0026(r.visible=t.visible),void 0!==t.frustumCulled\u0026\u0026(r.frustumCulled=t.frustumCulled),void 0!==t.renderOrder\u0026\u0026(r.renderOrder=t.renderOrder),void 0!==t.userData\u0026\u0026(r.userData=t.userData),void 0!==t.layers\u0026\u0026(r.layers.mask=t.layers),void 0!==t.children){const s=t.children;for(let t=0;t\u003cs.length;t++)r.add(this.parseObject(s[t],e,n,i))}if(void 0!==t.animations){const e=t.animations;for(let t=0;t\u003ce.length;t++){const n=e[t];r.animations.push(i[n])}}if(\"LOD\"===t.type){void 0!==t.autoUpdate\u0026\u0026(r.autoUpdate=t.autoUpdate);const e=t.levels;for(let t=0;t\u003ce.length;t++){const n=e[t],i=r.getObjectByProperty(\"uuid\",n.object);void 0!==i\u0026\u0026r.addLevel(i,n.distance)}}return r}bindSkeletons(t,e){0!==Object.keys(e).length\u0026\u0026t.traverse((function(t){if(!0===t.isSkinnedMesh\u0026\u0026void 0!==t.skeleton){const n=e[t.skeleton];void 0===n?console.warn(\"THREE.ObjectLoader: No skeleton found with UUID:\",t.skeleton):t.bind(n,t.bindMatrix)}}))}setTexturePath(t){return console.warn(\"THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().\"),this.setResourcePath(t)}}const kh={UVMapping:rt,CubeReflectionMapping:st,CubeRefractionMapping:at,EquirectangularReflectionMapping:ot,EquirectangularRefractionMapping:lt,CubeUVReflectionMapping:ct,CubeUVRefractionMapping:ut},Vh={RepeatWrapping:ht,ClampToEdgeWrapping:dt,MirroredRepeatWrapping:pt},Wh={NearestFilter:ft,NearestMipmapNearestFilter:mt,NearestMipmapLinearFilter:vt,LinearFilter:xt,LinearMipmapNearestFilter:_t,LinearMipmapLinearFilter:wt};class jh extends Fu{constructor(t){super(t),\"undefined\"==typeof createImageBitmap\u0026\u0026console.warn(\"THREE.ImageBitmapLoader: createImageBitmap() not supported.\"),\"undefined\"==typeof fetch\u0026\u0026console.warn(\"THREE.ImageBitmapLoader: fetch() not supported.\"),this.options={premultiplyAlpha:\"none\"}}setOptions(t){return this.options=t,this}load(t,e,n,i){void 0===t\u0026\u0026(t=\"\"),void 0!==this.path\u0026\u0026(t=this.path+t),t=this.manager.resolveURL(t);const r=this,s=zu.get(t);if(void 0!==s)return r.manager.itemStart(t),setTimeout((function(){e\u0026\u0026e(s),r.manager.itemEnd(t)}),0),s;const a={};a.credentials=\"anonymous\"===this.crossOrigin?\"same-origin\":\"include\",a.headers=this.requestHeader,fetch(t,a).then((function(t){return t.blob()})).then((function(t){return createImageBitmap(t,Object.assign(r.options,{colorSpaceConversion:\"none\"}))})).then((function(n){zu.add(t,n),e\u0026\u0026e(n),r.manager.itemEnd(t)})).catch((function(e){i\u0026\u0026i(e),r.manager.itemError(t),r.manager.itemEnd(t)})),r.manager.itemStart(t)}}jh.prototype.isImageBitmapLoader=!0;class qh{constructor(){this.type=\"ShapePath\",this.color=new Ir,this.subPaths=[],this.currentPath=null}moveTo(t,e){return this.currentPath=new fh,this.subPaths.push(this.currentPath),this.currentPath.moveTo(t,e),this}lineTo(t,e){return this.currentPath.lineTo(t,e),this}quadraticCurveTo(t,e,n,i){return this.currentPath.quadraticCurveTo(t,e,n,i),this}bezierCurveTo(t,e,n,i,r,s){return this.currentPath.bezierCurveTo(t,e,n,i,r,s),this}splineThru(t){return this.currentPath.splineThru(t),this}toShapes(t,e){function n(t){const e=[];for(let n=0,i=t.length;n\u003ci;n++){const i=t[n],r=new mh;r.curves=i.curves,e.push(r)}return e}function i(t,e){const n=e.length;let i=!1;for(let r=n-1,s=0;s\u003cn;r=s++){let n=e[r],a=e[s],o=a.x-n.x,l=a.y-n.y;if(Math.abs(l)\u003eNumber.EPSILON){if(l\u003c0\u0026\u0026(n=e[s],o=-o,a=e[r],l=-l),t.y\u003cn.y||t.y\u003ea.y)continue;if(t.y===n.y){if(t.x===n.x)return!0}else{const e=l*(t.x-n.x)-o*(t.y-n.y);if(0===e)return!0;if(e\u003c0)continue;i=!i}}else{if(t.y!==n.y)continue;if(a.x\u003c=t.x\u0026\u0026t.x\u003c=n.x||n.x\u003c=t.x\u0026\u0026t.x\u003c=a.x)return!0}}return i}const r=Wc.isClockWise,s=this.subPaths;if(0===s.length)return[];if(!0===e)return n(s);let a,o,l;const c=[];if(1===s.length)return o=s[0],l=new mh,l.curves=o.curves,c.push(l),c;let u=!r(s[0].getPoints());u=t?!u:u;const h=[],d=[];let p,f,m=[],g=0;d[g]=void 0,m[g]=[];for(let e=0,n=s.length;e\u003cn;e++)o=s[e],p=o.getPoints(),a=r(p),a=t?!a:a,a?(!u\u0026\u0026d[g]\u0026\u0026g++,d[g]={s:new mh,p:p},d[g].s.curves=o.curves,u\u0026\u0026g++,m[g]=[]):m[g].push({h:o,p:p[0]});if(!d[0])return n(s);if(d.length\u003e1){let t=!1;const e=[];for(let t=0,e=d.length;t\u003ce;t++)h[t]=[];for(let n=0,r=d.length;n\u003cr;n++){const r=m[n];for(let s=0;s\u003cr.length;s++){const a=r[s];let o=!0;for(let r=0;r\u003cd.length;r++)i(a.p,d[r].p)\u0026\u0026(n!==r\u0026\u0026e.push({froms:n,tos:r,hole:s}),o?(o=!1,h[r].push(a)):t=!0);o\u0026\u0026h[n].push(a)}}e.length\u003e0\u0026\u0026(t||(m=h))}for(let t=0,e=d.length;t\u003ce;t++){l=d[t].s,c.push(l),f=m[t];for(let t=0,e=f.length;t\u003ce;t++)l.holes.push(f[t].h)}return c}}class Xh{constructor(t){this.type=\"Font\",this.data=t}generateShapes(t,e=100){const n=[],i=function(t,e,n){const i=Array.from(t),r=e/n.resolution,s=(n.boundingBox.yMax-n.boundingBox.yMin+n.underlineThickness)*r,a=[];let o=0,l=0;for(let t=0;t\u003ci.length;t++){const e=i[t];if(\"\\n\"===e)o=0,l-=s;else{const t=Yh(e,r,o,l,n);o+=t.offsetX,a.push(t.path)}}return a}(t,e,this.data);for(let t=0,e=i.length;t\u003ce;t++)Array.prototype.push.apply(n,i[t].toShapes());return n}}function Yh(t,e,n,i,r){const s=r.glyphs[t]||r.glyphs[\"?\"];if(!s)return void console.error('THREE.Font: character \"'+t+'\" does not exists in font family '+r.familyName+\".\");const a=new qh;let o,l,c,u,h,d,p,f;if(s.o){const t=s._cachedOutline||(s._cachedOutline=s.o.split(\" \"));for(let r=0,s=t.length;r\u003cs;){switch(t[r++]){case\"m\":o=t[r++]*e+n,l=t[r++]*e+i,a.moveTo(o,l);break;case\"l\":o=t[r++]*e+n,l=t[r++]*e+i,a.lineTo(o,l);break;case\"q\":c=t[r++]*e+n,u=t[r++]*e+i,h=t[r++]*e+n,d=t[r++]*e+i,a.quadraticCurveTo(h,d,c,u);break;case\"b\":c=t[r++]*e+n,u=t[r++]*e+i,h=t[r++]*e+n,d=t[r++]*e+i,p=t[r++]*e+n,f=t[r++]*e+i,a.bezierCurveTo(h,d,p,f,c,u)}}}return{offsetX:s.ha*e,path:a}}Xh.prototype.isFont=!0;class Zh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(this.manager);s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(r.withCredentials),s.load(t,(function(t){let n;try{n=JSON.parse(t)}catch(e){console.warn(\"THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.\"),n=JSON.parse(t.substring(65,t.length-2))}const i=r.parse(n);e\u0026\u0026e(i)}),n,i)}parse(t){return new Xh(t)}}let Jh;const Qh={getContext:function(){return void 0===Jh\u0026\u0026(Jh=new(window.AudioContext||window.webkitAudioContext)),Jh},setContext:function(t){Jh=t}};class Kh extends Fu{constructor(t){super(t)}load(t,e,n,i){const r=this,s=new Uu(this.manager);s.setResponseType(\"arraybuffer\"),s.setPath(this.path),s.setRequestHeader(this.requestHeader),s.setWithCredentials(this.withCredentials),s.load(t,(function(n){try{const t=n.slice(0);Qh.getContext().decodeAudioData(t,(function(t){e(t)}))}catch(e){i?i(e):console.error(e),r.manager.itemError(t)}}),n,i)}}class $h extends zh{constructor(t,e,n=1){super(void 0,n);const i=(new Ir).set(t),r=(new Ir).set(e),s=new oi(i.r,i.g,i.b),a=new oi(r.r,r.g,r.b),o=Math.sqrt(Math.PI),l=o*Math.sqrt(.75);this.sh.coefficients[0].copy(s).add(a).multiplyScalar(o),this.sh.coefficients[1].copy(s).sub(a).multiplyScalar(l)}}$h.prototype.isHemisphereLightProbe=!0;class td extends zh{constructor(t,e=1){super(void 0,e);const n=(new Ir).set(t);this.sh.coefficients[0].set(n.r,n.g,n.b).multiplyScalar(2*Math.sqrt(Math.PI))}}td.prototype.isAmbientLightProbe=!0;const ed=new Fi,nd=new Fi;class id{constructor(){this.type=\"StereoCamera\",this.aspect=1,this.eyeSep=.064,this.cameraL=new Cs,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Cs,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(t){const e=this._cache;if(e.focus!==t.focus||e.fov!==t.fov||e.aspect!==t.aspect*this.aspect||e.near!==t.near||e.far!==t.far||e.zoom!==t.zoom||e.eyeSep!==this.eyeSep){e.focus=t.focus,e.fov=t.fov,e.aspect=t.aspect*this.aspect,e.near=t.near,e.far=t.far,e.zoom=t.zoom,e.eyeSep=this.eyeSep;const n=t.projectionMatrix.clone(),i=e.eyeSep/2,r=i*e.near/e.focus,s=e.near*Math.tan(Hn*e.fov*.5)/e.zoom;let a,o;nd.elements[12]=-i,ed.elements[12]=i,a=-s*e.aspect+r,o=s*e.aspect+r,n.elements[0]=2*e.near/(o-a),n.elements[8]=(o+a)/(o-a),this.cameraL.projectionMatrix.copy(n),a=-s*e.aspect-r,o=s*e.aspect-r,n.elements[0]=2*e.near/(o-a),n.elements[8]=(o+a)/(o-a),this.cameraR.projectionMatrix.copy(n)}this.cameraL.matrixWorld.copy(t.matrixWorld).multiply(nd),this.cameraR.matrixWorld.copy(t.matrixWorld).multiply(ed)}}class rd{constructor(t=!0){this.autoStart=t,this.startTime=0,this.oldTime=0,this.elapsedTime=0,this.running=!1}start(){this.startTime=sd(),this.oldTime=this.startTime,this.elapsedTime=0,this.running=!0}stop(){this.getElapsedTime(),this.running=!1,this.autoStart=!1}getElapsedTime(){return this.getDelta(),this.elapsedTime}getDelta(){let t=0;if(this.autoStart\u0026\u0026!this.running)return this.start(),0;if(this.running){const e=sd();t=(e-this.oldTime)/1e3,this.oldTime=e,this.elapsedTime+=t}return t}}function sd(){return(\"undefined\"==typeof performance?Date:performance).now()}const ad=new oi,od=new ai,ld=new oi,cd=new oi;class ud extends cr{constructor(){super(),this.type=\"AudioListener\",this.context=Qh.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._clock=new rd}getInput(){return this.gain}removeFilter(){return null!==this.filter\u0026\u0026(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(t){return null!==this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination),this.filter=t,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}updateMatrixWorld(t){super.updateMatrixWorld(t);const e=this.context.listener,n=this.up;if(this.timeDelta=this._clock.getDelta(),this.matrixWorld.decompose(ad,od,ld),cd.set(0,0,-1).applyQuaternion(od),e.positionX){const t=this.context.currentTime+this.timeDelta;e.positionX.linearRampToValueAtTime(ad.x,t),e.positionY.linearRampToValueAtTime(ad.y,t),e.positionZ.linearRampToValueAtTime(ad.z,t),e.forwardX.linearRampToValueAtTime(cd.x,t),e.forwardY.linearRampToValueAtTime(cd.y,t),e.forwardZ.linearRampToValueAtTime(cd.z,t),e.upX.linearRampToValueAtTime(n.x,t),e.upY.linearRampToValueAtTime(n.y,t),e.upZ.linearRampToValueAtTime(n.z,t)}else e.setPosition(ad.x,ad.y,ad.z),e.setOrientation(cd.x,cd.y,cd.z,n.x,n.y,n.z)}}class hd extends cr{constructor(t){super(),this.type=\"Audio\",this.listener=t,this.context=t.context,this.gain=this.context.createGain(),this.gain.connect(t.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=\"empty\",this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"audioNode\",this.source=t,this.connect(),this}setMediaElementSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaNode\",this.source=this.context.createMediaElementSource(t),this.connect(),this}setMediaStreamSource(t){return this.hasPlaybackControl=!1,this.sourceType=\"mediaStreamNode\",this.source=this.context.createMediaStreamSource(t),this.connect(),this}setBuffer(t){return this.buffer=t,this.sourceType=\"buffer\",this.autoplay\u0026\u0026this.play(),this}play(t=0){if(!0===this.isPlaying)return void console.warn(\"THREE.Audio: Audio is already playing.\");if(!1===this.hasPlaybackControl)return void console.warn(\"THREE.Audio: this Audio has no playback control.\");this._startedAt=this.context.currentTime+t;const e=this.context.createBufferSource();return e.buffer=this.buffer,e.loop=this.loop,e.loopStart=this.loopStart,e.loopEnd=this.loopEnd,e.onended=this.onEnded.bind(this),e.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=e,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(!1!==this.hasPlaybackControl)return!0===this.isPlaying\u0026\u0026(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop\u0026\u0026(this._progress=this._progress%(this.duration||this.buffer.duration)),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}stop(){if(!1!==this.hasPlaybackControl)return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}connect(){if(this.filters.length\u003e0){this.source.connect(this.filters[0]);for(let t=1,e=this.filters.length;t\u003ce;t++)this.filters[t-1].connect(this.filters[t]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this._connected=!0,this}disconnect(){if(this.filters.length\u003e0){this.source.disconnect(this.filters[0]);for(let t=1,e=this.filters.length;t\u003ce;t++)this.filters[t-1].disconnect(this.filters[t]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this._connected=!1,this}getFilters(){return this.filters}setFilters(t){return t||(t=[]),!0===this._connected?(this.disconnect(),this.filters=t.slice(),this.connect()):this.filters=t.slice(),this}setDetune(t){if(this.detune=t,void 0!==this.source.detune)return!0===this.isPlaying\u0026\u0026this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this}getDetune(){return this.detune}getFilter(){return this.getFilters()[0]}setFilter(t){return this.setFilters(t?[t]:[])}setPlaybackRate(t){if(!1!==this.hasPlaybackControl)return this.playbackRate=t,!0===this.isPlaying\u0026\u0026this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}getPlaybackRate(){return this.playbackRate}onEnded(){this.isPlaying=!1}getLoop(){return!1===this.hasPlaybackControl?(console.warn(\"THREE.Audio: this Audio has no playback control.\"),!1):this.loop}setLoop(t){if(!1!==this.hasPlaybackControl)return this.loop=t,!0===this.isPlaying\u0026\u0026(this.source.loop=this.loop),this;console.warn(\"THREE.Audio: this Audio has no playback control.\")}setLoopStart(t){return this.loopStart=t,this}setLoopEnd(t){return this.loopEnd=t,this}getVolume(){return this.gain.gain.value}setVolume(t){return this.gain.gain.setTargetAtTime(t,this.context.currentTime,.01),this}}const dd=new oi,pd=new ai,fd=new oi,md=new oi;class gd extends hd{constructor(t){super(t),this.panner=this.context.createPanner(),this.panner.panningModel=\"HRTF\",this.panner.connect(this.gain)}getOutput(){return this.panner}getRefDistance(){return this.panner.refDistance}setRefDistance(t){return this.panner.refDistance=t,this}getRolloffFactor(){return this.panner.rolloffFactor}setRolloffFactor(t){return this.panner.rolloffFactor=t,this}getDistanceModel(){return this.panner.distanceModel}setDistanceModel(t){return this.panner.distanceModel=t,this}getMaxDistance(){return this.panner.maxDistance}setMaxDistance(t){return this.panner.maxDistance=t,this}setDirectionalCone(t,e,n){return this.panner.coneInnerAngle=t,this.panner.coneOuterAngle=e,this.panner.coneOuterGain=n,this}updateMatrixWorld(t){if(super.updateMatrixWorld(t),!0===this.hasPlaybackControl\u0026\u0026!1===this.isPlaying)return;this.matrixWorld.decompose(dd,pd,fd),md.set(0,0,1).applyQuaternion(pd);const e=this.panner;if(e.positionX){const t=this.context.currentTime+this.listener.timeDelta;e.positionX.linearRampToValueAtTime(dd.x,t),e.positionY.linearRampToValueAtTime(dd.y,t),e.positionZ.linearRampToValueAtTime(dd.z,t),e.orientationX.linearRampToValueAtTime(md.x,t),e.orientationY.linearRampToValueAtTime(md.y,t),e.orientationZ.linearRampToValueAtTime(md.z,t)}else e.setPosition(dd.x,dd.y,dd.z),e.setOrientation(md.x,md.y,md.z)}}class vd{constructor(t,e=2048){this.analyser=t.context.createAnalyser(),this.analyser.fftSize=e,this.data=new Uint8Array(this.analyser.frequencyBinCount),t.getOutput().connect(this.analyser)}getFrequencyData(){return this.analyser.getByteFrequencyData(this.data),this.data}getAverageFrequency(){let t=0;const e=this.getFrequencyData();for(let n=0;n\u003ce.length;n++)t+=e[n];return t/e.length}}class yd{constructor(t,e,n){let i,r,s;switch(this.binding=t,this.valueSize=n,e){case\"quaternion\":i=this._slerp,r=this._slerpAdditive,s=this._setAdditiveIdentityQuaternion,this.buffer=new Float64Array(6*n),this._workIndex=5;break;case\"string\":case\"bool\":i=this._select,r=this._select,s=this._setAdditiveIdentityOther,this.buffer=new Array(5*n);break;default:i=this._lerp,r=this._lerpAdditive,s=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*n)}this._mixBufferRegion=i,this._mixBufferRegionAdditive=r,this._setIdentity=s,this._origIndex=3,this._addIndex=4,this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,this.useCount=0,this.referenceCount=0}accumulate(t,e){const n=this.buffer,i=this.valueSize,r=t*i+i;let s=this.cumulativeWeight;if(0===s){for(let t=0;t!==i;++t)n[r+t]=n[t];s=e}else{s+=e;const t=e/s;this._mixBufferRegion(n,r,0,t,i)}this.cumulativeWeight=s}accumulateAdditive(t){const e=this.buffer,n=this.valueSize,i=n*this._addIndex;0===this.cumulativeWeightAdditive\u0026\u0026this._setIdentity(),this._mixBufferRegionAdditive(e,i,0,t,n),this.cumulativeWeightAdditive+=t}apply(t){const e=this.valueSize,n=this.buffer,i=t*e+e,r=this.cumulativeWeight,s=this.cumulativeWeightAdditive,a=this.binding;if(this.cumulativeWeight=0,this.cumulativeWeightAdditive=0,r\u003c1){const t=e*this._origIndex;this._mixBufferRegion(n,i,t,1-r,e)}s\u003e0\u0026\u0026this._mixBufferRegionAdditive(n,i,this._addIndex*e,1,e);for(let t=e,r=e+e;t!==r;++t)if(n[t]!==n[t+e]){a.setValue(n,i);break}}saveOriginalState(){const t=this.binding,e=this.buffer,n=this.valueSize,i=n*this._origIndex;t.getValue(e,i);for(let t=n,r=i;t!==r;++t)e[t]=e[i+t%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){const t=3*this.valueSize;this.binding.setValue(this.buffer,t)}_setAdditiveIdentityNumeric(){const t=this._addIndex*this.valueSize,e=t+this.valueSize;for(let n=t;n\u003ce;n++)this.buffer[n]=0}_setAdditiveIdentityQuaternion(){this._setAdditiveIdentityNumeric(),this.buffer[this._addIndex*this.valueSize+3]=1}_setAdditiveIdentityOther(){const t=this._origIndex*this.valueSize,e=this._addIndex*this.valueSize;for(let n=0;n\u003cthis.valueSize;n++)this.buffer[e+n]=this.buffer[t+n]}_select(t,e,n,i,r){if(i\u003e=.5)for(let i=0;i!==r;++i)t[e+i]=t[n+i]}_slerp(t,e,n,i){ai.slerpFlat(t,e,t,e,t,n,i)}_slerpAdditive(t,e,n,i,r){const s=this._workIndex*r;ai.multiplyQuaternionsFlat(t,s,t,e,t,n),ai.slerpFlat(t,e,t,e,t,s,i)}_lerp(t,e,n,i,r){const s=1-i;for(let a=0;a!==r;++a){const r=e+a;t[r]=t[r]*s+t[n+a]*i}}_lerpAdditive(t,e,n,i,r){for(let s=0;s!==r;++s){const r=e+s;t[r]=t[r]+t[n+s]*i}}}const xd=new RegExp(\"[\\\\[\\\\]\\\\.:\\\\/]\",\"g\"),_d=\"[^\"+\"\\\\[\\\\]\\\\.:\\\\/\".replace(\"\\\\.\",\"\")+\"]\",bd=/((?:WC+[\\/:])*)/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),wd=/(WCOD+)?/.source.replace(\"WCOD\",_d),Md=/(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),Sd=/\\.(WC+)(?:\\[(.+)\\])?/.source.replace(\"WC\",\"[^\\\\[\\\\]\\\\.:\\\\/]\"),Td=new RegExp(\"^\"+bd+wd+Md+Sd+\"$\"),Ed=[\"material\",\"materials\",\"bones\"];class Ad{constructor(t,e,n){this.path=e,this.parsedPath=n||Ad.parseTrackName(e),this.node=Ad.findNode(t,this.parsedPath.nodeName)||t,this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,e,n){return t\u0026\u0026t.isAnimationObjectGroup?new Ad.Composite(t,e,n):new Ad(t,e,n)}static sanitizeNodeName(t){return t.replace(/\\s/g,\"_\").replace(xd,\"\")}static parseTrackName(t){const e=Td.exec(t);if(!e)throw new Error(\"PropertyBinding: Cannot parse trackName: \"+t);const n={nodeName:e[2],objectName:e[3],objectIndex:e[4],propertyName:e[5],propertyIndex:e[6]},i=n.nodeName\u0026\u0026n.nodeName.lastIndexOf(\".\");if(void 0!==i\u0026\u0026-1!==i){const t=n.nodeName.substring(i+1);-1!==Ed.indexOf(t)\u0026\u0026(n.nodeName=n.nodeName.substring(0,i),n.objectName=t)}if(null===n.propertyName||0===n.propertyName.length)throw new Error(\"PropertyBinding: can not parse propertyName from trackName: \"+t);return n}static findNode(t,e){if(!e||\"\"===e||\".\"===e||-1===e||e===t.name||e===t.uuid)return t;if(t.skeleton){const n=t.skeleton.getBoneByName(e);if(void 0!==n)return n}if(t.children){const n=function(t){for(let i=0;i\u003ct.length;i++){const r=t[i];if(r.name===e||r.uuid===e)return r;const s=n(r.children);if(s)return s}return null},i=n(t.children);if(i)return i}return null}_getValue_unavailable(){}_setValue_unavailable(){}_getValue_direct(t,e){t[e]=this.node[this.propertyName]}_getValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)t[e++]=n[i]}_getValue_arrayElement(t,e){t[e]=this.resolvedProperty[this.propertyIndex]}_getValue_toArray(t,e){this.resolvedProperty.toArray(t,e)}_setValue_direct(t,e){this.targetObject[this.propertyName]=t[e]}_setValue_direct_setNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.needsUpdate=!0}_setValue_direct_setMatrixWorldNeedsUpdate(t,e){this.targetObject[this.propertyName]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_array(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++]}_setValue_array_setNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.needsUpdate=!0}_setValue_array_setMatrixWorldNeedsUpdate(t,e){const n=this.resolvedProperty;for(let i=0,r=n.length;i!==r;++i)n[i]=t[e++];this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_arrayElement(t,e){this.resolvedProperty[this.propertyIndex]=t[e]}_setValue_arrayElement_setNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.needsUpdate=!0}_setValue_arrayElement_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty[this.propertyIndex]=t[e],this.targetObject.matrixWorldNeedsUpdate=!0}_setValue_fromArray(t,e){this.resolvedProperty.fromArray(t,e)}_setValue_fromArray_setNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.needsUpdate=!0}_setValue_fromArray_setMatrixWorldNeedsUpdate(t,e){this.resolvedProperty.fromArray(t,e),this.targetObject.matrixWorldNeedsUpdate=!0}_getValue_unbound(t,e){this.bind(),this.getValue(t,e)}_setValue_unbound(t,e){this.bind(),this.setValue(t,e)}bind(){let t=this.node;const e=this.parsedPath,n=e.objectName,i=e.propertyName;let r=e.propertyIndex;if(t||(t=Ad.findNode(this.rootNode,e.nodeName)||this.rootNode,this.node=t),this.getValue=this._getValue_unavailable,this.setValue=this._setValue_unavailable,!t)return void console.error(\"THREE.PropertyBinding: Trying to update node for track: \"+this.path+\" but it wasn't found.\");if(n){let i=e.objectIndex;switch(n){case\"materials\":if(!t.material)return void console.error(\"THREE.PropertyBinding: Can not bind to material as node does not have a material.\",this);if(!t.material.materials)return void console.error(\"THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.\",this);t=t.material.materials;break;case\"bones\":if(!t.skeleton)return void console.error(\"THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.\",this);t=t.skeleton.bones;for(let e=0;e\u003ct.length;e++)if(t[e].name===i){i=e;break}break;default:if(void 0===t[n])return void console.error(\"THREE.PropertyBinding: Can not bind to objectName of node undefined.\",this);t=t[n]}if(void 0!==i){if(void 0===t[i])return void console.error(\"THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.\",this,t);t=t[i]}}const s=t[i];if(void 0===s){const n=e.nodeName;return void console.error(\"THREE.PropertyBinding: Trying to update property for track: \"+n+\".\"+i+\" but it wasn't found.\",t)}let a=this.Versioning.None;this.targetObject=t,void 0!==t.needsUpdate?a=this.Versioning.NeedsUpdate:void 0!==t.matrixWorldNeedsUpdate\u0026\u0026(a=this.Versioning.MatrixWorldNeedsUpdate);let o=this.BindingType.Direct;if(void 0!==r){if(\"morphTargetInfluences\"===i){if(!t.geometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.\",this);if(!t.geometry.isBufferGeometry)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.\",this);if(!t.geometry.morphAttributes)return void console.error(\"THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.\",this);void 0!==t.morphTargetDictionary[r]\u0026\u0026(r=t.morphTargetDictionary[r])}o=this.BindingType.ArrayElement,this.resolvedProperty=s,this.propertyIndex=r}else void 0!==s.fromArray\u0026\u0026void 0!==s.toArray?(o=this.BindingType.HasFromToArray,this.resolvedProperty=s):Array.isArray(s)?(o=this.BindingType.EntireArray,this.resolvedProperty=s):this.propertyName=i;this.getValue=this.GetterByBindingType[o],this.setValue=this.SetterByBindingTypeAndVersioning[o][a]}unbind(){this.node=null,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}}Ad.Composite=class{constructor(t,e,n){const i=n||Ad.parseTrackName(e);this._targetGroup=t,this._bindings=t.subscribe_(e,i)}getValue(t,e){this.bind();const n=this._targetGroup.nCachedObjects_,i=this._bindings[n];void 0!==i\u0026\u0026i.getValue(t,e)}setValue(t,e){const n=this._bindings;for(let i=this._targetGroup.nCachedObjects_,r=n.length;i!==r;++i)n[i].setValue(t,e)}bind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].bind()}unbind(){const t=this._bindings;for(let e=this._targetGroup.nCachedObjects_,n=t.length;e!==n;++e)t[e].unbind()}},Ad.prototype.BindingType={Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Ad.prototype.Versioning={None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},Ad.prototype.GetterByBindingType=[Ad.prototype._getValue_direct,Ad.prototype._getValue_array,Ad.prototype._getValue_arrayElement,Ad.prototype._getValue_toArray],Ad.prototype.SetterByBindingTypeAndVersioning=[[Ad.prototype._setValue_direct,Ad.prototype._setValue_direct_setNeedsUpdate,Ad.prototype._setValue_direct_setMatrixWorldNeedsUpdate],[Ad.prototype._setValue_array,Ad.prototype._setValue_array_setNeedsUpdate,Ad.prototype._setValue_array_setMatrixWorldNeedsUpdate],[Ad.prototype._setValue_arrayElement,Ad.prototype._setValue_arrayElement_setNeedsUpdate,Ad.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate],[Ad.prototype._setValue_fromArray,Ad.prototype._setValue_fromArray_setNeedsUpdate,Ad.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate]];class Ld{constructor(){this.uuid=Gn(),this._objects=Array.prototype.slice.call(arguments),this.nCachedObjects_=0;const t={};this._indicesByUUID=t;for(let e=0,n=arguments.length;e!==n;++e)t[arguments[e].uuid]=e;this._paths=[],this._parsedPaths=[],this._bindings=[],this._bindingsIndicesByPath={};const e=this;this.stats={objects:{get total(){return e._objects.length},get inUse(){return this.total-e.nCachedObjects_}},get bindingsPerObject(){return e._bindings.length}}}add(){const t=this._objects,e=this._indicesByUUID,n=this._paths,i=this._parsedPaths,r=this._bindings,s=r.length;let a=void 0,o=t.length,l=this.nCachedObjects_;for(let c=0,u=arguments.length;c!==u;++c){const u=arguments[c],h=u.uuid;let d=e[h];if(void 0===d){d=o++,e[h]=d,t.push(u);for(let t=0,e=s;t!==e;++t)r[t].push(new Ad(u,n[t],i[t]))}else if(d\u003cl){a=t[d];const o=--l,c=t[o];e[c.uuid]=d,t[d]=c,e[h]=o,t[o]=u;for(let t=0,e=s;t!==e;++t){const e=r[t],s=e[o];let a=e[d];e[d]=s,void 0===a\u0026\u0026(a=new Ad(u,n[t],i[t])),e[o]=a}}else t[d]!==a\u0026\u0026console.error(\"THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.\")}this.nCachedObjects_=l}remove(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_;for(let s=0,a=arguments.length;s!==a;++s){const a=arguments[s],o=a.uuid,l=e[o];if(void 0!==l\u0026\u0026l\u003e=r){const s=r++,c=t[s];e[c.uuid]=l,t[l]=c,e[o]=s,t[s]=a;for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[s],r=e[l];e[l]=i,e[s]=r}}}this.nCachedObjects_=r}uncache(){const t=this._objects,e=this._indicesByUUID,n=this._bindings,i=n.length;let r=this.nCachedObjects_,s=t.length;for(let a=0,o=arguments.length;a!==o;++a){const o=arguments[a].uuid,l=e[o];if(void 0!==l)if(delete e[o],l\u003cr){const a=--r,o=t[a],c=--s,u=t[c];e[o.uuid]=l,t[l]=o,e[u.uuid]=a,t[a]=u,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t],i=e[a],r=e[c];e[l]=i,e[a]=r,e.pop()}}else{const r=--s,a=t[r];r\u003e0\u0026\u0026(e[a.uuid]=l),t[l]=a,t.pop();for(let t=0,e=i;t!==e;++t){const e=n[t];e[l]=e[r],e.pop()}}}this.nCachedObjects_=r}subscribe_(t,e){const n=this._bindingsIndicesByPath;let i=n[t];const r=this._bindings;if(void 0!==i)return r[i];const s=this._paths,a=this._parsedPaths,o=this._objects,l=o.length,c=this.nCachedObjects_,u=new Array(l);i=r.length,n[t]=i,s.push(t),a.push(e),r.push(u);for(let n=c,i=o.length;n!==i;++n){const i=o[n];u[n]=new Ad(i,t,e)}return u}unsubscribe_(t){const e=this._bindingsIndicesByPath,n=e[t];if(void 0!==n){const i=this._paths,r=this._parsedPaths,s=this._bindings,a=s.length-1,o=s[a];e[t[a]]=n,s[n]=o,s.pop(),r[n]=r[a],r.pop(),i[n]=i[a],i.pop()}}}Ld.prototype.isAnimationObjectGroup=!0;class Rd{constructor(t,e,n=null,i=e.blendMode){this._mixer=t,this._clip=e,this._localRoot=n,this.blendMode=i;const r=e.tracks,s=r.length,a=new Array(s),o={endingStart:ke,endingEnd:ke};for(let t=0;t!==s;++t){const e=r[t].createInterpolant(null);a[t]=e,e.settings=o}this._interpolantSettings=o,this._interpolants=a,this._propertyBindings=new Array(s),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=Oe,this._loopCount=-1,this._startTime=null,this.time=0,this.timeScale=1,this._effectiveTimeScale=1,this.weight=1,this._effectiveWeight=1,this.repetitions=1/0,this.paused=!1,this.enabled=!0,this.clampWhenFinished=!1,this.zeroSlopeAtStart=!0,this.zeroSlopeAtEnd=!0}play(){return this._mixer._activateAction(this),this}stop(){return this._mixer._deactivateAction(this),this.reset()}reset(){return this.paused=!1,this.enabled=!0,this.time=0,this._loopCount=-1,this._startTime=null,this.stopFading().stopWarping()}isRunning(){return this.enabled\u0026\u0026!this.paused\u0026\u00260!==this.timeScale\u0026\u0026null===this._startTime\u0026\u0026this._mixer._isActiveAction(this)}isScheduled(){return this._mixer._isActiveAction(this)}startAt(t){return this._startTime=t,this}setLoop(t,e){return this.loop=t,this.repetitions=e,this}setEffectiveWeight(t){return this.weight=t,this._effectiveWeight=this.enabled?t:0,this.stopFading()}getEffectiveWeight(){return this._effectiveWeight}fadeIn(t){return this._scheduleFading(t,0,1)}fadeOut(t){return this._scheduleFading(t,1,0)}crossFadeFrom(t,e,n){if(t.fadeOut(e),this.fadeIn(e),n){const n=this._clip.duration,i=t._clip.duration,r=i/n,s=n/i;t.warp(1,r,e),this.warp(s,1,e)}return this}crossFadeTo(t,e,n){return t.crossFadeFrom(this,e,n)}stopFading(){const t=this._weightInterpolant;return null!==t\u0026\u0026(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}setEffectiveTimeScale(t){return this.timeScale=t,this._effectiveTimeScale=this.paused?0:t,this.stopWarping()}getEffectiveTimeScale(){return this._effectiveTimeScale}setDuration(t){return this.timeScale=this._clip.duration/t,this.stopWarping()}syncWith(t){return this.time=t.time,this.timeScale=t.timeScale,this.stopWarping()}halt(t){return this.warp(this._effectiveTimeScale,0,t)}warp(t,e,n){const i=this._mixer,r=i.time,s=this.timeScale;let a=this._timeScaleInterpolant;null===a\u0026\u0026(a=i._lendControlInterpolant(),this._timeScaleInterpolant=a);const o=a.parameterPositions,l=a.sampleValues;return o[0]=r,o[1]=r+n,l[0]=t/s,l[1]=e/s,this}stopWarping(){const t=this._timeScaleInterpolant;return null!==t\u0026\u0026(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(t)),this}getMixer(){return this._mixer}getClip(){return this._clip}getRoot(){return this._localRoot||this._mixer._root}_update(t,e,n,i){if(!this.enabled)return void this._updateWeight(t);const r=this._startTime;if(null!==r){const i=(t-r)*n;if(i\u003c0||0===n)return;this._startTime=null,e=n*i}e*=this._updateTimeScale(t);const s=this._updateTime(e),a=this._updateWeight(t);if(a\u003e0){const t=this._interpolants,e=this._propertyBindings;switch(this.blendMode){case qe:for(let n=0,i=t.length;n!==i;++n)t[n].evaluate(s),e[n].accumulateAdditive(a);break;case je:default:for(let n=0,r=t.length;n!==r;++n)t[n].evaluate(s),e[n].accumulate(i,a)}}}_updateWeight(t){let e=0;if(this.enabled){e=this.weight;const n=this._weightInterpolant;if(null!==n){const i=n.evaluate(t)[0];e*=i,t\u003en.parameterPositions[1]\u0026\u0026(this.stopFading(),0===i\u0026\u0026(this.enabled=!1))}}return this._effectiveWeight=e,e}_updateTimeScale(t){let e=0;if(!this.paused){e=this.timeScale;const n=this._timeScaleInterpolant;if(null!==n){e*=n.evaluate(t)[0],t\u003en.parameterPositions[1]\u0026\u0026(this.stopWarping(),0===e?this.paused=!0:this.timeScale=e)}}return this._effectiveTimeScale=e,e}_updateTime(t){const e=this._clip.duration,n=this.loop;let i=this.time+t,r=this._loopCount;const s=n===Fe;if(0===t)return-1===r?i:s\u0026\u00261==(1\u0026r)?e-i:i;if(n===Be){-1===r\u0026\u0026(this._loopCount=0,this._setEndings(!0,!0,!1));t:{if(i\u003e=e)i=e;else{if(!(i\u003c0)){this.time=i;break t}i=0}this.clampWhenFinished?this.paused=!0:this.enabled=!1,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t\u003c0?-1:1})}}else{if(-1===r\u0026\u0026(t\u003e=0?(r=0,this._setEndings(!0,0===this.repetitions,s)):this._setEndings(0===this.repetitions,!0,s)),i\u003e=e||i\u003c0){const n=Math.floor(i/e);i-=e*n,r+=Math.abs(n);const a=this.repetitions-r;if(a\u003c=0)this.clampWhenFinished?this.paused=!0:this.enabled=!1,i=t\u003e0?e:0,this.time=i,this._mixer.dispatchEvent({type:\"finished\",action:this,direction:t\u003e0?1:-1});else{if(1===a){const e=t\u003c0;this._setEndings(e,!e,s)}else this._setEndings(!1,!1,s);this._loopCount=r,this.time=i,this._mixer.dispatchEvent({type:\"loop\",action:this,loopDelta:n})}}else this.time=i;if(s\u0026\u00261==(1\u0026r))return e-i}return i}_setEndings(t,e,n){const i=this._interpolantSettings;n?(i.endingStart=Ve,i.endingEnd=Ve):(i.endingStart=t?this.zeroSlopeAtStart?Ve:ke:We,i.endingEnd=e?this.zeroSlopeAtEnd?Ve:ke:We)}_scheduleFading(t,e,n){const i=this._mixer,r=i.time;let s=this._weightInterpolant;null===s\u0026\u0026(s=i._lendControlInterpolant(),this._weightInterpolant=s);const a=s.parameterPositions,o=s.sampleValues;return a[0]=r,o[0]=e,a[1]=r+t,o[1]=n,this}}class Cd extends Bn{constructor(t){super(),this._root=t,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1}_bindAction(t,e){const n=t._localRoot||this._root,i=t._clip.tracks,r=i.length,s=t._propertyBindings,a=t._interpolants,o=n.uuid,l=this._bindingsByRootAndName;let c=l[o];void 0===c\u0026\u0026(c={},l[o]=c);for(let t=0;t!==r;++t){const r=i[t],l=r.name;let u=c[l];if(void 0!==u)s[t]=u;else{if(u=s[t],void 0!==u){null===u._cacheIndex\u0026\u0026(++u.referenceCount,this._addInactiveBinding(u,o,l));continue}const i=e\u0026\u0026e._propertyBindings[t].binding.parsedPath;u=new yd(Ad.create(n,l,i),r.ValueTypeName,r.getValueSize()),++u.referenceCount,this._addInactiveBinding(u,o,l),s[t]=u}a[t].resultBuffer=u.buffer}}_activateAction(t){if(!this._isActiveAction(t)){if(null===t._cacheIndex){const e=(t._localRoot||this._root).uuid,n=t._clip.uuid,i=this._actionsByClip[n];this._bindAction(t,i\u0026\u0026i.knownActions[0]),this._addInactiveAction(t,n,e)}const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==n.useCount++\u0026\u0026(this._lendBinding(n),n.saveOriginalState())}this._lendAction(t)}}_deactivateAction(t){if(this._isActiveAction(t)){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.useCount\u0026\u0026(n.restoreOriginalState(),this._takeBackBinding(n))}this._takeBackAction(t)}}_initMemoryManager(){this._actions=[],this._nActiveActions=0,this._actionsByClip={},this._bindings=[],this._nActiveBindings=0,this._bindingsByRootAndName={},this._controlInterpolants=[],this._nActiveControlInterpolants=0;const t=this;this.stats={actions:{get total(){return t._actions.length},get inUse(){return t._nActiveActions}},bindings:{get total(){return t._bindings.length},get inUse(){return t._nActiveBindings}},controlInterpolants:{get total(){return t._controlInterpolants.length},get inUse(){return t._nActiveControlInterpolants}}}}_isActiveAction(t){const e=t._cacheIndex;return null!==e\u0026\u0026e\u003cthis._nActiveActions}_addInactiveAction(t,e,n){const i=this._actions,r=this._actionsByClip;let s=r[e];if(void 0===s)s={knownActions:[t],actionByRoot:{}},t._byClipCacheIndex=0,r[e]=s;else{const e=s.knownActions;t._byClipCacheIndex=e.length,e.push(t)}t._cacheIndex=i.length,i.push(t),s.actionByRoot[n]=t}_removeInactiveAction(t){const e=this._actions,n=e[e.length-1],i=t._cacheIndex;n._cacheIndex=i,e[i]=n,e.pop(),t._cacheIndex=null;const r=t._clip.uuid,s=this._actionsByClip,a=s[r],o=a.knownActions,l=o[o.length-1],c=t._byClipCacheIndex;l._byClipCacheIndex=c,o[c]=l,o.pop(),t._byClipCacheIndex=null;delete a.actionByRoot[(t._localRoot||this._root).uuid],0===o.length\u0026\u0026delete s[r],this._removeInactiveBindingsForAction(t)}_removeInactiveBindingsForAction(t){const e=t._propertyBindings;for(let t=0,n=e.length;t!==n;++t){const n=e[t];0==--n.referenceCount\u0026\u0026this._removeInactiveBinding(n)}}_lendAction(t){const e=this._actions,n=t._cacheIndex,i=this._nActiveActions++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackAction(t){const e=this._actions,n=t._cacheIndex,i=--this._nActiveActions,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_addInactiveBinding(t,e,n){const i=this._bindingsByRootAndName,r=this._bindings;let s=i[e];void 0===s\u0026\u0026(s={},i[e]=s),s[n]=t,t._cacheIndex=r.length,r.push(t)}_removeInactiveBinding(t){const e=this._bindings,n=t.binding,i=n.rootNode.uuid,r=n.path,s=this._bindingsByRootAndName,a=s[i],o=e[e.length-1],l=t._cacheIndex;o._cacheIndex=l,e[l]=o,e.pop(),delete a[r],0===Object.keys(a).length\u0026\u0026delete s[i]}_lendBinding(t){const e=this._bindings,n=t._cacheIndex,i=this._nActiveBindings++,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_takeBackBinding(t){const e=this._bindings,n=t._cacheIndex,i=--this._nActiveBindings,r=e[i];t._cacheIndex=i,e[i]=t,r._cacheIndex=n,e[n]=r}_lendControlInterpolant(){const t=this._controlInterpolants,e=this._nActiveControlInterpolants++;let n=t[e];return void 0===n\u0026\u0026(n=new Mu(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),n.__cacheIndex=e,t[e]=n),n}_takeBackControlInterpolant(t){const e=this._controlInterpolants,n=t.__cacheIndex,i=--this._nActiveControlInterpolants,r=e[i];t.__cacheIndex=i,e[i]=t,r.__cacheIndex=n,e[n]=r}clipAction(t,e,n){const i=e||this._root,r=i.uuid;let s=\"string\"==typeof t?Iu.findByName(i,t):t;const a=null!==s?s.uuid:t,o=this._actionsByClip[a];let l=null;if(void 0===n\u0026\u0026(n=null!==s?s.blendMode:je),void 0!==o){const t=o.actionByRoot[r];if(void 0!==t\u0026\u0026t.blendMode===n)return t;l=o.knownActions[0],null===s\u0026\u0026(s=l._clip)}if(null===s)return null;const c=new Rd(this,s,e,n);return this._bindAction(c,l),this._addInactiveAction(c,a,r),c}existingAction(t,e){const n=e||this._root,i=n.uuid,r=\"string\"==typeof t?Iu.findByName(n,t):t,s=r?r.uuid:t,a=this._actionsByClip[s];return void 0!==a\u0026\u0026a.actionByRoot[i]||null}stopAllAction(){const t=this._actions;for(let e=this._nActiveActions-1;e\u003e=0;--e)t[e].stop();return this}update(t){t*=this.timeScale;const e=this._actions,n=this._nActiveActions,i=this.time+=t,r=Math.sign(t),s=this._accuIndex^=1;for(let a=0;a!==n;++a){e[a]._update(i,t,r,s)}const a=this._bindings,o=this._nActiveBindings;for(let t=0;t!==o;++t)a[t].apply(s);return this}setTime(t){this.time=0;for(let t=0;t\u003cthis._actions.length;t++)this._actions[t].time=0;return this.update(t)}getRoot(){return this._root}uncacheClip(t){const e=this._actions,n=t.uuid,i=this._actionsByClip,r=i[n];if(void 0!==r){const t=r.knownActions;for(let n=0,i=t.length;n!==i;++n){const i=t[n];this._deactivateAction(i);const r=i._cacheIndex,s=e[e.length-1];i._cacheIndex=null,i._byClipCacheIndex=null,s._cacheIndex=r,e[r]=s,e.pop(),this._removeInactiveBindingsForAction(i)}delete i[n]}}uncacheRoot(t){const e=t.uuid,n=this._actionsByClip;for(const t in n){const i=n[t].actionByRoot[e];void 0!==i\u0026\u0026(this._deactivateAction(i),this._removeInactiveAction(i))}const i=this._bindingsByRootAndName[e];if(void 0!==i)for(const t in i){const e=i[t];e.restoreOriginalState(),this._removeInactiveBinding(e)}}uncacheAction(t,e){const n=this.existingAction(t,e);null!==n\u0026\u0026(this._deactivateAction(n),this._removeInactiveAction(n))}}Cd.prototype._controlInterpolantsResultBuffer=new Float32Array(1);class Pd{constructor(t){\"string\"==typeof t\u0026\u0026(console.warn(\"THREE.Uniform: Type parameter is no longer needed.\"),t=arguments[1]),this.value=t}clone(){return new Pd(void 0===this.value.clone?this.value:this.value.clone())}}class Dd extends il{constructor(t,e,n=1){super(t,e),this.meshPerAttribute=n||1}copy(t){return super.copy(t),this.meshPerAttribute=t.meshPerAttribute,this}clone(t){const e=super.clone(t);return e.meshPerAttribute=this.meshPerAttribute,e}toJSON(t){const e=super.toJSON(t);return e.isInstancedInterleavedBuffer=!0,e.meshPerAttribute=this.meshPerAttribute,e}}Dd.prototype.isInstancedInterleavedBuffer=!0;class Id{constructor(t,e,n,i,r){this.buffer=t,this.type=e,this.itemSize=n,this.elementSize=i,this.count=r,this.version=0}set needsUpdate(t){!0===t\u0026\u0026this.version++}setBuffer(t){return this.buffer=t,this}setType(t,e){return this.type=t,this.elementSize=e,this}setItemSize(t){return this.itemSize=t,this}setCount(t){return this.count=t,this}}Id.prototype.isGLBufferAttribute=!0;class Nd{constructor(t,e,n=0,i=1/0){this.ray=new Oi(t,e),this.near=n,this.far=i,this.camera=null,this.layers=new Zi,this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}}}set(t,e){this.ray.set(t,e)}setFromCamera(t,e){e\u0026\u0026e.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(e.matrixWorld),this.ray.direction.set(t.x,t.y,.5).unproject(e).sub(this.ray.origin).normalize(),this.camera=e):e\u0026\u0026e.isOrthographicCamera?(this.ray.origin.set(t.x,t.y,(e.near+e.far)/(e.near-e.far)).unproject(e),this.ray.direction.set(0,0,-1).transformDirection(e.matrixWorld),this.camera=e):console.error(\"THREE.Raycaster: Unsupported camera type: \"+e.type)}intersectObject(t,e=!1,n=[]){return Bd(t,this,n,e),n.sort(zd),n}intersectObjects(t,e=!1,n=[]){for(let i=0,r=t.length;i\u003cr;i++)Bd(t[i],this,n,e);return n.sort(zd),n}}function zd(t,e){return t.distance-e.distance}function Bd(t,e,n,i){if(t.layers.test(e.layers)\u0026\u0026t.raycast(e,n),!0===i){const i=t.children;for(let t=0,r=i.length;t\u003cr;t++)Bd(i[t],e,n,!0)}}class Od{constructor(t=1,e=0,n=0){return this.radius=t,this.phi=e,this.theta=n,this}set(t,e,n){return this.radius=t,this.phi=e,this.theta=n,this}copy(t){return this.radius=t.radius,this.phi=t.phi,this.theta=t.theta,this}makeSafe(){return this.phi=Math.max(1e-6,Math.min(Math.PI-1e-6,this.phi)),this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,n){return this.radius=Math.sqrt(t*t+e*e+n*n),0===this.radius?(this.theta=0,this.phi=0):(this.theta=Math.atan2(t,n),this.phi=Math.acos(kn(e/this.radius,-1,1))),this}clone(){return(new this.constructor).copy(this)}}class Fd{constructor(t=1,e=0,n=0){return this.radius=t,this.theta=e,this.y=n,this}set(t,e,n){return this.radius=t,this.theta=e,this.y=n,this}copy(t){return this.radius=t.radius,this.theta=t.theta,this.y=t.y,this}setFromVector3(t){return this.setFromCartesianCoords(t.x,t.y,t.z)}setFromCartesianCoords(t,e,n){return this.radius=Math.sqrt(t*t+n*n),this.theta=Math.atan2(t,n),this.y=e,this}clone(){return(new this.constructor).copy(this)}}const Hd=new Zn;class Ud{constructor(t=new Zn(1/0,1/0),e=new Zn(-1/0,-1/0)){this.min=t,this.max=e}set(t,e){return this.min.copy(t),this.max.copy(e),this}setFromPoints(t){this.makeEmpty();for(let e=0,n=t.length;e\u003cn;e++)this.expandByPoint(t[e]);return this}setFromCenterAndSize(t,e){const n=Hd.copy(e).multiplyScalar(.5);return this.min.copy(t).sub(n),this.max.copy(t).add(n),this}clone(){return(new this.constructor).copy(this)}copy(t){return this.min.copy(t.min),this.max.copy(t.max),this}makeEmpty(){return this.min.x=this.min.y=1/0,this.max.x=this.max.y=-1/0,this}isEmpty(){return this.max.x\u003cthis.min.x||this.max.y\u003cthis.min.y}getCenter(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box2: .getCenter() target is now required\"),t=new Zn),this.isEmpty()?t.set(0,0):t.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Box2: .getSize() target is now required\"),t=new Zn),this.isEmpty()?t.set(0,0):t.subVectors(this.max,this.min)}expandByPoint(t){return this.min.min(t),this.max.max(t),this}expandByVector(t){return this.min.sub(t),this.max.add(t),this}expandByScalar(t){return this.min.addScalar(-t),this.max.addScalar(t),this}containsPoint(t){return!(t.x\u003cthis.min.x||t.x\u003ethis.max.x||t.y\u003cthis.min.y||t.y\u003ethis.max.y)}containsBox(t){return this.min.x\u003c=t.min.x\u0026\u0026t.max.x\u003c=this.max.x\u0026\u0026this.min.y\u003c=t.min.y\u0026\u0026t.max.y\u003c=this.max.y}getParameter(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box2: .getParameter() target is now required\"),e=new Zn),e.set((t.x-this.min.x)/(this.max.x-this.min.x),(t.y-this.min.y)/(this.max.y-this.min.y))}intersectsBox(t){return!(t.max.x\u003cthis.min.x||t.min.x\u003ethis.max.x||t.max.y\u003cthis.min.y||t.min.y\u003ethis.max.y)}clampPoint(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Box2: .clampPoint() target is now required\"),e=new Zn),e.copy(t).clamp(this.min,this.max)}distanceToPoint(t){return Hd.copy(t).clamp(this.min,this.max).sub(t).length()}intersect(t){return this.min.max(t.min),this.max.min(t.max),this}union(t){return this.min.min(t.min),this.max.max(t.max),this}translate(t){return this.min.add(t),this.max.add(t),this}equals(t){return t.min.equals(this.min)\u0026\u0026t.max.equals(this.max)}}Ud.prototype.isBox2=!0;const Gd=new oi,kd=new oi;class Vd{constructor(t=new oi,e=new oi){this.start=t,this.end=e}set(t,e){return this.start.copy(t),this.end.copy(e),this}copy(t){return this.start.copy(t.start),this.end.copy(t.end),this}getCenter(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Line3: .getCenter() target is now required\"),t=new oi),t.addVectors(this.start,this.end).multiplyScalar(.5)}delta(t){return void 0===t\u0026\u0026(console.warn(\"THREE.Line3: .delta() target is now required\"),t=new oi),t.subVectors(this.end,this.start)}distanceSq(){return this.start.distanceToSquared(this.end)}distance(){return this.start.distanceTo(this.end)}at(t,e){return void 0===e\u0026\u0026(console.warn(\"THREE.Line3: .at() target is now required\"),e=new oi),this.delta(e).multiplyScalar(t).add(this.start)}closestPointToPointParameter(t,e){Gd.subVectors(t,this.start),kd.subVectors(this.end,this.start);const n=kd.dot(kd);let i=kd.dot(Gd)/n;return e\u0026\u0026(i=kn(i,0,1)),i}closestPointToPoint(t,e,n){const i=this.closestPointToPointParameter(t,e);return void 0===n\u0026\u0026(console.warn(\"THREE.Line3: .closestPointToPoint() target is now required\"),n=new oi),this.delta(n).multiplyScalar(i).add(this.start)}applyMatrix4(t){return this.start.applyMatrix4(t),this.end.applyMatrix4(t),this}equals(t){return t.start.equals(this.start)\u0026\u0026t.end.equals(this.end)}clone(){return(new this.constructor).copy(this)}}class Wd extends cr{constructor(t){super(),this.material=t,this.render=function(){},this.hasPositions=!1,this.hasNormals=!1,this.hasColors=!1,this.hasUvs=!1,this.positionArray=null,this.normalArray=null,this.colorArray=null,this.uvArray=null,this.count=0}}Wd.prototype.isImmediateRenderObject=!0;const jd=new oi;class qd extends cr{constructor(t,e){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=e;const n=new rs,i=[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 t=0,e=1,n=32;t\u003cn;t++,e++){const r=t/n*Math.PI*2,s=e/n*Math.PI*2;i.push(Math.cos(r),Math.sin(r),1,Math.cos(s),Math.sin(s),1)}n.setAttribute(\"position\",new qr(i,3));const r=new Gl({fog:!1,toneMapped:!1});this.cone=new Jl(n,r),this.add(this.cone),this.update()}dispose(){this.cone.geometry.dispose(),this.cone.material.dispose()}update(){this.light.updateMatrixWorld();const t=this.light.distance?this.light.distance:1e3,e=t*Math.tan(this.light.angle);this.cone.scale.set(e,e,t),jd.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(jd),void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)}}const Xd=new oi,Yd=new Fi,Zd=new Fi;class Jd extends Jl{constructor(t){const e=function t(e){const n=[];e\u0026\u0026e.isBone\u0026\u0026n.push(e);for(let i=0;i\u003ce.children.length;i++)n.push.apply(n,t(e.children[i]));return n}(t),n=new rs,i=[],r=[],s=new Ir(0,0,1),a=new Ir(0,1,0);for(let t=0;t\u003ce.length;t++){const n=e[t];n.parent\u0026\u0026n.parent.isBone\u0026\u0026(i.push(0,0,0),i.push(0,0,0),r.push(s.r,s.g,s.b),r.push(a.r,a.g,a.b))}n.setAttribute(\"position\",new qr(i,3)),n.setAttribute(\"color\",new qr(r,3));super(n,new Gl({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0})),this.type=\"SkeletonHelper\",this.isSkeletonHelper=!0,this.root=t,this.bones=e,this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1}updateMatrixWorld(t){const e=this.bones,n=this.geometry,i=n.getAttribute(\"position\");Zd.copy(this.root.matrixWorld).invert();for(let t=0,n=0;t\u003ce.length;t++){const r=e[t];r.parent\u0026\u0026r.parent.isBone\u0026\u0026(Yd.multiplyMatrices(Zd,r.matrixWorld),Xd.setFromMatrixPosition(Yd),i.setXYZ(n,Xd.x,Xd.y,Xd.z),Yd.multiplyMatrices(Zd,r.parent.matrixWorld),Xd.setFromMatrixPosition(Yd),i.setXYZ(n+1,Xd.x,Xd.y,Xd.z),n+=2)}n.getAttribute(\"position\").needsUpdate=!0,super.updateMatrixWorld(t)}}class Qd extends ws{constructor(t,e,n){super(new eu(e,4,2),new Nr({wireframe:!0,fog:!1,toneMapped:!1})),this.light=t,this.light.updateMatrixWorld(),this.color=n,this.type=\"PointLightHelper\",this.matrix=this.light.matrixWorld,this.matrixAutoUpdate=!1,this.update()}dispose(){this.geometry.dispose(),this.material.dispose()}update(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)}}const Kd=new oi,$d=new Ir,tp=new Ir;class ep extends cr{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n;const i=new Qc(e);i.rotateY(.5*Math.PI),this.material=new Nr({wireframe:!0,fog:!1,toneMapped:!1}),void 0===this.color\u0026\u0026(this.material.vertexColors=!0);const r=i.getAttribute(\"position\"),s=new Float32Array(3*r.count);i.setAttribute(\"color\",new Or(s,3)),this.add(new ws(i,this.material)),this.update()}dispose(){this.children[0].geometry.dispose(),this.children[0].material.dispose()}update(){const t=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{const e=t.geometry.getAttribute(\"color\");$d.copy(this.light.color),tp.copy(this.light.groundColor);for(let t=0,n=e.count;t\u003cn;t++){const i=t\u003cn/2?$d:tp;e.setXYZ(t,i.r,i.g,i.b)}e.needsUpdate=!0}t.lookAt(Kd.setFromMatrixPosition(this.light.matrixWorld).negate())}}class np extends Jl{constructor(t=10,e=10,n=4473924,i=8947848){n=new Ir(n),i=new Ir(i);const r=e/2,s=t/e,a=t/2,o=[],l=[];for(let t=0,c=0,u=-a;t\u003c=e;t++,u+=s){o.push(-a,0,u,a,0,u),o.push(u,0,-a,u,0,a);const e=t===r?n:i;e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3,e.toArray(l,c),c+=3}const c=new rs;c.setAttribute(\"position\",new qr(o,3)),c.setAttribute(\"color\",new qr(l,3));super(c,new Gl({vertexColors:!0,toneMapped:!1})),this.type=\"GridHelper\"}}class ip extends Jl{constructor(t=10,e=16,n=8,i=64,r=4473924,s=8947848){r=new Ir(r),s=new Ir(s);const a=[],o=[];for(let n=0;n\u003c=e;n++){const i=n/e*(2*Math.PI),l=Math.sin(i)*t,c=Math.cos(i)*t;a.push(0,0,0),a.push(l,0,c);const u=1\u0026n?r:s;o.push(u.r,u.g,u.b),o.push(u.r,u.g,u.b)}for(let e=0;e\u003c=n;e++){const l=1\u0026e?r:s,c=t-t/n*e;for(let t=0;t\u003ci;t++){let e=t/i*(2*Math.PI),n=Math.sin(e)*c,r=Math.cos(e)*c;a.push(n,0,r),o.push(l.r,l.g,l.b),e=(t+1)/i*(2*Math.PI),n=Math.sin(e)*c,r=Math.cos(e)*c,a.push(n,0,r),o.push(l.r,l.g,l.b)}}const l=new rs;l.setAttribute(\"position\",new qr(a,3)),l.setAttribute(\"color\",new qr(o,3));super(l,new Gl({vertexColors:!0,toneMapped:!1})),this.type=\"PolarGridHelper\"}}const rp=new oi,sp=new oi,ap=new oi;class op extends cr{constructor(t,e,n){super(),this.light=t,this.light.updateMatrixWorld(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.color=n,void 0===e\u0026\u0026(e=1);let i=new rs;i.setAttribute(\"position\",new qr([-e,e,0,e,e,0,e,-e,0,-e,-e,0,-e,e,0],3));const r=new Gl({fog:!1,toneMapped:!1});this.lightPlane=new Xl(i,r),this.add(this.lightPlane),i=new rs,i.setAttribute(\"position\",new qr([0,0,0,0,0,1],3)),this.targetLine=new Xl(i,r),this.add(this.targetLine),this.update()}dispose(){this.lightPlane.geometry.dispose(),this.lightPlane.material.dispose(),this.targetLine.geometry.dispose(),this.targetLine.material.dispose()}update(){rp.setFromMatrixPosition(this.light.matrixWorld),sp.setFromMatrixPosition(this.light.target.matrixWorld),ap.subVectors(sp,rp),this.lightPlane.lookAt(sp),void 0!==this.color?(this.lightPlane.material.color.set(this.color),this.targetLine.material.color.set(this.color)):(this.lightPlane.material.color.copy(this.light.color),this.targetLine.material.color.copy(this.light.color)),this.targetLine.lookAt(sp),this.targetLine.scale.z=ap.length()}}const lp=new oi,cp=new Rs;class up extends Jl{constructor(t){const e=new rs,n=new Gl({color:16777215,vertexColors:!0,toneMapped:!1}),i=[],r=[],s={},a=new Ir(16755200),o=new Ir(16711680),l=new Ir(43775),c=new Ir(16777215),u=new Ir(3355443);function h(t,e,n){d(t,n),d(e,n)}function d(t,e){i.push(0,0,0),r.push(e.r,e.g,e.b),void 0===s[t]\u0026\u0026(s[t]=[]),s[t].push(i.length/3-1)}h(\"n1\",\"n2\",a),h(\"n2\",\"n4\",a),h(\"n4\",\"n3\",a),h(\"n3\",\"n1\",a),h(\"f1\",\"f2\",a),h(\"f2\",\"f4\",a),h(\"f4\",\"f3\",a),h(\"f3\",\"f1\",a),h(\"n1\",\"f1\",a),h(\"n2\",\"f2\",a),h(\"n3\",\"f3\",a),h(\"n4\",\"f4\",a),h(\"p\",\"n1\",o),h(\"p\",\"n2\",o),h(\"p\",\"n3\",o),h(\"p\",\"n4\",o),h(\"u1\",\"u2\",l),h(\"u2\",\"u3\",l),h(\"u3\",\"u1\",l),h(\"c\",\"t\",c),h(\"p\",\"c\",u),h(\"cn1\",\"cn2\",u),h(\"cn3\",\"cn4\",u),h(\"cf1\",\"cf2\",u),h(\"cf3\",\"cf4\",u),e.setAttribute(\"position\",new qr(i,3)),e.setAttribute(\"color\",new qr(r,3)),super(e,n),this.type=\"CameraHelper\",this.camera=t,this.camera.updateProjectionMatrix\u0026\u0026this.camera.updateProjectionMatrix(),this.matrix=t.matrixWorld,this.matrixAutoUpdate=!1,this.pointMap=s,this.update()}update(){const t=this.geometry,e=this.pointMap;cp.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse),hp(\"c\",e,t,cp,0,0,-1),hp(\"t\",e,t,cp,0,0,1),hp(\"n1\",e,t,cp,-1,-1,-1),hp(\"n2\",e,t,cp,1,-1,-1),hp(\"n3\",e,t,cp,-1,1,-1),hp(\"n4\",e,t,cp,1,1,-1),hp(\"f1\",e,t,cp,-1,-1,1),hp(\"f2\",e,t,cp,1,-1,1),hp(\"f3\",e,t,cp,-1,1,1),hp(\"f4\",e,t,cp,1,1,1),hp(\"u1\",e,t,cp,.7,1.1,-1),hp(\"u2\",e,t,cp,-.7,1.1,-1),hp(\"u3\",e,t,cp,0,2,-1),hp(\"cf1\",e,t,cp,-1,0,1),hp(\"cf2\",e,t,cp,1,0,1),hp(\"cf3\",e,t,cp,0,-1,1),hp(\"cf4\",e,t,cp,0,1,1),hp(\"cn1\",e,t,cp,-1,0,-1),hp(\"cn2\",e,t,cp,1,0,-1),hp(\"cn3\",e,t,cp,0,-1,-1),hp(\"cn4\",e,t,cp,0,1,-1),t.getAttribute(\"position\").needsUpdate=!0}dispose(){this.geometry.dispose(),this.material.dispose()}}function hp(t,e,n,i,r,s,a){lp.set(r,s,a).unproject(i);const o=e[t];if(void 0!==o){const t=n.getAttribute(\"position\");for(let e=0,n=o.length;e\u003cn;e++)t.setXYZ(o[e],lp.x,lp.y,lp.z)}}const dp=new ui;class pp extends Jl{constructor(t,e=16776960){const n=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]),i=new Float32Array(24),r=new rs;r.setIndex(new Or(n,1)),r.setAttribute(\"position\",new Or(i,3)),super(r,new Gl({color:e,toneMapped:!1})),this.object=t,this.type=\"BoxHelper\",this.matrixAutoUpdate=!1,this.update()}update(t){if(void 0!==t\u0026\u0026console.warn(\"THREE.BoxHelper: .update() has no longer arguments.\"),void 0!==this.object\u0026\u0026dp.setFromObject(this.object),dp.isEmpty())return;const e=dp.min,n=dp.max,i=this.geometry.attributes.position,r=i.array;r[0]=n.x,r[1]=n.y,r[2]=n.z,r[3]=e.x,r[4]=n.y,r[5]=n.z,r[6]=e.x,r[7]=e.y,r[8]=n.z,r[9]=n.x,r[10]=e.y,r[11]=n.z,r[12]=n.x,r[13]=n.y,r[14]=e.z,r[15]=e.x,r[16]=n.y,r[17]=e.z,r[18]=e.x,r[19]=e.y,r[20]=e.z,r[21]=n.x,r[22]=e.y,r[23]=e.z,i.needsUpdate=!0,this.geometry.computeBoundingSphere()}setFromObject(t){return this.object=t,this.update(),this}copy(t){return Jl.prototype.copy.call(this,t),this.object=t.object,this}}class fp extends Jl{constructor(t,e=16776960){const n=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]),i=new rs;i.setIndex(new Or(n,1)),i.setAttribute(\"position\",new qr([1,1,1,-1,1,1,-1,-1,1,1,-1,1,1,1,-1,-1,1,-1,-1,-1,-1,1,-1,-1],3)),super(i,new Gl({color:e,toneMapped:!1})),this.box=t,this.type=\"Box3Helper\",this.geometry.computeBoundingSphere()}updateMatrixWorld(t){const e=this.box;e.isEmpty()||(e.getCenter(this.position),e.getSize(this.scale),this.scale.multiplyScalar(.5),super.updateMatrixWorld(t))}}class mp extends Xl{constructor(t,e=1,n=16776960){const i=n,r=new rs;r.setAttribute(\"position\",new qr([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,0,1,0,0,0],3)),r.computeBoundingSphere(),super(r,new Gl({color:i,toneMapped:!1})),this.type=\"PlaneHelper\",this.plane=t,this.size=e;const s=new rs;s.setAttribute(\"position\",new qr([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3)),s.computeBoundingSphere(),this.add(new ws(s,new Nr({color:i,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}updateMatrixWorld(t){let e=-this.plane.constant;Math.abs(e)\u003c1e-8\u0026\u0026(e=1e-8),this.scale.set(.5*this.size,.5*this.size,e),this.children[0].material.side=e\u003c0?m:f,this.lookAt(this.plane.normal),super.updateMatrixWorld(t)}}const gp=new oi;let vp,yp;class xp extends cr{constructor(t=new oi(0,0,1),e=new oi(0,0,0),n=1,i=16776960,r=.2*n,s=.2*r){super(),this.type=\"ArrowHelper\",void 0===vp\u0026\u0026(vp=new rs,vp.setAttribute(\"position\",new qr([0,0,0,0,1,0],3)),yp=new uc(0,.5,1,5,1),yp.translate(0,-.5,0)),this.position.copy(e),this.line=new Xl(vp,new Gl({color:i,toneMapped:!1})),this.line.matrixAutoUpdate=!1,this.add(this.line),this.cone=new ws(yp,new Nr({color:i,toneMapped:!1})),this.cone.matrixAutoUpdate=!1,this.add(this.cone),this.setDirection(t),this.setLength(n,r,s)}setDirection(t){if(t.y\u003e.99999)this.quaternion.set(0,0,0,1);else if(t.y\u003c-.99999)this.quaternion.set(1,0,0,0);else{gp.set(t.z,0,-t.x).normalize();const e=Math.acos(t.y);this.quaternion.setFromAxisAngle(gp,e)}}setLength(t,e=.2*t,n=.2*e){this.line.scale.set(1,Math.max(1e-4,t-e),1),this.line.updateMatrix(),this.cone.scale.set(n,e,n),this.cone.position.y=t,this.cone.updateMatrix()}setColor(t){this.line.material.color.set(t),this.cone.material.color.set(t)}copy(t){return super.copy(t,!1),this.line.copy(t.line),this.cone.copy(t.cone),this}}class _p extends Jl{constructor(t=1){const e=[0,0,0,t,0,0,0,0,0,0,t,0,0,0,0,0,0,t],n=new rs;n.setAttribute(\"position\",new qr(e,3)),n.setAttribute(\"color\",new qr([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));super(n,new Gl({vertexColors:!0,toneMapped:!1})),this.type=\"AxesHelper\"}dispose(){this.geometry.dispose(),this.material.dispose()}}const bp=new Float32Array(1),wp=new Int32Array(bp.buffer);class Mp{static toHalfFloat(t){bp[0]=t;const e=wp[0];let n=e\u003e\u003e16\u002632768,i=e\u003e\u003e12\u00262047;const r=e\u003e\u003e23\u0026255;return r\u003c103?n:r\u003e142?(n|=31744,n|=(255==r?0:1)\u0026\u00268388607\u0026e,n):r\u003c113?(i|=2048,n|=(i\u003e\u003e114-r)+(i\u003e\u003e113-r\u00261),n):(n|=r-112\u003c\u003c10|i\u003e\u003e1,n+=1\u0026i,n)}}const Sp=Math.pow(2,8),Tp=[.125,.215,.35,.446,.526,.582],Ep=5+Tp.length,Ap={[Je]:0,[Qe]:1,[$e]:2,[en]:3,[nn]:4,[rn]:5,[Ke]:6},Lp=new Nr({side:m,depthWrite:!1,depthTest:!1}),Rp=new ws(new Ss,Lp),Cp=new Rh,{_lodPlanes:Pp,_sizeLods:Dp,_sigmas:Ip}=kp(),Np=new Ir;let zp=null;const Bp=(1+Math.sqrt(5))/2,Op=1/Bp,Fp=[new oi(1,1,1),new oi(-1,1,1),new oi(1,1,-1),new oi(-1,1,-1),new oi(0,Bp,Op),new oi(0,Bp,-Op),new oi(Op,0,Bp),new oi(-Op,0,Bp),new oi(Bp,Op,0),new oi(-Bp,Op,0)];function Hp(t){const e=Math.max(t.r,t.g,t.b),n=Math.min(Math.max(Math.ceil(Math.log2(e)),-128),127);t.multiplyScalar(Math.pow(2,-n));return(n+128)/255}class Up{constructor(t){this._renderer=t,this._pingPongRenderTarget=null,this._blurMaterial=function(t){const e=new Float32Array(t),n=new oi(0,1,0);return new uu({name:\"SphericalGaussianBlur\",defines:{n:t},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:e},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n},inputEncoding:{value:Ap[Je]},outputEncoding:{value:Ap[Je]}},vertexShader:Xp(),fragmentShader:`\\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${Yp()}\\n\\n\\t\\t\\t#define ENVMAP_TYPE_CUBE_UV\\n\\t\\t\\t#include \u003ccube_uv_reflection_fragment\u003e\\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 \u003c n; i++ ) {\\n\\n\\t\\t\\t\\t\\tif ( i \u003e= 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\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:x,depthTest:!1,depthWrite:!1})}(20),this._equirectShader=null,this._cubemapShader=null,this._compileMaterial(this._blurMaterial)}fromScene(t,e=0,n=.1,i=100){zp=this._renderer.getRenderTarget();const r=this._allocateTargets();return this._sceneToCubeUV(t,n,i,r),e\u003e0\u0026\u0026this._blur(r,0,0,e),this._applyPMREM(r),this._cleanup(r),r}fromEquirectangular(t){return this._fromTexture(t)}fromCubemap(t){return this._fromTexture(t)}compileCubemapShader(){null===this._cubemapShader\u0026\u0026(this._cubemapShader=qp(),this._compileMaterial(this._cubemapShader))}compileEquirectangularShader(){null===this._equirectShader\u0026\u0026(this._equirectShader=jp(),this._compileMaterial(this._equirectShader))}dispose(){this._blurMaterial.dispose(),null!==this._cubemapShader\u0026\u0026this._cubemapShader.dispose(),null!==this._equirectShader\u0026\u0026this._equirectShader.dispose();for(let t=0;t\u003cPp.length;t++)Pp[t].dispose()}_cleanup(t){this._pingPongRenderTarget.dispose(),this._renderer.setRenderTarget(zp),t.scissorTest=!1,Wp(t,0,0,t.width,t.height)}_fromTexture(t){zp=this._renderer.getRenderTarget();const e=this._allocateTargets(t);return this._textureToCubeUV(t,e),this._applyPMREM(e),this._cleanup(e),e}_allocateTargets(t){const e={magFilter:ft,minFilter:ft,generateMipmaps:!1,type:St,format:Gt,encoding:Gp(t)?t.encoding:$e,depthBuffer:!1},n=Vp(e);return n.depthBuffer=!t,this._pingPongRenderTarget=Vp(e),n}_compileMaterial(t){const e=new ws(Pp[0],t);this._renderer.compile(e,Cp)}_sceneToCubeUV(t,e,n,i){const r=new Cs(90,1,e,n),s=[1,-1,1,1,1,1],a=[1,1,1,-1,-1,-1],o=this._renderer,l=o.autoClear,c=o.outputEncoding,u=o.toneMapping;o.getClearColor(Np),o.toneMapping=K,o.outputEncoding=Je,o.autoClear=!1;let h=!1;const d=t.background;if(d){if(d.isColor){Lp.color.copy(d).convertSRGBToLinear(),t.background=null;const e=Hp(Lp.color);Lp.opacity=e,h=!0}}else{Lp.color.copy(Np).convertSRGBToLinear();const t=Hp(Lp.color);Lp.opacity=t,h=!0}for(let e=0;e\u003c6;e++){const n=e%3;0==n?(r.up.set(0,s[e],0),r.lookAt(a[e],0,0)):1==n?(r.up.set(0,0,s[e]),r.lookAt(0,a[e],0)):(r.up.set(0,s[e],0),r.lookAt(0,0,a[e])),Wp(i,n*Sp,e\u003e2?Sp:0,Sp,Sp),o.setRenderTarget(i),h\u0026\u0026o.render(Rp,r),o.render(t,r)}o.toneMapping=u,o.outputEncoding=c,o.autoClear=l}_textureToCubeUV(t,e){const n=this._renderer;t.isCubeTexture?null==this._cubemapShader\u0026\u0026(this._cubemapShader=qp()):null==this._equirectShader\u0026\u0026(this._equirectShader=jp());const i=t.isCubeTexture?this._cubemapShader:this._equirectShader,r=new ws(Pp[0],i),s=i.uniforms;s.envMap.value=t,t.isCubeTexture||s.texelSize.value.set(1/t.image.width,1/t.image.height),s.inputEncoding.value=Ap[t.encoding],s.outputEncoding.value=Ap[e.texture.encoding],Wp(e,0,0,3*Sp,2*Sp),n.setRenderTarget(e),n.render(r,Cp)}_applyPMREM(t){const e=this._renderer,n=e.autoClear;e.autoClear=!1;for(let e=1;e\u003cEp;e++){const n=Math.sqrt(Ip[e]*Ip[e]-Ip[e-1]*Ip[e-1]),i=Fp[(e-1)%Fp.length];this._blur(t,e-1,e,n,i)}e.autoClear=n}_blur(t,e,n,i,r){const s=this._pingPongRenderTarget;this._halfBlur(t,s,e,n,i,\"latitudinal\",r),this._halfBlur(s,t,n,n,i,\"longitudinal\",r)}_halfBlur(t,e,n,i,r,s,a){const o=this._renderer,l=this._blurMaterial;\"latitudinal\"!==s\u0026\u0026\"longitudinal\"!==s\u0026\u0026console.error(\"blur direction must be either latitudinal or longitudinal!\");const c=new ws(Pp[i],l),u=l.uniforms,h=Dp[n]-1,d=isFinite(r)?Math.PI/(2*h):2*Math.PI/39,p=r/d,f=isFinite(r)?1+Math.floor(3*p):20;f\u003e20\u0026\u0026console.warn(`sigmaRadians, ${r}, is too large and will clip, as it requested ${f} samples when the maximum is set to 20`);const m=[];let g=0;for(let t=0;t\u003c20;++t){const e=t/p,n=Math.exp(-e*e/2);m.push(n),0==t?g+=n:t\u003cf\u0026\u0026(g+=2*n)}for(let t=0;t\u003cm.length;t++)m[t]=m[t]/g;u.envMap.value=t.texture,u.samples.value=f,u.weights.value=m,u.latitudinal.value=\"latitudinal\"===s,a\u0026\u0026(u.poleAxis.value=a),u.dTheta.value=d,u.mipInt.value=8-n,u.inputEncoding.value=Ap[t.texture.encoding],u.outputEncoding.value=Ap[t.texture.encoding];const v=Dp[i];Wp(e,3*Math.max(0,Sp-2*v),(0===i?0:2*Sp)+2*v*(i\u003e4?i-8+4:0),3*v,2*v),o.setRenderTarget(e),o.render(c,Cp)}}function Gp(t){return void 0!==t\u0026\u0026t.type===St\u0026\u0026(t.encoding===Je||t.encoding===Qe||t.encoding===Ke)}function kp(){const t=[],e=[],n=[];let i=8;for(let r=0;r\u003cEp;r++){const s=Math.pow(2,i);e.push(s);let a=1/s;r\u003e4?a=Tp[r-8+4-1]:0==r\u0026\u0026(a=0),n.push(a);const o=1/(s-1),l=-o/2,c=1+o/2,u=[l,l,c,l,c,c,l,l,c,c,l,c],h=6,d=6,p=3,f=2,m=1,g=new Float32Array(p*d*h),v=new Float32Array(f*d*h),y=new Float32Array(m*d*h);for(let t=0;t\u003ch;t++){const e=t%3*2/3-1,n=t\u003e2?0:-1,i=[e,n,0,e+2/3,n,0,e+2/3,n+1,0,e,n,0,e+2/3,n+1,0,e,n+1,0];g.set(i,p*d*t),v.set(u,f*d*t);const r=[t,t,t,t,t,t];y.set(r,m*d*t)}const x=new rs;x.setAttribute(\"position\",new Or(g,p)),x.setAttribute(\"uv\",new Or(v,f)),x.setAttribute(\"faceIndex\",new Or(y,m)),t.push(x),i\u003e4\u0026\u0026i--}return{_lodPlanes:t,_sizeLods:e,_sigmas:n}}function Vp(t){const e=new ii(3*Sp,3*Sp,t);return e.texture.mapping=ct,e.texture.name=\"PMREM.cubeUv\",e.scissorTest=!0,e}function Wp(t,e,n,i,r){t.viewport.set(e,n,i,r),t.scissor.set(e,n,i,r)}function jp(){const t=new Zn(1,1);return new uu({name:\"EquirectangularToCubeUV\",uniforms:{envMap:{value:null},texelSize:{value:t},inputEncoding:{value:Ap[Je]},outputEncoding:{value:Ap[Je]}},vertexShader:Xp(),fragmentShader:`\\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 vec2 texelSize;\\n\\n\\t\\t\\t${Yp()}\\n\\n\\t\\t\\t#include \u003ccommon\u003e\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\n\\t\\t\\t\\tvec3 outputDirection = normalize( vOutputDirection );\\n\\t\\t\\t\\tvec2 uv = equirectUv( outputDirection );\\n\\n\\t\\t\\t\\tvec2 f = fract( uv / texelSize - 0.5 );\\n\\t\\t\\t\\tuv -= f * texelSize;\\n\\t\\t\\t\\tvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x += texelSize.x;\\n\\t\\t\\t\\tvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.y += texelSize.y;\\n\\t\\t\\t\\tvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\t\\t\\t\\tuv.x -= texelSize.x;\\n\\t\\t\\t\\tvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;\\n\\n\\t\\t\\t\\tvec3 tm = mix( tl, tr, f.x );\\n\\t\\t\\t\\tvec3 bm = mix( bl, br, f.x );\\n\\t\\t\\t\\tgl_FragColor.rgb = mix( tm, bm, f.y );\\n\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:x,depthTest:!1,depthWrite:!1})}function qp(){return new uu({name:\"CubemapToCubeUV\",uniforms:{envMap:{value:null},inputEncoding:{value:Ap[Je]},outputEncoding:{value:Ap[Je]}},vertexShader:Xp(),fragmentShader:`\\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 samplerCube envMap;\\n\\n\\t\\t\\t${Yp()}\\n\\n\\t\\t\\tvoid main() {\\n\\n\\t\\t\\t\\tgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );\\n\\t\\t\\t\\tgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;\\n\\t\\t\\t\\tgl_FragColor = linearToOutputTexel( gl_FragColor );\\n\\n\\t\\t\\t}\\n\\t\\t`,blending:x,depthTest:!1,depthWrite:!1})}function Xp(){return\"\\n\\n\\t\\tprecision mediump float;\\n\\t\\tprecision mediump int;\\n\\n\\t\\tattribute vec3 position;\\n\\t\\tattribute vec2 uv;\\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\"}function Yp(){return\"\\n\\n\\t\\tuniform int inputEncoding;\\n\\t\\tuniform int outputEncoding;\\n\\n\\t\\t#include \u003cencodings_pars_fragment\u003e\\n\\n\\t\\tvec4 inputTexelToLinear( vec4 value ) {\\n\\n\\t\\t\\tif ( inputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( inputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn sRGBToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn RGBEToLinear( value );\\n\\n\\t\\t\\t} else if ( inputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 7.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn RGBMToLinear( value, 16.0 );\\n\\n\\t\\t\\t} else if ( inputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn RGBDToLinear( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn GammaToLinear( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 linearToOutputTexel( vec4 value ) {\\n\\n\\t\\t\\tif ( outputEncoding == 0 ) {\\n\\n\\t\\t\\t\\treturn value;\\n\\n\\t\\t\\t} else if ( outputEncoding == 1 ) {\\n\\n\\t\\t\\t\\treturn LinearTosRGB( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 2 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBE( value );\\n\\n\\t\\t\\t} else if ( outputEncoding == 3 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 7.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 4 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBM( value, 16.0 );\\n\\n\\t\\t\\t} else if ( outputEncoding == 5 ) {\\n\\n\\t\\t\\t\\treturn LinearToRGBD( value, 256.0 );\\n\\n\\t\\t\\t} else {\\n\\n\\t\\t\\t\\treturn LinearToGamma( value, 2.2 );\\n\\n\\t\\t\\t}\\n\\n\\t\\t}\\n\\n\\t\\tvec4 envMapTexelToLinear( vec4 color ) {\\n\\n\\t\\t\\treturn inputTexelToLinear( color );\\n\\n\\t\\t}\\n\\t\"}const Zp=0,Jp=1,Qp=0,Kp=1,$p=2;function tf(t){return console.warn(\"THREE.MeshFaceMaterial has been removed. Use an Array instead.\"),t}function ef(t=[]){return console.warn(\"THREE.MultiMaterial has been removed. Use an Array instead.\"),t.isMultiMaterial=!0,t.materials=t,t.clone=function(){return t.slice()},t}function nf(t,e){return console.warn(\"THREE.PointCloud has been renamed to THREE.Points.\"),new ic(t,e)}function rf(t){return console.warn(\"THREE.Particle has been renamed to THREE.Sprite.\"),new _l(t)}function sf(t,e){return console.warn(\"THREE.ParticleSystem has been renamed to THREE.Points.\"),new ic(t,e)}function af(t){return console.warn(\"THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.\"),new Kl(t)}function of(t){return console.warn(\"THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.\"),new Kl(t)}function lf(t){return console.warn(\"THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.\"),new Kl(t)}function cf(t,e,n){return console.warn(\"THREE.Vertex has been removed. Use THREE.Vector3 instead.\"),new oi(t,e,n)}function uf(t,e){return console.warn(\"THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.\"),new Or(t,e).setUsage(En)}function hf(t,e){return console.warn(\"THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.\"),new Fr(t,e)}function df(t,e){return console.warn(\"THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.\"),new Hr(t,e)}function pf(t,e){return console.warn(\"THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.\"),new Ur(t,e)}function ff(t,e){return console.warn(\"THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.\"),new Gr(t,e)}function mf(t,e){return console.warn(\"THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.\"),new kr(t,e)}function gf(t,e){return console.warn(\"THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.\"),new Vr(t,e)}function vf(t,e){return console.warn(\"THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.\"),new Wr(t,e)}function yf(t,e){return console.warn(\"THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.\"),new qr(t,e)}function xf(t,e){return console.warn(\"THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.\"),new Xr(t,e)}function _f(t){return console.warn(\"THREE.AxisHelper has been renamed to THREE.AxesHelper.\"),new _p(t)}function bf(t,e){return console.warn(\"THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.\"),new pp(t,e)}function wf(t,e){return console.warn(\"THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.\"),new Jl(new yc(t.geometry),new Gl({color:void 0!==e?e:16777215}))}function Mf(t,e){return console.warn(\"THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.\"),new Jl(new ou(t.geometry),new Gl({color:void 0!==e?e:16777215}))}function Sf(t){return console.warn(\"THREE.XHRLoader has been renamed to THREE.FileLoader.\"),new Uu(t)}function Tf(t){return console.warn(\"THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.\"),new ju(t)}function Ef(t,e,n){return console.warn(\"THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).\"),new Is(t,n)}function Af(){console.error(\"THREE.CanvasRenderer has been removed\")}function Lf(){console.error(\"THREE.JSONLoader has been removed.\")}Xu.create=function(t,e){return console.log(\"THREE.Curve.create() has been deprecated\"),t.prototype=Object.create(Xu.prototype),t.prototype.constructor=t,t.prototype.getPoint=e,t},fh.prototype.fromPoints=function(t){return console.warn(\"THREE.Path: .fromPoints() has been renamed to .setFromPoints().\"),this.setFromPoints(t)},np.prototype.setColors=function(){console.error(\"THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.\")},Jd.prototype.update=function(){console.error(\"THREE.SkeletonHelper: update() no longer needs to be called.\")},Fu.prototype.extractUrlBase=function(t){return console.warn(\"THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.\"),Oh.extractUrlBase(t)},Fu.Handlers={add:function(){console.error(\"THREE.Loader: Handlers.add() has been removed. Use LoadingManager.addHandler() instead.\")},get:function(){console.error(\"THREE.Loader: Handlers.get() has been removed. Use LoadingManager.getHandler() instead.\")}},Ud.prototype.center=function(t){return console.warn(\"THREE.Box2: .center() has been renamed to .getCenter().\"),this.getCenter(t)},Ud.prototype.empty=function(){return console.warn(\"THREE.Box2: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},Ud.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},Ud.prototype.size=function(t){return console.warn(\"THREE.Box2: .size() has been renamed to .getSize().\"),this.getSize(t)},ui.prototype.center=function(t){return console.warn(\"THREE.Box3: .center() has been renamed to .getCenter().\"),this.getCenter(t)},ui.prototype.empty=function(){return console.warn(\"THREE.Box3: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},ui.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},ui.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},ui.prototype.size=function(t){return console.warn(\"THREE.Box3: .size() has been renamed to .getSize().\"),this.getSize(t)},Ri.prototype.empty=function(){return console.warn(\"THREE.Sphere: .empty() has been renamed to .isEmpty().\"),this.isEmpty()},Bs.prototype.setFromMatrix=function(t){return console.warn(\"THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().\"),this.setFromProjectionMatrix(t)},Vd.prototype.center=function(t){return console.warn(\"THREE.Line3: .center() has been renamed to .getCenter().\"),this.getCenter(t)},Jn.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},Jn.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},Jn.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix3: .multiplyVector3Array() has been removed.\")},Jn.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.\"),t.applyMatrix3(this)},Jn.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix3: .applyToVector3Array() has been removed.\")},Jn.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix3: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},Fi.prototype.extractPosition=function(t){return console.warn(\"THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().\"),this.copyPosition(t)},Fi.prototype.flattenToArrayOffset=function(t,e){return console.warn(\"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\"),this.toArray(t,e)},Fi.prototype.getPosition=function(){return console.warn(\"THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.\"),(new oi).setFromMatrixColumn(this,3)},Fi.prototype.setRotationFromQuaternion=function(t){return console.warn(\"THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().\"),this.makeRotationFromQuaternion(t)},Fi.prototype.multiplyToArray=function(){console.warn(\"THREE.Matrix4: .multiplyToArray() has been removed.\")},Fi.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.multiplyVector4=function(t){return console.warn(\"THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.multiplyVector3Array=function(){console.error(\"THREE.Matrix4: .multiplyVector3Array() has been removed.\")},Fi.prototype.rotateAxis=function(t){console.warn(\"THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.\"),t.transformDirection(this)},Fi.prototype.crossVector=function(t){return console.warn(\"THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.translate=function(){console.error(\"THREE.Matrix4: .translate() has been removed.\")},Fi.prototype.rotateX=function(){console.error(\"THREE.Matrix4: .rotateX() has been removed.\")},Fi.prototype.rotateY=function(){console.error(\"THREE.Matrix4: .rotateY() has been removed.\")},Fi.prototype.rotateZ=function(){console.error(\"THREE.Matrix4: .rotateZ() has been removed.\")},Fi.prototype.rotateByAxis=function(){console.error(\"THREE.Matrix4: .rotateByAxis() has been removed.\")},Fi.prototype.applyToBufferAttribute=function(t){return console.warn(\"THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.\"),t.applyMatrix4(this)},Fi.prototype.applyToVector3Array=function(){console.error(\"THREE.Matrix4: .applyToVector3Array() has been removed.\")},Fi.prototype.makeFrustum=function(t,e,n,i,r,s){return console.warn(\"THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.\"),this.makePerspective(t,e,i,n,r,s)},Fi.prototype.getInverse=function(t){return console.warn(\"THREE.Matrix4: .getInverse() has been removed. Use matrixInv.copy( matrix ).invert(); instead.\"),this.copy(t).invert()},pr.prototype.isIntersectionLine=function(t){return console.warn(\"THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().\"),this.intersectsLine(t)},ai.prototype.multiplyVector3=function(t){return console.warn(\"THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.\"),t.applyQuaternion(this)},ai.prototype.inverse=function(){return console.warn(\"THREE.Quaternion: .inverse() has been renamed to invert().\"),this.invert()},Oi.prototype.isIntersectionBox=function(t){return console.warn(\"THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().\"),this.intersectsBox(t)},Oi.prototype.isIntersectionPlane=function(t){return console.warn(\"THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().\"),this.intersectsPlane(t)},Oi.prototype.isIntersectionSphere=function(t){return console.warn(\"THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().\"),this.intersectsSphere(t)},Sr.prototype.area=function(){return console.warn(\"THREE.Triangle: .area() has been renamed to .getArea().\"),this.getArea()},Sr.prototype.barycoordFromPoint=function(t,e){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),this.getBarycoord(t,e)},Sr.prototype.midpoint=function(t){return console.warn(\"THREE.Triangle: .midpoint() has been renamed to .getMidpoint().\"),this.getMidpoint(t)},Sr.prototypenormal=function(t){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),this.getNormal(t)},Sr.prototype.plane=function(t){return console.warn(\"THREE.Triangle: .plane() has been renamed to .getPlane().\"),this.getPlane(t)},Sr.barycoordFromPoint=function(t,e,n,i,r){return console.warn(\"THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().\"),Sr.getBarycoord(t,e,n,i,r)},Sr.normal=function(t,e,n,i){return console.warn(\"THREE.Triangle: .normal() has been renamed to .getNormal().\"),Sr.getNormal(t,e,n,i)},mh.prototype.extractAllPoints=function(t){return console.warn(\"THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.\"),this.extractPoints(t)},mh.prototype.extrude=function(t){return console.warn(\"THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.\"),new Xc(this,t)},mh.prototype.makeGeometry=function(t){return console.warn(\"THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.\"),new tu(this,t)},Zn.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},Zn.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},Zn.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},oi.prototype.setEulerFromRotationMatrix=function(){console.error(\"THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.\")},oi.prototype.setEulerFromQuaternion=function(){console.error(\"THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.\")},oi.prototype.getPositionFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().\"),this.setFromMatrixPosition(t)},oi.prototype.getScaleFromMatrix=function(t){return console.warn(\"THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().\"),this.setFromMatrixScale(t)},oi.prototype.getColumnFromMatrix=function(t,e){return console.warn(\"THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().\"),this.setFromMatrixColumn(e,t)},oi.prototype.applyProjection=function(t){return console.warn(\"THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.\"),this.applyMatrix4(t)},oi.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},oi.prototype.distanceToManhattan=function(t){return console.warn(\"THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().\"),this.manhattanDistanceTo(t)},oi.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},ni.prototype.fromAttribute=function(t,e,n){return console.warn(\"THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().\"),this.fromBufferAttribute(t,e,n)},ni.prototype.lengthManhattan=function(){return console.warn(\"THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().\"),this.manhattanLength()},cr.prototype.getChildByName=function(t){return console.warn(\"THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().\"),this.getObjectByName(t)},cr.prototype.renderDepth=function(){console.warn(\"THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.\")},cr.prototype.translate=function(t,e){return console.warn(\"THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.\"),this.translateOnAxis(e,t)},cr.prototype.getWorldRotation=function(){console.error(\"THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.\")},cr.prototype.applyMatrix=function(t){return console.warn(\"THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(cr.prototype,{eulerOrder:{get:function(){return console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order},set:function(t){console.warn(\"THREE.Object3D: .eulerOrder is now .rotation.order.\"),this.rotation.order=t}},useQuaternion:{get:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")},set:function(){console.warn(\"THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.\")}}}),ws.prototype.setDrawMode=function(){console.error(\"THREE.Mesh: .setDrawMode() has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")},Object.defineProperties(ws.prototype,{drawMode:{get:function(){return console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.\"),Xe},set:function(){console.error(\"THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode. Transform your geometry via BufferGeometryUtils.toTrianglesDrawMode() if necessary.\")}}}),Cl.prototype.initBones=function(){console.error(\"THREE.SkinnedMesh: initBones() has been removed.\")},Cs.prototype.setLens=function(t,e){console.warn(\"THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.\"),void 0!==e\u0026\u0026(this.filmGauge=e),this.setFocalLength(t)},Object.defineProperties(gh.prototype,{onlyShadow:{set:function(){console.warn(\"THREE.Light: .onlyShadow has been removed.\")}},shadowCameraFov:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFov is now .shadow.camera.fov.\"),this.shadow.camera.fov=t}},shadowCameraLeft:{set:function(t){console.warn(\"THREE.Light: .shadowCameraLeft is now .shadow.camera.left.\"),this.shadow.camera.left=t}},shadowCameraRight:{set:function(t){console.warn(\"THREE.Light: .shadowCameraRight is now .shadow.camera.right.\"),this.shadow.camera.right=t}},shadowCameraTop:{set:function(t){console.warn(\"THREE.Light: .shadowCameraTop is now .shadow.camera.top.\"),this.shadow.camera.top=t}},shadowCameraBottom:{set:function(t){console.warn(\"THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.\"),this.shadow.camera.bottom=t}},shadowCameraNear:{set:function(t){console.warn(\"THREE.Light: .shadowCameraNear is now .shadow.camera.near.\"),this.shadow.camera.near=t}},shadowCameraFar:{set:function(t){console.warn(\"THREE.Light: .shadowCameraFar is now .shadow.camera.far.\"),this.shadow.camera.far=t}},shadowCameraVisible:{set:function(){console.warn(\"THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.\")}},shadowBias:{set:function(t){console.warn(\"THREE.Light: .shadowBias is now .shadow.bias.\"),this.shadow.bias=t}},shadowDarkness:{set:function(){console.warn(\"THREE.Light: .shadowDarkness has been removed.\")}},shadowMapWidth:{set:function(t){console.warn(\"THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.\"),this.shadow.mapSize.width=t}},shadowMapHeight:{set:function(t){console.warn(\"THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.\"),this.shadow.mapSize.height=t}}}),Object.defineProperties(Or.prototype,{length:{get:function(){return console.warn(\"THREE.BufferAttribute: .length has been deprecated. Use .count instead.\"),this.array.length}},dynamic:{get:function(){return console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),this.usage===En},set:function(){console.warn(\"THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.\"),this.setUsage(En)}}}),Or.prototype.setDynamic=function(t){return console.warn(\"THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?En:Tn),this},Or.prototype.copyIndicesArray=function(){console.error(\"THREE.BufferAttribute: .copyIndicesArray() has been removed.\")},Or.prototype.setArray=function(){console.error(\"THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},rs.prototype.addIndex=function(t){console.warn(\"THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().\"),this.setIndex(t)},rs.prototype.addAttribute=function(t,e){return console.warn(\"THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().\"),e\u0026\u0026e.isBufferAttribute||e\u0026\u0026e.isInterleavedBufferAttribute?\"index\"===t?(console.warn(\"THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.\"),this.setIndex(e),this):this.setAttribute(t,e):(console.warn(\"THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).\"),this.setAttribute(t,new Or(arguments[1],arguments[2])))},rs.prototype.addDrawCall=function(t,e,n){void 0!==n\u0026\u0026console.warn(\"THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.\"),console.warn(\"THREE.BufferGeometry: .addDrawCall() is now .addGroup().\"),this.addGroup(t,e)},rs.prototype.clearDrawCalls=function(){console.warn(\"THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().\"),this.clearGroups()},rs.prototype.computeOffsets=function(){console.warn(\"THREE.BufferGeometry: .computeOffsets() has been removed.\")},rs.prototype.removeAttribute=function(t){return console.warn(\"THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().\"),this.deleteAttribute(t)},rs.prototype.applyMatrix=function(t){return console.warn(\"THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().\"),this.applyMatrix4(t)},Object.defineProperties(rs.prototype,{drawcalls:{get:function(){return console.error(\"THREE.BufferGeometry: .drawcalls has been renamed to .groups.\"),this.groups}},offsets:{get:function(){return console.warn(\"THREE.BufferGeometry: .offsets has been renamed to .groups.\"),this.groups}}}),il.prototype.setDynamic=function(t){return console.warn(\"THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.\"),this.setUsage(!0===t?En:Tn),this},il.prototype.setArray=function(){console.error(\"THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers\")},Xc.prototype.getArrays=function(){console.error(\"THREE.ExtrudeGeometry: .getArrays() has been removed.\")},Xc.prototype.addShapeList=function(){console.error(\"THREE.ExtrudeGeometry: .addShapeList() has been removed.\")},Xc.prototype.addShape=function(){console.error(\"THREE.ExtrudeGeometry: .addShape() has been removed.\")},nl.prototype.dispose=function(){console.error(\"THREE.Scene: .dispose() has been removed.\")},Pd.prototype.onUpdate=function(){return console.warn(\"THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.\"),this},Object.defineProperties(Er.prototype,{wrapAround:{get:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")},set:function(){console.warn(\"THREE.Material: .wrapAround has been removed.\")}},overdraw:{get:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")},set:function(){console.warn(\"THREE.Material: .overdraw has been removed.\")}},wrapRGB:{get:function(){return console.warn(\"THREE.Material: .wrapRGB has been removed.\"),new Ir}},shading:{get:function(){console.error(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\")},set:function(t){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=t===v}},stencilMask:{get:function(){return console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask},set:function(t){console.warn(\"THREE.\"+this.type+\": .stencilMask has been removed. Use .stencilFuncMask instead.\"),this.stencilFuncMask=t}}}),Object.defineProperties(Ls.prototype,{derivatives:{get:function(){return console.warn(\"THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives},set:function(t){console.warn(\"THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.\"),this.extensions.derivatives=t}}}),Ko.prototype.clearTarget=function(t,e,n,i){console.warn(\"THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.\"),this.setRenderTarget(t),this.clear(e,n,i)},Ko.prototype.animate=function(t){console.warn(\"THREE.WebGLRenderer: .animate() is now .setAnimationLoop().\"),this.setAnimationLoop(t)},Ko.prototype.getCurrentRenderTarget=function(){return console.warn(\"THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().\"),this.getRenderTarget()},Ko.prototype.getMaxAnisotropy=function(){return console.warn(\"THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().\"),this.capabilities.getMaxAnisotropy()},Ko.prototype.getPrecision=function(){return console.warn(\"THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.\"),this.capabilities.precision},Ko.prototype.resetGLState=function(){return console.warn(\"THREE.WebGLRenderer: .resetGLState() is now .state.reset().\"),this.state.reset()},Ko.prototype.supportsFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).\"),this.extensions.get(\"OES_texture_float\")},Ko.prototype.supportsHalfFloatTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).\"),this.extensions.get(\"OES_texture_half_float\")},Ko.prototype.supportsStandardDerivatives=function(){return console.warn(\"THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).\"),this.extensions.get(\"OES_standard_derivatives\")},Ko.prototype.supportsCompressedTextureS3TC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_s3tc\")},Ko.prototype.supportsCompressedTexturePVRTC=function(){return console.warn(\"THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).\"),this.extensions.get(\"WEBGL_compressed_texture_pvrtc\")},Ko.prototype.supportsBlendMinMax=function(){return console.warn(\"THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).\"),this.extensions.get(\"EXT_blend_minmax\")},Ko.prototype.supportsVertexTextures=function(){return console.warn(\"THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.\"),this.capabilities.vertexTextures},Ko.prototype.supportsInstancedArrays=function(){return console.warn(\"THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).\"),this.extensions.get(\"ANGLE_instanced_arrays\")},Ko.prototype.enableScissorTest=function(t){console.warn(\"THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().\"),this.setScissorTest(t)},Ko.prototype.initMaterial=function(){console.warn(\"THREE.WebGLRenderer: .initMaterial() has been removed.\")},Ko.prototype.addPrePlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPrePlugin() has been removed.\")},Ko.prototype.addPostPlugin=function(){console.warn(\"THREE.WebGLRenderer: .addPostPlugin() has been removed.\")},Ko.prototype.updateShadowMap=function(){console.warn(\"THREE.WebGLRenderer: .updateShadowMap() has been removed.\")},Ko.prototype.setFaceCulling=function(){console.warn(\"THREE.WebGLRenderer: .setFaceCulling() has been removed.\")},Ko.prototype.allocTextureUnit=function(){console.warn(\"THREE.WebGLRenderer: .allocTextureUnit() has been removed.\")},Ko.prototype.setTexture=function(){console.warn(\"THREE.WebGLRenderer: .setTexture() has been removed.\")},Ko.prototype.setTexture2D=function(){console.warn(\"THREE.WebGLRenderer: .setTexture2D() has been removed.\")},Ko.prototype.setTextureCube=function(){console.warn(\"THREE.WebGLRenderer: .setTextureCube() has been removed.\")},Ko.prototype.getActiveMipMapLevel=function(){return console.warn(\"THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().\"),this.getActiveMipmapLevel()},Object.defineProperties(Ko.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.\"),this.shadowMap.enabled=t}},shadowMapType:{get:function(){return this.shadowMap.type},set:function(t){console.warn(\"THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.\"),this.shadowMap.type=t}},shadowMapCullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.\")}},context:{get:function(){return console.warn(\"THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.\"),this.getContext()}},vr:{get:function(){return console.warn(\"THREE.WebGLRenderer: .vr has been renamed to .xr\"),this.xr}},gammaInput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\"),!1},set:function(){console.warn(\"THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.\")}},gammaOutput:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),!1},set:function(t){console.warn(\"THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.\"),this.outputEncoding=!0===t?Qe:Je}},toneMappingWhitePoint:{get:function(){return console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\"),1},set:function(){console.warn(\"THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.\")}}}),Object.defineProperties(ko.prototype,{cullFace:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.\")}},renderReverseSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.\")}},renderSingleSided:{get:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")},set:function(){console.warn(\"THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.\")}}}),Object.defineProperties(ii.prototype,{wrapS:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.\"),this.texture.wrapS=t}},wrapT:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.\"),this.texture.wrapT=t}},magFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.\"),this.texture.magFilter=t}},minFilter:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.\"),this.texture.minFilter=t}},anisotropy:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.\"),this.texture.anisotropy=t}},offset:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .offset is now .texture.offset.\"),this.texture.offset=t}},repeat:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .repeat is now .texture.repeat.\"),this.texture.repeat=t}},format:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .format is now .texture.format.\"),this.texture.format=t}},type:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .type is now .texture.type.\"),this.texture.type=t}},generateMipmaps:{get:function(){return console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps},set:function(t){console.warn(\"THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.\"),this.texture.generateMipmaps=t}}}),hd.prototype.load=function(t){console.warn(\"THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.\");const e=this;return(new Kh).load(t,(function(t){e.setBuffer(t)})),this},vd.prototype.getData=function(){return console.warn(\"THREE.AudioAnalyser: .getData() is now .getFrequencyData().\"),this.getFrequencyData()},Ps.prototype.updateCubeMap=function(t,e){return console.warn(\"THREE.CubeCamera: .updateCubeMap() is now .update().\"),this.update(t,e)},Ps.prototype.clear=function(t,e,n,i){return console.warn(\"THREE.CubeCamera: .clear() is now .renderTarget.clear().\"),this.renderTarget.clear(t,e,n,i)},Kn.crossOrigin=void 0,Kn.loadTexture=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.\");const r=new qu;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e\u0026\u0026(s.mapping=e),s},Kn.loadTextureCube=function(t,e,n,i){console.warn(\"THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.\");const r=new Wu;r.setCrossOrigin(this.crossOrigin);const s=r.load(t,n,void 0,i);return e\u0026\u0026(s.mapping=e),s},Kn.loadCompressedTexture=function(){console.error(\"THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.\")},Kn.loadCompressedTextureCube=function(){console.error(\"THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.\")};const Rf={createMultiMaterialObject:function(){console.error(\"THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js\")},detach:function(){console.error(\"THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js\")},attach:function(){console.error(\"THREE.SceneUtils has been moved to /examples/jsm/utils/SceneUtils.js\")}};function Cf(){console.error(\"THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js\")}\"undefined\"!=typeof __THREE_DEVTOOLS__\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"register\",{detail:{revision:i}})),\"undefined\"!=typeof window\u0026\u0026(window.__THREE__?console.warn(\"WARNING: Multiple instances of Three.js being imported.\"):window.__THREE__=i)},function(t,e,n){var i=n(0);i.OrbitControls=function(t,e){var n,r,s,a,o;void 0===e\u0026\u0026console.warn('THREE.OrbitControls: The second parameter \"domElement\" is now mandatory.'),e===document\u0026\u0026console.error('THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'),this.object=t,this.domElement=e,this.enabled=!0,this.target=new i.Vector3,this.minDistance=0,this.maxDistance=1/0,this.minZoom=0,this.maxZoom=1/0,this.minPolarAngle=0,this.maxPolarAngle=Math.PI,this.minAzimuthAngle=-1/0,this.maxAzimuthAngle=1/0,this.enableDamping=!1,this.dampingFactor=.05,this.enableZoom=!0,this.zoomSpeed=1,this.enableRotate=!0,this.rotateSpeed=1,this.enablePan=!0,this.panSpeed=1,this.screenSpacePanning=!1,this.keyPanSpeed=7,this.autoRotate=!1,this.autoRotateSpeed=2,this.enableKeys=!0,this.keys={LEFT:37,UP:38,RIGHT:39,BOTTOM:40},this.mouseButtons={LEFT:i.MOUSE.ROTATE,MIDDLE:i.MOUSE.DOLLY,RIGHT:i.MOUSE.PAN},this.touches={ONE:i.TOUCH.ROTATE,TWO:i.TOUCH.DOLLY_PAN},this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=function(){return m.phi},this.getAzimuthalAngle=function(){return m.theta},this.saveState=function(){l.target0.copy(l.target),l.position0.copy(l.object.position),l.zoom0=l.object.zoom},this.reset=function(){l.target.copy(l.target0),l.object.position.copy(l.position0),l.object.zoom=l.zoom0,l.object.updateProjectionMatrix(),l.dispatchEvent(c),l.update(),p=d.NONE},this.update=(n=new i.Vector3,r=(new i.Quaternion).setFromUnitVectors(t.up,new i.Vector3(0,1,0)),s=r.clone().inverse(),a=new i.Vector3,o=new i.Quaternion,function(){var t=l.object.position;return n.copy(t).sub(l.target),n.applyQuaternion(r),m.setFromVector3(n),l.autoRotate\u0026\u0026p===d.NONE\u0026\u0026C(2*Math.PI/60/60*l.autoRotateSpeed),l.enableDamping?(m.theta+=g.theta*l.dampingFactor,m.phi+=g.phi*l.dampingFactor):(m.theta+=g.theta,m.phi+=g.phi),m.theta=Math.max(l.minAzimuthAngle,Math.min(l.maxAzimuthAngle,m.theta)),m.phi=Math.max(l.minPolarAngle,Math.min(l.maxPolarAngle,m.phi)),m.makeSafe(),m.radius*=v,m.radius=Math.max(l.minDistance,Math.min(l.maxDistance,m.radius)),!0===l.enableDamping?l.target.addScaledVector(y,l.dampingFactor):l.target.add(y),n.setFromSpherical(m),n.applyQuaternion(s),t.copy(l.target).add(n),l.object.lookAt(l.target),!0===l.enableDamping?(g.theta*=1-l.dampingFactor,g.phi*=1-l.dampingFactor,y.multiplyScalar(1-l.dampingFactor)):(g.set(0,0,0),y.set(0,0,0)),v=1,!!(x||a.distanceToSquared(l.object.position)\u003ef||8*(1-o.dot(l.object.quaternion))\u003ef)\u0026\u0026(l.dispatchEvent(c),a.copy(l.object.position),o.copy(l.object.quaternion),x=!1,!0)}),this.dispose=function(){l.domElement.removeEventListener(\"contextmenu\",tt,!1),l.domElement.removeEventListener(\"mousedown\",q,!1),l.domElement.removeEventListener(\"wheel\",Z,!1),l.domElement.removeEventListener(\"touchstart\",Q,!1),l.domElement.removeEventListener(\"touchend\",$,!1),l.domElement.removeEventListener(\"touchmove\",K,!1),document.removeEventListener(\"mousemove\",X,!1),document.removeEventListener(\"mouseup\",Y,!1),l.domElement.removeEventListener(\"keydown\",J,!1)};var l=this,c={type:\"change\"},u={type:\"start\"},h={type:\"end\"},d={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},p=d.NONE,f=1e-6,m=new i.Spherical,g=new i.Spherical,v=1,y=new i.Vector3,x=!1,_=new i.Vector2,b=new i.Vector2,w=new i.Vector2,M=new i.Vector2,S=new i.Vector2,T=new i.Vector2,E=new i.Vector2,A=new i.Vector2,L=new i.Vector2;function R(){return Math.pow(.95,l.zoomSpeed)}function C(t){g.theta-=t}function P(t){g.phi-=t}var D,I=(D=new i.Vector3,function(t,e){D.setFromMatrixColumn(e,0),D.multiplyScalar(-t),y.add(D)}),N=function(){var t=new i.Vector3;return function(e,n){!0===l.screenSpacePanning?t.setFromMatrixColumn(n,1):(t.setFromMatrixColumn(n,0),t.crossVectors(l.object.up,t)),t.multiplyScalar(e),y.add(t)}}(),z=function(){var t=new i.Vector3;return function(e,n){var i=l.domElement;if(l.object.isPerspectiveCamera){var r=l.object.position;t.copy(r).sub(l.target);var s=t.length();s*=Math.tan(l.object.fov/2*Math.PI/180),I(2*e*s/i.clientHeight,l.object.matrix),N(2*n*s/i.clientHeight,l.object.matrix)}else l.object.isOrthographicCamera?(I(e*(l.object.right-l.object.left)/l.object.zoom/i.clientWidth,l.object.matrix),N(n*(l.object.top-l.object.bottom)/l.object.zoom/i.clientHeight,l.object.matrix)):(console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\"),l.enablePan=!1)}}();function B(t){l.object.isPerspectiveCamera?v/=t:l.object.isOrthographicCamera?(l.object.zoom=Math.max(l.minZoom,Math.min(l.maxZoom,l.object.zoom*t)),l.object.updateProjectionMatrix(),x=!0):(console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\"),l.enableZoom=!1)}function O(t){l.object.isPerspectiveCamera?v*=t:l.object.isOrthographicCamera?(l.object.zoom=Math.max(l.minZoom,Math.min(l.maxZoom,l.object.zoom/t)),l.object.updateProjectionMatrix(),x=!0):(console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\"),l.enableZoom=!1)}function F(t){_.set(t.clientX,t.clientY)}function H(t){M.set(t.clientX,t.clientY)}function U(t){if(1==t.touches.length)_.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);_.set(e,n)}}function G(t){if(1==t.touches.length)M.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);M.set(e,n)}}function k(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);E.set(0,i)}function V(t){if(1==t.touches.length)b.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);b.set(e,n)}w.subVectors(b,_).multiplyScalar(l.rotateSpeed);var i=l.domElement;C(2*Math.PI*w.x/i.clientHeight),P(2*Math.PI*w.y/i.clientHeight),_.copy(b)}function W(t){if(1==t.touches.length)S.set(t.touches[0].pageX,t.touches[0].pageY);else{var e=.5*(t.touches[0].pageX+t.touches[1].pageX),n=.5*(t.touches[0].pageY+t.touches[1].pageY);S.set(e,n)}T.subVectors(S,M).multiplyScalar(l.panSpeed),z(T.x,T.y),M.copy(S)}function j(t){var e=t.touches[0].pageX-t.touches[1].pageX,n=t.touches[0].pageY-t.touches[1].pageY,i=Math.sqrt(e*e+n*n);A.set(0,i),L.set(0,Math.pow(A.y/E.y,l.zoomSpeed)),B(L.y),E.copy(A)}function q(t){if(!1!==l.enabled){switch(t.preventDefault(),l.domElement.focus?l.domElement.focus():window.focus(),t.button){case 0:switch(l.mouseButtons.LEFT){case i.MOUSE.ROTATE:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===l.enablePan)return;H(t),p=d.PAN}else{if(!1===l.enableRotate)return;F(t),p=d.ROTATE}break;case i.MOUSE.PAN:if(t.ctrlKey||t.metaKey||t.shiftKey){if(!1===l.enableRotate)return;F(t),p=d.ROTATE}else{if(!1===l.enablePan)return;H(t),p=d.PAN}break;default:p=d.NONE}break;case 1:switch(l.mouseButtons.MIDDLE){case i.MOUSE.DOLLY:if(!1===l.enableZoom)return;!function(t){E.set(t.clientX,t.clientY)}(t),p=d.DOLLY;break;default:p=d.NONE}break;case 2:switch(l.mouseButtons.RIGHT){case i.MOUSE.ROTATE:if(!1===l.enableRotate)return;F(t),p=d.ROTATE;break;case i.MOUSE.PAN:if(!1===l.enablePan)return;H(t),p=d.PAN;break;default:p=d.NONE}}p!==d.NONE\u0026\u0026(document.addEventListener(\"mousemove\",X,!1),document.addEventListener(\"mouseup\",Y,!1),l.dispatchEvent(u))}}function X(t){if(!1!==l.enabled)switch(t.preventDefault(),p){case d.ROTATE:if(!1===l.enableRotate)return;!function(t){b.set(t.clientX,t.clientY),w.subVectors(b,_).multiplyScalar(l.rotateSpeed);var e=l.domElement;C(2*Math.PI*w.x/e.clientHeight),P(2*Math.PI*w.y/e.clientHeight),_.copy(b),l.update()}(t);break;case d.DOLLY:if(!1===l.enableZoom)return;!function(t){A.set(t.clientX,t.clientY),L.subVectors(A,E),L.y\u003e0?B(R()):L.y\u003c0\u0026\u0026O(R()),E.copy(A),l.update()}(t);break;case d.PAN:if(!1===l.enablePan)return;!function(t){S.set(t.clientX,t.clientY),T.subVectors(S,M).multiplyScalar(l.panSpeed),z(T.x,T.y),M.copy(S),l.update()}(t)}}function Y(t){!1!==l.enabled\u0026\u0026(document.removeEventListener(\"mousemove\",X,!1),document.removeEventListener(\"mouseup\",Y,!1),l.dispatchEvent(h),p=d.NONE)}function Z(t){!1===l.enabled||!1===l.enableZoom||p!==d.NONE\u0026\u0026p!==d.ROTATE||(t.preventDefault(),t.stopPropagation(),l.dispatchEvent(u),function(t){t.deltaY\u003c0?O(R()):t.deltaY\u003e0\u0026\u0026B(R()),l.update()}(t),l.dispatchEvent(h))}function J(t){!1!==l.enabled\u0026\u0026!1!==l.enableKeys\u0026\u0026!1!==l.enablePan\u0026\u0026function(t){var e=!1;switch(t.keyCode){case l.keys.UP:z(0,l.keyPanSpeed),e=!0;break;case l.keys.BOTTOM:z(0,-l.keyPanSpeed),e=!0;break;case l.keys.LEFT:z(l.keyPanSpeed,0),e=!0;break;case l.keys.RIGHT:z(-l.keyPanSpeed,0),e=!0}e\u0026\u0026(t.preventDefault(),l.update())}(t)}function Q(t){if(!1!==l.enabled){switch(t.preventDefault(),t.touches.length){case 1:switch(l.touches.ONE){case i.TOUCH.ROTATE:if(!1===l.enableRotate)return;U(t),p=d.TOUCH_ROTATE;break;case i.TOUCH.PAN:if(!1===l.enablePan)return;G(t),p=d.TOUCH_PAN;break;default:p=d.NONE}break;case 2:switch(l.touches.TWO){case i.TOUCH.DOLLY_PAN:if(!1===l.enableZoom\u0026\u0026!1===l.enablePan)return;!function(t){l.enableZoom\u0026\u0026k(t),l.enablePan\u0026\u0026G(t)}(t),p=d.TOUCH_DOLLY_PAN;break;case i.TOUCH.DOLLY_ROTATE:if(!1===l.enableZoom\u0026\u0026!1===l.enableRotate)return;!function(t){l.enableZoom\u0026\u0026k(t),l.enableRotate\u0026\u0026U(t)}(t),p=d.TOUCH_DOLLY_ROTATE;break;default:p=d.NONE}break;default:p=d.NONE}p!==d.NONE\u0026\u0026l.dispatchEvent(u)}}function K(t){if(!1!==l.enabled)switch(t.preventDefault(),t.stopPropagation(),p){case d.TOUCH_ROTATE:if(!1===l.enableRotate)return;V(t),l.update();break;case d.TOUCH_PAN:if(!1===l.enablePan)return;W(t),l.update();break;case d.TOUCH_DOLLY_PAN:if(!1===l.enableZoom\u0026\u0026!1===l.enablePan)return;!function(t){l.enableZoom\u0026\u0026j(t),l.enablePan\u0026\u0026W(t)}(t),l.update();break;case d.TOUCH_DOLLY_ROTATE:if(!1===l.enableZoom\u0026\u0026!1===l.enableRotate)return;!function(t){l.enableZoom\u0026\u0026j(t),l.enableRotate\u0026\u0026V(t)}(t),l.update();break;default:p=d.NONE}}function $(t){!1!==l.enabled\u0026\u0026(l.dispatchEvent(h),p=d.NONE)}function tt(t){!1!==l.enabled\u0026\u0026t.preventDefault()}l.domElement.addEventListener(\"contextmenu\",tt,!1),l.domElement.addEventListener(\"mousedown\",q,!1),l.domElement.addEventListener(\"wheel\",Z,!1),l.domElement.addEventListener(\"touchstart\",Q,!1),l.domElement.addEventListener(\"touchend\",$,!1),l.domElement.addEventListener(\"touchmove\",K,!1),l.domElement.addEventListener(\"keydown\",J,!1),-1===l.domElement.tabIndex\u0026\u0026(l.domElement.tabIndex=0),this.update()},i.OrbitControls.prototype=Object.create(i.EventDispatcher.prototype),i.OrbitControls.prototype.constructor=i.OrbitControls,i.MapControls=function(t,e){i.OrbitControls.call(this,t,e),this.mouseButtons.LEFT=i.MOUSE.PAN,this.mouseButtons.RIGHT=i.MOUSE.ROTATE,this.touches.ONE=i.TOUCH.PAN,this.touches.TWO=i.TOUCH.DOLLY_ROTATE},i.MapControls.prototype=Object.create(i.EventDispatcher.prototype),i.MapControls.prototype.constructor=i.MapControls,t.exports=e.default=i.OrbitControls},function(t,e,n){\"use strict\";n.r(e);var i=n(0),r=n(1),s=n.n(r);const a=n(3),o=n(4),l=new i.Clock,c=new i.Scene,u=new i.Color(.8,.8,.688);c.background=new i.Color(.1,.1,.1);let h,d,p=[],f=[],m=[],g=[],v=[],y=[],x=[],_=[],b=[],w=[],M=[],S=0,T=[0];const E={time:{type:\"f\",value:1},resolution:{type:\"v2\",value:new i.Vector2},texture:{type:\"t\",value:null},textureResolution:{type:\"v2\",value:new i.Vector2},textureBlockSize:{type:\"f\",value:1},bgColor:{type:\"v3\",value:new i.Vector3(u.r,u.g,u.b)}},A=window.innerWidth/window.innerHeight,L=new i.PerspectiveCamera(45,A,1,1e4),R=window.innerHeight,C=R/Math.tan(45*Math.PI/360)/2;L.position.z=C;const P=new i.WebGLRenderer;document.body.appendChild(P.domElement);new s.a(L,P.domElement);const D=()=\u003e{l.getDelta();const t=l.elapsedTime;T[0]=t,E.time.value=T[0],M.forEach(t=\u003e{t.update()}),P.render(c,L),requestAnimationFrame(D)},I=()=\u003e{const t=window.innerWidth,e=window.innerHeight;N(t,e)},N=(t,e)=\u003e{L.aspect=t/e,L.updateProjectionMatrix(),E.resolution.value=new i.Vector2(t,e),P.setPixelRatio(window.devicePixelRatio),P.setSize(t,e)},z=()=\u003e{S=0,c.clear(),p=[],f=[],m=[],g=[],v=[],y=[],x=[],_=[],b=[],w=[];const t=t=\u003e(t%2==0?.219:.281)*window.innerWidth,e=e=\u003e{let n=0;for(let i=e-1;i\u003e=0;i--)n+=t(i);return n};for(let n=0;n\u003c4;n++)M.push(new B(-window.innerWidth/2+e(n),-R/2,t(n),R));(()=\u003e{h=new i.BufferGeometry,h.setIndex(g),h.setAttribute(\"index\",new i.Uint16BufferAttribute(p,1)),h.setAttribute(\"totalIndex\",new i.Float32BufferAttribute([...Array(p.length)].map((t,e)=\u003eS),1)),h.setAttribute(\"position\",new i.Float32BufferAttribute(f,3)),h.setAttribute(\"uv\",new i.Uint16BufferAttribute(m,2)),h.setAttribute(\"size\",new i.Float32BufferAttribute(x,2)),h.setAttribute(\"padding\",new i.Float32BufferAttribute(v,2)),h.setAttribute(\"direction\",new i.Float32BufferAttribute(_,1)),h.setAttribute(\"ratio\",new i.Float32BufferAttribute(b,1)),h.setAttribute(\"weight\",new i.Float32BufferAttribute(w,2));const t=new i.RawShaderMaterial({uniforms:E,vertexShader:a,fragmentShader:o,transparent:!0,blending:i.NormalBlending,depthTest:!0,wireframe:!1,side:i.DoubleSide,glslVersion:i.GLSL1});d=new i.Mesh(h,t),c.add(d)})()};class B{constructor(t,e,n,i){this.x=t,this.y=e,this.z=0,this.w=n,this.h=i,this.ratio=.5+.1*(2*Math.random()-1),this.id=-1,this.impulse=0,this.draw(!1)}update(t=null){t\u0026\u0026(this.x=t.x,this.y=t.y,this.w=t.w,this.h=t.h,this.impulse=t.impulse),this.draw(!0)}getPositionAndSize(t,e){let n,i,r,s,a;switch(t){case 0:n=0===e||3===e?this.x+0:this.x+this.w-0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=this.z,s=this.w-0,a=this.h-0;break;case 1:n=this.x+this.w-0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=0===e||3===e?this.z:0,s=this.z,a=this.h-0;break;case 2:n=0===e||3===e?this.x+0:this.x+this.w-0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=0,s=this.w-0,a=this.h-0;break;case 3:n=this.x+0,i=0===e||1===e?this.y+0:this.y+this.h-0,r=0===e||3===e?0:this.z,s=this.z,a=this.h-0;break;case 4:n=0===e||3===e?this.x+0:this.x+this.w-0,i=this.y+this.h-0,r=0===e||1===e?this.z:0,s=this.w-0,a=this.z;break;case 5:n=0===e||3===e?this.x+0:this.x+this.w-0,i=this.y+0,r=0===e||1===e?this.z:0,s=this.w-0,a=this.z}return{x:n,y:i,z:r,w:s,h:a}}draw(t=!1){if(t){const t=this.getScreenPosition();for(let e=0;e\u003c1;e++)for(let n=0;n\u003c4;n++){const i=1*this.id*4+4*e+n,r=h.attributes.position,{x:s,y:a,z:o,w:l,h:c}=this.getPositionAndSize(e,n);r.setXYZ(i,s,a,o),r.needsUpdate=!0;const u=h.attributes.size;u.setXY(i,l,c),u.needsUpdate=!0;const d=h.attributes.ratio;d.setX(i,this.impulse),d.needsUpdate=!0;const p=h.attributes.direction;p.setX(i,this.getDirection()),p.needsUpdate=!0;const f=h.attributes.weight;f.setXY(i,t.x,t.y),f.needsUpdate=!0}}else{this.id=S;const t=this.getScreenPosition();for(let e=0;e\u003c1;e++){for(let n=0;n\u003c4;n++){const{x:i,y:r,z:s,w:a,h:o}=this.getPositionAndSize(e,n);f.push(i,r,s),x.push(a,o),_.push(this.getDirection()),b.push(this.ratio),w.push(t.x,t.y)}for(let t=0;t\u003c4;t++)p.push(this.id),v.push(0,0);m.push(0,0,1,0,1,1,0,1);const n=1*this.id*4+4*e;g.push(n+0,n+1,n+2,n+2,n+3,n+0)}S++}}getDirection(){return Math.abs(this.w-this.h)\u003c100?-1:this.w\u003ethis.h?1:0}getCenter(){return{x:this.x+this.w/2,y:this.y+this.h/2}}getScreenPosition(){const t=this.getCenter(),e=window.innerWidth,n=R;return{x:(t.x+e/2)/e,y:(t.y+n/2)/n}}}window.addEventListener(\"resize\",I),z(),I(),D()},function(t,e){t.exports=\"precision mediump float;\\n\\nconst float PI = 3.1415926535897932384626433832795;\\n\\nattribute float index;\\nattribute float totalIndex;\\nattribute vec3 position;\\nattribute vec3 translate;\\nattribute vec2 uv;\\nattribute vec2 size;\\nattribute vec2 padding;\\nattribute vec3 color;\\nattribute float direction;\\nattribute float ratio;\\nattribute vec2 weight;\\n\\nuniform mat4 modelViewMatrix;\\nuniform mat4 projectionMatrix;\\nuniform float time;\\nuniform float uWidth;\\nuniform float uHeight;\\nuniform float duration;\\n\\nvarying float vIndex;\\nvarying float vTotalIndex;\\nvarying vec2 vUv;\\nvarying vec3 vColor;\\nvarying vec2 vResolution;\\nvarying float vDirection;\\nvarying float vRatio;\\nvarying vec2 vWeight;\\n\\nvoid main() {\\n vIndex = index;\\n vTotalIndex = totalIndex;\\n vUv = uv;\\n vColor = color;\\n // Actual resolution of rect by vertex with padding.\\n vResolution = vec2(size.x - padding.x, size.y - padding.y);\\n vDirection = direction;\\n vRatio = ratio;\\n vWeight = weight;\\n\\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\\n gl_Position = projectionMatrix * mvPosition;\\n}\"},function(t,e){t.exports=\"precision mediump float;\\n\\nconst float PI = 3.1415926535897932384626433832795;\\n\\nuniform vec2 resolution;\\nuniform float time;\\nuniform sampler2D texture;\\nuniform vec2 textureResolution;\\n\\nvarying float vIndex;\\nvarying float vTotalIndex;\\nvarying vec2 vUv;\\nvarying vec3 vColor;\\nvarying vec2 vResolution;\\nvarying float vDirection;\\nvarying float vRatio;\\nvarying vec2 vWeight;\\n\\n#define PI acos(-1.0)\\n#define ITER 64.0\\n\\nstruct obj{\\n float d;\\n vec3 c_shadow;\\n vec3 c_light;\\n};\\n\\nmat2 rot(float a) {\\n return mat2(cos(a), sin(a), -sin(a), cos(a));\\n}\\n\\nvec2 getUV() {\\n vec2 uv = (vUv.xy * vResolution * 2.0 - vResolution.xy) / min(vResolution.x, vResolution.y);\\n return uv;\\n}\\n\\nfloat atan2(float y, float x){\\n return x == 0.0 ? sign(y) * PI / 2.0 : atan(y, x);\\n}\\n\\nfloat radian(float degree) {\\n return degree * PI / 180.0;\\n}\\n\\nvec2 round(vec2 p) {\\n return floor(p + 0.5);\\n}\\n\\nvec2 crep(vec2 p, float c, float l) {\\n return p - c * clamp(round(p / c), -l, l);\\n}\\n\\nvec2 repetition(vec2 p, float c) {\\n return p - c * round(p / c);\\n}\\n\\nvec2 getWorldUV() {\\n vec2 weight = (vWeight * resolution * 2.0 - resolution.xy) / min(resolution.x, resolution.y);\\n return weight;\\n}\\n\\nfloat sdCappedCylinder(vec3 p, float h, float r) {\\n vec2 d = abs(vec2(length(p.xz),p.y)) - vec2(h,r);\\n return min(max(d.x,d.y),0.0) + length(max(d,0.0));\\n}\\n\\nfloat sdSphere(vec3 p, float s) {\\n return length(p) - s;\\n}\\n\\nfloat sdTorus(vec3 p, vec2 t) {\\n vec2 q = vec2(length(p.xz)-t.x,p.y);\\n return length(q)-t.y;\\n}\\n\\nfloat box(vec3 p, vec3 c) {\\n vec3 q = abs(p) - c;\\n return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0);\\n}\\n\\nfloat getId() {\\n return floor(mod(vIndex, 4.0));\\n}\\n\\nvec3 getBGColor() {\\n float id = getId();\\n vec3 col = vec3(0.0);\\n vec3 col2 = vec3(0.0);\\n\\n if (id == 0.0 || id == 2.0) {\\n col = vec3(1.0, 0.01, 0.01);\\n col2 = vec3(0.9, 0.3, 0.1);\\n } else {\\n col = vec3(0.01, 0.01, 1.0);\\n col2 = vec3(0.0, 0.3, 0.9);\\n }\\n vec2 uv = getUV();\\n\\n col = mix(col2, col, length(uv.y));\\n\\n return col;\\n}\\n\\nfloat ease(float x) {\\n float contrast = 8.0; //4.0,8.0,16.0\\n return 1.0 / (1.0 + exp(-contrast * (x - 0.5)));\\n}\\n\\nobj prim(vec3 p) {\\n float id = getId();\\n\\n // primitive\\n float velocity = 1.0 - ease(cos(time * 2.0 + radian(270.0 * id)));\\n// velocity = 0.2;\\n float size = velocity * 0.25;\\n// p.y += cos(radian(velocity * 360.0)) * 0.03;\\n// p.y -= 0.3;\\n// p.xy = crep(p.xy, size * 3.0, 3.0);\\n// p.z -= time * 0.2;\\n// p.xz = repetition(p.xz, size * 2.5);\\n float d1 = sdSphere(p, size);\\n// d1 = sdTorus(p, vec2(size, size * 0.4));\\n// d1 = sdCappedCylinder(p, size, size);\\n float d = d1;\\n\\n vec3 shadow = vec3(0.0);\\n vec3 light = vec3(0.0);\\n\\n if (id == 0.0 || id == 2.0) {\\n shadow = vec3(0.3, 0.0, 1.0);\\n light = vec3(0.0, 1.0, 0.0);\\n } else {\\n shadow = vec3(0.6, 0.2, 0.3);\\n light = vec3(1.0, 1.0, 0.0);\\n }\\n\\n vec3 bgColor = getBGColor();\\n\\n float alphaThreshold = 0.8;\\n shadow = mix(shadow, bgColor, step(alphaThreshold, velocity));\\n light = mix(light, bgColor, step(alphaThreshold, velocity));\\n\\n return obj(d, shadow, light);\\n}\\n\\nobj SDF(vec3 p) {\\n vec3 pp = vec3(0.0);\\n vec2 worldUV = getWorldUV();\\n float r = 30.0;\\n// p.xz *= rot(radian(time * 1.0));\\n// p.yz *= rot(radian(5.0));\\n\\n obj scene = prim(p + vec3(0.0));\\n return scene;\\n}\\n\\nvec3 getNorm(vec3 p) {\\n vec2 eps = vec2(0.001, 0.0);\\n return normalize(SDF(p).d - vec3(SDF(p - eps.xyy).d, SDF(p - eps.yxy).d, SDF(p - eps.yyx).d));\\n}\\n\\nvoid main() {\\n vec2 uv = getUV();\\n\\n bool isHit = false;\\n vec3 ro = vec3(uv * 0.2, -1.0),\\n rd = vec3(0.0, 0.0, 1.0),\\n p = ro,\\n col = getBGColor(),\\n l = normalize(vec3(1.0, 2.0, -2.0));\\n obj o;\\n\\n for (float i = 0.0; i \u003c ITER; i++) {\\n vec3 p2 = p;\\n o = SDF(p);\\n if (o.d \u003c 0.001) {\\n isHit = true;\\n break;\\n }\\n p += o.d * rd;\\n }\\n\\n if (isHit) {\\n vec3 n = getNorm(p);\\n float lighting = max(dot(n, l), 0.0);\\n col = mix(o.c_shadow, o.c_light, lighting);\\n }\\n\\n vec3 color = vec3(sqrt(col));\\n\\n gl_FragColor = vec4(color, 1.0);\\n}\"}]);","artId":"ce66pasn70rlpj69djmg","libraries":[]}],"like":0,"thumbFileName":"ce66pasn70rlpj69djmg.png","selectedThumbFileName":"ce66pasn70rlpj69djmg.png","thumbnailFileUrl":"","resourceFileName":"ce66pasn70rlpj69djmg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZQPkWyBp7HvjZ2BdMVXCfDtADHakRC2SrjQQZ7xkU2H7","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce65tm4n70rlpj69dhi0","title":"Search","description":"","createdAt":1670143704,"updatedAt":1670144070,"user":{"id":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","customId":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","name":"暁の流星","biography":"https://twitter.com/teruru33550336","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kxRaHBGSlVbGNFln0YnNYdFUNIC3.png","createdAt":1568178895000,"updatedAt":1734018546583},"codes":[{"id":"ce65tm4n70rlpj69dhj0","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"ce65tm4n70rlpj69dhi0","libraries":[]},{"id":"ce65tm4n70rlpj69dhjg","type":4,"text":"precision highp float;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D channel0;\nuniform sampler2D channel1;\nuniform vec2 channelSize0;\n\nfloat circle(vec2 p,float size){\n\treturn max(ceil(size - length(p)),0.);\n}\n\nfloat random (vec2 st) {\n return fract(sin(dot(st.xy, vec2(12.9898,78.233)))* 43758.5453123);\n}\n\nvoid main(void) {\n vec2 uv = gl_FragCoord.xy;\n vec2 cUV = uv;\n\n uv.x+=mod(time*50.,channelSize0.x);\n uv.y+=mod(time*50.,channelSize0.y);\n \n vec2 qruv = uv/channelSize0;\n float zo = mod(ceil(qruv.x)+ceil(qruv.y),2.);\n\n vec2 s = mod(uv,channelSize0)/channelSize0;\n\n vec3 a = vec3(0.);\n \n if(zo\u003e0.){\n a = texture2D(channel0,s).xyz;\n }else{\n a = texture2D(channel1,s).xyz;\n }\n \n a = abs(vec3(zo)-a);\n \n a = abs(vec3(step(circle(vec2(abs(mod(cUV.x,200.)-100.),cUV.y-mod(time*100.,resolution.y+200.)+100.),100.),0.))-a);\n \n gl_FragColor = vec4(vec3(a), 1.);\n}","artId":"ce65tm4n70rlpj69dhi0","libraries":[]}],"like":0,"thumbFileName":"ce65tm4n70rlpj69dhi0.png","selectedThumbFileName":"ce65tm4n70rlpj69dhi0.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmaVK17W2kM8ToHaGvU7BVPGsf7PWMfEPGbVDoBwsizfWD","resourceFileName":"ce65tm4n70rlpj69dhi0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQZ9XwqW7DVhd4sDYTRcFmmMcAshfroGgspWn35XLUrPD","resourceType":3,"metadataUrl":"","tags":[{"id":"bmj9c1c3p9fdr6916krg","name":"GLSL"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[{"id":"ce660hkn70rlpj69dht0","index":0,"externalResource":{"id":"ce63p94n70rlpj69deig","fileName":"ce63p94n70rlpj69dei0.png","originalFileName":"23c34f647a90aa48b53ddbe09a80b7ee74b70745.png","url":"https://stat.neort.io/externalResource/ce63p94n70rlpj69dei0.png","type":1,"createdAt":1670134948,"updatedAt":1670134948},"isDeleted":false},{"id":"ce660hkn70rlpj69dhtg","index":1,"externalResource":{"id":"ce65u5sn70rlpj69dhm0","fileName":"ce65u5sn70rlpj69dhlg.png","originalFileName":"2.png","url":"https://stat.neort.io/externalResource/ce65u5sn70rlpj69dhlg.png","type":1,"createdAt":1670143767,"updatedAt":1670143767},"isDeleted":false}],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce639hkn70rlpj69ddt0","title":"Rose #3","description":"Infinitely generated from the Ethereum block hash. \n\nWith peace and consensus, not war.","createdAt":1670132977,"updatedAt":1670132977,"user":{"id":"arps8rUNgccWykuFOecOn0ad2Gu2","customId":"","name":"wagyuu|和牛","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/arps8rUNgccWykuFOecOn0ad2Gu2.jpg","createdAt":1670087525340,"updatedAt":1670132920023},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce639hkn70rlpj69ddt0.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/Qmd5zQeFB11xdaWhiefE2LZyC9nUfYgNigFfAzkb1bMfmz","resourceFileName":"ce639hkn70rlpj69ddt0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXgAHEHKX5eCK6hK6ykEUPpwTdpogSvJ2QMWcaHzbYjDv","resourceType":2,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmPR4uU4NGZU9GuWVBoWcQXi2orLwmUbAah3kuTZ1sBEgx","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":1,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ce62dmkn70rlpj69dcu0","title":"Sya-Dou","description":"写真とリズムの世界、連続写真に音響を追加して構成。\n映像とリズムを体感する作品。","createdAt":1670129415,"updatedAt":1670129415,"user":{"id":"gXbwFayTrhMG4JqrQQUlsN8C3zx1","customId":"","name":"立川清志楼 【第一次三ヶ年計画推進中】","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/gXbwFayTrhMG4JqrQQUlsN8C3zx1.jpg","createdAt":1670126867902,"updatedAt":1670902693262},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce62dmkn70rlpj69dcu0.jpg","thumbnailFileUrl":"","resourceFileName":"ce62dmkn70rlpj69dcu0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmRDA3Bt2FfvMbghzThhs46dcwKHFZdQ57vDpZnJ5vMwwE","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce60g7sn70rlpj69da5g","title":"outpainting of weekly p5js","description":"","createdAt":1670121545,"updatedAt":1670121545,"user":{"id":"qkffOqaxzZXbczbGy7Gjx3gQcti2","customId":"ayato","name":"ayato","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/qkffOqaxzZXbczbGy7Gjx3gQcti2.jpg","createdAt":1551181359000,"updatedAt":1733736956235},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce60g7sn70rlpj69da5g.jpg","thumbnailFileUrl":"","resourceFileName":"ce60g7sn70rlpj69da5g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qma6489JAPgxscueeXBAcS9ugg7yjEXewnX4EyFbznBA2v","resourceType":2,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"bmqr67s3p9f7m1g02kr0","name":"creativecoding"},{"id":"bogjdok3p9fd1q8oc7c0","name":"generativeart"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5vbqkn70rlpj69d94g","title":"【Red】00","description":"","createdAt":1670116865,"updatedAt":1670116865,"user":{"id":"zOfh6S3LsEemJ6IENAnf3aQ7Twx1","customId":"zOfh6S3LsEemJ6IENAnf3aQ7Twx1","name":"shion oka","biography":"TouchDesigner - Unity\n\nhttps://twitter.com/oka_shion","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/zOfh6S3LsEemJ6IENAnf3aQ7Twx1.jpg","createdAt":1635212204282,"updatedAt":1710822531713},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce5vbqkn70rlpj69d94g.png","thumbnailFileUrl":"","resourceFileName":"ce5vbqkn70rlpj69d94g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmc6AcuquScNNgoeJ1vGZhXoH1eMVcrt1SxC5jk946KBte","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5j4lkn70rlpj69d44g","title":"Multi layer sphere (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221203","createdAt":1670066817,"updatedAt":1670066817,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce5j4lkn70rlpj69d44g.png","thumbnailFileUrl":"","resourceFileName":"ce5j4lkn70rlpj69d44g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYEAZeDDmtiJ8kPtP2fHBEBcTPdWJyPRPJtyd8qceMUXA","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5fqpkn70rlpj69d27g","title":"飛鳥金屏風","description":"齋藤飛鳥卒業を祝しまして","createdAt":1670053226,"updatedAt":1670601633,"user":{"id":"zpwGDidVmGa4XzzDqNxDTYFWCx43","customId":"","name":"ukeyshima","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/zpwGDidVmGa4XzzDqNxDTYFWCx43.jpg","createdAt":1668698544221,"updatedAt":1684249010711},"codes":[{"id":"ce5fqqcn70rlpj69d290","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cmeta charset=\"UTF-8\" /\u003e\n \u003cstyle\u003ebody {\n margin: 0;\n overflow: hidden;\n background-color: black;\n}\n\ncanvas {\n width: 100vw;\n height: 100vh;\n}\n\u003c/style\u003e\n \u003ctitle\u003eBoids\u003c/title\u003e\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cscript type=\"text/plain\" id=\"initParamsFrag\"\u003e#version 300 es\nprecision lowp float;\n\nuniform vec3 simAreaCenter;\nuniform vec3 simAreaSize;\n\nlayout(location = 0) out vec3 outVelocity;\nlayout(location = 1) out vec3 outPosition;\n\n#define FLOAT_MAX float(0xffffffffu)\n\nuvec3 pcg3d(uvec3 v) {\n v = v * 1664525u + 1013904223u;\n v.x += v.y * v.z;\n v.y += v.z * v.x;\n v.z += v.x * v.y;\n v ^= v \u003e\u003e 16u;\n v.x += v.y * v.z;\n v.y += v.z * v.x;\n v.z += v.x * v.y;\n return v;\n}\n\nvec3 pcg3d01(uvec3 v) {\n return vec3(pcg3d(v)) / FLOAT_MAX;\n}\n\nfloat vNoise(vec3 p) {\n uvec3 i = uvec3(floor(p));\n vec3 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n return mix(mix(mix(pcg3d01(i).x, pcg3d01(i + uvec3(1, 0, 0)).x, f.x), mix(pcg3d01(i + uvec3(0, 1, 0)).x, pcg3d01(i + uvec3(1, 1, 0)).x, f.x), f.y), mix(mix(pcg3d01(i + uvec3(0, 0, 1)).x, pcg3d01(i + uvec3(1, 0, 1)).x, f.x), mix(pcg3d01(i + uvec3(0, 1, 1)).x, pcg3d01(i + uvec3(1, 1, 1)).x, f.x), f.y), f.z);\n}\n\nvoid main(void) {\n uvec2 coord = uvec2(gl_FragCoord.xy);\n\n vec3 vel = pcg3d01(uvec3(coord, 0));\n vel = vel - 0.5;\n vec3 pos = pcg3d01(uvec3(coord, 100));\n for(int i = 0; i \u003c 300; i++) {\n vec3 p = pcg3d01(uvec3(coord, i));\n float v = pow(vNoise(p * 5.0), 4.0) * 4.0;\n if(v \u003e 0.8) {\n pos = p;\n break;\n }\n }\n pos = pos - 0.5;\n pos *= simAreaSize;\n pos.z *= 0.01;\n pos -= simAreaCenter;\n\n outVelocity = vel;\n outPosition = pos;\n}\u003c/script\u003e\n \u003cscript type=\"text/plain\" id=\"indexFrag\"\u003e#version 300 es\nprecision lowp float;\nprecision lowp sampler2D;\n\nuniform vec2 resolution;\nuniform vec3 simAreaCenter;\nuniform vec3 simAreaSize;\nuniform vec3 gridNum;\n\nuniform sampler2D positionTexture;\n\nlayout(location = 0) out uvec2 outIndex;\n\nuint getInstanceIndex(vec2 fragCoord) {\n return uint(fragCoord.x) + uint(fragCoord.y) * uint(resolution.x);\n}\n\nuint getGridIndex(vec3 position) {\n vec3 np = (position - simAreaCenter) / simAreaSize + vec3(0.5);\n uvec3 ip = uvec3(floor(np * gridNum));\n return ip.x + ip.y * uint(gridNum.x) + ip.z * uint(gridNum.x * gridNum.y);\n}\n\nvoid main(void) {\n ivec2 coord = ivec2(gl_FragCoord.xy);\n vec3 pos = texelFetch(positionTexture, coord, 0).xyz;\n uint index = getInstanceIndex(gl_FragCoord.xy);\n uint gridIndex = getGridIndex(pos);\n outIndex = uvec2(index, gridIndex);\n}\u003c/script\u003e\n \u003cscript type=\"text/plain\" id=\"bitonicSortFrag\"\u003e#version 300 es\nprecision lowp float;\nprecision mediump usampler2D;\n\nuniform usampler2D indexTexture;\nuniform vec2 resolution;\nuniform int mainBlockStep;\nuniform int subBlockStep;\n\nlayout(location = 0) out uvec2 outIndex;\n\nuint getInstanceIndex(vec2 fragCoord) {\n return uint(fragCoord.x) + uint(fragCoord.y) * uint(resolution.x);\n}\n\nivec2 getCoord(uint instanceIndex) {\n return ivec2(instanceIndex % uint(resolution.x), instanceIndex / uint(resolution.x));\n}\n\nvoid main(void) {\n ivec2 coord = ivec2(gl_FragCoord.xy);\n uint index = getInstanceIndex(gl_FragCoord.xy);\n\n uint distance = 1u \u003c\u003c uint(mainBlockStep - subBlockStep);\n bool ascendingOrder = ((index \u003e\u003e uint(mainBlockStep)) \u0026 2u) == 0u;\n bool first = (index \u0026 distance) == 0u;\n\n uint targetIndex = first ? index | distance : index \u0026 ~distance;\n\n uvec2 color = texelFetch(indexTexture, coord, 0).xy;\n uvec2 targetColor = texelFetch(indexTexture, getCoord(targetIndex), 0).xy;\n\n bool swap = (ascendingOrder \u0026\u0026 first \u0026\u0026 color.y \u003e targetColor.y) ||\n (ascendingOrder \u0026\u0026 !first \u0026\u0026 color.y \u003c= targetColor.y) ||\n (!ascendingOrder \u0026\u0026 first \u0026\u0026 color.y \u003c targetColor.y) ||\n (!ascendingOrder \u0026\u0026 !first \u0026\u0026 color.y \u003e= targetColor.y);\n\n outIndex = swap ? targetColor : color;\n}\u003c/script\u003e\n \u003cscript type=\"text/plain\" id=\"gridIndexFrag\"\u003e#version 300 es\nprecision lowp float;\nprecision mediump usampler2D;\n\nuniform vec2 resolution;\nuniform vec2 indexResolution;\nuniform int instanceNum;\nuniform usampler2D indexTexture;\n\nlayout(location = 0) out ivec2 outGridIndex;\n\n#define FLOAT_MAX float(0xffffffffu)\n\nivec2 getCoord(int instanceIndex) {\n return ivec2(instanceIndex % int(indexResolution.x), instanceIndex / int(indexResolution.x));\n}\n\nint getGridIndex(int instanceIndex) {\n ivec2 coord = getCoord(instanceIndex);\n return int(texelFetch(indexTexture, coord, 0).y);\n}\n\nint getGridIndex(ivec2 coord) {\n return coord.x + coord.y * int(resolution.x);\n}\n\nint binarySearchMin(int target, int from, int to) {\n while(from \u003c to) {\n int middle = (from + to) / 2;\n int gridIndex = getGridIndex(middle);\n\n from = target \u003c= gridIndex ? from : middle + 1;\n to = target \u003c= gridIndex ? middle : to;\n }\n\n return getGridIndex(from) == target ? from : -1;\n}\n\nint binarySearchMax(int target, int from, int to) {\n while(from \u003c to) {\n int middle = (from + to) / 2;\n int gridIndex = getGridIndex(middle);\n\n from = target \u003e= gridIndex ? middle + 1 : from;\n to = target \u003e= gridIndex ? to : middle;\n }\n\n return getGridIndex(from - 1) == target ? from - 1 : -1;\n}\n\nivec2 binarySearchRange(int target, int from, int to) {\n from = binarySearchMin(target, from, to);\n to = from == -1 ? -1 : binarySearchMax(target, from, to);\n return ivec2(from, to);\n}\n\nvoid main(void) {\n ivec2 coord = ivec2(gl_FragCoord.xy);\n int gridIndex = getGridIndex(coord);\n ivec2 indexRange = binarySearchRange(gridIndex, 0, instanceNum + 1);\n\n outGridIndex = ivec2(indexRange.x, indexRange.y);\n}\u003c/script\u003e\n \u003cscript type=\"text/plain\" id=\"updateParamsFrag\"\u003e#version 300 es\nprecision lowp float;\nprecision mediump isampler2D;\nprecision mediump usampler2D;\nprecision lowp sampler2D;\n\nuniform float deltaTime;\nuniform float time;\nuniform vec2 paramsResolution;\nuniform vec2 gridIndexResolution;\nuniform vec3 gridNum;\nuniform float maxSpeed;\nuniform float maxForce;\nuniform float separationRadius;\nuniform float alignmentRadius;\nuniform float cohesionRadius;\nuniform float separationWeight;\nuniform float alignmentWeight;\nuniform float cohesionWeight;\nuniform vec3 simAreaCenter;\nuniform vec3 simAreaSize;\nuniform float wallWeight;\n\nuniform sampler2D velocityTexture;\nuniform sampler2D positionTexture;\nuniform isampler2D gridIndexTexture;\nuniform usampler2D indexTexture;\n\n#define FLOAT_MAX float(0xffffffffu)\n\nlayout(location = 0) out vec3 outVelocity;\nlayout(location = 1) out vec3 outPosition;\n\nvec3 limit(vec3 vec, float max) {\n float length = sqrt(dot(vec, vec));\n return (length \u003e max \u0026\u0026 length \u003e 0.0) ? vec.xyz * (max / length) : vec.xyz;\n}\n\nivec2 getCoord(int instanceIndex) {\n return ivec2(instanceIndex % int(paramsResolution.x), instanceIndex / int(paramsResolution.x));\n}\n\nuint getInstanceIndex(int id) {\n ivec2 coord = getCoord(id);\n return texelFetch(indexTexture, coord, 0).x;\n}\n\nuint getGridIndex(vec3 position) {\n vec3 np = (position - simAreaCenter) / simAreaSize + vec3(0.5);\n uvec3 ip = uvec3(floor(np * gridNum));\n return ip.x + ip.y * uint(gridNum.x) + ip.z * uint(gridNum.x * gridNum.y);\n}\n\nivec2 getGridCoord(int gridIndex) {\n return ivec2(gridIndex % int(gridIndexResolution.x), gridIndex / int(gridIndexResolution.x));\n}\n\nint getNeighborGridIndex(int gridIndex, int x, int y, int z) {\n return gridIndex + x + y * int(gridNum.x) + z * int(gridNum.x * gridNum.y);\n}\n\nbool isNeighborGridIndexInSimulationArea(int gridIndex, int x, int y, int z) {\n ivec3 gridPos;\n gridPos.z = gridIndex / int(gridNum.x * gridNum.y);\n gridPos.y = (gridIndex % int(gridNum.x * gridNum.y)) / int(gridNum.x);\n gridPos.x = (gridIndex % int(gridNum.x * gridNum.y)) % int(gridNum.x);\n\n return (gridPos.x + x) \u003e= 0 \u0026\u0026 (gridPos.x + x) \u003c int(gridNum.x) \u0026\u0026\n (gridPos.y + y) \u003e= 0 \u0026\u0026 (gridPos.y + y) \u003c int(gridNum.y) \u0026\u0026\n (gridPos.z + z) \u003e= 0 \u0026\u0026 (gridPos.z + z) \u003c int(gridNum.z);\n}\n\nvec3 getForce(vec3 pos, vec3 vel) {\n vec3 separationForce = vec3(0.0);\n vec3 alignmentForce = vec3(0.0);\n vec3 cohesionForce = vec3(0.0);\n float separationCount = 0.0;\n float alignmentCount = 0.0;\n float cohesionCount = 0.0;\n int gridIndex = int(getGridIndex(pos));\n for(int x = -1; x \u003c= 1; x++) {\n for(int y = -1; y \u003c= 1; y++) {\n for(int z = -1; z \u003c= 1; z++) {\n int neighborGridIndex = getNeighborGridIndex(gridIndex, x, y, z);\n if(!isNeighborGridIndexInSimulationArea(gridIndex, x, y, z))\n continue;\n ivec2 gridCoord = getGridCoord(neighborGridIndex);\n ivec2 firstLastIndex = texelFetch(gridIndexTexture, gridCoord, 0).xy;\n\n for(int i = firstLastIndex.x; i \u003c= firstLastIndex.y; i++) {\n int instanceIndex = int(getInstanceIndex(i));\n ivec2 coord = getCoord(instanceIndex);\n vec3 otherPos = texelFetch(positionTexture, coord, 0).xyz;\n vec3 otherVel = texelFetch(velocityTexture, coord, 0).xyz;\n vec3 diff = pos - otherPos;\n float dist = sqrt(dot(diff, diff));\n\n separationForce += dist \u003e 0.0 \u0026\u0026 dist \u003c= separationRadius ? normalize(diff) / dist : vec3(0.0);\n separationCount += dist \u003e 0.0 \u0026\u0026 dist \u003c= separationRadius ? 1.0 : 0.0;\n alignmentForce += dist \u003e 0.0 \u0026\u0026 dist \u003c= alignmentRadius ? otherVel : vec3(0.0);\n alignmentCount += dist \u003e 0.0 \u0026\u0026 dist \u003c= alignmentRadius ? 1.0 : 0.0;\n cohesionForce += dist \u003e 0.0 \u0026\u0026 dist \u003c= cohesionRadius ? otherPos : vec3(0.0);\n cohesionCount += dist \u003e 0.0 \u0026\u0026 dist \u003c= cohesionRadius ? 1.0 : 0.0;\n }\n }\n }\n }\n separationForce = separationCount \u003c 1.0 ? vec3(0.0) : limit(normalize(separationForce / separationCount) * maxSpeed - vel, maxForce) * separationWeight;\n alignmentForce = alignmentCount \u003c 1.0 ? vec3(0.0) : limit(normalize(alignmentForce / alignmentCount) * maxSpeed - vel, maxForce) * alignmentWeight;\n cohesionForce = cohesionCount \u003c 1.0 ? vec3(0.0) : limit(normalize(cohesionForce / cohesionCount - pos) * maxSpeed - vel, maxForce) * cohesionWeight;\n return separationForce + alignmentForce + cohesionForce;\n}\n\nvec3 avoidWall(vec3 pos) {\n vec3 acc = vec3(0.0, 0.0, 0.0);\n acc.x = (pos.x \u003c simAreaCenter.x - simAreaSize.x * 0.5) ? acc.x + 1.0 : acc.x;\n acc.x = (pos.x \u003e simAreaCenter.x + simAreaSize.x * 0.5) ? acc.x - 1.0 : acc.x;\n acc.y = (pos.y \u003c simAreaCenter.y - simAreaSize.y * 0.5) ? acc.y + 1.0 : acc.y;\n acc.y = (pos.y \u003e simAreaCenter.y + simAreaSize.y * 0.5) ? acc.y - 1.0 : acc.y;\n acc.z = (pos.z \u003c simAreaCenter.z - simAreaSize.z * 0.5) ? acc.z + 1.0 : acc.z;\n acc.z = (pos.z \u003e simAreaCenter.z + simAreaSize.z * 0.5) ? acc.z - 1.0 : acc.z;\n return acc;\n}\n\nuvec3 pcg3d(uvec3 v) {\n v = v * 1664525u + 1013904223u;\n v.x += v.y * v.z;\n v.y += v.z * v.x;\n v.z += v.x * v.y;\n v ^= v \u003e\u003e 16u;\n v.x += v.y * v.z;\n v.y += v.z * v.x;\n v.z += v.x * v.y;\n return v;\n}\n\nvec3 pcg3d01(uvec3 v) {\n return vec3(pcg3d(v)) / FLOAT_MAX;\n}\n\nvec3 vNoise3d(vec3 p) {\n uvec3 i = uvec3(floor(p));\n vec3 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n return mix(mix(mix(pcg3d01(i), pcg3d01(i + uvec3(1, 0, 0)), f.x), mix(pcg3d01(i + uvec3(0, 1, 0)), pcg3d01(i + uvec3(1, 1, 0)), f.x), f.y), mix(mix(pcg3d01(i + uvec3(0, 0, 1)), pcg3d01(i + uvec3(1, 0, 1)), f.x), mix(pcg3d01(i + uvec3(0, 1, 1)), pcg3d01(i + uvec3(1, 1, 1)), f.x), f.y), f.z);\n}\n\nvoid main(void) {\n ivec2 coord = ivec2(gl_FragCoord.xy);\n\n vec3 vel = texelFetch(velocityTexture, coord, 0).xyz;\n vec3 pos = texelFetch(positionTexture, coord, 0).xyz;\n\n vec3 force = getForce(pos, vel);\n force += avoidWall(pos) * wallWeight;\n force += vNoise3d(vec3(pos.xy, time)) * 2.0 - 1.0;\n\n vel += force * deltaTime;\n vel = limit(vel, maxSpeed);\n pos += vel * deltaTime;\n outVelocity = vel;\n outPosition = pos;\n}\u003c/script\u003e\n \u003cscript type=\"text/plain\" id=\"boidsFrag\"\u003e#version 300 es\nprecision lowp float;\n\nin vec4 vsColor;\n\nlayout(location = 0) out vec4 outColor;\n\nvoid main(void) {\n outColor = vsColor;\n}\u003c/script\u003e\n \u003cscript type=\"text/plain\" id=\"boidsVert\"\u003e#version 300 es\nprecision lowp float;\nprecision lowp sampler2D;\n\nin vec3 vertex;\nin float instanceIndex;\n\nout vec4 vsColor;\n\nuniform vec2 paramsResolution;\nuniform mat4 mMatrix;\nuniform mat4 vpMatrix;\nuniform vec3 simAreaSize;\nuniform int instanceNum;\nuniform float time;\nuniform sampler2D positionTexture;\nuniform sampler2D velocityTexture;\n\n#define PI 3.141592\n#define FLOAT_MAX float(0xffffffffu)\n\nivec2 getCoord(int instanceIndex) {\n instanceIndex = instanceIndex \u003c instanceNum ? instanceIndex : instanceIndex - instanceNum;\n return ivec2(instanceIndex % int(paramsResolution.x), instanceIndex / int(paramsResolution.x));\n}\n\nfloat atan2(in float y, in float x) {\n return x == 0.0 ? sign(y) * PI / 2.0 : atan(y, x);\n}\n\nmat4 rotationZ(float t) {\n return mat4(cos(t), sin(t), 0.0, 0.0, -sin(t), cos(t), 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0);\n}\n\nuint pcg(uint v) {\n uint state = v * 747796405u + 2891336453u;\n uint word = ((state \u003e\u003e ((state \u003e\u003e 28u) + 4u)) ^ state) * 277803737u;\n return (word \u003e\u003e 22u) ^ word;\n}\n\nvoid main(void) {\n ivec2 coord = getCoord(int(instanceIndex));\n vec3 position = texelFetch(positionTexture, coord, 0).xyz;\n vec3 velocity = texelFetch(velocityTexture, coord, 0).xyz;\n\n mat4 rotZ = rotationZ(PI * 3.0 / 2.0 + atan2(velocity.y, velocity.x));\n\n position.x += int(instanceIndex) \u003c instanceNum ? 0.0 : position.x \u003c 0.0 ? simAreaSize.x : -simAreaSize.x;\n\n float rand = float(pcg(uint(int(instanceIndex) % instanceNum))) / FLOAT_MAX * 2.0 - 1.0;\n float velocityMagnitude = length(velocity);\n float wing = smoothstep(0.2, 0.6, abs(vertex.x)) * abs(vertex.x) / 2.0;\n float flapAmp = rand + 0.3 * velocityMagnitude;\n float flapFreq = 4.0 + rand * 0.3 - 0.1 * velocityMagnitude;\n\n vec4 vertex = vec4(vertex * (rand * 0.3 + 0.7), 1.0);\n vertex.z += wing * flapAmp * sin(flapFreq * time);\n vertex = mMatrix * vertex;\n vertex = rotZ * vertex;\n vertex.xyz += position;\n vertex = vpMatrix * vertex;\n\n vec3 color = vec3(clamp(vertex.z * 0.5 + 0.5, 0.5, 1.0)) * (velocity.xyz * 0.5 + vec3(0.5));\n\n gl_Position = vertex;\n vsColor = vec4(color * (rand * 0.2 + 0.8), 1.0);\n}\u003c/script\u003e\n \u003cscript type=\"text/plain\" id=\"renderingFrag\"\u003e#version 300 es\nprecision mediump float;\nprecision mediump sampler2D;\n\nuniform sampler2D tex;\nuniform float time;\n#define FLOAT_MAX float(0xffffffffu)\n\nlayout(location = 0) out vec4 outColor;\n\nuint pcg(uint v) {\n uint state = v * 747796405u + 2891336453u;\n uint word = ((state \u003e\u003e ((state \u003e\u003e 28u) + 4u)) ^ state) * 277803737u;\n return (word \u003e\u003e 22u) ^ word;\n}\n\nuvec3 pcg3d(uvec3 v) {\n v = v * 1664525u + 1013904223u;\n v.x += v.y * v.z;\n v.y += v.z * v.x;\n v.z += v.x * v.y;\n v ^= v \u003e\u003e 16u;\n v.x += v.y * v.z;\n v.y += v.z * v.x;\n v.z += v.x * v.y;\n return v;\n}\n\nvec3 pcg3d01(uvec3 v) {\n return vec3(pcg3d(v)) / FLOAT_MAX;\n}\n\nfloat vNoise(vec3 p) {\n uvec3 i = uvec3(floor(p));\n vec3 f = fract(p);\n f = f * f * (3.0 - 2.0 * f);\n return mix(mix(mix(pcg3d01(i).x, pcg3d01(i + uvec3(1, 0, 0)).x, f.x), mix(pcg3d01(i + uvec3(0, 1, 0)).x, pcg3d01(i + uvec3(1, 1, 0)).x, f.x), f.y), mix(mix(pcg3d01(i + uvec3(0, 0, 1)).x, pcg3d01(i + uvec3(1, 0, 1)).x, f.x), mix(pcg3d01(i + uvec3(0, 1, 1)).x, pcg3d01(i + uvec3(1, 1, 1)).x, f.x), f.y), f.z);\n}\n\nfloat fbm(vec3 p) {\n float amp = 1.0;\n float freq = 1.0;\n float value = 0.0;\n float maxValue = 0.0;\n for(float i = 0.0; i \u003c 3.0; i++) {\n value += amp * vNoise(p * freq);\n maxValue += amp;\n amp *= 0.5;\n freq *= 2.0;\n }\n return value / maxValue;\n\n}\n\nvoid main(void) {\n ivec2 coord = ivec2(gl_FragCoord.xy);\n\n vec3 color = vec3(texelFetch(tex, coord, 0).xyz);\n\n color += fbm(vec3(vec2(coord) * 10.0, 0.1 * time)) * 0.5 - 0.5;\n color += pow(max(fbm(vec3(vec2(coord) * vec2(0.002, 0.005), 0.2 * time)), 0.0001), 2.0) * 0.5;\n\n color -= 0.1 * pcg3d01(uvec3(uint(coord.y) - uint(coord.y) % pcg(uint(coord.x)), uint(coord.x), 0)).xxx;\n color -= 0.1 * pcg3d01(uvec3(uint(coord.x) - uint(coord.x) % pcg(uint(coord.y)), uint(coord.y), 0)).xxx;\n\n outColor = vec4(color, 1.0);\n}\u003c/script\u003e\n \u003cscript\u003eclass Matrix4x4 {\n static identity = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n\n static multiply(a, b) {\n return [\n a[0] * b[0] + a[1] * b[4] + a[2] * b[8] + a[3] * b[12],\n a[0] * b[1] + a[1] * b[5] + a[2] * b[9] + a[3] * b[13],\n a[0] * b[2] + a[1] * b[6] + a[2] * b[10] + a[3] * b[14],\n a[0] * b[3] + a[1] * b[7] + a[2] * b[11] + a[3] * b[15],\n\n a[4] * b[0] + a[5] * b[4] + a[6] * b[8] + a[7] * b[12],\n a[4] * b[1] + a[5] * b[5] + a[6] * b[9] + a[7] * b[13],\n a[4] * b[2] + a[5] * b[6] + a[6] * b[10] + a[7] * b[14],\n a[4] * b[3] + a[5] * b[7] + a[6] * b[11] + a[7] * b[15],\n\n a[8] * b[0] + a[9] * b[4] + a[10] * b[8] + a[11] * b[12],\n a[8] * b[1] + a[9] * b[5] + a[10] * b[9] + a[11] * b[13],\n a[8] * b[2] + a[9] * b[6] + a[10] * b[10] + a[11] * b[14],\n a[8] * b[3] + a[9] * b[7] + a[10] * b[11] + a[11] * b[15],\n\n a[12] * b[0] + a[13] * b[4] + a[14] * b[8] + a[15] * b[12],\n a[12] * b[1] + a[13] * b[5] + a[14] * b[9] + a[15] * b[13],\n a[12] * b[2] + a[13] * b[6] + a[14] * b[10] + a[15] * b[14],\n a[12] * b[3] + a[13] * b[7] + a[14] * b[11] + a[15] * b[15],\n ];\n }\n\n static transpose(a) {\n return [a[0], a[4], a[8], a[12], a[1], a[5], a[9], a[13], a[2], a[6], a[10], a[14], a[3], a[7], a[11], a[15]];\n }\n\n static translate(v) {\n return [1, 0, 0, v[0], 0, 1, 0, v[1], 0, 0, 1, v[2], 0, 0, 0, 1];\n }\n\n static scale(s) {\n return [s[0], 0, 0, 0, 0, s[1], 0, 0, 0, 0, s[2], 0, 0, 0, 0, 1];\n }\n\n static rotationX(t) {\n return [1, 0, 0, 0, 0, Math.cos((t * Math.PI) / 180), -Math.sin((t * Math.PI) / 180), 0, 0, Math.sin((t * Math.PI) / 180), Math.cos((t * Math.PI) / 180), 0, 0, 0, 0, 1];\n }\n\n static rotationY(t) {\n return [Math.cos((t * Math.PI) / 180), 0, Math.sin((t * Math.PI) / 180), 0, 0, 1, 0, 0, -Math.sin((t * Math.PI) / 180), 0, Math.cos((t * Math.PI) / 180), 0, 0, 0, 0, 1];\n }\n\n static rotationZ(t) {\n return [Math.cos((t * Math.PI) / 180), -Math.sin((t * Math.PI) / 180), 0, 0, Math.sin((t * Math.PI) / 180), Math.cos((t * Math.PI) / 180), 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];\n }\n\n static lookAt(at, target, up) {\n const cross = (a, b) =\u003e [a[1] * b[2] - a[2] * b[1], a[0] * b[2] - a[2] * b[0], a[0] * b[1] - a[1] * b[0]];\n const length = (a) =\u003e Math.sqrt(a[0] * a[0] + a[1] * a[1] + a[2] * a[2]);\n const normalize = (a) =\u003e [a[0] / length(a), a[1] / length(a), a[2] / length(a)];\n const dot = (a, b) =\u003e a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n\n const zAxis = normalize([target[0] - at[0], target[1] - at[1], target[2] - at[2]]);\n const xAxis = normalize(cross(up, zAxis));\n const yAxis = normalize(cross(xAxis, zAxis));\n\n return [xAxis[0], xAxis[1], xAxis[2], dot(xAxis, at), yAxis[0], yAxis[1], yAxis[2], dot(yAxis, at), zAxis[0], zAxis[1], zAxis[2], dot(zAxis, at), 0, 0, 0, 1];\n }\n\n static orthographic(height, aspect, near, far) {\n const right = height * aspect;\n const left = -height * aspect;\n const top = height;\n const bottom = -height;\n\n return [2 / (right - left), 0, 0, -(right + left) / (right - left), 0, 2 / (top - bottom), 0, -(top + bottom) / (top - bottom), 0, 0, -2 / (far - near), -(far + near) / (far - near), 0, 0, 0, 1];\n }\n\n static perspective(fov, aspect, near, far) {\n const f = Math.tan((fov * Math.PI) / 180 / 2);\n\n return [1 / (aspect * f), 0, 0, 0, 0, 1 / f, 0, 0, 0, 0, -(far + near) / (far - near), -(2 * far * near) / (far - near), 0, 0, -1, 0];\n }\n}\n\u003c/script\u003e\n \u003cscript\u003eclass WebGL2 {\n static defaultVertexShader = `#version 300 es\n in vec3 position;\n void main() {\n gl_Position = vec4(position, 1.0);\n }`;\n static planeVertexPosition = [-1.0, 1.0, 0.0, -1.0, -1.0, 0.0, 1.0, 1.0, 0.0, 1.0, -1.0, 0.0];\n static planeVertexIndex = [0, 2, 1, 1, 2, 3];\n\n constructor(canvas, shaderInfo) {\n this.canvas = canvas;\n this.gl = canvas.getContext('webgl2');\n this.gl.enable(this.gl.CULL_FACE);\n this.gl.frontFace(this.gl.CW);\n this.addPrograms(shaderInfo);\n }\n\n addPrograms(shaderInfo) {\n this.webglPrograms = {\n ...this.webglPrograms,\n ...shaderInfo.reduce((preInfo, info) =\u003e {\n const vs = this.createShader(info.vsText, this.gl.VERTEX_SHADER);\n const fs = this.createShader(info.fsText, this.gl.FRAGMENT_SHADER);\n const program = this.createProgram(vs, fs);\n return {\n ...preInfo,\n [info.name]: {\n program: program,\n uniLocations: info.uniList.reduce((pre, cur) =\u003e ({ ...pre, [cur]: this.gl.getUniformLocation(program, cur) }), {}),\n attLocations: info.attList.reduce(\n (pre, cur) =\u003e ({\n ...pre,\n [cur.location]: { ...cur, ...{ location: this.gl.getAttribLocation(program, cur.location) } },\n }),\n {}\n ),\n },\n };\n }, {}),\n };\n }\n\n createShader(text, type) {\n const shader = this.gl.createShader(type);\n this.gl.shaderSource(shader, text);\n this.gl.compileShader(shader);\n if (this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {\n return shader;\n } else {\n console.log(this.gl.getShaderInfoLog(shader));\n }\n }\n\n createProgram(vs, fs) {\n const program = this.gl.createProgram();\n this.gl.attachShader(program, vs);\n this.gl.attachShader(program, fs);\n this.gl.linkProgram(program);\n if (this.gl.getProgramParameter(program, this.gl.LINK_STATUS)) {\n this.gl.useProgram(program);\n return program;\n } else {\n console.log(this.gl.getProgramInfoLog(program));\n return null;\n }\n }\n\n useTextureFloatExtension() {\n const extension = this.gl.getExtension('EXT_color_buffer_float');\n if (!extension) {\n console.log('no floating point texture support');\n }\n }\n\n useTextureFloatLinearExtension() {\n const extension = this.gl.getExtension('OES_texture_float_linear');\n if (!extension) {\n console.log('no floating point texture linear support');\n }\n }\n\n setAttribute(array, location, stride) {\n this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.gl.createBuffer());\n this.gl.bufferData(this.gl.ARRAY_BUFFER, new Float32Array(array), this.gl.STATIC_DRAW);\n this.gl.enableVertexAttribArray(location);\n this.gl.vertexAttribPointer(location, stride, this.gl.FLOAT, false, 0, 0);\n }\n\n setIndex(index) {\n this.gl.bindBuffer(this.gl.ELEMENT_ARRAY_BUFFER, this.gl.createBuffer());\n this.gl.bufferData(this.gl.ELEMENT_ARRAY_BUFFER, new Int16Array(index), this.gl.STATIC_DRAW);\n }\n\n createVAO(attributes, attribDivisours, index) {\n const vao = this.gl.createVertexArray();\n this.gl.bindVertexArray(vao);\n attributes.forEach((attribute) =\u003e this.setAttribute(attribute.array, attribute.location, attribute.stride));\n attribDivisours.forEach((attribDivisour) =\u003e this.gl.vertexAttribDivisor(attribDivisour.location, attribDivisour.stride));\n this.setIndex(index);\n this.gl.bindVertexArray(null);\n return vao;\n }\n\n createFrameBuffer(width, height, internalFormat, format, type, filterType, wrapType, depth) {\n const frameBuffer = this.gl.createFramebuffer();\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, frameBuffer);\n const fTexture = this.gl.createTexture();\n this.gl.bindTexture(this.gl.TEXTURE_2D, fTexture);\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, internalFormat, width, height, 0, format, type, null);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, filterType);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, filterType);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, wrapType);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, wrapType);\n this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER, this.gl.COLOR_ATTACHMENT0, this.gl.TEXTURE_2D, fTexture, 0);\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n const depthRenderBuffer = depth ? this.gl.createRenderbuffer() : null;\n if (depth) {\n this.gl.bindRenderbuffer(this.gl.RENDERBUFFER, depthRenderBuffer);\n this.gl.renderbufferStorage(this.gl.RENDERBUFFER, this.gl.DEPTH_COMPONENT16, width, height);\n this.gl.framebufferRenderbuffer(this.gl.FRAMEBUFFER, this.gl.DEPTH_ATTACHMENT, this.gl.RENDERBUFFER, depthRenderBuffer);\n this.gl.bindRenderbuffer(this.gl.RENDERBUFFER, null);\n }\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n return { f: frameBuffer, d: depthRenderBuffer, t: fTexture, w: width, h: height };\n }\n\n createFrameBufferMRT(width, height, internalFormat, format, type, filterType, wrapType, count, depth) {\n const frameBuffer = this.gl.createFramebuffer();\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, frameBuffer);\n const fTextures = [];\n for (let i = 0; i \u003c count; i++) {\n fTextures[i] = this.gl.createTexture();\n this.gl.bindTexture(this.gl.TEXTURE_2D, fTextures[i]);\n this.gl.texImage2D(this.gl.TEXTURE_2D, 0, internalFormat[i], width, height, 0, format[i], type[i], null);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, filterType[i]);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, filterType[i]);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, wrapType[i]);\n this.gl.texParameterf(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, wrapType[i]);\n this.gl.framebufferTexture2D(this.gl.FRAMEBUFFER, this.gl.COLOR_ATTACHMENT0 + i, this.gl.TEXTURE_2D, fTextures[i], 0);\n this.gl.bindTexture(this.gl.TEXTURE_2D, null);\n }\n const depthRenderBuffer = depth ? this.gl.createRenderbuffer() : null;\n if (depth) {\n this.gl.bindRenderbuffer(this.gl.RENDERBUFFER, depthRenderBuffer);\n this.gl.renderbufferStorage(this.gl.RENDERBUFFER, this.gl.DEPTH_COMPONENT16, width, height);\n this.gl.framebufferRenderbuffer(this.gl.FRAMEBUFFER, this.gl.DEPTH_ATTACHMENT, this.gl.RENDERBUFFER, depthRenderBuffer);\n this.gl.bindRenderbuffer(this.gl.RENDERBUFFER, null);\n }\n this.gl.bindFramebuffer(this.gl.FRAMEBUFFER, null);\n return { f: frameBuffer, d: depthRenderBuffer, ts: fTextures, w: width, h: height };\n }\n}\n\u003c/script\u003e\n \u003cscript\u003econst model = {\n metadata: {\n type: 'BufferGeometry',\n generator: 'io_three',\n version: 3,\n position: 356,\n uv: 356,\n normal: 356,\n },\n data: {\n index: {\n itemSize: 1,\n type: 'Uint16Array',\n array: [\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,\n 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,\n 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,\n 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 145, 144, 283, 284, 285, 0, 286, 1, 3, 287, 4, 6, 288, 7, 9, 289, 10, 12, 290, 13, 15, 291, 16,\n 18, 292, 19, 21, 293, 22, 24, 294, 25, 27, 295, 28, 30, 296, 31, 33, 297, 34, 36, 298, 37, 45, 299, 46, 48, 300, 49, 51, 301, 52, 54, 302, 55, 57, 303, 58, 60, 304, 61, 63, 305, 64, 66, 306, 67, 69, 307, 70, 72, 308, 73, 75, 309, 76, 78, 310, 79, 81, 311, 82, 84, 312, 85, 87, 313, 88, 90, 314, 91, 93, 315, 94, 96, 316, 97, 99, 317, 100, 111, 318,\n 112, 117, 319, 118, 135, 320, 136, 141, 321, 142, 147, 322, 148, 150, 323, 151, 153, 324, 154, 156, 325, 157, 159, 326, 160, 162, 327, 163, 165, 328, 166, 168, 329, 169, 171, 330, 172, 174, 331, 175, 177, 332, 178, 180, 333, 181, 189, 334, 190, 192, 335, 193, 195, 336, 196, 198, 337, 199, 201, 338, 202, 204, 339, 205, 207, 340, 208, 210, 341, 211,\n 213, 342, 214, 216, 343, 217, 219, 344, 220, 222, 345, 223, 225, 346, 226, 228, 347, 229, 231, 348, 232, 234, 349, 235, 237, 350, 238, 240, 351, 241, 243, 352, 244, 255, 353, 256, 261, 354, 262, 279, 355, 280,\n ],\n },\n attributes: {\n position: {\n itemSize: 3,\n type: 'Float32Array',\n array: [\n 0.0637563, -0.168072, -0.216776, -0.0204278, -0.265453, 0.343819, 0.0650421, -0.232616, -0.317457, 0.0972904, 0.0354648, 0.297219, 0.150439, -0.033155, 0.320166, 0.732046, 0.059781, 0.352033, 0.0780145, -0.00984054, -0.418492, 0.0637563, -0.168072, -0.216776, 0.0650421, -0.232616, -0.317457, 0.732046, 0.059781, 0.352033, 0.791761, 0.00189605,\n 0.384921, 1.25702, 0.0346866, 0.406426, 0.0637563, -0.168072, -0.216776, 0.150439, -0.033155, 0.320166, 0.0215468, -0.202245, 0.304909, 0.106763, 0.0646722, -0.263094, 0.512469, 0.0426803, -0.326787, 0.0637563, -0.168072, -0.216776, 0.0972904, 0.0354648, 0.297219, 0.640277, 0.064909, -0.385924, 0.106763, 0.0646722, -0.263094, 0.791761, 0.00189605,\n 0.384921, 1.16895, -0.0126263, -0.218861, 1.25897, -0.0217517, 0.426116, 0.512469, 0.0426803, -0.326787, 0.791761, 0.00189605, 0.384921, 0.150439, -0.033155, 0.320166, 0.640277, 0.064909, -0.385924, 0.891834, 0.0214158, -0.280264, 0.512469, 0.0426803, -0.326787, 0.732046, 0.059781, 0.352033, 0.894005, 0.0567978, -0.354037, 0.640277, 0.064909,\n -0.385924, 1.16895, -0.0126263, -0.218861, 1.36966, -0.000424016, -0.18156, 1.38317, -0.0414609, -0.167348, 0.891834, 0.0214158, -0.280264, 1.16402, 0.02704, -0.26283, 1.16895, -0.0126263, -0.218861, 0.894005, 0.0567978, -0.354037, 1.25702, 0.0346866, 0.406426, 1.16402, 0.02704, -0.26283, 1.25702, 0.0346866, 0.406426, 0.791761, 0.00189605,\n 0.384921, 1.25897, -0.0217517, 0.426116, 1.38317, -0.0414609, -0.167348, 1.97709, -0.0677013, 0.0598405, 2.04921, -0.0615019, 0.434361, 1.25702, 0.0346866, 0.406426, 1.36966, -0.000424016, -0.18156, 1.16402, 0.02704, -0.26283, 1.25702, 0.0346866, 0.406426, 2.04921, -0.0615019, 0.434361, 2.06097, -0.0174081, 0.396514, 1.25897, -0.0217517, 0.426116,\n 1.38317, -0.0414609, -0.167348, 2.04921, -0.0615019, 0.434361, 1.57852, -0.0677013, -0.131292, 1.73343, -0.0315213, -0.102646, 1.72765, -0.0677013, -0.105536, 1.38317, -0.0414609, -0.167348, 1.57273, -0.0315213, -0.137073, 1.57852, -0.0677013, -0.131292, 1.36966, -0.000424016, -0.18156, 1.97998, -0.0315213, 0.0598405, 1.57273, -0.0315213,\n -0.137073, 2.06097, -0.0174081, 0.396514, 1.97709, -0.0677013, 0.0598405, 1.97998, -0.0315213, 0.0598405, 1.73343, -0.0315213, -0.102646, 1.89501, -0.0677013, -0.0450744, 1.72765, -0.0677013, -0.105536, 1.97998, -0.0315213, 0.0598405, 1.73343, -0.0315213, -0.102646, 1.57273, -0.0315213, -0.137073, 1.97709, -0.0677013, 0.0598405, 1.89501,\n -0.0315213, -0.0306232, 1.97998, -0.0315213, 0.0598405, 1.97709, -0.0677013, 0.0598405, 1.72765, -0.0677013, -0.105536, 1.89501, -0.0677013, -0.0450744, 0.0780145, -0.00984054, -0.418492, 0.192609, -0.0777203, -0.541036, 0.199728, -0.029143, -0.557783, 0.141683, -0.018598, -0.700428, 0.072547, -0.0826728, -0.777969, 0.0762851, -0.0429304, -0.81025,\n 0.199728, -0.029143, -0.557783, 0.172152, -0.0649394, -0.685054, 0.141683, -0.018598, -0.700428, 0.0762851, -0.0429304, -0.81025, -0.00345741, -0.0852987, -0.912813, -0.0390805, -0.051606, -0.936295, -0.105907, -0.0440722, -0.886731, -0.00345741, -0.0852987, -0.912813, -0.105907, -0.137554, -0.559656, -0.105907, -0.137554, -0.559656, 0.072547,\n -0.0826728, -0.777969, 0.172152, -0.0649394, -0.685054, -0.105907, -0.0440722, -0.886731, 0.0762851, -0.0429304, -0.81025, -0.0390805, -0.051606, -0.936295, -0.0204278, -0.265453, 0.343819, -0.104621, -0.320208, 0.366491, 0.0650421, -0.232616, -0.317457, 0.192609, -0.0777203, -0.541036, 0.0650421, -0.232616, -0.317457, 0.172152, -0.0649394,\n -0.685054, 0.172152, -0.0649394, -0.685054, 0.0650421, -0.232616, -0.317457, -0.105907, -0.137554, -0.559656, 0.0650421, -0.232616, -0.317457, -0.105907, -0.273111, -0.220416, -0.105907, -0.137554, -0.559656, -0.105907, -0.0407637, 0.286721, 0.0215468, -0.202245, 0.304909, 0.0972904, 0.0354648, 0.297219, 0.0215468, -0.202245, 0.304909, -0.105907,\n -0.124349, 0.456777, -0.105907, -0.229109, 0.520366, 0.106763, 0.0646722, -0.263094, -0.105907, -0.0407637, 0.286721, 0.0972904, 0.0354648, 0.297219, -0.105907, -0.0440722, -0.886731, -0.105907, -0.0407637, 0.286721, 0.106763, 0.0646722, -0.263094, 0.106763, 0.0646722, -0.263094, 0.0780145, -0.00984054, -0.418492, -0.105907, -0.0440722, -0.886731,\n -0.105907, -0.0440722, -0.886731, 0.0780145, -0.00984054, -0.418492, 0.141683, -0.018598, -0.700428, 0.0780145, -0.00984054, -0.418492, 0.199728, -0.029143, -0.557783, 0.141683, -0.018598, -0.700428, -0.0204278, -0.265453, 0.343819, -0.105907, -0.229109, 0.520366, -0.105907, -0.287316, 0.441649, -0.104621, -0.320208, 0.366491, -0.0204278,\n -0.265453, 0.343819, -0.105907, -0.287316, 0.441649, -0.191386, -0.265453, 0.343819, -0.27557, -0.168072, -0.216776, -0.276856, -0.232616, -0.317457, -0.105907, -0.229109, 0.520366, -0.105907, -0.283531, 0.494216, -0.105907, -0.313872, 0.543604, -0.309104, 0.0354648, 0.297219, -0.362253, -0.033155, 0.320166, -0.233361, -0.202245, 0.304909,\n -0.289828, -0.00984054, -0.418492, -0.27557, -0.168072, -0.216776, -0.318577, 0.0646722, -0.263094, -0.94386, 0.059781, 0.352033, -1.00358, 0.00189605, 0.384921, -0.362253, -0.033155, 0.320166, -0.362253, -0.033155, 0.320166, -0.27557, -0.168072, -0.216776, -0.233361, -0.202245, 0.304909, -0.724283, 0.0426803, -0.326787, -0.318577, 0.0646722,\n -0.263094, -0.27557, -0.168072, -0.216776, -0.85209, 0.064909, -0.385924, -0.309104, 0.0354648, 0.297219, -0.318577, 0.0646722, -0.263094, -1.00358, 0.00189605, 0.384921, -1.38076, -0.0126263, -0.218861, -1.10365, 0.0214158, -0.280264, -1.00358, 0.00189605, 0.384921, -0.724283, 0.0426803, -0.326787, -0.362253, -0.033155, 0.320166, -1.10365,\n 0.0214158, -0.280264, -0.85209, 0.064909, -0.385924, -0.724283, 0.0426803, -0.326787, -1.10582, 0.0567978, -0.354037, -0.94386, 0.059781, 0.352033, -0.85209, 0.064909, -0.385924, -1.38076, -0.0126263, -0.218861, -1.58147, -0.000424016, -0.18156, -1.37584, 0.02704, -0.26283, -1.10365, 0.0214158, -0.280264, -1.37584, 0.02704, -0.26283, -1.10582,\n 0.0567978, -0.354037, -1.10582, 0.0567978, -0.354037, -1.37584, 0.02704, -0.26283, -1.46884, 0.0346866, 0.406426, -1.46884, 0.0346866, 0.406426, -1.47078, -0.0217517, 0.426116, -1.00358, 0.00189605, 0.384921, -2.18891, -0.0677013, 0.0598405, -1.59499, -0.0414609, -0.167348, -2.26102, -0.0615019, 0.434361, -1.58147, -0.000424016, -0.18156, -1.46884,\n 0.0346866, 0.406426, -1.37584, 0.02704, -0.26283, -1.46884, 0.0346866, 0.406426, -2.26102, -0.0615019, 0.434361, -1.47078, -0.0217517, 0.426116, -1.47078, -0.0217517, 0.426116, -1.59499, -0.0414609, -0.167348, -1.38076, -0.0126263, -0.218861, -1.79033, -0.0677013, -0.131292, -1.94525, -0.0315213, -0.102646, -1.78455, -0.0315213, -0.137073,\n -1.59499, -0.0414609, -0.167348, -1.78455, -0.0315213, -0.137073, -1.58147, -0.000424016, -0.18156, -1.58147, -0.000424016, -0.18156, -2.1918, -0.0315213, 0.0598405, -2.27278, -0.0174081, 0.396514, -2.27278, -0.0174081, 0.396514, -2.18891, -0.0677013, 0.0598405, -2.26102, -0.0615019, 0.434361, -1.94525, -0.0315213, -0.102646, -2.10683, -0.0677013,\n -0.0450744, -2.10683, -0.0315213, -0.0306232, -1.94525, -0.0315213, -0.102646, -2.1918, -0.0315213, 0.0598405, -1.78455, -0.0315213, -0.137073, -2.10683, -0.0315213, -0.0306232, -2.18891, -0.0677013, 0.0598405, -2.1918, -0.0315213, 0.0598405, -2.18891, -0.0677013, 0.0598405, -1.93947, -0.0677013, -0.105536, -1.79033, -0.0677013, -0.131292,\n -0.289828, -0.00984054, -0.418492, -0.404423, -0.0777203, -0.541036, -0.276856, -0.232616, -0.317457, -0.353497, -0.018598, -0.700428, -0.284361, -0.0826728, -0.777969, -0.383966, -0.0649394, -0.685054, -0.411542, -0.029143, -0.557783, -0.383966, -0.0649394, -0.685054, -0.404423, -0.0777203, -0.541036, -0.208356, -0.0852987, -0.912813, -0.288099,\n -0.0429304, -0.81025, -0.172733, -0.051606, -0.936295, -0.208356, -0.0852987, -0.912813, -0.105907, -0.0440722, -0.886731, -0.105907, -0.137554, -0.559656, -0.284361, -0.0826728, -0.777969, -0.105907, -0.137554, -0.559656, -0.383966, -0.0649394, -0.685054, -0.105907, -0.0440722, -0.886731, -0.288099, -0.0429304, -0.81025, -0.353497, -0.018598,\n -0.700428, -0.191386, -0.265453, 0.343819, -0.276856, -0.232616, -0.317457, -0.107193, -0.320208, 0.366491, -0.404423, -0.0777203, -0.541036, -0.383966, -0.0649394, -0.685054, -0.276856, -0.232616, -0.317457, -0.383966, -0.0649394, -0.685054, -0.105907, -0.137554, -0.559656, -0.276856, -0.232616, -0.317457, -0.276856, -0.232616, -0.317457,\n -0.105907, -0.273111, -0.220416, -0.107193, -0.320208, 0.366491, -0.105907, -0.0407637, 0.286721, -0.309104, 0.0354648, 0.297219, -0.233361, -0.202245, 0.304909, -0.233361, -0.202245, 0.304909, -0.105907, -0.124349, 0.456777, -0.105907, -0.0407637, 0.286721, -0.318577, 0.0646722, -0.263094, -0.309104, 0.0354648, 0.297219, -0.105907, -0.0407637,\n 0.286721, -0.105907, -0.0440722, -0.886731, -0.318577, 0.0646722, -0.263094, -0.105907, -0.0407637, 0.286721, -0.318577, 0.0646722, -0.263094, -0.105907, -0.0440722, -0.886731, -0.289828, -0.00984054, -0.418492, -0.105907, -0.0440722, -0.886731, -0.353497, -0.018598, -0.700428, -0.289828, -0.00984054, -0.418492, -0.289828, -0.00984054, -0.418492,\n -0.353497, -0.018598, -0.700428, -0.411542, -0.029143, -0.557783, -0.191386, -0.265453, 0.343819, -0.105907, -0.229109, 0.520366, -0.233361, -0.202245, 0.304909, -0.105907, -0.287316, 0.441649, -0.107193, -0.320208, 0.366491, -0.105907, -0.287316, 0.441649, -0.191386, -0.265453, 0.343819, 0.0215468, -0.202245, 0.304909, 0.0215468, -0.202245,\n 0.304909, 0.106763, 0.0646722, -0.263094, 0.150439, -0.033155, 0.320166, 0.512469, 0.0426803, -0.326787, 0.640277, 0.064909, -0.385924, 0.732046, 0.059781, 0.352033, 0.891834, 0.0214158, -0.280264, 0.891834, 0.0214158, -0.280264, 0.894005, 0.0567978, -0.354037, 1.25702, 0.0346866, 0.406426, 1.16402, 0.02704, -0.26283, 0.894005, 0.0567978,\n -0.354037, 1.57852, -0.0677013, -0.131292, 2.06097, -0.0174081, 0.396514, 1.25897, -0.0217517, 0.426116, 1.16895, -0.0126263, -0.218861, 1.57273, -0.0315213, -0.137073, 1.36966, -0.000424016, -0.18156, 2.06097, -0.0174081, 0.396514, 2.04921, -0.0615019, 0.434361, 1.89501, -0.0315213, -0.0306232, 1.89501, -0.0315213, -0.0306232, 1.89501, -0.0677013,\n -0.0450744, 1.57852, -0.0677013, -0.131292, 0.0650421, -0.232616, -0.317457, 0.172152, -0.0649394, -0.685054, 0.192609, -0.0777203, -0.541036, 0.072547, -0.0826728, -0.777969, -0.0390805, -0.051606, -0.936295, -0.00345741, -0.0852987, -0.912813, 0.141683, -0.018598, -0.700428, -0.104621, -0.320208, 0.366491, -0.105907, -0.0407637, 0.286721,\n 0.0215468, -0.202245, 0.304909, -0.233361, -0.202245, 0.304909, -0.94386, 0.059781, 0.352033, -0.276856, -0.232616, -0.317457, -1.46884, 0.0346866, 0.406426, -0.724283, 0.0426803, -0.326787, -0.85209, 0.064909, -0.385924, -0.94386, 0.059781, 0.352033, -1.47078, -0.0217517, 0.426116, -1.10365, 0.0214158, -0.280264, -1.10582, 0.0567978, -0.354037,\n -1.46884, 0.0346866, 0.406426, -1.59499, -0.0414609, -0.167348, -1.38076, -0.0126263, -0.218861, -1.79033, -0.0677013, -0.131292, -2.27278, -0.0174081, 0.396514, -2.27278, -0.0174081, 0.396514, -2.26102, -0.0615019, 0.434361, -1.93947, -0.0677013, -0.105536, -1.79033, -0.0677013, -0.131292, -1.78455, -0.0315213, -0.137073, -2.1918, -0.0315213,\n 0.0598405, -1.93947, -0.0677013, -0.105536, -2.10683, -0.0315213, -0.0306232, -2.10683, -0.0677013, -0.0450744, -2.10683, -0.0677013, -0.0450744, -0.411542, -0.029143, -0.557783, -0.288099, -0.0429304, -0.81025, -0.353497, -0.018598, -0.700428, -0.284361, -0.0826728, -0.777969, -0.172733, -0.051606, -0.936295, -0.208356, -0.0852987, -0.912813,\n -0.172733, -0.051606, -0.936295, -0.105907, -0.137554, -0.559656, -0.105907, -0.229109, 0.520366, -0.105907, -0.287316, 0.441649,\n ],\n },\n uv: {\n itemSize: 2,\n type: 'Float32Array',\n array: [\n 0.5, 0.75, 0.625, 0.75, 0.4375, 0.75, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.4375, 0.5, 0.5, 0.75, 0.4375, 0.75, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.5, 0.75, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.5, 0.5, 0.75, 0.5, 0.75, 0.5625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.5,\n 0.5, 0.75, 0.5, 0.75, 0.5625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5625, 0.75, 0.5625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5,\n 0.75, 0.5, 0.5, 0.5, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.5, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.4375, 0.5, 0.4375, 0.75, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.75,\n 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.75, 0.4375, 0.5, 0.4375, 0.5, 0.375, 0.75, 0.375, 0.5, 0.375, 0.5, 0.375, 0.75, 0.375, 0.75, 0.375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.375, 0.5, 0.4375, 0.5, 0.375, 0.5, 0.625, 0.75, 0, 0, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.375, 0.75, 0.4375, 0.75, 0.1875,\n 0.375, 0.375, 0.75, 0, 0, 0.5625, 0.75, 0.5625, 0.5, 0.5625, 0.75, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0.5625, 0.5, 0, 0, 0, 0, 0.5, 0.5, 0.5, 0.5, 0.4375, 0.5, 0, 0, 0, 0, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.625, 0.75, 0.5, 0.75, 0.4375, 0.75, 0, 0, 0, 0, 0, 0, 0.5625, 0.5, 0.5625, 0.75,\n 0.5625, 0.75, 0.4375, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.5, 0.5, 0.75, 0.5,\n 0.5, 0.5, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5625, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5625,\n 0.5, 0.5625, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.75, 0.4375, 0.5, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.5, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.5, 0.4375, 0.75, 0.4375, 0.75, 0.375, 0.75, 0.4375,\n 0.5, 0.375, 0.5, 0.375, 0.75, 0.375, 0.5, 0.375, 0.75, 0.4375, 0.75, 0.375, 0.75, 0.4375, 0.75, 0.375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0.625, 0.75, 0.4375, 0.75, 0, 0, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.1875, 0.375, 0, 0, 0, 0, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.75, 0, 0, 0, 0, 0.5,\n 0.5, 0.5625, 0.5, 0, 0, 0, 0, 0.5, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0.4375, 0.5, 0, 0, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.5625, 0.75, 0.5625, 0.75, 0.5, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.75,\n 0.5625, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.4375, 0.75, 0.375, 0.5, 0.375, 0.75, 0.4375, 0.5, 0, 0, 0, 0, 0, 0, 0.5625, 0.75, 0.5625, 0.5, 0.4375, 0.75, 0.5625, 0.5, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5625, 0.75,\n 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.75, 0.5, 0.75, 0.5, 0.75, 0.5625, 0.5, 0.5625, 0.5, 0.5625, 0.75, 0.5, 0.75, 0.5, 0.75, 0.5, 0.5, 0.5625, 0.5, 0.5, 0.75, 0.5625, 0.5, 0.5625, 0.75, 0.5625, 0.75, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.5, 0.4375, 0.75, 0.375, 0.5, 0.375, 0.75, 0.375, 0.5, 0.375, 0.75, 0, 0, 0, 0,\n ],\n },\n normal: {\n itemSize: 3,\n type: 'Float32Array',\n array: [\n 0.976135, -0.184393, 0.114536, 0.866482, -0.497269, 0.043733, 0.979125, -0.165105, 0.118351, -0.181158, 0.182806, 0.966308, -0.173833, 0.188574, 0.966521, -0.0928068, 0.250374, 0.963683, 0.987243, -0.151433, -0.0490127, 0.995086, -0.0985443, -0.00695822, 0.998413, -0.0405591, 0.038728, -0.103092, 0.408826, 0.906766, -0.0834376, 0.425764, 0.900937,\n -0.0721458, 0.435377, 0.897336, 0.528398, -0.839625, 0.125645, 0.679342, -0.730064, 0.0737632, 0.79397, -0.60741, 0.0244453, -0.16245, -0.197119, -0.966796, -0.144932, -0.725608, -0.672658, -0.161626, -0.163793, -0.973144, -0.0189825, 0.99942, 0.027955, -0.0159612, 0.99939, 0.0303659, 0.0115665, 0.998566, 0.0522477, -0.066805, -0.997589,\n -0.0177313, -0.0894192, -0.995453, -0.0319224, -0.0498978, -0.998718, -0.00714133, 3.05185e-5, -0.998352, -0.0572222, 0.0258797, -0.997375, -0.0672933, 0.0625935, -0.99469, -0.0815455, -0.00347911, -0.92761, -0.373516, 0.018891, -0.907895, -0.418714, -0.00732444, -0.930692, -0.365642, 0.0440382, 0.998993, 0.00585955, 0.0364086, 0.999298, 0.00412,\n 0.0315561, 0.999481, 0.00299081, 0.173132, -0.684988, -0.707633, 0.191839, -0.326304, -0.925565, 0.191717, -0.264199, -0.945189, 0.0478225, -0.886227, -0.460738, 0.0568255, -0.765954, -0.640339, 0.0582904, -0.737968, -0.672292, 0.118778, 0.992523, -0.0278329, 0.118778, 0.992523, -0.0278329, 0.118778, 0.992523, -0.0278329, -0.0665914, 0.326609,\n 0.942778, -0.0665914, 0.326609, 0.942778, -0.0665914, 0.326609, 0.942778, -0.106388, -0.980529, 0.164922, -0.0604266, -0.997223, 0.0428175, -0.0544145, -0.998138, 0.0269784, 0.0797143, 0.995819, -0.0441908, 0.114078, 0.992737, -0.0374157, 0.144475, 0.988983, -0.031373, 0.00894192, 0.34611, 0.938139, 0.0492569, 0.630787, 0.774377, 0.0510575,\n 0.642567, 0.764489, -0.0674764, -0.997528, 0.0189825, -0.101352, -0.994751, 0.0118107, -0.0504471, -0.998444, 0.0225837, 0.203375, -0.0996734, -0.973998, 0.176489, 0.0234077, -0.984008, 0.169927, 0.0514542, -0.9841, 0.165563, -0.260903, -0.951048, 0.163457, -0.146001, -0.975677, 0.162999, -0.130192, -0.977966, 0.137913, 0.96466, -0.224403,\n 0.0808435, 0.993774, -0.0764183, 0.23545, 0.841029, -0.486984, 0.912107, -0.372234, -0.171606, 0.968474, -0.105594, -0.225471, 0.970061, -0.0774865, -0.230079, 0.347209, 0.0617084, -0.935728, 0.379528, 0.305368, -0.873287, 0.339671, 0.0208136, -0.940275, 0, 0.999969, 0, 0, 1, 0, 0, 1, 0, 0.739738, -0.00418104, -0.672842, 0.763878, 0.194098,\n -0.615436, 0.727653, -0.0581072, -0.683462, 0, -1, 0, 0, -1, 0, 0, -0.999969, 0, 0.76925, 0.207984, 0.604114, 0.763024, 0.155614, 0.627308, 0.755913, 0.111576, 0.64507, 0.715018, 0.0702231, -0.695547, 0.820307, -0.285134, -0.495743, 0.82284, -0.402875, -0.400708, 0.978729, -0.0748314, -0.191015, 0.891018, 0.348369, -0.291025, 0.838618, 0.449171,\n -0.308054, 0.804712, -0.344829, -0.4832, 0.735618, 0.189642, -0.650288, 0.698569, 0.27955, -0.65862, -0.420606, -0.857112, -0.297342, -0.424085, -0.840388, -0.337443, -0.41554, -0.874538, -0.249947, 0.210761, -0.974822, -0.0727561, 0.207587, -0.97528, -0.0754723, 0.227515, -0.972015, -0.0583514, 0.0513932, 0.989196, -0.137242, 0.0996124, 0.962645,\n -0.251686, 0.0365001, 0.99411, -0.10184, 0.550554, -0.834254, 0.029725, 0.550554, -0.834254, 0.029725, 0.550554, -0.834254, 0.029725, 0.638508, -0.753288, -0.157537, 0.638508, -0.753288, -0.157537, 0.638508, -0.753288, -0.157537, 0.0583514, -0.914579, -0.400159, 0.0583514, -0.914579, -0.400159, 0.0583514, -0.914579, -0.400159, 0.0712302, -0.958892,\n -0.274636, 0.130528, -0.975494, -0.177068, 0.00930815, -0.928556, -0.371044, -0.0721458, 0.055208, 0.995849, -0.0721458, 0.055208, 0.995849, -0.0721458, 0.055208, 0.995849, 0.768334, 0.514176, 0.381085, 0.786554, 0.437666, 0.435591, 0.800501, 0.310953, 0.512314, -0.352855, 0.93469, 0.0427564, -0.352855, 0.93469, 0.0427564, -0.352855, 0.93469,\n 0.0427564, -0.449385, 0.893307, -0.00250252, -0.449385, 0.893307, -0.00250252, -0.449385, 0.893307, -0.00250252, 0.831446, 0.425123, -0.357646, 0.831446, 0.425123, -0.357646, 0.831446, 0.425123, -0.357646, -0.0677206, 0.996612, -0.0462355, -0.0677206, 0.996612, -0.0462355, -0.0677206, 0.996612, -0.0462355, 0.163671, 0.98648, 0.00631733, 0.163671,\n 0.98648, 0.00631733, 0.163671, 0.98648, 0.00631733, 0.819361, -0.334483, 0.46556, 0.734001, -0.500961, 0.45851, 0.663198, -0.601764, 0.44496, 0.575396, -0.745567, 0.336131, 0.575396, -0.745567, 0.336131, 0.575396, -0.745567, 0.336131, -0.866482, -0.497269, 0.043733, -0.976135, -0.184393, 0.114536, -0.979125, -0.165105, 0.118351, -1, 0, 0, -1, 0, 0,\n -1, 0, 0, 0.181158, 0.182806, 0.966308, 0.173833, 0.188574, 0.966521, 0.264534, 0.115268, 0.957427, -0.987243, -0.151433, -0.0490127, -0.995086, -0.0985443, -0.00695822, -0.976501, -0.197516, -0.0859096, 0.103092, 0.408826, 0.906766, 0.0834376, 0.425764, 0.900937, 0.113681, 0.399518, 0.909635, -0.679342, -0.730064, 0.0737632, -0.528398, -0.839625,\n 0.125645, -0.79397, -0.60741, 0.0244453, 0.144932, -0.725608, -0.672658, 0.16245, -0.197119, -0.966796, 0.161626, -0.163793, -0.973144, 0.0159612, 0.99939, 0.0303659, 0.0189825, 0.99942, 0.027955, -0.0115665, 0.998566, 0.0522477, 0.066805, -0.997589, -0.0177313, 0.0894192, -0.995453, -0.0319224, 0.111759, -0.992645, -0.0459304, -0.0258797,\n -0.997375, -0.0672933, -3.05185e-5, -0.998352, -0.0572222, -0.0625935, -0.99469, -0.0815455, -0.018891, -0.907895, -0.418714, 0.00347911, -0.92761, -0.373516, 0.00732444, -0.930692, -0.365642, -0.0364086, 0.999298, 0.00412, -0.0440382, 0.998993, 0.00585955, -0.0315561, 0.999481, 0.00299081, -0.173132, -0.684988, -0.707633, -0.191839, -0.326304,\n -0.925565, -0.168523, -0.722404, -0.670583, -0.0478225, -0.886227, -0.460738, -0.0568255, -0.765954, -0.640339, -0.046205, -0.901212, -0.43086, -0.118778, 0.992523, -0.0278329, -0.118778, 0.992523, -0.0278329, -0.118778, 0.992523, -0.0278329, 0.0665914, 0.326609, 0.942778, 0.0665914, 0.326609, 0.942778, 0.0665914, 0.326609, 0.942778, 0.0604266,\n -0.997223, 0.0428175, 0.106388, -0.980529, 0.164922, 0.0544145, -0.998138, 0.0269784, -0.114078, 0.992737, -0.0374157, -0.0797143, 0.995819, -0.0441908, -0.144475, 0.988983, -0.031373, -0.00894192, 0.34611, 0.938139, -0.0492569, 0.630787, 0.774377, -0.00671407, 0.329569, 0.94409, 0.0674764, -0.997528, 0.0189825, 0.101352, -0.994751, 0.0118107,\n 0.134495, -0.990875, 0.00473037, -0.203375, -0.0996734, -0.973998, -0.176489, 0.0234077, -0.984008, -0.207892, -0.12183, -0.970519, -0.165563, -0.260903, -0.951048, -0.163457, -0.146001, -0.975677, -0.165654, -0.273568, -0.947447, -0.137913, 0.96466, -0.224403, -0.0808435, 0.993774, -0.0764183, -0.0742821, 0.995453, -0.0595721, -0.912107,\n -0.372234, -0.171606, -0.968474, -0.105594, -0.225471, -0.906919, -0.386212, -0.168218, -0.347209, 0.0617084, -0.935728, -0.379528, 0.305368, -0.873287, -0.382458, 0.342723, -0.858028, 0, 1, 0, 0, 0.999969, 0, 0, 1, 0, -0.763878, 0.194098, -0.615436, -0.739738, -0.00418104, -0.672842, -0.727653, -0.0581072, -0.683462, 0, -1, 0, 0, -1, 0, 0, -1, 0,\n -0.76925, 0.207984, 0.604114, -0.763024, 0.155614, 0.627308, -0.770745, 0.225379, 0.595904, -0.715018, 0.0702231, -0.695547, -0.820307, -0.285134, -0.495743, -0.652486, 0.185217, -0.734794, -0.978729, -0.0748314, -0.191015, -0.891018, 0.348369, -0.291025, -0.968413, -0.195318, -0.154881, -0.735618, 0.189642, -0.650288, -0.804712, -0.344829,\n -0.4832, -0.698569, 0.27955, -0.65862, 0.424085, -0.840388, -0.337443, 0.420606, -0.857112, -0.297342, 0.41554, -0.874538, -0.249947, -0.207587, -0.97528, -0.0754723, -0.210761, -0.974822, -0.0727561, -0.227515, -0.972015, -0.0583514, -0.0513932, 0.989196, -0.137242, -0.0996124, 0.962645, -0.251686, -0.110355, 0.954436, -0.2772, -0.550554,\n -0.834254, 0.029725, -0.550554, -0.834254, 0.029725, -0.550554, -0.834254, 0.029725, -0.638508, -0.753288, -0.157537, -0.638508, -0.753288, -0.157537, -0.638508, -0.753288, -0.157537, -0.0583514, -0.914579, -0.400159, -0.0583514, -0.914579, -0.400159, -0.0583514, -0.914579, -0.400159, -0.0712302, -0.958892, -0.274636, -0.130528, -0.975494,\n -0.177068, -0.187109, -0.979156, -0.0789819, 0.0721458, 0.055208, 0.995849, 0.0721458, 0.055208, 0.995849, 0.0721458, 0.055208, 0.995849, -0.768334, 0.514176, 0.381085, -0.786554, 0.437666, 0.435591, -0.731895, 0.61153, 0.300577, 0.352855, 0.93469, 0.0427564, 0.352855, 0.93469, 0.0427564, 0.352855, 0.93469, 0.0427564, 0.449385, 0.893307,\n -0.00250252, 0.449385, 0.893307, -0.00250252, 0.449385, 0.893307, -0.00250252, -0.831446, 0.425123, -0.357646, -0.831446, 0.425123, -0.357646, -0.831446, 0.425123, -0.357646, 0.0677206, 0.996612, -0.0462355, 0.0677206, 0.996612, -0.0462355, 0.0677206, 0.996612, -0.0462355, -0.163671, 0.98648, 0.00631733, -0.163671, 0.98648, 0.00631733, -0.163671,\n 0.98648, 0.00631733, -0.819361, -0.334483, 0.46556, -0.734001, -0.500961, 0.45851, -0.842372, -0.273629, 0.464187, -1, 0, 0, -0.575396, -0.745567, 0.336131, -0.575396, -0.745567, 0.336131, -0.575396, -0.745567, 0.336131, 0.841762, -0.538804, 0.0328074, -0.264534, 0.115268, 0.957427, 0.976501, -0.197516, -0.0859096, -0.113681, 0.399518, 0.909635,\n 0.449995, -0.880551, 0.148595, -0.136052, -0.794, -0.592486, -0.0392773, 0.999146, 0.0118107, -0.111759, -0.992645, -0.0459304, -0.0513932, -0.997986, -0.0369884, 0.0254219, -0.901639, -0.431684, 0.0470595, 0.99884, 0.00656148, 0.168523, -0.722404, -0.670583, 0.046205, -0.901212, -0.43086, -0.194922, -0.892605, 0.406507, 0.0639973, 0.996826,\n -0.0472427, 0.00671407, 0.329569, 0.94409, -0.134495, -0.990875, 0.00473037, 0.207892, -0.12183, -0.970519, 0.165654, -0.273568, -0.947447, 0.0742821, 0.995453, -0.0595721, 0.906919, -0.386212, -0.168218, 0.382458, 0.342723, -0.858028, 0, 1, 0, 0.764763, 0.23896, -0.598315, 0, -1, 0, 0.770745, 0.225379, 0.595904, 0.652486, 0.185217, -0.734794,\n 0.968413, -0.195318, -0.154881, 0.790307, -0.429365, -0.437086, -0.429762, -0.776055, -0.461501, 0.191687, -0.977386, -0.088992, 0.110355, 0.954436, -0.2772, 0.187109, -0.979156, -0.0789819, 0.731895, 0.61153, 0.300577, 0.842372, -0.273629, 0.464187, -0.841762, -0.538804, 0.0328074, 0.0928068, 0.250374, 0.963683, -0.998413, -0.0405591, 0.038728,\n 0.0721458, 0.435377, 0.897336, -0.449995, -0.880551, 0.148595, 0.136052, -0.794, -0.592486, 0.0392773, 0.999146, 0.0118107, 0.0498978, -0.998718, -0.00714133, 0.0513932, -0.997986, -0.0369884, -0.0254219, -0.901639, -0.431684, -0.0470595, 0.99884, 0.00656148, -0.191717, -0.264199, -0.945189, -0.0582904, -0.737968, -0.672292, 0.194922, -0.892605,\n 0.406507, -0.0639973, 0.996826, -0.0472427, -0.0510575, 0.642567, 0.764489, 0.0504471, -0.998444, 0.0225837, -0.169927, 0.0514542, -0.9841, -0.162999, -0.130192, -0.977966, -0.23545, 0.841029, -0.486984, -0.970061, -0.0774865, -0.230079, -0.339671, 0.0208136, -0.940275, 0, 1, 0, -0.764763, 0.23896, -0.598315, 0, -0.999969, 0, -0.755913, 0.111576,\n 0.64507, -0.82284, -0.402875, -0.400708, -0.838618, 0.449171, -0.308054, -0.790307, -0.429365, -0.437086, 0.429762, -0.776055, -0.461501, -0.191687, -0.977386, -0.088992, -0.0365001, 0.99411, -0.10184, -0.00930815, -0.928556, -0.371044, -0.800501, 0.310953, 0.512314, -0.663198, -0.601764, 0.44496,\n ],\n },\n },\n groups: [\n {\n start: 0,\n count: 498,\n materialIndex: 0,\n },\n ],\n },\n};\n\u003c/script\u003e\n \u003cscript\u003eclass InitParams {\n constructor(webgl2, frag) {\n this.webgl2 = webgl2;\n\n const uniList = ['simAreaCenter', 'simAreaSize'];\n const attList = [{ array: WebGL2.planeVertexPosition, location: 'position', stride: 3 }];\n\n this.webgl2.addPrograms([\n {\n name: 'initParamsProgram',\n vsText: WebGL2.defaultVertexShader,\n fsText: frag,\n uniList: uniList,\n attList: attList,\n },\n ]);\n\n this.vao = webgl2.createVAO(\n Object.keys(webgl2.webglPrograms.initParamsProgram.attLocations).map((key) =\u003e webgl2.webglPrograms.initParamsProgram.attLocations[key]),\n [],\n WebGL2.planeVertexIndex\n );\n }\n\n execute(paramsFrameBuffer, simAreaCenter, simAreaSize) {\n this.webgl2.gl.useProgram(this.webgl2.webglPrograms.initParamsProgram.program);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, paramsFrameBuffer.f);\n this.webgl2.gl.drawBuffers([webgl2.gl.COLOR_ATTACHMENT0, webgl2.gl.COLOR_ATTACHMENT1]);\n this.webgl2.gl.bindVertexArray(this.vao);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.initParamsProgram.uniLocations.simAreaCenter, simAreaCenter);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.initParamsProgram.uniLocations.simAreaSize, simAreaSize);\n this.webgl2.gl.drawElements(this.webgl2.gl.TRIANGLES, WebGL2.planeVertexIndex.length, this.webgl2.gl.UNSIGNED_SHORT, 0);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, null);\n }\n}\n\u003c/script\u003e\n \u003cscript\u003eclass Index {\n constructor(webgl2, frag) {\n this.webgl2 = webgl2;\n\n const uniList = ['positionTexture', 'resolution', 'simAreaCenter', 'simAreaSize', 'gridNum'];\n const attList = [{ array: WebGL2.planeVertexPosition, location: 'position', stride: 3 }];\n\n this.webgl2.addPrograms([\n {\n name: 'indexProgram',\n vsText: WebGL2.defaultVertexShader,\n fsText: frag,\n uniList: uniList,\n attList: attList,\n },\n ]);\n\n this.vao = webgl2.createVAO(\n Object.keys(webgl2.webglPrograms.indexProgram.attLocations).map((key) =\u003e webgl2.webglPrograms.indexProgram.attLocations[key]),\n [],\n WebGL2.planeVertexIndex\n );\n }\n\n execute(paramsFrameBuffer, indexFrameBuffer, resolution, simAreaCenter, simAreaSize, gridNum) {\n this.webgl2.gl.useProgram(this.webgl2.webglPrograms.indexProgram.program);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, indexFrameBuffer.f);\n this.webgl2.gl.bindVertexArray(this.vao);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE0);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, paramsFrameBuffer.ts[1]);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.indexProgram.uniLocations.positionTexture, 0);\n this.webgl2.gl.uniform2fv(this.webgl2.webglPrograms.indexProgram.uniLocations.resolution, resolution);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.indexProgram.uniLocations.simAreaCenter, simAreaCenter);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.indexProgram.uniLocations.simAreaSize, simAreaSize);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.indexProgram.uniLocations.gridNum, gridNum);\n this.webgl2.gl.drawElements(this.webgl2.gl.TRIANGLES, WebGL2.planeVertexIndex.length, this.webgl2.gl.UNSIGNED_SHORT, 0);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, null);\n }\n}\n\u003c/script\u003e\n \u003cscript\u003eclass BitonicSort {\n constructor(webgl2, frag) {\n this.webgl2 = webgl2;\n\n const uniList = ['indexTexture', 'velocityTexture', 'positionTexture', 'resolution', 'mainBlockStep', 'subBlockStep'];\n const attList = [{ array: WebGL2.planeVertexPosition, location: 'position', stride: 3 }];\n\n this.webgl2.addPrograms([\n {\n name: 'bitonicSortProgram',\n vsText: WebGL2.defaultVertexShader,\n fsText: frag,\n uniList: uniList,\n attList: attList,\n },\n ]);\n\n this.vao = webgl2.createVAO(\n Object.keys(webgl2.webglPrograms.bitonicSortProgram.attLocations).map((key) =\u003e webgl2.webglPrograms.bitonicSortProgram.attLocations[key]),\n [],\n WebGL2.planeVertexIndex\n );\n }\n\n execute(indexFrameBufferRead, indexFrameBufferWrite, resolution, instanceNum) {\n this.webgl2.gl.useProgram(this.webgl2.webglPrograms.bitonicSortProgram.program);\n for (let i = 0; i \u003c Math.log2(instanceNum); i++) {\n for (let j = 0; j \u003c= i; j++) {\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, indexFrameBufferWrite.f);\n this.webgl2.gl.bindVertexArray(this.vao);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE0);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, indexFrameBufferRead.t);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.bitonicSortProgram.uniLocations.indexTexture, 0);\n this.webgl2.gl.uniform2fv(this.webgl2.webglPrograms.bitonicSortProgram.uniLocations.resolution, resolution);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.bitonicSortProgram.uniLocations.mainBlockStep, i);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.bitonicSortProgram.uniLocations.subBlockStep, j);\n this.webgl2.gl.drawElements(this.webgl2.gl.TRIANGLES, WebGL2.planeVertexIndex.length, this.webgl2.gl.UNSIGNED_SHORT, 0);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, null);\n\n [indexFrameBufferRead, indexFrameBufferWrite] = [indexFrameBufferWrite, indexFrameBufferRead];\n }\n }\n [indexFrameBufferRead, indexFrameBufferWrite] = [indexFrameBufferWrite, indexFrameBufferRead];\n }\n}\n\u003c/script\u003e\n \u003cscript\u003eclass GridIndex {\n constructor(webgl2, frag) {\n this.webgl2 = webgl2;\n\n const uniList = ['resolution', 'instanceNum', 'indexResolution', 'indexTexture'];\n const attList = [{ array: WebGL2.planeVertexPosition, location: 'position', stride: 3 }];\n\n this.webgl2.addPrograms([\n {\n name: 'gridIndexProgram',\n vsText: WebGL2.defaultVertexShader,\n fsText: frag,\n uniList: uniList,\n attList: attList,\n },\n ]);\n\n this.vao = webgl2.createVAO(\n Object.keys(webgl2.webglPrograms.gridIndexProgram.attLocations).map((key) =\u003e webgl2.webglPrograms.gridIndexProgram.attLocations[key]),\n [],\n WebGL2.planeVertexIndex\n );\n }\n\n execute(indexFrameBuffer, gridIndexFrameBuffer, resolution, instanceNum, indexResolution) {\n this.webgl2.gl.useProgram(this.webgl2.webglPrograms.gridIndexProgram.program);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, gridIndexFrameBuffer.f);\n this.webgl2.gl.bindVertexArray(this.vao);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE0);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, indexFrameBuffer.t);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.gridIndexProgram.uniLocations.indexTexture, 0);\n this.webgl2.gl.uniform2fv(this.webgl2.webglPrograms.gridIndexProgram.uniLocations.resolution, resolution);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.gridIndexProgram.uniLocations.instanceNum, instanceNum);\n this.webgl2.gl.uniform2fv(this.webgl2.webglPrograms.gridIndexProgram.uniLocations.indexResolution, indexResolution);\n this.webgl2.gl.drawElements(this.webgl2.gl.TRIANGLES, WebGL2.planeVertexIndex.length, this.webgl2.gl.UNSIGNED_SHORT, 0);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, null);\n }\n}\n\u003c/script\u003e\n \u003cscript\u003eclass UpdateParams {\n constructor(webgl2, frag) {\n this.webgl2 = webgl2;\n\n const uniList = ['velocityTexture', 'positionTexture', 'gridIndexTexture',\"indexTexture\",'time', 'deltaTime', 'paramsResolution', 'gridIndexResolution', 'gridNum', 'maxSpeed', 'maxForce', 'separationRadius', 'alignmentRadius', 'cohesionRadius', 'separationWeight', 'alignmentWeight', 'cohesionWeight', 'simAreaCenter', 'simAreaSize', 'wallWeight'];\n const attList = [{ array: WebGL2.planeVertexPosition, location: 'position', stride: 3 }];\n\n this.webgl2.addPrograms([\n {\n name: 'updateParamsProgram',\n vsText: WebGL2.defaultVertexShader,\n fsText: frag,\n uniList: uniList,\n attList: attList,\n },\n ]);\n\n this.vao = webgl2.createVAO(\n Object.keys(webgl2.webglPrograms.updateParamsProgram.attLocations).map((key) =\u003e webgl2.webglPrograms.updateParamsProgram.attLocations[key]),\n [],\n WebGL2.planeVertexIndex\n );\n }\n\n execute(paramsFrameBufferRead, paramsFrameBufferWrite, gridIndexFrameBuffer, indexFrameBuffer, time, deltaTime, paramsResolution, gridIndexResolution, gridNum, maxSpeed, maxForce, separationRadius, alignmentRadius, cohesionRadius, separationWeight, alignmentWeight, cohesionWeight, simAreaCenter, simAreaSize, wallWeight) {\n this.webgl2.gl.useProgram(this.webgl2.webglPrograms.updateParamsProgram.program);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, paramsFrameBufferWrite.f);\n this.webgl2.gl.drawBuffers([webgl2.gl.COLOR_ATTACHMENT0, webgl2.gl.COLOR_ATTACHMENT1]);\n this.webgl2.gl.bindVertexArray(this.vao);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE0);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, paramsFrameBufferRead.ts[0]);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE1);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, paramsFrameBufferRead.ts[1]);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE2);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, gridIndexFrameBuffer.t);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE3);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, indexFrameBuffer.t);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.velocityTexture, 0);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.positionTexture, 1);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.gridIndexTexture, 2);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.indexTexture, 3);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.time, time);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.deltaTime, deltaTime);\n this.webgl2.gl.uniform2fv(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.paramsResolution, paramsResolution);\n this.webgl2.gl.uniform2fv(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.gridIndexResolution, gridIndexResolution);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.gridNum, gridNum);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.maxSpeed, maxSpeed);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.maxForce, maxForce);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.separationRadius, separationRadius);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.alignmentRadius, alignmentRadius);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.cohesionRadius, cohesionRadius);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.separationWeight, separationWeight);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.alignmentWeight, alignmentWeight);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.cohesionWeight, cohesionWeight);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.simAreaCenter, simAreaCenter);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.simAreaSize, simAreaSize);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.updateParamsProgram.uniLocations.wallWeight, wallWeight);\n\n this.webgl2.gl.drawElements(this.webgl2.gl.TRIANGLES, WebGL2.planeVertexIndex.length, this.webgl2.gl.UNSIGNED_SHORT, 0);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, null);\n }\n}\n\u003c/script\u003e\n \u003cscript\u003eclass Boids {\n constructor(webgl2, frag, vert, model, instanceNum) {\n this.webgl2 = webgl2;\n this.instanceNum = instanceNum;\n\n const modelVertexPosition = model.data.attributes.position.array;\n const instanceIndex = new Array(this.instanceNum).fill(0).map((e, i) =\u003e i);\n this.modelVertexIndex = model.data.index.array;\n\n const uniList = ['paramsResolution', 'positionTexture', 'velocityTexture', 'mMatrix', 'vpMatrix', 'simAreaSize', 'instanceNum', 'time'];\n const attList = [\n { array: modelVertexPosition, location: 'vertex', stride: 3 },\n { array: instanceIndex, location: 'instanceIndex', stride: 1 },\n ];\n\n this.webgl2.addPrograms([\n {\n name: 'boidsProgram',\n vsText: vert,\n fsText: frag,\n uniList: uniList,\n attList: attList,\n },\n ]);\n\n this.vao = this.webgl2.createVAO(\n Object.keys(this.webgl2.webglPrograms.boidsProgram.attLocations).map((key) =\u003e this.webgl2.webglPrograms.boidsProgram.attLocations[key]),\n [{ location: this.webgl2.webglPrograms.boidsProgram.attLocations.instanceIndex.location, stride: 1 }],\n this.modelVertexIndex\n );\n }\n\n execute(paramsFrameBuffer, outputFrameBuffer, paramsResolution, mMatrix, vpMatrix, simAreaSize, instanceNum, time) {\n this.webgl2.gl.useProgram(this.webgl2.webglPrograms.boidsProgram.program);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, outputFrameBuffer.f);\n this.webgl2.gl.drawBuffers([webgl2.gl.COLOR_ATTACHMENT0, webgl2.gl.COLOR_ATTACHMENT1]);\n this.webgl2.gl.clearColor(0.7, 0.5, 0.0, 1.0);\n this.webgl2.gl.clear(this.webgl2.gl.COLOR_BUFFER_BIT);\n\n this.webgl2.gl.bindVertexArray(this.vao);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE0);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, paramsFrameBuffer.ts[0]);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE1);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, paramsFrameBuffer.ts[1]);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.boidsProgram.uniLocations.velocityTexture, 0);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.boidsProgram.uniLocations.positionTexture, 1);\n this.webgl2.gl.uniform2fv(this.webgl2.webglPrograms.boidsProgram.uniLocations.paramsResolution, paramsResolution);\n this.webgl2.gl.uniformMatrix4fv(this.webgl2.webglPrograms.boidsProgram.uniLocations.mMatrix, false, mMatrix);\n this.webgl2.gl.uniformMatrix4fv(this.webgl2.webglPrograms.boidsProgram.uniLocations.vpMatrix, false, vpMatrix);\n this.webgl2.gl.uniform3fv(this.webgl2.webglPrograms.boidsProgram.uniLocations.simAreaSize, simAreaSize);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.boidsProgram.uniLocations.instanceNum, instanceNum);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.boidsProgram.uniLocations.time, time);\n this.webgl2.gl.drawElementsInstanced(this.webgl2.gl.TRIANGLES, this.modelVertexIndex.length, this.webgl2.gl.UNSIGNED_SHORT, 0, this.instanceNum);\n this.webgl2.gl.bindFramebuffer(this.webgl2.gl.FRAMEBUFFER, null);\n }\n}\n\u003c/script\u003e\n \u003cscript\u003eclass Rendering {\n constructor(webgl2, frag) {\n this.webgl2 = webgl2;\n\n const uniList = ['tex', 'time'];\n const attList = [{ array: WebGL2.planeVertexPosition, location: 'position', stride: 3 }];\n\n this.webgl2.addPrograms([\n {\n name: 'renderingProgram',\n vsText: WebGL2.defaultVertexShader,\n fsText: frag,\n uniList: uniList,\n attList: attList,\n },\n ]);\n\n this.vao = this.webgl2.createVAO(\n Object.keys(this.webgl2.webglPrograms.renderingProgram.attLocations).map((key) =\u003e this.webgl2.webglPrograms.renderingProgram.attLocations[key]),\n [],\n WebGL2.planeVertexIndex\n );\n }\n\n execute(inputFrameBuffer, time) {\n this.webgl2.gl.useProgram(this.webgl2.webglPrograms.renderingProgram.program);\n this.webgl2.gl.bindVertexArray(this.vao);\n this.webgl2.gl.activeTexture(this.webgl2.gl.TEXTURE0);\n this.webgl2.gl.bindTexture(this.webgl2.gl.TEXTURE_2D, inputFrameBuffer.t);\n this.webgl2.gl.uniform1i(this.webgl2.webglPrograms.renderingProgram.uniLocations.tex, 0);\n this.webgl2.gl.uniform1f(this.webgl2.webglPrograms.renderingProgram.uniLocations.time, time);\n this.webgl2.gl.drawElements(this.webgl2.gl.TRIANGLES, WebGL2.planeVertexIndex.length, this.webgl2.gl.UNSIGNED_SHORT, 0);\n\n this.webgl2.gl.flush();\n }\n}\n\u003c/script\u003e\n \u003cscript\u003econst canvas = document.createElement('canvas');\ndocument.body.appendChild(canvas);\ncanvas.width = window.innerWidth;\ncanvas.height = window.innerHeight;\n\nconst mouse = [0, 0, 0];\nconst simAreaCenter = [0, 0, 0];\nconst simAreaSize = [(20 * canvas.width) / canvas.height, 20, 60];\nconst gridSize = [1.8, 1.8, 1.8];\nconst gridNum = [Math.ceil(simAreaSize[0] / gridSize[0]), Math.ceil(simAreaSize[1] / gridSize[1]), Math.ceil(simAreaSize[2] / gridSize[2])];\nconst instanceNum = Math.pow(2, 14);\nconst size = Math.sqrt(instanceNum);\nconst maxSpeed = 3;\nconst maxForce = 1;\nconst separationRadius = 1.8;\nconst alignmentRadius = 1.8;\nconst cohesionRadius = 1.8;\nconst separationWeight = 2.2;\nconst alignmentWeight = 3;\nconst cohesionWeight = 2;\nconst wallWeight = 1;\n\nconst mMatrix = Matrix4x4.multiply(Matrix4x4.rotationX(-90), Matrix4x4.scale([0.25, 0.25, 0.25]));\nconst vMatrix = Matrix4x4.lookAt([0, 0, 200], [0, 0, 0], [0, 1, 0]);\nconst pMatrix = Matrix4x4.orthographic(simAreaSize[1] / 2, canvas.width / canvas.height, 0.1, 1000);\n\nconst vpMatrix = Matrix4x4.multiply(pMatrix, vMatrix);\n\nconst tMMatrix = Matrix4x4.transpose(mMatrix);\nconst tVPMatrix = Matrix4x4.transpose(vpMatrix);\n\nconst webgl2 = new WebGL2(canvas, []);\nwebgl2.useTextureFloatExtension();\nwebgl2.useTextureFloatLinearExtension();\n\nconst initParams = new InitParams(webgl2, document.getElementById('initParamsFrag').textContent);\nconst index = new Index(webgl2, document.getElementById('indexFrag').textContent);\nconst bitonicSort = new BitonicSort(webgl2, document.getElementById('bitonicSortFrag').textContent);\nconst gridIndex = new GridIndex(webgl2, document.getElementById('gridIndexFrag').textContent);\nconst updateParams = new UpdateParams(webgl2, document.getElementById('updateParamsFrag').textContent);\nconst boids = new Boids(webgl2, document.getElementById('boidsFrag').textContent, document.getElementById('boidsVert').textContent, model, instanceNum * 2);\nconst rendering = new Rendering(webgl2, document.getElementById('renderingFrag').textContent);\n\nlet paramsFrameBufferRead;\nlet paramsFrameBufferWrite;\nlet indexFrameBufferRead;\nlet indexFrameBufferWrite;\nlet gridIndexFrameBuffer;\nlet boidsFrameBuffer;\n\nlet startTime;\nlet time;\nlet preTime;\nlet deltaTime;\n\nconst init = () =\u003e {\n paramsFrameBufferRead = webgl2.createFrameBufferMRT(size, size, [webgl2.gl.RGBA32F, webgl2.gl.RGBA32F], [webgl2.gl.RGBA, webgl2.gl.RGBA], [webgl2.gl.FLOAT, webgl2.gl.FLOAT], [webgl2.gl.NEAREST, webgl2.gl.NEAREST], [webgl2.gl.REPEAT, webgl2.gl.REPEAT], 2, false);\n paramsFrameBufferWrite = webgl2.createFrameBufferMRT(size, size, [webgl2.gl.RGBA32F, webgl2.gl.RGBA32F], [webgl2.gl.RGBA, webgl2.gl.RGBA], [webgl2.gl.FLOAT, webgl2.gl.FLOAT], [webgl2.gl.NEAREST, webgl2.gl.NEAREST], [webgl2.gl.REPEAT, webgl2.gl.REPEAT], 2, false);\n indexFrameBufferRead = webgl2.createFrameBuffer(size, size, webgl2.gl.RG16UI, webgl2.gl.RG_INTEGER, webgl2.gl.UNSIGNED_SHORT, webgl2.gl.NEAREST, webgl2.gl.CLAMP_TO_EDGE, false);\n indexFrameBufferWrite = webgl2.createFrameBuffer(size, size, webgl2.gl.RG16UI, webgl2.gl.RG_INTEGER, webgl2.gl.UNSIGNED_SHORT, webgl2.gl.NEAREST, webgl2.gl.CLAMP_TO_EDGE, false);\n gridIndexFrameBuffer = webgl2.createFrameBuffer(gridNum[0], gridNum[1] * gridNum[2], webgl2.gl.RG16I, webgl2.gl.RG_INTEGER, webgl2.gl.SHORT, webgl2.gl.NEAREST, webgl2.gl.CLAMP_TO_EDGE, false);\n boidsFrameBuffer = webgl2.createFrameBuffer(canvas.width, canvas.height, webgl2.gl.RGBA, webgl2.gl.RGBA, webgl2.gl.UNSIGNED_BYTE, webgl2.gl.NEAREST, webgl2.gl.CLAMP_TO_EDGE, false);\n\n startTime = new Date().getTime();\n preTime = 0;\n time = 0;\n\n initParams.execute(paramsFrameBufferWrite, simAreaCenter, simAreaSize);\n [paramsFrameBufferRead, paramsFrameBufferWrite] = [paramsFrameBufferWrite, paramsFrameBufferRead];\n};\n\nconst loop = () =\u003e {\n preTime = time;\n time = (new Date().getTime() - startTime) / 1000;\n deltaTime = time - preTime;\n\n index.execute(paramsFrameBufferRead, indexFrameBufferWrite, [size, size], simAreaCenter, simAreaSize, gridNum);\n [indexFrameBufferRead, indexFrameBufferWrite] = [indexFrameBufferWrite, indexFrameBufferRead];\n\n bitonicSort.execute(indexFrameBufferRead, indexFrameBufferWrite, [size, size], instanceNum);\n [indexFrameBufferRead, indexFrameBufferWrite] = [indexFrameBufferWrite, indexFrameBufferRead];\n\n gridIndex.execute(indexFrameBufferRead, gridIndexFrameBuffer, [gridNum[0], gridNum[1] * gridNum[2]], instanceNum, [size, size]);\n\n updateParams.execute(paramsFrameBufferRead, paramsFrameBufferWrite, gridIndexFrameBuffer, indexFrameBufferRead, time, deltaTime, [size, size], [gridNum[0], gridNum[1] * gridNum[2]], gridNum, maxSpeed, maxForce, separationRadius, alignmentRadius, cohesionRadius, separationWeight, alignmentWeight, cohesionWeight, simAreaCenter, simAreaSize, wallWeight);\n [paramsFrameBufferRead, paramsFrameBufferWrite] = [paramsFrameBufferWrite, paramsFrameBufferRead];\n\n boids.execute(paramsFrameBufferRead, boidsFrameBuffer, [size, size], tMMatrix, tVPMatrix, simAreaSize, instanceNum, time);\n\n rendering.execute(boidsFrameBuffer, time);\n\n requestAnimationFrame(loop);\n};\n\ninit();\nloop();\n\nwindow.addEventListener('resize', () =\u003e {\n canvas.width = window.innerWidth;\n canvas.height = window.innerHeight;\n webgl2.gl.viewport(0, 0, canvas.width, canvas.height);\n init();\n});\n\nwindow.addEventListener('mousedown', () =\u003e {\n mouse[2] = 1;\n});\nwindow.addEventListener(`mousemove`, (e) =\u003e {\n mouse[0] = e.clientX;\n mouse[1] = canvas.height - e.clientY;\n});\nwindow.addEventListener('mouseup', () =\u003e {\n mouse[2] = 0;\n});\n\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"ce5fqpkn70rlpj69d27g","libraries":[]},{"id":"ce5fqqcn70rlpj69d29g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce5fqpkn70rlpj69d27g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce5fqqcn70rlpj69d2a0","type":2,"text":"","artId":"ce5fqpkn70rlpj69d27g","libraries":[]}],"like":1,"thumbFileName":"ce5fqpkn70rlpj69d27g.png","selectedThumbFileName":"ce5fqpkn70rlpj69d27g.png","thumbnailFileUrl":"","resourceFileName":"ce5fqpkn70rlpj69d27g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmV2nPYow5iin5AKZctz4eVAsbuQ9vrNhUu93azo4H9sNa","resourceType":1,"metadataUrl":"","tags":[{"id":"bmk0qi43p9f7m1g01q1g","name":"WebGL"},{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4vakcn70rlpj69csu0","title":"I hate beans","description":"異常サイズ動画制作は楽しいですね?","createdAt":1669985625,"updatedAt":1670948635,"user":{"id":"f59qM7AjxyVZ0mtoquhiwOtwQrr1","customId":"f59qM7AjxyVZ0mtoquhiwOtwQrr1","name":"避雷","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/f59qM7AjxyVZ0mtoquhiwOtwQrr1.jpg","createdAt":1564582282000,"updatedAt":1672428735035},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce4vakcn70rlpj69csu0.png","thumbnailFileUrl":"","resourceFileName":"ce4vakcn70rlpj69csu0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmdguxVYUHzxZmYAxiKspRi4CyGBwgdRut1juo69hThEpt","resourceType":2,"metadataUrl":"","tags":[{"id":"bntnlmk3p9fb5s72qdh0","name":"Blender"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce4vamcn70rlpj69csvg","name":"day7 "},{"id":"ce4vamcn70rlpj69ct00","name":"Houdini "}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4rbo4n70rlpj69cptg","title":"Sands #202212","description":"#### Sands is a project that evolves in the continuum, as the colors of sands shift throughout the time to canvas the landscape they define.","createdAt":1669969383,"updatedAt":1669969383,"user":{"id":"dn8pNW0QUURITtMRIRY8LPF8Mp32","customId":"dn8pNW0QUURITtMRIRY8LPF8Mp32","name":"Samuel YAN","biography":"領域:Generative Art / Media Art\n言語:p5.js / Processing / glsl\ntwi: twitter.com/SamuelAnn0924\nins: instagram.com/samuel_yan_1990/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/dn8pNW0QUURITtMRIRY8LPF8Mp32.jpg","createdAt":1639054355343,"updatedAt":1721563941651},"codes":[{"id":"ce4rbpsn70rlpj69cpug","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js\"\u003e\u003c/script\u003e","artId":"ce4rbo4n70rlpj69cptg","libraries":[]},{"id":"ce4rbpsn70rlpj69cpv0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce4rbo4n70rlpj69cptg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce4rbpsn70rlpj69cpvg","type":2,"text":"// by SamuelYAN\n// more works //\n// https://twitter.com/SamuelAnn0924\n// https://www.instagram.com/samuel_yan_1990/\n\nlet particles = [];\nlet parNum = 5000; // パーティクルの総数\nlet colors = [];\nvar mySize, Landscape, num_count;\nvar seed = Math.random() * 1812;\n\nconst palettes = [\n\t[\"#F2A25C\", \"#5679A6\"],\n\t[\"#7E56A6\", \"#F28B50\"],\n\t[\"#712f1b\", \"#b4efff\"],\n\t[\"#d094f5\", \"#2a9d4e\"],\n\t[\"#006b40\", \"#f3dad3\"],\n\t[\"#4ED98A\", \"#F2AD85\"],\n\t[\"#20BF1B\", \"#17590C\"],\n\t[\"#f3dad3\", \"#006b40\"],\n [\"#9E9BF2\", \"#F2E088\"]\n]\n\nfunction setup() {\n\t// frameRate(30);\n\trandomSeed(seed);\n mySize = min(windowWidth,windowHeight);\n createCanvas(windowWidth,windowHeight);\n Landscape = random([0,1,2,3,4,5,6,7,8]); // setting palettes\n// Landscape = 8; \n\t\n for (let i = 0; i \u003c parNum; i++) {\n particles.push(new Particle(random(width), random(height)));\n } // 全部のパーティクルを作る\n\t\n background(\"#030303\");\n\t // color \n colors[0] = color(str(palettes[Landscape][0]) + random([\"b3\", \"a6\", \"99\", \"8c\", \"80\", \"73\"]));\n\tcolors[1] = color(str(palettes[Landscape][1]) + random([\"b3\", \"a6\", \"99\", \"8c\", \"80\", \"73\"]));\n\t\n\tnum_count = 0;\n}\n\nfunction draw() {\n\tnoiseSeed(seed);\n for (let j = particles.length - 1; j \u003e 0; j--) {\n particles[j].update();\n particles[j].show();\n if (particles[j].finished()) {\n particles.splice(j, 1);\n }\n }\n \n for (let i = particles.length; i \u003c parNum; i++) {\n particles.push(new Particle(random(width), random(height)));\n } // パーティクルを補充\n\t\n\tnum_count++;\n\n\tif (num_count \u003e 100 * 30) {\n\t\tcolors[0] = color(str(palettes[Landscape][1]) + random([\"b3\", \"a6\", \"99\", \"8c\", \"80\", \"73\"]));\n\t\tcolors[1] = color(str(palettes[Landscape][1]) + random([\"b3\", \"a6\", \"99\", \"8c\", \"80\", \"73\"]));\n\t}\n\n\tif (num_count \u003e= 300 * 30) {\n\t\tcolors[0] = color(\"#03030380\");\n\t\tcolors[1] = color(\"#03030380\");\n\t}\n\n\tif (num_count \u003e= 500 * 30) {\n\t\tbackground(\"#030303\");\n\t\tnum_count = 0;\n\t\tcolors[0] = color(str(palettes[Landscape][0]) + random([\"b3\", \"a6\", \"99\", \"8c\", \"80\", \"73\"]));\n\t\tcolors[1] = color(str(palettes[Landscape][1]) + random([\"b3\", \"a6\", \"99\", \"8c\", \"80\", \"73\"]));\n\t}\n}\n\nfunction Particle(x, y) {\n this.x = x;\n this.y = y;\n this.pos = createVector(this.x, this.y);\n\n this.life = random(0.1, 1);\n this.c = 0;\n this.ff = 0; // Flow Field\n\n this.update = function () { \n // *** main point *** // フローフィールド関数の設定\n this.ff = noise(this.pos.x / 100, this.pos.y / 10) * TWO_PI; \n let mainP = 4;\n let changeDir = TWO_PI / mainP; // 方向を変わる\n let roundff = (TAU/this.ff);\n //round((this.ff / TWO_PI) * mainP); // round ff\n this.ff = changeDir * roundff; // 新方向\n\n // draw Points\n if (this.ff \u003c 70 \u0026\u0026 this.ff \u003e 4) {\n this.c = colors[0]; //lerpColor(colors[0], colors[1], random(0, 0.55));\n stroke(this.c);\n this.pos.add(sin(this.ff), cos(this.ff));\n } else {\n this.c = colors[1]; //lerpColor(colors[2], colors[1], random(0.45, 1));\n stroke(this.c);\n this.pos.sub(sin(this.ff), cos(this.ff));\n }\n };\n\n this.show = function () {\n noFill();\n strokeWeight(random(0.25,1.5));\n let lx = 10;\n\t\tlet ly = 10;\n let px = constrain(this.pos.x, lx, width - lx);\n let py = constrain(this.pos.y, ly, height - ly);\n point(px, py);\n };\n\n this.finished = function() {\n\t\tthis.life -= 0.01;\n\t\tif (this.life \u003c= 0) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t};\n}","artId":"ce4rbo4n70rlpj69cptg","libraries":[]}],"like":1,"thumbFileName":"ce4rbo4n70rlpj69cptg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce4rbo4n70rlpj69cptg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmY9j2pYA5EGYw39fCjBKmzWePfUVjAnZMGwdMCQbHqhBf","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"bmm83343p9f7m1g01vs0","name":"Generative Art"},{"id":"bmqr67s3p9f7m1g02kr0","name":"creativecoding"},{"id":"c8jus8s3p9f0i94df230","name":"sands"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4qdhsn70rlpj69cplg","title":"Signifié on the Web -mother-","description":"特定の単語をグーグル画像検索し、検索結果の大量の画像を深層学習し、生成したイメージ。\nAn image generated by a Google image search for a selected word and deep learning of a large number of images in the search results.","createdAt":1669965525,"updatedAt":1669971544,"user":{"id":"MMDC1lDO0OgxRHUq8BZhIUoAIcv2","customId":"gengoraw","name":"GengoRaw","biography":"https://gengoraw.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/MMDC1lDO0OgxRHUq8BZhIUoAIcv2.png","createdAt":1668904722357,"updatedAt":1669971490216},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce4qdhsn70rlpj69cplg.png","thumbnailFileUrl":"","resourceFileName":"ce4qdhsn70rlpj69cplg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmNjrbgV2igRidUxmR3shSFjAZaEpHd8J9qznggz2JFtVp","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4qa44n70rlpj69cpig","title":"Signifié on the Web -corona-","description":"特定の単語をグーグル画像検索し、検索結果の大量の画像を深層学習し、生成したイメージ。\nAn image generated by a Google image search for a selected word and deep learning of a large number of images in the search results.","createdAt":1669965087,"updatedAt":1669971521,"user":{"id":"MMDC1lDO0OgxRHUq8BZhIUoAIcv2","customId":"gengoraw","name":"GengoRaw","biography":"https://gengoraw.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/MMDC1lDO0OgxRHUq8BZhIUoAIcv2.png","createdAt":1668904722357,"updatedAt":1669971490216},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce4qa44n70rlpj69cpig.png","thumbnailFileUrl":"","resourceFileName":"ce4qa44n70rlpj69cpig.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYbzeAEA1WXABn5si7TY1xhZNPJZvnSRcxuuvEUmsLsqv","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4mi6kn70rlpj69cnrg","title":"情緒不安定くん","description":"","createdAt":1669956414,"updatedAt":1669961569,"user":{"id":"I0VSiaTpwwYP0iQqOj1y6I003ss1","customId":"I0VSiaTpwwYP0iQqOj1y6I003ss1","name":"ikeryou","biography":"devdev Inc. Founder / Creative Corder / Programmer / 富山 / http://devdev.jp","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/I0VSiaTpwwYP0iQqOj1y6I003ss1.png","createdAt":1633918851975,"updatedAt":1715734105322},"codes":[{"id":"ce4mi84n70rlpj69cnsg","type":0,"text":"\u003ccanvas class=\"l-canvas\"\u003e\u003c/canvas\u003e\n\u003ccanvas class=\"l-canvas\"\u003e\u003c/canvas\u003e","artId":"ce4mi6kn70rlpj69cnrg","libraries":[]},{"id":"ce4mi84n70rlpj69cnt0","type":1,"text":"*{margin:0;padding:0;box-sizing:border-box}html,body{background-color:#fff;width:100%;height:100%}.s-gpu{will-change:transform}.l-debug{position:fixed;top:0;left:0;background-color:#000;color:#fff;font-size:12px;display:none}.l-canvas{position:fixed;top:0;left:0}","artId":"ce4mi6kn70rlpj69cnrg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce4mi84n70rlpj69cntg","type":2,"text":"var ch=Object.defineProperty;var uh=(r,e,t)=\u003ee in r?ch(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var O=(r,e,t)=\u003e(uh(r,typeof e!=\"symbol\"?e+\"\":e,t),t);const hh=function(){const e=document.createElement(\"link\").relList;if(e\u0026\u0026e.supports\u0026\u0026e.supports(\"modulepreload\"))return;for(const n of document.querySelectorAll('link[rel=\"modulepreload\"]'))i(n);new MutationObserver(n=\u003e{for(const s of n)if(s.type===\"childList\")for(const o of s.addedNodes)o.tagName===\"LINK\"\u0026\u0026o.rel===\"modulepreload\"\u0026\u0026i(o)}).observe(document,{childList:!0,subtree:!0});function t(n){const s={};return n.integrity\u0026\u0026(s.integrity=n.integrity),n.referrerpolicy\u0026\u0026(s.referrerPolicy=n.referrerpolicy),n.crossorigin===\"use-credentials\"?s.credentials=\"include\":n.crossorigin===\"anonymous\"?s.credentials=\"omit\":s.credentials=\"same-origin\",s}function i(n){if(n.ep)return;n.ep=!0;const s=t(n);fetch(n.href,s)}};hh();class Wn{constructor(){}}O(Wn,\"LG\",0),O(Wn,\"XS\",1);var fh=typeof Symbol==\"function\"\u0026\u0026typeof Symbol.iterator==\"symbol\"?function(r){return typeof r}:function(r){return r\u0026\u0026typeof Symbol==\"function\"\u0026\u0026r.constructor===Symbol\u0026\u0026r!==Symbol.prototype?\"symbol\":typeof r},dh=window.device,$={},Wo=[];window.device=$;var Lr=window.document.documentElement,ph=window.navigator.userAgent.toLowerCase(),Va=[\"googletv\",\"viera\",\"smarttv\",\"internet.tv\",\"netcast\",\"nettv\",\"appletv\",\"boxee\",\"kylo\",\"roku\",\"dlnadoc\",\"pov_tv\",\"hbbtv\",\"ce-html\"];$.macos=function(){return Je(\"mac\")};$.ios=function(){return $.iphone()||$.ipod()||$.ipad()};$.iphone=function(){return!$.windows()\u0026\u0026Je(\"iphone\")};$.ipod=function(){return Je(\"ipod\")};$.ipad=function(){var r=navigator.platform===\"MacIntel\"\u0026\u0026navigator.maxTouchPoints\u003e1;return Je(\"ipad\")||r};$.android=function(){return!$.windows()\u0026\u0026Je(\"android\")};$.androidPhone=function(){return $.android()\u0026\u0026Je(\"mobile\")};$.androidTablet=function(){return $.android()\u0026\u0026!Je(\"mobile\")};$.blackberry=function(){return Je(\"blackberry\")||Je(\"bb10\")};$.blackberryPhone=function(){return $.blackberry()\u0026\u0026!Je(\"tablet\")};$.blackberryTablet=function(){return $.blackberry()\u0026\u0026Je(\"tablet\")};$.windows=function(){return Je(\"windows\")};$.windowsPhone=function(){return $.windows()\u0026\u0026Je(\"phone\")};$.windowsTablet=function(){return $.windows()\u0026\u0026Je(\"touch\")\u0026\u0026!$.windowsPhone()};$.fxos=function(){return(Je(\"(mobile\")||Je(\"(tablet\"))\u0026\u0026Je(\" rv:\")};$.fxosPhone=function(){return $.fxos()\u0026\u0026Je(\"mobile\")};$.fxosTablet=function(){return $.fxos()\u0026\u0026Je(\"tablet\")};$.meego=function(){return Je(\"meego\")};$.cordova=function(){return window.cordova\u0026\u0026location.protocol===\"file:\"};$.nodeWebkit=function(){return fh(window.process)===\"object\"};$.mobile=function(){return $.androidPhone()||$.iphone()||$.ipod()||$.windowsPhone()||$.blackberryPhone()||$.fxosPhone()||$.meego()};$.tablet=function(){return $.ipad()||$.androidTablet()||$.blackberryTablet()||$.windowsTablet()||$.fxosTablet()};$.desktop=function(){return!$.tablet()\u0026\u0026!$.mobile()};$.television=function(){for(var r=0;r\u003cVa.length;){if(Je(Va[r]))return!0;r++}return!1};$.portrait=function(){return screen.orientation\u0026\u0026Object.prototype.hasOwnProperty.call(window,\"onorientationchange\")?fa(screen.orientation.type,\"portrait\"):$.ios()\u0026\u0026Object.prototype.hasOwnProperty.call(window,\"orientation\")?Math.abs(window.orientation)!==90:window.innerHeight/window.innerWidth\u003e1};$.landscape=function(){return screen.orientation\u0026\u0026Object.prototype.hasOwnProperty.call(window,\"onorientationchange\")?fa(screen.orientation.type,\"landscape\"):$.ios()\u0026\u0026Object.prototype.hasOwnProperty.call(window,\"orientation\")?Math.abs(window.orientation)===90:window.innerHeight/window.innerWidth\u003c1};$.noConflict=function(){return window.device=dh,this};function fa(r,e){return r.indexOf(e)!==-1}function Je(r){return fa(ph,r)}function Ac(r){return Lr.className.match(new RegExp(r,\"i\"))}function $e(r){var e=null;Ac(r)||(e=Lr.className.replace(/^\\s+|\\s+$/g,\"\"),Lr.className=e+\" \"+r)}function Wa(r){Ac(r)\u0026\u0026(Lr.className=Lr.className.replace(\" \"+r,\"\"))}$.ios()?$.ipad()?$e(\"ios ipad tablet\"):$.iphone()?$e(\"ios iphone mobile\"):$.ipod()\u0026\u0026$e(\"ios ipod mobile\"):$.macos()?$e(\"macos desktop\"):$.android()?$.androidTablet()?$e(\"android tablet\"):$e(\"android mobile\"):$.blackberry()?$.blackberryTablet()?$e(\"blackberry tablet\"):$e(\"blackberry mobile\"):$.windows()?$.windowsTablet()?$e(\"windows tablet\"):$.windowsPhone()?$e(\"windows mobile\"):$e(\"windows desktop\"):$.fxos()?$.fxosTablet()?$e(\"fxos tablet\"):$e(\"fxos mobile\"):$.meego()?$e(\"meego mobile\"):$.nodeWebkit()?$e(\"node-webkit\"):$.television()?$e(\"television\"):$.desktop()\u0026\u0026$e(\"desktop\");$.cordova()\u0026\u0026$e(\"cordova\");function Ms(){$.landscape()?(Wa(\"portrait\"),$e(\"landscape\"),Xa(\"landscape\")):(Wa(\"landscape\"),$e(\"portrait\"),Xa(\"portrait\")),Rc()}function Xa(r){for(var e=0;e\u003cWo.length;e++)Wo[e](r)}$.onChangeOrientation=function(r){typeof r==\"function\"\u0026\u0026Wo.push(r)};var Es=\"resize\";Object.prototype.hasOwnProperty.call(window,\"onorientationchange\")\u0026\u0026(Es=\"orientationchange\");window.addEventListener?window.addEventListener(Es,Ms,!1):window.attachEvent?window.attachEvent(Es,Ms):window[Es]=Ms;Ms();function da(r){for(var e=0;e\u003cr.length;e++)if($[r[e]]())return r[e];return\"unknown\"}$.type=da([\"mobile\",\"tablet\",\"desktop\"]);$.os=da([\"ios\",\"iphone\",\"ipad\",\"ipod\",\"android\",\"blackberry\",\"macos\",\"windows\",\"fxos\",\"meego\",\"television\"]);function Rc(){$.orientation=da([\"portrait\",\"landscape\"])}Rc();const Fa=class{constructor(){}static get instance(){return this._instance||(this._instance=new Fa),this._instance}random(e,t){return Math.random()*(t-e)+e}random2(e,t){let i=Math.random()*(t-e)+e;return this.hit(2)\u0026\u0026(i*=-1),i}randomInt(e,t){return Math.floor(Math.random()*(t-e+1))+e}hit(e=0){return e\u003c2\u0026\u0026(e=2),this.randomInt(0,e-1)==0}randomArr(e){return e[this.randomInt(0,e.length-1)]}range(e){return this.random(-e,e)}clamp(e,t,i){return Math.min(i,Math.max(e,t))}map(e,t,i,n,s){if(e\u003c=n)return t;if(e\u003e=s)return i;const o=(i-t)/(s-n);return(e-n)*o+t}mix(e,t,i){return e*(1-i)+t*i}radian(e){return e*Math.PI/180}degree(e){return e*180/Math.PI}shuffle(e){let t=e.length;for(;--t;){let i=Math.floor(Math.random()*(t+1));if(t==i)continue;let n=e[t];e[t]=e[i],e[i]=n}}replaceAll(e,t,i){return e.split(t).join(i)}sort(e,t,i=!0){i?e.sort((n,s)=\u003es[t]-n[t]):e.sort((n,s)=\u003en[t]-s[t])}distance(e,t,i,n){const s=e-i,o=t-n;return Math.sqrt(s*s+o*o)}numStr(e,t){let i=String(e);if(i.length\u003e=t)return i;const n=t-i.length;let s=0;for(;s\u003cn;)i=\"0\"+i,s++;return i}isIE(){const e=window.navigator.userAgent.toLowerCase();return e.indexOf(\"msie\")!=-1||e.indexOf(\"trident/7\")!=-1||e.indexOf(\"edge\")!=-1}isIE2(){const e=window.navigator.userAgent.toLowerCase();return e.indexOf(\"msie\")!=-1||e.indexOf(\"trident/7\")!=-1}isWin(){return window.navigator.platform.indexOf(\"Win\")!=-1}isChrome(){return window.navigator.userAgent.toLowerCase().indexOf(\"chrome\")!=-1}isFF(){return window.navigator.userAgent.toLowerCase().indexOf(\"firefox\")!=-1}isSafari(){return window.navigator.userAgent.toLowerCase().indexOf(\"safari\")!=-1\u0026\u0026!this.isChrome()}useWebGL(){try{const e=document.createElement(\"canvas\"),t=e.getContext(\"webgl\")||e.getContext(\"experimental-webgl\");return!!(window.WebGLRenderingContext\u0026\u0026t\u0026\u0026t.getShaderPrecisionFormat)}catch{return!1}}getQuery(e){e=e.replace(/[€[]/,\"\\u20AC\\u20AC\\u20AC[\").replace(/[€]]/,\"\\u20AC\\u20AC\\u20AC]\");const i=new RegExp(\"[\\u20AC\\u20AC?\u0026]\"+e+\"=([^\u0026//]*)\").exec(window.location.href);return i==null?\"\":i[1]}isTouchDevice(){return\"ontouchstart\"in window||navigator!=null\u0026\u0026navigator.maxTouchPoints\u003e0}isPc(){return $.mobile()==!1}isSp(){return $.mobile()}isAod(){return $.android()}isIPhone(){return $.iphone()}isIPad(){return $.tablet()}};let _e=Fa;O(_e,\"_instance\");const at=[];for(let r=0;r\u003c256;r++)at[r]=(r\u003c16?\"0\":\"\")+r.toString(16);const Js=Math.PI/180,qa=180/Math.PI;function hr(){const r=Math.random()*4294967295|0,e=Math.random()*4294967295|0,t=Math.random()*4294967295|0,i=Math.random()*4294967295|0;return(at[r\u0026255]+at[r\u003e\u003e8\u0026255]+at[r\u003e\u003e16\u0026255]+at[r\u003e\u003e24\u0026255]+\"-\"+at[e\u0026255]+at[e\u003e\u003e8\u0026255]+\"-\"+at[e\u003e\u003e16\u002615|64]+at[e\u003e\u003e24\u0026255]+\"-\"+at[t\u002663|128]+at[t\u003e\u003e8\u0026255]+\"-\"+at[t\u003e\u003e16\u0026255]+at[t\u003e\u003e24\u0026255]+at[i\u0026255]+at[i\u003e\u003e8\u0026255]+at[i\u003e\u003e16\u0026255]+at[i\u003e\u003e24\u0026255]).toLowerCase()}function gt(r,e,t){return Math.max(e,Math.min(t,r))}function mh(r,e){return(r%e+e)%e}function Ks(r,e,t){return(1-t)*r+t*e}function Ya(r){return(r\u0026r-1)===0\u0026\u0026r!==0}function Xo(r){return Math.pow(2,Math.floor(Math.log(r)/Math.LN2))}const _h=\"141\",gh=0,Za=1,xh=2,Cc=1,vh=2,yr=3,Dr=0,jt=1,Qn=2,yh=1,Vi=0,Jn=1,Ja=2,Ka=3,ja=4,Sh=5,Hn=100,Mh=101,Eh=102,$a=103,Qa=104,bh=200,wh=201,Th=202,Ah=203,Pc=204,Lc=205,Rh=206,Ch=207,Ph=208,Lh=209,Dh=210,Fh=0,Ih=1,Nh=2,qo=3,Oh=4,Uh=5,zh=6,Bh=7,Dc=0,Gh=1,kh=2,Mi=0,Hh=1,Vh=2,Wh=3,Xh=4,qh=5,Fc=300,er=301,tr=302,Yo=303,Zo=304,zs=306,Jo=1e3,Jt=1001,Ko=1002,Mt=1003,el=1004,tl=1005,Ut=1006,Yh=1007,Bs=1008,vn=1009,Zh=1010,Jh=1011,Ic=1012,Kh=1013,un=1014,hn=1015,Fr=1016,jh=1017,$h=1018,Kn=1020,Qh=1021,ef=1022,Kt=1023,tf=1024,nf=1025,pn=1026,ir=1027,rf=1028,sf=1029,of=1030,af=1031,lf=1033,js=33776,$s=33777,Qs=33778,eo=33779,il=35840,nl=35841,rl=35842,sl=35843,cf=36196,ol=37492,al=37496,ll=37808,cl=37809,ul=37810,hl=37811,fl=37812,dl=37813,pl=37814,ml=37815,_l=37816,gl=37817,xl=37818,vl=37819,yl=37820,Sl=37821,Ml=36492,yn=3e3,Xe=3001,uf=3200,hf=3201,ff=0,df=1,vi=\"srgb\",fn=\"srgb-linear\",to=7680,pf=519,El=35044,bl=\"300 es\",jo=1035;function mn(r){return r\u003c.04045?r*.0773993808:Math.pow(r*.9478672986+.0521327014,2.4)}function bs(r){return r\u003c.0031308?r*12.92:1.055*Math.pow(r,.41666)-.055}const io={[vi]:{[fn]:mn},[fn]:{[vi]:bs}},Xt={legacyMode:!0,get workingColorSpace(){return fn},set workingColorSpace(r){console.warn(\"THREE.ColorManagement: .workingColorSpace is readonly.\")},convert:function(r,e,t){if(this.legacyMode||e===t||!e||!t)return r;if(io[e]\u0026\u0026io[e][t]!==void 0){const i=io[e][t];return r.r=i(r.r),r.g=i(r.g),r.b=i(r.b),r}throw new Error(\"Unsupported color space conversion.\")},fromWorkingColorSpace:function(r,e){return this.convert(r,this.workingColorSpace,e)},toWorkingColorSpace:function(r,e){return this.convert(r,e,this.workingColorSpace)}},Nc={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},et={r:0,g:0,b:0},qt={h:0,s:0,l:0},jr={h:0,s:0,l:0};function no(r,e,t){return t\u003c0\u0026\u0026(t+=1),t\u003e1\u0026\u0026(t-=1),t\u003c1/6?r+(e-r)*6*t:t\u003c1/2?e:t\u003c2/3?r+(e-r)*6*(2/3-t):r}function $r(r,e){return e.r=r.r,e.g=r.g,e.b=r.b,e}class Le{constructor(e,t,i){return this.isColor=!0,this.r=1,this.g=1,this.b=1,t===void 0\u0026\u0026i===void 0?this.set(e):this.setRGB(e,t,i)}set(e){return e\u0026\u0026e.isColor?this.copy(e):typeof e==\"number\"?this.setHex(e):typeof e==\"string\"\u0026\u0026this.setStyle(e),this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=vi){return e=Math.floor(e),this.r=(e\u003e\u003e16\u0026255)/255,this.g=(e\u003e\u003e8\u0026255)/255,this.b=(e\u0026255)/255,Xt.toWorkingColorSpace(this,t),this}setRGB(e,t,i,n=fn){return this.r=e,this.g=t,this.b=i,Xt.toWorkingColorSpace(this,n),this}setHSL(e,t,i,n=fn){if(e=mh(e,1),t=gt(t,0,1),i=gt(i,0,1),t===0)this.r=this.g=this.b=i;else{const s=i\u003c=.5?i*(1+t):i+t-i*t,o=2*i-s;this.r=no(o,s,e+1/3),this.g=no(o,s,e),this.b=no(o,s,e-1/3)}return Xt.toWorkingColorSpace(this,n),this}setStyle(e,t=vi){function i(s){s!==void 0\u0026\u0026parseFloat(s)\u003c1\u0026\u0026console.warn(\"THREE.Color: Alpha component of \"+e+\" will be ignored.\")}let n;if(n=/^((?:rgb|hsl)a?)\\(([^\\)]*)\\)/.exec(e)){let s;const o=n[1],a=n[2];switch(o){case\"rgb\":case\"rgba\":if(s=/^\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a))return this.r=Math.min(255,parseInt(s[1],10))/255,this.g=Math.min(255,parseInt(s[2],10))/255,this.b=Math.min(255,parseInt(s[3],10))/255,Xt.toWorkingColorSpace(this,t),i(s[4]),this;if(s=/^\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a))return this.r=Math.min(100,parseInt(s[1],10))/100,this.g=Math.min(100,parseInt(s[2],10))/100,this.b=Math.min(100,parseInt(s[3],10))/100,Xt.toWorkingColorSpace(this,t),i(s[4]),this;break;case\"hsl\":case\"hsla\":if(s=/^\\s*(\\d*\\.?\\d+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(?:,\\s*(\\d*\\.?\\d+)\\s*)?$/.exec(a)){const l=parseFloat(s[1])/360,c=parseInt(s[2],10)/100,u=parseInt(s[3],10)/100;return i(s[4]),this.setHSL(l,c,u,t)}break}}else if(n=/^\\#([A-Fa-f\\d]+)$/.exec(e)){const s=n[1],o=s.length;if(o===3)return this.r=parseInt(s.charAt(0)+s.charAt(0),16)/255,this.g=parseInt(s.charAt(1)+s.charAt(1),16)/255,this.b=parseInt(s.charAt(2)+s.charAt(2),16)/255,Xt.toWorkingColorSpace(this,t),this;if(o===6)return this.r=parseInt(s.charAt(0)+s.charAt(1),16)/255,this.g=parseInt(s.charAt(2)+s.charAt(3),16)/255,this.b=parseInt(s.charAt(4)+s.charAt(5),16)/255,Xt.toWorkingColorSpace(this,t),this}return e\u0026\u0026e.length\u003e0?this.setColorName(e,t):this}setColorName(e,t=vi){const i=Nc[e.toLowerCase()];return i!==void 0?this.setHex(i,t):console.warn(\"THREE.Color: Unknown color \"+e),this}clone(){return new this.constructor(this.r,this.g,this.b)}copy(e){return this.r=e.r,this.g=e.g,this.b=e.b,this}copySRGBToLinear(e){return this.r=mn(e.r),this.g=mn(e.g),this.b=mn(e.b),this}copyLinearToSRGB(e){return this.r=bs(e.r),this.g=bs(e.g),this.b=bs(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=vi){return Xt.fromWorkingColorSpace($r(this,et),e),gt(et.r*255,0,255)\u003c\u003c16^gt(et.g*255,0,255)\u003c\u003c8^gt(et.b*255,0,255)\u003c\u003c0}getHexString(e=vi){return(\"000000\"+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=fn){Xt.fromWorkingColorSpace($r(this,et),t);const i=et.r,n=et.g,s=et.b,o=Math.max(i,n,s),a=Math.min(i,n,s);let l,c;const u=(a+o)/2;if(a===o)l=0,c=0;else{const h=o-a;switch(c=u\u003c=.5?h/(o+a):h/(2-o-a),o){case i:l=(n-s)/h+(n\u003cs?6:0);break;case n:l=(s-i)/h+2;break;case s:l=(i-n)/h+4;break}l/=6}return e.h=l,e.s=c,e.l=u,e}getRGB(e,t=fn){return Xt.fromWorkingColorSpace($r(this,et),t),e.r=et.r,e.g=et.g,e.b=et.b,e}getStyle(e=vi){return Xt.fromWorkingColorSpace($r(this,et),e),e!==vi?`color(${e} ${et.r} ${et.g} ${et.b})`:`rgb(${et.r*255|0},${et.g*255|0},${et.b*255|0})`}offsetHSL(e,t,i){return this.getHSL(qt),qt.h+=e,qt.s+=t,qt.l+=i,this.setHSL(qt.h,qt.s,qt.l),this}add(e){return this.r+=e.r,this.g+=e.g,this.b+=e.b,this}addColors(e,t){return this.r=e.r+t.r,this.g=e.g+t.g,this.b=e.b+t.b,this}addScalar(e){return this.r+=e,this.g+=e,this.b+=e,this}sub(e){return this.r=Math.max(0,this.r-e.r),this.g=Math.max(0,this.g-e.g),this.b=Math.max(0,this.b-e.b),this}multiply(e){return this.r*=e.r,this.g*=e.g,this.b*=e.b,this}multiplyScalar(e){return this.r*=e,this.g*=e,this.b*=e,this}lerp(e,t){return this.r+=(e.r-this.r)*t,this.g+=(e.g-this.g)*t,this.b+=(e.b-this.b)*t,this}lerpColors(e,t,i){return this.r=e.r+(t.r-e.r)*i,this.g=e.g+(t.g-e.g)*i,this.b=e.b+(t.b-e.b)*i,this}lerpHSL(e,t){this.getHSL(qt),e.getHSL(jr);const i=Ks(qt.h,jr.h,t),n=Ks(qt.s,jr.s,t),s=Ks(qt.l,jr.l,t);return this.setHSL(i,n,s),this}equals(e){return e.r===this.r\u0026\u0026e.g===this.g\u0026\u0026e.b===this.b}fromArray(e,t=0){return this.r=e[t],this.g=e[t+1],this.b=e[t+2],this}toArray(e=[],t=0){return e[t]=this.r,e[t+1]=this.g,e[t+2]=this.b,e}fromBufferAttribute(e,t){return this.r=e.getX(t),this.g=e.getY(t),this.b=e.getZ(t),e.normalized===!0\u0026\u0026(this.r/=255,this.g/=255,this.b/=255),this}toJSON(){return this.getHex()}*[Symbol.iterator](){yield this.r,yield this.g,yield this.b}}Le.NAMES=Nc;const Ia=class{constructor(){O(this,\"IS_BUILD\",!1);O(this,\"FLG_PARAM\",(this.IS_BUILD,!1));O(this,\"FLG_LOW_FPS\",(this.IS_BUILD,!1));O(this,\"FLG_DEBUG_TXT\",(this.IS_BUILD,!1));O(this,\"FLG_STATS\",(this.IS_BUILD,!1));O(this,\"PATH_IMG\",\"./assets/img/\");O(this,\"USE_TOUCH\",_e.instance.isTouchDevice());O(this,\"BREAKPOINT\",768);O(this,\"LG_PSD_WIDTH\",1600);O(this,\"XS_PSD_WIDTH\",750);O(this,\"IS_SIMPLE\",_e.instance.isPc()\u0026\u0026_e.instance.isSafari());O(this,\"IS_PC\",_e.instance.isPc());O(this,\"IS_SP\",_e.instance.isSp());O(this,\"IS_AND\",_e.instance.isAod());O(this,\"IS_TAB\",_e.instance.isIPad());O(this,\"USE_ROLLOVER\",_e.instance.isPc()\u0026\u0026!_e.instance.isIPad());O(this,\"NUM\",150);O(this,\"COLOR\",[new Le(14273725),new Le(13254972)])}static get instance(){return this._instance||(this._instance=new Ia),this._instance}};let Ei=Ia;O(Ei,\"_instance\");const Na=class{constructor(){O(this,\"_useFullScreen\",!1)}static get instance(){return this._instance||(this._instance=new Na),this._instance}ratio(){return window.devicePixelRatio||1}px(e){return e+\"px\"}useScreen(){return screen!=null}sw(){return window.innerWidth}sh(){return this._useFullScreen?screen.height:window.innerHeight}screenOffsetY(){return(window.innerHeight-this.sh())*.5}screen(){return window.innerWidth\u003c=Ei.instance.BREAKPOINT?Wn.XS:Wn.LG}isXS(){return this.screen()==Wn.XS}isLG(){return this.screen()==Wn.LG}val(e,t){return this.isXS()?e:t}r(e){const t=this.val(Ei.instance.XS_PSD_WIDTH,Ei.instance.LG_PSD_WIDTH);return e/t*this.sw()}sin1(e){return Math.sin(e)+Math.sin(2*e)}sin2(e){return(Math.sin(e)+Math.sin(2.2*e+5.52)+Math.sin(2.9*e+.93)+Math.sin(4.6*e+8.94))/4}};let Ve=Na;O(Ve,\"_instance\");class mf{constructor(e={}){O(this,\"opt\");O(this,\"el\");this.opt=e,this.el=this.opt.el}init(){}dispose(){this.opt=null,this.el=null}getEl(){return this.el}hasData(e){return this.getEl().getAttribute(e)!=null}getData(e,t){const i=this.getEl().getAttribute(e);return i==null?t:i}qs(e){return this.el.querySelector(e)}qsAll(e){return this.el.querySelectorAll(e)}hasClass(e){return this.el.classList.contains(e)}addClass(e){this.el.classList.add(e)}attachClass(e,t){e!=null\u0026\u0026e.classList.add(t)}detachClass(e,t){e!=null\u0026\u0026e.classList.remove(t)}removeClass(e){this.el.classList.remove(e)}getWidth(e){var i;let t=(i=document.defaultView)==null?void 0:i.getComputedStyle(e,null).width;return Number(t==null?void 0:t.replace(\"px\",\"\"))}getHeight(e){var t;if(e==null)return 0;{let i=(t=document.defaultView)==null?void 0:t.getComputedStyle(e,null).height;return Number(i==null?void 0:i.replace(\"px\",\"\"))}}getRect(e){var i;const t=(i=document.defaultView)==null?void 0:i.getComputedStyle(e,null);return t!=null?{width:Number(t.width.replace(\"px\",\"\")),height:Number(t.height.replace(\"px\",\"\"))}:{}}getDataNumber(e){const t=this.getEl().getAttribute(e);return t==null?0:Number(t)}getOffsetTop(e){const t=e.getBoundingClientRect();var i=window.pageYOffset||document.documentElement.scrollTop;return t.top+i}getOffset(e){const t=e.getBoundingClientRect();var i=window.pageYOffset||document.documentElement.scrollTop;return{y:t.top+i,x:t.left}}_call(e,t=null){e!=null\u0026\u0026(t!=null?e(t):e())}}const Oa=class{constructor(){O(this,\"cnt\",0);O(this,\"_updateList\",[]);O(this,\"play\",!0);O(this,\"_update\",()=\u003e{if(this.play){this.cnt++;for(var e of this._updateList)e!=null\u0026\u0026e();window.requestAnimationFrame(this._update)}});window.requestAnimationFrame(this._update)}static get instance(){return this._instance||(this._instance=new Oa),this._instance}add(e){this._updateList.push(e)}remove(e){const t=[];this._updateList.forEach(i=\u003e{i!=e\u0026\u0026t.push(i)}),this._updateList=t}};let $t=Oa;O($t,\"_instance\");class $o{constructor(e=0,t=0,i=0,n=0){O(this,\"x\",0);O(this,\"y\",0);O(this,\"width\",0);O(this,\"height\",0);this.x=e,this.y=t,this.width=i,this.height=n}}const Ua=class{constructor(){O(this,\"_list\",[]);O(this,\"_timer\",null);O(this,\"size\",new $o);O(this,\"oldSize\",new $o);O(this,\"_call\",()=\u003e{for(var e of this._list)e!=null\u0026\u0026e()});window.addEventListener(\"resize\",()=\u003e{this._eResize()},!1)}static get instance(){return this._instance||(this._instance=new Ua),this._instance}_eResize(){this._setStageSize(),this._timer===null\u0026\u0026(clearInterval(this._timer),this._timer=null),this._timer=setTimeout(()=\u003e{this._call(),this.oldSize.width=this.size.width,this.oldSize.height=this.size.height},300)}_setStageSize(){this.size.width=window.innerWidth,this.size.height=window.innerHeight}add(e){this._list.push(e)}remove(e){const t=[];this._list.forEach(i=\u003e{i!=e\u0026\u0026t.push(i)}),this._list=t}};let nr=Ua;O(nr,\"_instance\");class zi{constructor(e=0,t=0){O(this,\"x\",0);O(this,\"y\",0);this.x=e,this.y=t}set(e=0,t=0){this.x=e,this.y=t}copy(e){this.x=e.x,this.y=e.y}}class Oc extends mf{constructor(e={}){super(e);O(this,\"_updateHandler\");O(this,\"_resizeHandler\");O(this,\"_c\",0);O(this,\"_isEnter\",!1);O(this,\"_isOneEnter\",!1);O(this,\"_observer\");O(this,\"_elPos\",new zi(0,9999));O(this,\"_eRollOverHandler\");O(this,\"_eRollOutHandler\");(e.isDefEvent==null||e.isDefEvent)\u0026\u0026(this._updateHandler=this._update.bind(this),$t.instance.add(this._updateHandler),this._resizeHandler=this._resize.bind(this),nr.instance.add(this._resizeHandler))}init(){super.init()}_setHover(){this._eRollOverHandler=this._eRollOver.bind(this),this._eRollOutHandler=this._eRollOut.bind(this),this.getEl().addEventListener(\"mouseenter\",this._eRollOverHandler),this.getEl().addEventListener(\"mouseleave\",this._eRollOutHandler)}_disposeHover(){this._eRollOverHandler!=null\u0026\u0026(this.getEl().removeEventListener(\"mouseenter\",this._eRollOverHandler),this.getEl().removeEventListener(\"mouseleave\",this._eRollOutHandler),this._eRollOverHandler=null,this._eRollOutHandler=null)}_eRollOver(){}_eRollOut(){}_setObserver(){this._observer=new IntersectionObserver(e=\u003e{e!=null\u0026\u0026e.forEach(t=\u003e{t!=null\u0026\u0026t.intersectionRatio\u003e0?this._eEnter():this._eLeave()})},{root:null}),setTimeout(()=\u003e{if(this._observer!=null\u0026\u0026this._observer!=null){const e=this.getEl();e!=null\u0026\u0026this._observer.observe(e)}},100)}_eEnter(){this._isEnter=!0}_eLeave(){this._isEnter=!1}_disposeObserver(){(this._observer!=null||this._observer!=null)\u0026\u0026(this._observer.unobserve(this.getEl()),this._observer=null)}dispose(){this._updateHandler!=null\u0026\u0026($t.instance.remove(this._updateHandler),this._updateHandler=null),this._resizeHandler!=null\u0026\u0026(nr.instance.remove(this._resizeHandler),this._resizeHandler=null),this._disposeHover(),this._disposeObserver(),super.dispose()}css(e,t){const i=e.style;for(var n in t)i[n]=t[n]}_update(){this._c++}_resize(){}}function yi(r){if(r===void 0)throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");return r}function Uc(r,e){r.prototype=Object.create(e.prototype),r.prototype.constructor=r,r.__proto__=e}/*!\n * GSAP 3.9.1\n * https://greensock.com\n *\n * @license Copyright 2008-2021, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/var Dt={autoSleep:120,force3D:\"auto\",nullTargetWarn:1,units:{lineHeight:\"\"}},rr={duration:.5,overwrite:!1,delay:0},pa,Gt=1e8,ke=1/Gt,Qo=Math.PI*2,_f=Qo/4,gf=0,zc=Math.sqrt,xf=Math.cos,vf=Math.sin,st=function(e){return typeof e==\"string\"},rt=function(e){return typeof e==\"function\"},Ti=function(e){return typeof e==\"number\"},ma=function(e){return typeof e==\"undefined\"},Ai=function(e){return typeof e==\"object\"},wt=function(e){return e!==!1},Bc=function(){return typeof window!=\"undefined\"},Qr=function(e){return rt(e)||st(e)},Gc=typeof ArrayBuffer==\"function\"\u0026\u0026ArrayBuffer.isView||function(){},pt=Array.isArray,ea=/(?:-?\\.?\\d|\\.)+/gi,kc=/[-+=.]*\\d+[.e\\-+]*\\d*[e\\-+]*\\d*/g,Xn=/[-+=.]*\\d+[.e-]*\\d*[a-z%]*/g,ro=/[-+=.]*\\d+\\.?\\d*(?:e-|e\\+)?\\d*/gi,Hc=/[+-]=-?[.\\d]+/,Vc=/[^,'\"\\[\\]\\s]+/gi,yf=/[\\d.+\\-=]+(?:e[-+]\\d*)*/i,qe,si,ta,_a,It={},Rs={},Wc,Xc=function(e){return(Rs=sr(e,It))\u0026\u0026ui},ga=function(e,t){return console.warn(\"Invalid property\",e,\"set to\",t,\"Missing plugin? gsap.registerPlugin()\")},Cs=function(e,t){return!t\u0026\u0026console.warn(e)},qc=function(e,t){return e\u0026\u0026(It[e]=t)\u0026\u0026Rs\u0026\u0026(Rs[e]=t)||It},Ir=function(){return 0},xa={},Wi=[],ia={},Yc,Lt={},so={},wl=30,ws=[],va=\"\",ya=function(e){var t=e[0],i,n;if(Ai(t)||rt(t)||(e=[e]),!(i=(t._gsap||{}).harness)){for(n=ws.length;n--\u0026\u0026!ws[n].targetTest(t););i=ws[n]}for(n=e.length;n--;)e[n]\u0026\u0026(e[n]._gsap||(e[n]._gsap=new mu(e[n],i)))||e.splice(n,1);return e},_n=function(e){return e._gsap||ya(kt(e))[0]._gsap},Zc=function(e,t,i){return(i=e[t])\u0026\u0026rt(i)?e[t]():ma(i)\u0026\u0026e.getAttribute\u0026\u0026e.getAttribute(t)||i},Tt=function(e,t){return(e=e.split(\",\")).forEach(t)||e},Qe=function(e){return Math.round(e*1e5)/1e5||0},ft=function(e){return Math.round(e*1e7)/1e7||0},Sf=function(e,t){for(var i=t.length,n=0;e.indexOf(t[n])\u003c0\u0026\u0026++n\u003ci;);return n\u003ci},Ps=function(){var e=Wi.length,t=Wi.slice(0),i,n;for(ia={},Wi.length=0,i=0;i\u003ce;i++)n=t[i],n\u0026\u0026n._lazy\u0026\u0026(n.render(n._lazy[0],n._lazy[1],!0)._lazy=0)},Jc=function(e,t,i,n){Wi.length\u0026\u0026Ps(),e.render(t,i,n),Wi.length\u0026\u0026Ps()},Kc=function(e){var t=parseFloat(e);return(t||t===0)\u0026\u0026(e+\"\").match(Vc).length\u003c2?t:st(e)?e.trim():e},jc=function(e){return e},Vt=function(e,t){for(var i in t)i in e||(e[i]=t[i]);return e},Mf=function(e){return function(t,i){for(var n in i)n in t||n===\"duration\"\u0026\u0026e||n===\"ease\"||(t[n]=i[n])}},sr=function(e,t){for(var i in t)e[i]=t[i];return e},Tl=function r(e,t){for(var i in t)i!==\"__proto__\"\u0026\u0026i!==\"constructor\"\u0026\u0026i!==\"prototype\"\u0026\u0026(e[i]=Ai(t[i])?r(e[i]||(e[i]={}),t[i]):t[i]);return e},Ls=function(e,t){var i={},n;for(n in e)n in t||(i[n]=e[n]);return i},br=function(e){var t=e.parent||qe,i=e.keyframes?Mf(pt(e.keyframes)):Vt;if(wt(e.inherit))for(;t;)i(e,t.vars.defaults),t=t.parent||t._dp;return e},Ef=function(e,t){for(var i=e.length,n=i===t.length;n\u0026\u0026i--\u0026\u0026e[i]===t[i];);return i\u003c0},bf=function(e,t,i,n,s){i===void 0\u0026\u0026(i=\"_first\"),n===void 0\u0026\u0026(n=\"_last\");var o=e[n],a;if(s)for(a=t[s];o\u0026\u0026o[s]\u003ea;)o=o._prev;return o?(t._next=o._next,o._next=t):(t._next=e[i],e[i]=t),t._next?t._next._prev=t:e[n]=t,t._prev=o,t.parent=t._dp=e,t},Gs=function(e,t,i,n){i===void 0\u0026\u0026(i=\"_first\"),n===void 0\u0026\u0026(n=\"_last\");var s=t._prev,o=t._next;s?s._next=o:e[i]===t\u0026\u0026(e[i]=o),o?o._prev=s:e[n]===t\u0026\u0026(e[n]=s),t._next=t._prev=t.parent=null},bi=function(e,t){e.parent\u0026\u0026(!t||e.parent.autoRemoveChildren)\u0026\u0026e.parent.remove(e),e._act=0},gn=function(e,t){if(e\u0026\u0026(!t||t._end\u003ee._dur||t._start\u003c0))for(var i=e;i;)i._dirty=1,i=i.parent;return e},wf=function(e){for(var t=e.parent;t\u0026\u0026t.parent;)t._dirty=1,t.totalDuration(),t=t.parent;return e},Tf=function r(e){return!e||e._ts\u0026\u0026r(e.parent)},Al=function(e){return e._repeat?or(e._tTime,e=e.duration()+e._rDelay)*e:0},or=function(e,t){var i=Math.floor(e/=t);return e\u0026\u0026i===e?i-1:i},Ds=function(e,t){return(e-t._start)*t._ts+(t._ts\u003e=0?0:t._dirty?t.totalDuration():t._tDur)},ks=function(e){return e._end=ft(e._start+(e._tDur/Math.abs(e._ts||e._rts||ke)||0))},$c=function(e,t){var i=e._dp;return i\u0026\u0026i.smoothChildTiming\u0026\u0026e._ts\u0026\u0026(e._start=ft(i._time-(e._ts\u003e0?t/e._ts:((e._dirty?e.totalDuration():e._tDur)-t)/-e._ts)),ks(e),i._dirty||gn(i,e)),e},Qc=function(e,t){var i;if((t._time||t._initted\u0026\u0026!t._dur)\u0026\u0026(i=Ds(e.rawTime(),t),(!t._dur||Vr(0,t.totalDuration(),i)-t._tTime\u003eke)\u0026\u0026t.render(i,!0)),gn(e,t)._dp\u0026\u0026e._initted\u0026\u0026e._time\u003e=e._dur\u0026\u0026e._ts){if(e._dur\u003ce.duration())for(i=e;i._dp;)i.rawTime()\u003e=0\u0026\u0026i.totalTime(i._tTime),i=i._dp;e._zTime=-ke}},ai=function(e,t,i,n){return t.parent\u0026\u0026bi(t),t._start=ft((Ti(i)?i:i||e!==qe?Ot(e,i,t):e._time)+t._delay),t._end=ft(t._start+(t.totalDuration()/Math.abs(t.timeScale())||0)),bf(e,t,\"_first\",\"_last\",e._sort?\"_start\":0),na(t)||(e._recent=t),n||Qc(e,t),e},eu=function(e,t){return(It.ScrollTrigger||ga(\"scrollTrigger\",t))\u0026\u0026It.ScrollTrigger.create(t,e)},tu=function(e,t,i,n){if(Jf(e,t),!e._initted)return 1;if(!i\u0026\u0026e._pt\u0026\u0026(e._dur\u0026\u0026e.vars.lazy!==!1||!e._dur\u0026\u0026e.vars.lazy)\u0026\u0026Yc!==Bt.frame)return Wi.push(e),e._lazy=[t,n],1},Af=function r(e){var t=e.parent;return t\u0026\u0026t._ts\u0026\u0026t._initted\u0026\u0026!t._lock\u0026\u0026(t.rawTime()\u003c0||r(t))},na=function(e){var t=e.data;return t===\"isFromStart\"||t===\"isStart\"},Rf=function(e,t,i,n){var s=e.ratio,o=t\u003c0||!t\u0026\u0026(!e._start\u0026\u0026Af(e)\u0026\u0026!(!e._initted\u0026\u0026na(e))||(e._ts\u003c0||e._dp._ts\u003c0)\u0026\u0026!na(e))?0:1,a=e._rDelay,l=0,c,u,h;if(a\u0026\u0026e._repeat\u0026\u0026(l=Vr(0,e._tDur,t),u=or(l,a),e._yoyo\u0026\u0026u\u00261\u0026\u0026(o=1-o),u!==or(e._tTime,a)\u0026\u0026(s=1-o,e.vars.repeatRefresh\u0026\u0026e._initted\u0026\u0026e.invalidate())),o!==s||n||e._zTime===ke||!t\u0026\u0026e._zTime){if(!e._initted\u0026\u0026tu(e,t,n,i))return;for(h=e._zTime,e._zTime=t||(i?ke:0),i||(i=t\u0026\u0026!h),e.ratio=o,e._from\u0026\u0026(o=1-o),e._time=0,e._tTime=l,c=e._pt;c;)c.r(o,c.d),c=c._next;e._startAt\u0026\u0026t\u003c0\u0026\u0026e._startAt.render(t,!0,!0),e._onUpdate\u0026\u0026!i\u0026\u0026Ht(e,\"onUpdate\"),l\u0026\u0026e._repeat\u0026\u0026!i\u0026\u0026e.parent\u0026\u0026Ht(e,\"onRepeat\"),(t\u003e=e._tDur||t\u003c0)\u0026\u0026e.ratio===o\u0026\u0026(o\u0026\u0026bi(e,1),i||(Ht(e,o?\"onComplete\":\"onReverseComplete\",!0),e._prom\u0026\u0026e._prom()))}else e._zTime||(e._zTime=t)},Cf=function(e,t,i){var n;if(i\u003et)for(n=e._first;n\u0026\u0026n._start\u003c=i;){if(n.data===\"isPause\"\u0026\u0026n._start\u003et)return n;n=n._next}else for(n=e._last;n\u0026\u0026n._start\u003e=i;){if(n.data===\"isPause\"\u0026\u0026n._start\u003ct)return n;n=n._prev}},ar=function(e,t,i,n){var s=e._repeat,o=ft(t)||0,a=e._tTime/e._tDur;return a\u0026\u0026!n\u0026\u0026(e._time*=o/e._dur),e._dur=o,e._tDur=s?s\u003c0?1e10:ft(o*(s+1)+e._rDelay*s):o,a\u003e0\u0026\u0026!n?$c(e,e._tTime=e._tDur*a):e.parent\u0026\u0026ks(e),i||gn(e.parent,e),e},Rl=function(e){return e instanceof bt?gn(e):ar(e,e._dur)},Pf={_start:0,endTime:Ir,totalDuration:Ir},Ot=function r(e,t,i){var n=e.labels,s=e._recent||Pf,o=e.duration()\u003e=Gt?s.endTime(!1):e._dur,a,l,c;return st(t)\u0026\u0026(isNaN(t)||t in n)?(l=t.charAt(0),c=t.substr(-1)===\"%\",a=t.indexOf(\"=\"),l===\"\u003c\"||l===\"\u003e\"?(a\u003e=0\u0026\u0026(t=t.replace(/=/,\"\")),(l===\"\u003c\"?s._start:s.endTime(s._repeat\u003e=0))+(parseFloat(t.substr(1))||0)*(c?(a\u003c0?s:i).totalDuration()/100:1)):a\u003c0?(t in n||(n[t]=o),n[t]):(l=parseFloat(t.charAt(a-1)+t.substr(a+1)),c\u0026\u0026i\u0026\u0026(l=l/100*(pt(i)?i[0]:i).totalDuration()),a\u003e1?r(e,t.substr(0,a-1),i)+l:o+l)):t==null?o:+t},wr=function(e,t,i){var n=Ti(t[1]),s=(n?2:1)+(e\u003c2?0:1),o=t[s],a,l;if(n\u0026\u0026(o.duration=t[1]),o.parent=i,e){for(a=o,l=i;l\u0026\u0026!(\"immediateRender\"in a);)a=l.vars.defaults||{},l=wt(l.vars.inherit)\u0026\u0026l.parent;o.immediateRender=wt(a.immediateRender),e\u003c2?o.runBackwards=1:o.startAt=t[s-1]}return new nt(t[0],o,t[s+1])},ji=function(e,t){return e||e===0?t(e):t},Vr=function(e,t,i){return i\u003ce?e:i\u003et?t:i},Et=function(e,t){return!st(e)||!(t=yf.exec(e))?\"\":e.substr(t.index+t[0].length)},Lf=function(e,t,i){return ji(i,function(n){return Vr(e,t,n)})},ra=[].slice,iu=function(e,t){return e\u0026\u0026Ai(e)\u0026\u0026\"length\"in e\u0026\u0026(!t\u0026\u0026!e.length||e.length-1 in e\u0026\u0026Ai(e[0]))\u0026\u0026!e.nodeType\u0026\u0026e!==si},Df=function(e,t,i){return i===void 0\u0026\u0026(i=[]),e.forEach(function(n){var s;return st(n)\u0026\u0026!t||iu(n,1)?(s=i).push.apply(s,kt(n)):i.push(n)})||i},kt=function(e,t,i){return st(e)\u0026\u0026!i\u0026\u0026(ta||!lr())?ra.call((t||_a).querySelectorAll(e),0):pt(e)?Df(e,i):iu(e)?ra.call(e,0):e?[e]:[]},Ff=function(e){return e=kt(e)[0]||Cs(\"Invalid scope\")||{},function(t){var i=e.current||e.nativeElement||e;return kt(t,i.querySelectorAll?i:i===e?Cs(\"Invalid scope\")||_a.createElement(\"div\"):e)}},nu=function(e){return e.sort(function(){return .5-Math.random()})},ru=function(e){if(rt(e))return e;var t=Ai(e)?e:{each:e},i=xn(t.ease),n=t.from||0,s=parseFloat(t.base)||0,o={},a=n\u003e0\u0026\u0026n\u003c1,l=isNaN(n)||a,c=t.axis,u=n,h=n;return st(n)?u=h={center:.5,edges:.5,end:1}[n]||0:!a\u0026\u0026l\u0026\u0026(u=n[0],h=n[1]),function(f,m,_){var d=(_||t).length,p=o[d],g,S,A,b,v,w,R,x,E;if(!p){if(E=t.grid===\"auto\"?0:(t.grid||[1,Gt])[1],!E){for(R=-Gt;R\u003c(R=_[E++].getBoundingClientRect().left)\u0026\u0026E\u003cd;);E--}for(p=o[d]=[],g=l?Math.min(E,d)*u-.5:n%E,S=E===Gt?0:l?d*h/E-.5:n/E|0,R=0,x=Gt,w=0;w\u003cd;w++)A=w%E-g,b=S-(w/E|0),p[w]=v=c?Math.abs(c===\"y\"?b:A):zc(A*A+b*b),v\u003eR\u0026\u0026(R=v),v\u003cx\u0026\u0026(x=v);n===\"random\"\u0026\u0026nu(p),p.max=R-x,p.min=x,p.v=d=(parseFloat(t.amount)||parseFloat(t.each)*(E\u003ed?d-1:c?c===\"y\"?d/E:E:Math.max(E,d/E))||0)*(n===\"edges\"?-1:1),p.b=d\u003c0?s-d:s,p.u=Et(t.amount||t.each)||0,i=i\u0026\u0026d\u003c0?fu(i):i}return d=(p[f]-p.min)/p.max||0,ft(p.b+(i?i(d):d)*p.v)+p.u}},sa=function(e){var t=Math.pow(10,((e+\"\").split(\".\")[1]||\"\").length);return function(i){var n=Math.round(parseFloat(i)/e)*e*t;return(n-n%1)/t+(Ti(i)?0:Et(i))}},su=function(e,t){var i=pt(e),n,s;return!i\u0026\u0026Ai(e)\u0026\u0026(n=i=e.radius||Gt,e.values?(e=kt(e.values),(s=!Ti(e[0]))\u0026\u0026(n*=n)):e=sa(e.increment)),ji(t,i?rt(e)?function(o){return s=e(o),Math.abs(s-o)\u003c=n?s:o}:function(o){for(var a=parseFloat(s?o.x:o),l=parseFloat(s?o.y:0),c=Gt,u=0,h=e.length,f,m;h--;)s?(f=e[h].x-a,m=e[h].y-l,f=f*f+m*m):f=Math.abs(e[h]-a),f\u003cc\u0026\u0026(c=f,u=h);return u=!n||c\u003c=n?e[u]:o,s||u===o||Ti(o)?u:u+Et(o)}:sa(e))},ou=function(e,t,i,n){return ji(pt(e)?!t:i===!0?!!(i=0):!n,function(){return pt(e)?e[~~(Math.random()*e.length)]:(i=i||1e-5)\u0026\u0026(n=i\u003c1?Math.pow(10,(i+\"\").length-2):1)\u0026\u0026Math.floor(Math.round((e-i/2+Math.random()*(t-e+i*.99))/i)*i*n)/n})},If=function(){for(var e=arguments.length,t=new Array(e),i=0;i\u003ce;i++)t[i]=arguments[i];return function(n){return t.reduce(function(s,o){return o(s)},n)}},Nf=function(e,t){return function(i){return e(parseFloat(i))+(t||Et(i))}},Of=function(e,t,i){return lu(e,t,0,1,i)},au=function(e,t,i){return ji(i,function(n){return e[~~t(n)]})},Uf=function r(e,t,i){var n=t-e;return pt(e)?au(e,r(0,e.length),t):ji(i,function(s){return(n+(s-e)%n)%n+e})},zf=function r(e,t,i){var n=t-e,s=n*2;return pt(e)?au(e,r(0,e.length-1),t):ji(i,function(o){return o=(s+(o-e)%s)%s||0,e+(o\u003en?s-o:o)})},Nr=function(e){for(var t=0,i=\"\",n,s,o,a;~(n=e.indexOf(\"random(\",t));)o=e.indexOf(\")\",n),a=e.charAt(n+7)===\"[\",s=e.substr(n+7,o-n-7).match(a?Vc:ea),i+=e.substr(t,n-t)+ou(a?s:+s[0],a?0:+s[1],+s[2]||1e-5),t=o+1;return i+e.substr(t,e.length-t)},lu=function(e,t,i,n,s){var o=t-e,a=n-i;return ji(s,function(l){return i+((l-e)/o*a||0)})},Bf=function r(e,t,i,n){var s=isNaN(e+t)?0:function(m){return(1-m)*e+m*t};if(!s){var o=st(e),a={},l,c,u,h,f;if(i===!0\u0026\u0026(n=1)\u0026\u0026(i=null),o)e={p:e},t={p:t};else if(pt(e)\u0026\u0026!pt(t)){for(u=[],h=e.length,f=h-2,c=1;c\u003ch;c++)u.push(r(e[c-1],e[c]));h--,s=function(_){_*=h;var d=Math.min(f,~~_);return u[d](_-d)},i=t}else n||(e=sr(pt(e)?[]:{},e));if(!u){for(l in t)Sa.call(a,e,l,\"get\",t[l]);s=function(_){return ba(_,a)||(o?e.p:e)}}}return ji(i,s)},Cl=function(e,t,i){var n=e.labels,s=Gt,o,a,l;for(o in n)a=n[o]-t,a\u003c0==!!i\u0026\u0026a\u0026\u0026s\u003e(a=Math.abs(a))\u0026\u0026(l=o,s=a);return l},Ht=function(e,t,i){var n=e.vars,s=n[t],o,a;if(!!s)return o=n[t+\"Params\"],a=n.callbackScope||e,i\u0026\u0026Wi.length\u0026\u0026Ps(),o?s.apply(a,o):s.call(a)},Sr=function(e){return bi(e),e.scrollTrigger\u0026\u0026e.scrollTrigger.kill(!1),e.progress()\u003c1\u0026\u0026Ht(e,\"onInterrupt\"),e},qn,Gf=function(e){e=!e.name\u0026\u0026e.default||e;var t=e.name,i=rt(e),n=t\u0026\u0026!i\u0026\u0026e.init?function(){this._props=[]}:e,s={init:Ir,render:ba,add:Sa,kill:id,modifier:td,rawVars:0},o={targetTest:0,get:0,getSetter:Ea,aliases:{},register:0};if(lr(),e!==n){if(Lt[t])return;Vt(n,Vt(Ls(e,s),o)),sr(n.prototype,sr(s,Ls(e,o))),Lt[n.prop=t]=n,e.targetTest\u0026\u0026(ws.push(n),xa[t]=1),t=(t===\"css\"?\"CSS\":t.charAt(0).toUpperCase()+t.substr(1))+\"Plugin\"}qc(t,n),e.register\u0026\u0026e.register(ui,n,At)},Ge=255,Mr={aqua:[0,Ge,Ge],lime:[0,Ge,0],silver:[192,192,192],black:[0,0,0],maroon:[128,0,0],teal:[0,128,128],blue:[0,0,Ge],navy:[0,0,128],white:[Ge,Ge,Ge],olive:[128,128,0],yellow:[Ge,Ge,0],orange:[Ge,165,0],gray:[128,128,128],purple:[128,0,128],green:[0,128,0],red:[Ge,0,0],pink:[Ge,192,203],cyan:[0,Ge,Ge],transparent:[Ge,Ge,Ge,0]},oo=function(e,t,i){return e+=e\u003c0?1:e\u003e1?-1:0,(e*6\u003c1?t+(i-t)*e*6:e\u003c.5?i:e*3\u003c2?t+(i-t)*(2/3-e)*6:t)*Ge+.5|0},cu=function(e,t,i){var n=e?Ti(e)?[e\u003e\u003e16,e\u003e\u003e8\u0026Ge,e\u0026Ge]:0:Mr.black,s,o,a,l,c,u,h,f,m,_;if(!n){if(e.substr(-1)===\",\"\u0026\u0026(e=e.substr(0,e.length-1)),Mr[e])n=Mr[e];else if(e.charAt(0)===\"#\"){if(e.length\u003c6\u0026\u0026(s=e.charAt(1),o=e.charAt(2),a=e.charAt(3),e=\"#\"+s+s+o+o+a+a+(e.length===5?e.charAt(4)+e.charAt(4):\"\")),e.length===9)return n=parseInt(e.substr(1,6),16),[n\u003e\u003e16,n\u003e\u003e8\u0026Ge,n\u0026Ge,parseInt(e.substr(7),16)/255];e=parseInt(e.substr(1),16),n=[e\u003e\u003e16,e\u003e\u003e8\u0026Ge,e\u0026Ge]}else if(e.substr(0,3)===\"hsl\"){if(n=_=e.match(ea),!t)l=+n[0]%360/360,c=+n[1]/100,u=+n[2]/100,o=u\u003c=.5?u*(c+1):u+c-u*c,s=u*2-o,n.length\u003e3\u0026\u0026(n[3]*=1),n[0]=oo(l+1/3,s,o),n[1]=oo(l,s,o),n[2]=oo(l-1/3,s,o);else if(~e.indexOf(\"=\"))return n=e.match(kc),i\u0026\u0026n.length\u003c4\u0026\u0026(n[3]=1),n}else n=e.match(ea)||Mr.transparent;n=n.map(Number)}return t\u0026\u0026!_\u0026\u0026(s=n[0]/Ge,o=n[1]/Ge,a=n[2]/Ge,h=Math.max(s,o,a),f=Math.min(s,o,a),u=(h+f)/2,h===f?l=c=0:(m=h-f,c=u\u003e.5?m/(2-h-f):m/(h+f),l=h===s?(o-a)/m+(o\u003ca?6:0):h===o?(a-s)/m+2:(s-o)/m+4,l*=60),n[0]=~~(l+.5),n[1]=~~(c*100+.5),n[2]=~~(u*100+.5)),i\u0026\u0026n.length\u003c4\u0026\u0026(n[3]=1),n},uu=function(e){var t=[],i=[],n=-1;return e.split(Xi).forEach(function(s){var o=s.match(Xn)||[];t.push.apply(t,o),i.push(n+=o.length+1)}),t.c=i,t},Pl=function(e,t,i){var n=\"\",s=(e+n).match(Xi),o=t?\"hsla(\":\"rgba(\",a=0,l,c,u,h;if(!s)return e;if(s=s.map(function(f){return(f=cu(f,t,1))\u0026\u0026o+(t?f[0]+\",\"+f[1]+\"%,\"+f[2]+\"%,\"+f[3]:f.join(\",\"))+\")\"}),i\u0026\u0026(u=uu(e),l=i.c,l.join(n)!==u.c.join(n)))for(c=e.replace(Xi,\"1\").split(Xn),h=c.length-1;a\u003ch;a++)n+=c[a]+(~l.indexOf(a)?s.shift()||o+\"0,0,0,0)\":(u.length?u:s.length?s:i).shift());if(!c)for(c=e.split(Xi),h=c.length-1;a\u003ch;a++)n+=c[a]+s[a];return n+c[h]},Xi=function(){var r=\"(?:\\\\b(?:(?:rgb|rgba|hsl|hsla)\\\\(.+?\\\\))|\\\\B#(?:[0-9a-f]{3,4}){1,2}\\\\b\",e;for(e in Mr)r+=\"|\"+e+\"\\\\b\";return new RegExp(r+\")\",\"gi\")}(),kf=/hsl[a]?\\(/,hu=function(e){var t=e.join(\" \"),i;if(Xi.lastIndex=0,Xi.test(t))return i=kf.test(t),e[1]=Pl(e[1],i),e[0]=Pl(e[0],i,uu(e[1])),!0},Fs,Bt=function(){var r=Date.now,e=500,t=33,i=r(),n=i,s=1e3/240,o=s,a=[],l,c,u,h,f,m,_=function d(p){var g=r()-n,S=p===!0,A,b,v,w;if(g\u003ee\u0026\u0026(i+=g-t),n+=g,v=n-i,A=v-o,(A\u003e0||S)\u0026\u0026(w=++h.frame,f=v-h.time*1e3,h.time=v=v/1e3,o+=A+(A\u003e=s?4:s-A),b=1),S||(l=c(d)),b)for(m=0;m\u003ca.length;m++)a[m](v,f,w,p)};return h={time:0,frame:0,tick:function(){_(!0)},deltaRatio:function(p){return f/(1e3/(p||60))},wake:function(){Wc\u0026\u0026(!ta\u0026\u0026Bc()\u0026\u0026(si=ta=window,_a=si.document||{},It.gsap=ui,(si.gsapVersions||(si.gsapVersions=[])).push(ui.version),Xc(Rs||si.GreenSockGlobals||!si.gsap\u0026\u0026si||{}),u=si.requestAnimationFrame),l\u0026\u0026h.sleep(),c=u||function(p){return setTimeout(p,o-h.time*1e3+1|0)},Fs=1,_(2))},sleep:function(){(u?si.cancelAnimationFrame:clearTimeout)(l),Fs=0,c=Ir},lagSmoothing:function(p,g){e=p||1/ke,t=Math.min(g,e,0)},fps:function(p){s=1e3/(p||240),o=h.time*1e3+s},add:function(p){a.indexOf(p)\u003c0\u0026\u0026a.push(p),lr()},remove:function(p,g){~(g=a.indexOf(p))\u0026\u0026a.splice(g,1)\u0026\u0026m\u003e=g\u0026\u0026m--},_listeners:a},h}(),lr=function(){return!Fs\u0026\u0026Bt.wake()},Pe={},Hf=/^[\\d.\\-M][\\d.\\-,\\s]/,Vf=/[\"']/g,Wf=function(e){for(var t={},i=e.substr(1,e.length-3).split(\":\"),n=i[0],s=1,o=i.length,a,l,c;s\u003co;s++)l=i[s],a=s!==o-1?l.lastIndexOf(\",\"):l.length,c=l.substr(0,a),t[n]=isNaN(c)?c.replace(Vf,\"\").trim():+c,n=l.substr(a+1).trim();return t},Xf=function(e){var t=e.indexOf(\"(\")+1,i=e.indexOf(\")\"),n=e.indexOf(\"(\",t);return e.substring(t,~n\u0026\u0026n\u003ci?e.indexOf(\")\",i+1):i)},qf=function(e){var t=(e+\"\").split(\"(\"),i=Pe[t[0]];return i\u0026\u0026t.length\u003e1\u0026\u0026i.config?i.config.apply(null,~e.indexOf(\"{\")?[Wf(t[1])]:Xf(e).split(\",\").map(Kc)):Pe._CE\u0026\u0026Hf.test(e)?Pe._CE(\"\",e):i},fu=function(e){return function(t){return 1-e(1-t)}},du=function r(e,t){for(var i=e._first,n;i;)i instanceof bt?r(i,t):i.vars.yoyoEase\u0026\u0026(!i._yoyo||!i._repeat)\u0026\u0026i._yoyo!==t\u0026\u0026(i.timeline?r(i.timeline,t):(n=i._ease,i._ease=i._yEase,i._yEase=n,i._yoyo=t)),i=i._next},xn=function(e,t){return e\u0026\u0026(rt(e)?e:Pe[e]||qf(e))||t},Mn=function(e,t,i,n){i===void 0\u0026\u0026(i=function(l){return 1-t(1-l)}),n===void 0\u0026\u0026(n=function(l){return l\u003c.5?t(l*2)/2:1-t((1-l)*2)/2});var s={easeIn:t,easeOut:i,easeInOut:n},o;return Tt(e,function(a){Pe[a]=It[a]=s,Pe[o=a.toLowerCase()]=i;for(var l in s)Pe[o+(l===\"easeIn\"?\".in\":l===\"easeOut\"?\".out\":\".inOut\")]=Pe[a+\".\"+l]=s[l]}),s},pu=function(e){return function(t){return t\u003c.5?(1-e(1-t*2))/2:.5+e((t-.5)*2)/2}},ao=function r(e,t,i){var n=t\u003e=1?t:1,s=(i||(e?.3:.45))/(t\u003c1?t:1),o=s/Qo*(Math.asin(1/n)||0),a=function(u){return u===1?1:n*Math.pow(2,-10*u)*vf((u-o)*s)+1},l=e===\"out\"?a:e===\"in\"?function(c){return 1-a(1-c)}:pu(a);return s=Qo/s,l.config=function(c,u){return r(e,c,u)},l},lo=function r(e,t){t===void 0\u0026\u0026(t=1.70158);var i=function(o){return o?--o*o*((t+1)*o+t)+1:0},n=e===\"out\"?i:e===\"in\"?function(s){return 1-i(1-s)}:pu(i);return n.config=function(s){return r(e,s)},n};Tt(\"Linear,Quad,Cubic,Quart,Quint,Strong\",function(r,e){var t=e\u003c5?e+1:e;Mn(r+\",Power\"+(t-1),e?function(i){return Math.pow(i,t)}:function(i){return i},function(i){return 1-Math.pow(1-i,t)},function(i){return i\u003c.5?Math.pow(i*2,t)/2:1-Math.pow((1-i)*2,t)/2})});Pe.Linear.easeNone=Pe.none=Pe.Linear.easeIn;Mn(\"Elastic\",ao(\"in\"),ao(\"out\"),ao());(function(r,e){var t=1/e,i=2*t,n=2.5*t,s=function(a){return a\u003ct?r*a*a:a\u003ci?r*Math.pow(a-1.5/e,2)+.75:a\u003cn?r*(a-=2.25/e)*a+.9375:r*Math.pow(a-2.625/e,2)+.984375};Mn(\"Bounce\",function(o){return 1-s(1-o)},s)})(7.5625,2.75);Mn(\"Expo\",function(r){return r?Math.pow(2,10*(r-1)):0});Mn(\"Circ\",function(r){return-(zc(1-r*r)-1)});Mn(\"Sine\",function(r){return r===1?1:-xf(r*_f)+1});Mn(\"Back\",lo(\"in\"),lo(\"out\"),lo());Pe.SteppedEase=Pe.steps=It.SteppedEase={config:function(e,t){e===void 0\u0026\u0026(e=1);var i=1/e,n=e+(t?0:1),s=t?1:0,o=1-ke;return function(a){return((n*Vr(0,o,a)|0)+s)*i}}};rr.ease=Pe[\"quad.out\"];Tt(\"onComplete,onUpdate,onStart,onRepeat,onReverseComplete,onInterrupt\",function(r){return va+=r+\",\"+r+\"Params,\"});var mu=function(e,t){this.id=gf++,e._gsap=this,this.target=e,this.harness=t,this.get=t?t.get:Zc,this.set=t?t.getSetter:Ea},Or=function(){function r(t){this.vars=t,this._delay=+t.delay||0,(this._repeat=t.repeat===1/0?-2:t.repeat||0)\u0026\u0026(this._rDelay=t.repeatDelay||0,this._yoyo=!!t.yoyo||!!t.yoyoEase),this._ts=1,ar(this,+t.duration,1,1),this.data=t.data,Fs||Bt.wake()}var e=r.prototype;return e.delay=function(i){return i||i===0?(this.parent\u0026\u0026this.parent.smoothChildTiming\u0026\u0026this.startTime(this._start+i-this._delay),this._delay=i,this):this._delay},e.duration=function(i){return arguments.length?this.totalDuration(this._repeat\u003e0?i+(i+this._rDelay)*this._repeat:i):this.totalDuration()\u0026\u0026this._dur},e.totalDuration=function(i){return arguments.length?(this._dirty=0,ar(this,this._repeat\u003c0?i:(i-this._repeat*this._rDelay)/(this._repeat+1))):this._tDur},e.totalTime=function(i,n){if(lr(),!arguments.length)return this._tTime;var s=this._dp;if(s\u0026\u0026s.smoothChildTiming\u0026\u0026this._ts){for($c(this,i),!s._dp||s.parent||Qc(s,this);s\u0026\u0026s.parent;)s.parent._time!==s._start+(s._ts\u003e=0?s._tTime/s._ts:(s.totalDuration()-s._tTime)/-s._ts)\u0026\u0026s.totalTime(s._tTime,!0),s=s.parent;!this.parent\u0026\u0026this._dp.autoRemoveChildren\u0026\u0026(this._ts\u003e0\u0026\u0026i\u003cthis._tDur||this._ts\u003c0\u0026\u0026i\u003e0||!this._tDur\u0026\u0026!i)\u0026\u0026ai(this._dp,this,this._start-this._delay)}return(this._tTime!==i||!this._dur\u0026\u0026!n||this._initted\u0026\u0026Math.abs(this._zTime)===ke||!i\u0026\u0026!this._initted\u0026\u0026(this.add||this._ptLookup))\u0026\u0026(this._ts||(this._pTime=i),Jc(this,i,n)),this},e.time=function(i,n){return arguments.length?this.totalTime(Math.min(this.totalDuration(),i+Al(this))%(this._dur+this._rDelay)||(i?this._dur:0),n):this._time},e.totalProgress=function(i,n){return arguments.length?this.totalTime(this.totalDuration()*i,n):this.totalDuration()?Math.min(1,this._tTime/this._tDur):this.ratio},e.progress=function(i,n){return arguments.length?this.totalTime(this.duration()*(this._yoyo\u0026\u0026!(this.iteration()\u00261)?1-i:i)+Al(this),n):this.duration()?Math.min(1,this._time/this._dur):this.ratio},e.iteration=function(i,n){var s=this.duration()+this._rDelay;return arguments.length?this.totalTime(this._time+(i-1)*s,n):this._repeat?or(this._tTime,s)+1:1},e.timeScale=function(i){if(!arguments.length)return this._rts===-ke?0:this._rts;if(this._rts===i)return this;var n=this.parent\u0026\u0026this._ts?Ds(this.parent._time,this):this._tTime;return this._rts=+i||0,this._ts=this._ps||i===-ke?0:this._rts,wf(this.totalTime(Vr(-this._delay,this._tDur,n),!0)),ks(this),this},e.paused=function(i){return arguments.length?(this._ps!==i\u0026\u0026(this._ps=i,i?(this._pTime=this._tTime||Math.max(-this._delay,this.rawTime()),this._ts=this._act=0):(lr(),this._ts=this._rts,this.totalTime(this.parent\u0026\u0026!this.parent.smoothChildTiming?this.rawTime():this._tTime||this._pTime,this.progress()===1\u0026\u0026Math.abs(this._zTime)!==ke\u0026\u0026(this._tTime-=ke)))),this):this._ps},e.startTime=function(i){if(arguments.length){this._start=i;var n=this.parent||this._dp;return n\u0026\u0026(n._sort||!this.parent)\u0026\u0026ai(n,this,i-this._delay),this}return this._start},e.endTime=function(i){return this._start+(wt(i)?this.totalDuration():this.duration())/Math.abs(this._ts||1)},e.rawTime=function(i){var n=this.parent||this._dp;return n?i\u0026\u0026(!this._ts||this._repeat\u0026\u0026this._time\u0026\u0026this.totalProgress()\u003c1)?this._tTime%(this._dur+this._rDelay):this._ts?Ds(n.rawTime(i),this):this._tTime:this._tTime},e.globalTime=function(i){for(var n=this,s=arguments.length?i:n.rawTime();n;)s=n._start+s/(n._ts||1),n=n._dp;return s},e.repeat=function(i){return arguments.length?(this._repeat=i===1/0?-2:i,Rl(this)):this._repeat===-2?1/0:this._repeat},e.repeatDelay=function(i){if(arguments.length){var n=this._time;return this._rDelay=i,Rl(this),n?this.time(n):this}return this._rDelay},e.yoyo=function(i){return arguments.length?(this._yoyo=i,this):this._yoyo},e.seek=function(i,n){return this.totalTime(Ot(this,i),wt(n))},e.restart=function(i,n){return this.play().totalTime(i?-this._delay:0,wt(n))},e.play=function(i,n){return i!=null\u0026\u0026this.seek(i,n),this.reversed(!1).paused(!1)},e.reverse=function(i,n){return i!=null\u0026\u0026this.seek(i||this.totalDuration(),n),this.reversed(!0).paused(!1)},e.pause=function(i,n){return i!=null\u0026\u0026this.seek(i,n),this.paused(!0)},e.resume=function(){return this.paused(!1)},e.reversed=function(i){return arguments.length?(!!i!==this.reversed()\u0026\u0026this.timeScale(-this._rts||(i?-ke:0)),this):this._rts\u003c0},e.invalidate=function(){return this._initted=this._act=0,this._zTime=-ke,this},e.isActive=function(){var i=this.parent||this._dp,n=this._start,s;return!!(!i||this._ts\u0026\u0026this._initted\u0026\u0026i.isActive()\u0026\u0026(s=i.rawTime(!0))\u003e=n\u0026\u0026s\u003cthis.endTime(!0)-ke)},e.eventCallback=function(i,n,s){var o=this.vars;return arguments.length\u003e1?(n?(o[i]=n,s\u0026\u0026(o[i+\"Params\"]=s),i===\"onUpdate\"\u0026\u0026(this._onUpdate=n)):delete o[i],this):o[i]},e.then=function(i){var n=this;return new Promise(function(s){var o=rt(i)?i:jc,a=function(){var c=n.then;n.then=null,rt(o)\u0026\u0026(o=o(n))\u0026\u0026(o.then||o===n)\u0026\u0026(n.then=c),s(o),n.then=c};n._initted\u0026\u0026n.totalProgress()===1\u0026\u0026n._ts\u003e=0||!n._tTime\u0026\u0026n._ts\u003c0?a():n._prom=a})},e.kill=function(){Sr(this)},r}();Vt(Or.prototype,{_time:0,_start:0,_end:0,_tTime:0,_tDur:0,_dirty:0,_repeat:0,_yoyo:!1,parent:null,_initted:!1,_rDelay:0,_ts:1,_dp:0,ratio:0,_zTime:-ke,_prom:0,_ps:!1,_rts:1});var bt=function(r){Uc(e,r);function e(i,n){var s;return i===void 0\u0026\u0026(i={}),s=r.call(this,i)||this,s.labels={},s.smoothChildTiming=!!i.smoothChildTiming,s.autoRemoveChildren=!!i.autoRemoveChildren,s._sort=wt(i.sortChildren),qe\u0026\u0026ai(i.parent||qe,yi(s),n),i.reversed\u0026\u0026s.reverse(),i.paused\u0026\u0026s.paused(!0),i.scrollTrigger\u0026\u0026eu(yi(s),i.scrollTrigger),s}var t=e.prototype;return t.to=function(n,s,o){return wr(0,arguments,this),this},t.from=function(n,s,o){return wr(1,arguments,this),this},t.fromTo=function(n,s,o,a){return wr(2,arguments,this),this},t.set=function(n,s,o){return s.duration=0,s.parent=this,br(s).repeatDelay||(s.repeat=0),s.immediateRender=!!s.immediateRender,new nt(n,s,Ot(this,o),1),this},t.call=function(n,s,o){return ai(this,nt.delayedCall(0,n,s),o)},t.staggerTo=function(n,s,o,a,l,c,u){return o.duration=s,o.stagger=o.stagger||a,o.onComplete=c,o.onCompleteParams=u,o.parent=this,new nt(n,o,Ot(this,l)),this},t.staggerFrom=function(n,s,o,a,l,c,u){return o.runBackwards=1,br(o).immediateRender=wt(o.immediateRender),this.staggerTo(n,s,o,a,l,c,u)},t.staggerFromTo=function(n,s,o,a,l,c,u,h){return a.startAt=o,br(a).immediateRender=wt(a.immediateRender),this.staggerTo(n,s,a,l,c,u,h)},t.render=function(n,s,o){var a=this._time,l=this._dirty?this.totalDuration():this._tDur,c=this._dur,u=n\u003c=0?0:ft(n),h=this._zTime\u003c0!=n\u003c0\u0026\u0026(this._initted||!c),f,m,_,d,p,g,S,A,b,v,w,R;if(this!==qe\u0026\u0026u\u003el\u0026\u0026n\u003e=0\u0026\u0026(u=l),u!==this._tTime||o||h){if(a!==this._time\u0026\u0026c\u0026\u0026(u+=this._time-a,n+=this._time-a),f=u,b=this._start,A=this._ts,g=!A,h\u0026\u0026(c||(a=this._zTime),(n||!s)\u0026\u0026(this._zTime=n)),this._repeat){if(w=this._yoyo,p=c+this._rDelay,this._repeat\u003c-1\u0026\u0026n\u003c0)return this.totalTime(p*100+n,s,o);if(f=ft(u%p),u===l?(d=this._repeat,f=c):(d=~~(u/p),d\u0026\u0026d===u/p\u0026\u0026(f=c,d--),f\u003ec\u0026\u0026(f=c)),v=or(this._tTime,p),!a\u0026\u0026this._tTime\u0026\u0026v!==d\u0026\u0026(v=d),w\u0026\u0026d\u00261\u0026\u0026(f=c-f,R=1),d!==v\u0026\u0026!this._lock){var x=w\u0026\u0026v\u00261,E=x===(w\u0026\u0026d\u00261);if(d\u003cv\u0026\u0026(x=!x),a=x?0:c,this._lock=1,this.render(a||(R?0:ft(d*p)),s,!c)._lock=0,this._tTime=u,!s\u0026\u0026this.parent\u0026\u0026Ht(this,\"onRepeat\"),this.vars.repeatRefresh\u0026\u0026!R\u0026\u0026(this.invalidate()._lock=1),a\u0026\u0026a!==this._time||g!==!this._ts||this.vars.onRepeat\u0026\u0026!this.parent\u0026\u0026!this._act)return this;if(c=this._dur,l=this._tDur,E\u0026\u0026(this._lock=2,a=x?c:-1e-4,this.render(a,!0),this.vars.repeatRefresh\u0026\u0026!R\u0026\u0026this.invalidate()),this._lock=0,!this._ts\u0026\u0026!g)return this;du(this,R)}}if(this._hasPause\u0026\u0026!this._forcing\u0026\u0026this._lock\u003c2\u0026\u0026(S=Cf(this,ft(a),ft(f)),S\u0026\u0026(u-=f-(f=S._start))),this._tTime=u,this._time=f,this._act=!A,this._initted||(this._onUpdate=this.vars.onUpdate,this._initted=1,this._zTime=n,a=0),!a\u0026\u0026f\u0026\u0026!s\u0026\u0026(Ht(this,\"onStart\"),this._tTime!==u))return this;if(f\u003e=a\u0026\u0026n\u003e=0)for(m=this._first;m;){if(_=m._next,(m._act||f\u003e=m._start)\u0026\u0026m._ts\u0026\u0026S!==m){if(m.parent!==this)return this.render(n,s,o);if(m.render(m._ts\u003e0?(f-m._start)*m._ts:(m._dirty?m.totalDuration():m._tDur)+(f-m._start)*m._ts,s,o),f!==this._time||!this._ts\u0026\u0026!g){S=0,_\u0026\u0026(u+=this._zTime=-ke);break}}m=_}else{m=this._last;for(var I=n\u003c0?n:f;m;){if(_=m._prev,(m._act||I\u003c=m._end)\u0026\u0026m._ts\u0026\u0026S!==m){if(m.parent!==this)return this.render(n,s,o);if(m.render(m._ts\u003e0?(I-m._start)*m._ts:(m._dirty?m.totalDuration():m._tDur)+(I-m._start)*m._ts,s,o),f!==this._time||!this._ts\u0026\u0026!g){S=0,_\u0026\u0026(u+=this._zTime=I?-ke:ke);break}}m=_}}if(S\u0026\u0026!s\u0026\u0026(this.pause(),S.render(f\u003e=a?0:-ke)._zTime=f\u003e=a?1:-1,this._ts))return this._start=b,ks(this),this.render(n,s,o);this._onUpdate\u0026\u0026!s\u0026\u0026Ht(this,\"onUpdate\",!0),(u===l\u0026\u0026l\u003e=this.totalDuration()||!u\u0026\u0026a)\u0026\u0026(b===this._start||Math.abs(A)!==Math.abs(this._ts))\u0026\u0026(this._lock||((n||!c)\u0026\u0026(u===l\u0026\u0026this._ts\u003e0||!u\u0026\u0026this._ts\u003c0)\u0026\u0026bi(this,1),!s\u0026\u0026!(n\u003c0\u0026\u0026!a)\u0026\u0026(u||a||!l)\u0026\u0026(Ht(this,u===l\u0026\u0026n\u003e=0?\"onComplete\":\"onReverseComplete\",!0),this._prom\u0026\u0026!(u\u003cl\u0026\u0026this.timeScale()\u003e0)\u0026\u0026this._prom())))}return this},t.add=function(n,s){var o=this;if(Ti(s)||(s=Ot(this,s,n)),!(n instanceof Or)){if(pt(n))return n.forEach(function(a){return o.add(a,s)}),this;if(st(n))return this.addLabel(n,s);if(rt(n))n=nt.delayedCall(0,n);else return this}return this!==n?ai(this,n,s):this},t.getChildren=function(n,s,o,a){n===void 0\u0026\u0026(n=!0),s===void 0\u0026\u0026(s=!0),o===void 0\u0026\u0026(o=!0),a===void 0\u0026\u0026(a=-Gt);for(var l=[],c=this._first;c;)c._start\u003e=a\u0026\u0026(c instanceof nt?s\u0026\u0026l.push(c):(o\u0026\u0026l.push(c),n\u0026\u0026l.push.apply(l,c.getChildren(!0,s,o)))),c=c._next;return l},t.getById=function(n){for(var s=this.getChildren(1,1,1),o=s.length;o--;)if(s[o].vars.id===n)return s[o]},t.remove=function(n){return st(n)?this.removeLabel(n):rt(n)?this.killTweensOf(n):(Gs(this,n),n===this._recent\u0026\u0026(this._recent=this._last),gn(this))},t.totalTime=function(n,s){return arguments.length?(this._forcing=1,!this._dp\u0026\u0026this._ts\u0026\u0026(this._start=ft(Bt.time-(this._ts\u003e0?n/this._ts:(this.totalDuration()-n)/-this._ts))),r.prototype.totalTime.call(this,n,s),this._forcing=0,this):this._tTime},t.addLabel=function(n,s){return this.labels[n]=Ot(this,s),this},t.removeLabel=function(n){return delete this.labels[n],this},t.addPause=function(n,s,o){var a=nt.delayedCall(0,s||Ir,o);return a.data=\"isPause\",this._hasPause=1,ai(this,a,Ot(this,n))},t.removePause=function(n){var s=this._first;for(n=Ot(this,n);s;)s._start===n\u0026\u0026s.data===\"isPause\"\u0026\u0026bi(s),s=s._next},t.killTweensOf=function(n,s,o){for(var a=this.getTweensOf(n,o),l=a.length;l--;)Bi!==a[l]\u0026\u0026a[l].kill(n,s);return this},t.getTweensOf=function(n,s){for(var o=[],a=kt(n),l=this._first,c=Ti(s),u;l;)l instanceof nt?Sf(l._targets,a)\u0026\u0026(c?(!Bi||l._initted\u0026\u0026l._ts)\u0026\u0026l.globalTime(0)\u003c=s\u0026\u0026l.globalTime(l.totalDuration())\u003es:!s||l.isActive())\u0026\u0026o.push(l):(u=l.getTweensOf(a,s)).length\u0026\u0026o.push.apply(o,u),l=l._next;return o},t.tweenTo=function(n,s){s=s||{};var o=this,a=Ot(o,n),l=s,c=l.startAt,u=l.onStart,h=l.onStartParams,f=l.immediateRender,m,_=nt.to(o,Vt({ease:s.ease||\"none\",lazy:!1,immediateRender:!1,time:a,overwrite:\"auto\",duration:s.duration||Math.abs((a-(c\u0026\u0026\"time\"in c?c.time:o._time))/o.timeScale())||ke,onStart:function(){if(o.pause(),!m){var p=s.duration||Math.abs((a-(c\u0026\u0026\"time\"in c?c.time:o._time))/o.timeScale());_._dur!==p\u0026\u0026ar(_,p,0,1).render(_._time,!0,!0),m=1}u\u0026\u0026u.apply(_,h||[])}},s));return f?_.render(0):_},t.tweenFromTo=function(n,s,o){return this.tweenTo(s,Vt({startAt:{time:Ot(this,n)}},o))},t.recent=function(){return this._recent},t.nextLabel=function(n){return n===void 0\u0026\u0026(n=this._time),Cl(this,Ot(this,n))},t.previousLabel=function(n){return n===void 0\u0026\u0026(n=this._time),Cl(this,Ot(this,n),1)},t.currentLabel=function(n){return arguments.length?this.seek(n,!0):this.previousLabel(this._time+ke)},t.shiftChildren=function(n,s,o){o===void 0\u0026\u0026(o=0);for(var a=this._first,l=this.labels,c;a;)a._start\u003e=o\u0026\u0026(a._start+=n,a._end+=n),a=a._next;if(s)for(c in l)l[c]\u003e=o\u0026\u0026(l[c]+=n);return gn(this)},t.invalidate=function(){var n=this._first;for(this._lock=0;n;)n.invalidate(),n=n._next;return r.prototype.invalidate.call(this)},t.clear=function(n){n===void 0\u0026\u0026(n=!0);for(var s=this._first,o;s;)o=s._next,this.remove(s),s=o;return this._dp\u0026\u0026(this._time=this._tTime=this._pTime=0),n\u0026\u0026(this.labels={}),gn(this)},t.totalDuration=function(n){var s=0,o=this,a=o._last,l=Gt,c,u,h;if(arguments.length)return o.timeScale((o._repeat\u003c0?o.duration():o.totalDuration())/(o.reversed()?-n:n));if(o._dirty){for(h=o.parent;a;)c=a._prev,a._dirty\u0026\u0026a.totalDuration(),u=a._start,u\u003el\u0026\u0026o._sort\u0026\u0026a._ts\u0026\u0026!o._lock?(o._lock=1,ai(o,a,u-a._delay,1)._lock=0):l=u,u\u003c0\u0026\u0026a._ts\u0026\u0026(s-=u,(!h\u0026\u0026!o._dp||h\u0026\u0026h.smoothChildTiming)\u0026\u0026(o._start+=u/o._ts,o._time-=u,o._tTime-=u),o.shiftChildren(-u,!1,-1/0),l=0),a._end\u003es\u0026\u0026a._ts\u0026\u0026(s=a._end),a=c;ar(o,o===qe\u0026\u0026o._time\u003es?o._time:s,1,1),o._dirty=0}return o._tDur},e.updateRoot=function(n){if(qe._ts\u0026\u0026(Jc(qe,Ds(n,qe)),Yc=Bt.frame),Bt.frame\u003e=wl){wl+=Dt.autoSleep||120;var s=qe._first;if((!s||!s._ts)\u0026\u0026Dt.autoSleep\u0026\u0026Bt._listeners.length\u003c2){for(;s\u0026\u0026!s._ts;)s=s._next;s||Bt.sleep()}}},e}(Or);Vt(bt.prototype,{_lock:0,_hasPause:0,_forcing:0});var Yf=function(e,t,i,n,s,o,a){var l=new At(this._pt,e,t,0,1,Su,null,s),c=0,u=0,h,f,m,_,d,p,g,S;for(l.b=i,l.e=n,i+=\"\",n+=\"\",(g=~n.indexOf(\"random(\"))\u0026\u0026(n=Nr(n)),o\u0026\u0026(S=[i,n],o(S,e,t),i=S[0],n=S[1]),f=i.match(ro)||[];h=ro.exec(n);)_=h[0],d=n.substring(c,h.index),m?m=(m+1)%5:d.substr(-5)===\"rgba(\"\u0026\u0026(m=1),_!==f[u++]\u0026\u0026(p=parseFloat(f[u-1])||0,l._pt={_next:l._pt,p:d||u===1?d:\",\",s:p,c:_.charAt(1)===\"=\"?parseFloat(_.substr(2))*(_.charAt(0)===\"-\"?-1:1):parseFloat(_)-p,m:m\u0026\u0026m\u003c4?Math.round:0},c=ro.lastIndex);return l.c=c\u003cn.length?n.substring(c,n.length):\"\",l.fp=a,(Hc.test(n)||g)\u0026\u0026(l.e=0),this._pt=l,l},Sa=function(e,t,i,n,s,o,a,l,c){rt(n)\u0026\u0026(n=n(s||0,e,o));var u=e[t],h=i!==\"get\"?i:rt(u)?c?e[t.indexOf(\"set\")||!rt(e[\"get\"+t.substr(3)])?t:\"get\"+t.substr(3)](c):e[t]():u,f=rt(u)?c?$f:vu:Ma,m;if(st(n)\u0026\u0026(~n.indexOf(\"random(\")\u0026\u0026(n=Nr(n)),n.charAt(1)===\"=\"\u0026\u0026(m=parseFloat(h)+parseFloat(n.substr(2))*(n.charAt(0)===\"-\"?-1:1)+(Et(h)||0),(m||m===0)\u0026\u0026(n=m))),h!==n)return!isNaN(h*n)\u0026\u0026n!==\"\"?(m=new At(this._pt,e,t,+h||0,n-(h||0),typeof u==\"boolean\"?ed:yu,0,f),c\u0026\u0026(m.fp=c),a\u0026\u0026m.modifier(a,this,e),this._pt=m):(!u\u0026\u0026!(t in e)\u0026\u0026ga(t,n),Yf.call(this,e,t,h,n,f,l||Dt.stringFilter,c))},Zf=function(e,t,i,n,s){if(rt(e)\u0026\u0026(e=Tr(e,s,t,i,n)),!Ai(e)||e.style\u0026\u0026e.nodeType||pt(e)||Gc(e))return st(e)?Tr(e,s,t,i,n):e;var o={},a;for(a in e)o[a]=Tr(e[a],s,t,i,n);return o},_u=function(e,t,i,n,s,o){var a,l,c,u;if(Lt[e]\u0026\u0026(a=new Lt[e]).init(s,a.rawVars?t[e]:Zf(t[e],n,s,o,i),i,n,o)!==!1\u0026\u0026(i._pt=l=new At(i._pt,s,e,0,1,a.render,a,0,a.priority),i!==qn))for(c=i._ptLookup[i._targets.indexOf(s)],u=a._props.length;u--;)c[a._props[u]]=l;return a},Bi,Jf=function r(e,t){var i=e.vars,n=i.ease,s=i.startAt,o=i.immediateRender,a=i.lazy,l=i.onUpdate,c=i.onUpdateParams,u=i.callbackScope,h=i.runBackwards,f=i.yoyoEase,m=i.keyframes,_=i.autoRevert,d=e._dur,p=e._startAt,g=e._targets,S=e.parent,A=S\u0026\u0026S.data===\"nested\"?S.parent._targets:g,b=e._overwrite===\"auto\"\u0026\u0026!pa,v=e.timeline,w,R,x,E,I,F,j,Z,P,H,U,V,X;if(v\u0026\u0026(!m||!n)\u0026\u0026(n=\"none\"),e._ease=xn(n,rr.ease),e._yEase=f?fu(xn(f===!0?n:f,rr.ease)):0,f\u0026\u0026e._yoyo\u0026\u0026!e._repeat\u0026\u0026(f=e._yEase,e._yEase=e._ease,e._ease=f),e._from=!v\u0026\u0026!!i.runBackwards,!v||m\u0026\u0026!i.stagger){if(Z=g[0]?_n(g[0]).harness:0,V=Z\u0026\u0026i[Z.prop],w=Ls(i,xa),p\u0026\u0026bi(p.render(-1,!0)),s)if(bi(e._startAt=nt.set(g,Vt({data:\"isStart\",overwrite:!1,parent:S,immediateRender:!0,lazy:wt(a),startAt:null,delay:0,onUpdate:l,onUpdateParams:c,callbackScope:u,stagger:0},s))),t\u003c0\u0026\u0026!o\u0026\u0026!_\u0026\u0026e._startAt.render(-1,!0),o){if(t\u003e0\u0026\u0026!_\u0026\u0026(e._startAt=0),d\u0026\u0026t\u003c=0){t\u0026\u0026(e._zTime=t);return}}else _===!1\u0026\u0026(e._startAt=0);else if(h\u0026\u0026d){if(p)!_\u0026\u0026(e._startAt=0);else if(t\u0026\u0026(o=!1),x=Vt({overwrite:!1,data:\"isFromStart\",lazy:o\u0026\u0026wt(a),immediateRender:o,stagger:0,parent:S},w),V\u0026\u0026(x[Z.prop]=V),bi(e._startAt=nt.set(g,x)),t\u003c0\u0026\u0026e._startAt.render(-1,!0),e._zTime=t,!o)r(e._startAt,ke);else if(!t)return}for(e._pt=0,a=d\u0026\u0026wt(a)||a\u0026\u0026!d,R=0;R\u003cg.length;R++){if(I=g[R],j=I._gsap||ya(g)[R]._gsap,e._ptLookup[R]=H={},ia[j.id]\u0026\u0026Wi.length\u0026\u0026Ps(),U=A===g?R:A.indexOf(I),Z\u0026\u0026(P=new Z).init(I,V||w,e,U,A)!==!1\u0026\u0026(e._pt=E=new At(e._pt,I,P.name,0,1,P.render,P,0,P.priority),P._props.forEach(function(B){H[B]=E}),P.priority\u0026\u0026(F=1)),!Z||V)for(x in w)Lt[x]\u0026\u0026(P=_u(x,w,e,U,I,A))?P.priority\u0026\u0026(F=1):H[x]=E=Sa.call(e,I,x,\"get\",w[x],U,A,0,i.stringFilter);e._op\u0026\u0026e._op[R]\u0026\u0026e.kill(I,e._op[R]),b\u0026\u0026e._pt\u0026\u0026(Bi=e,qe.killTweensOf(I,H,e.globalTime(t)),X=!e.parent,Bi=0),e._pt\u0026\u0026a\u0026\u0026(ia[j.id]=1)}F\u0026\u0026Mu(e),e._onInit\u0026\u0026e._onInit(e)}e._onUpdate=l,e._initted=(!e._op||e._pt)\u0026\u0026!X,m\u0026\u0026t\u003c=0\u0026\u0026v.render(Gt,!0,!0)},Kf=function(e,t){var i=e[0]?_n(e[0]).harness:0,n=i\u0026\u0026i.aliases,s,o,a,l;if(!n)return t;s=sr({},t);for(o in n)if(o in s)for(l=n[o].split(\",\"),a=l.length;a--;)s[l[a]]=s[o];return s},jf=function(e,t,i,n){var s=t.ease||n||\"power1.inOut\",o,a;if(pt(t))a=i[e]||(i[e]=[]),t.forEach(function(l,c){return a.push({t:c/(t.length-1)*100,v:l,e:s})});else for(o in t)a=i[o]||(i[o]=[]),o===\"ease\"||a.push({t:parseFloat(e),v:t[o],e:s})},Tr=function(e,t,i,n,s){return rt(e)?e.call(t,i,n,s):st(e)\u0026\u0026~e.indexOf(\"random(\")?Nr(e):e},gu=va+\"repeat,repeatDelay,yoyo,repeatRefresh,yoyoEase\",xu={};Tt(gu+\",id,stagger,delay,duration,paused,scrollTrigger\",function(r){return xu[r]=1});var nt=function(r){Uc(e,r);function e(i,n,s,o){var a;typeof n==\"number\"\u0026\u0026(s.duration=n,n=s,s=null),a=r.call(this,o?n:br(n))||this;var l=a.vars,c=l.duration,u=l.delay,h=l.immediateRender,f=l.stagger,m=l.overwrite,_=l.keyframes,d=l.defaults,p=l.scrollTrigger,g=l.yoyoEase,S=n.parent||qe,A=(pt(i)||Gc(i)?Ti(i[0]):\"length\"in n)?[i]:kt(i),b,v,w,R,x,E,I,F;if(a._targets=A.length?ya(A):Cs(\"GSAP target \"+i+\" not found. https://greensock.com\",!Dt.nullTargetWarn)||[],a._ptLookup=[],a._overwrite=m,_||f||Qr(c)||Qr(u)){if(n=a.vars,b=a.timeline=new bt({data:\"nested\",defaults:d||{}}),b.kill(),b.parent=b._dp=yi(a),b._start=0,f||Qr(c)||Qr(u)){if(R=A.length,I=f\u0026\u0026ru(f),Ai(f))for(x in f)~gu.indexOf(x)\u0026\u0026(F||(F={}),F[x]=f[x]);for(v=0;v\u003cR;v++)w=Ls(n,xu),w.stagger=0,g\u0026\u0026(w.yoyoEase=g),F\u0026\u0026sr(w,F),E=A[v],w.duration=+Tr(c,yi(a),v,E,A),w.delay=(+Tr(u,yi(a),v,E,A)||0)-a._delay,!f\u0026\u0026R===1\u0026\u0026w.delay\u0026\u0026(a._delay=u=w.delay,a._start+=u,w.delay=0),b.to(E,w,I?I(v,E,A):0),b._ease=Pe.none;b.duration()?c=u=0:a.timeline=0}else if(_){br(Vt(b.vars.defaults,{ease:\"none\"})),b._ease=xn(_.ease||n.ease||\"none\");var j=0,Z,P,H;if(pt(_))_.forEach(function(U){return b.to(A,U,\"\u003e\")});else{w={};for(x in _)x===\"ease\"||x===\"easeEach\"||jf(x,_[x],w,_.easeEach);for(x in w)for(Z=w[x].sort(function(U,V){return U.t-V.t}),j=0,v=0;v\u003cZ.length;v++)P=Z[v],H={ease:P.e,duration:(P.t-(v?Z[v-1].t:0))/100*c},H[x]=P.v,b.to(A,H,j),j+=H.duration;b.duration()\u003cc\u0026\u0026b.to({},{duration:c-b.duration()})}}c||a.duration(c=b.duration())}else a.timeline=0;return m===!0\u0026\u0026!pa\u0026\u0026(Bi=yi(a),qe.killTweensOf(A),Bi=0),ai(S,yi(a),s),n.reversed\u0026\u0026a.reverse(),n.paused\u0026\u0026a.paused(!0),(h||!c\u0026\u0026!_\u0026\u0026a._start===ft(S._time)\u0026\u0026wt(h)\u0026\u0026Tf(yi(a))\u0026\u0026S.data!==\"nested\")\u0026\u0026(a._tTime=-ke,a.render(Math.max(0,-u))),p\u0026\u0026eu(yi(a),p),a}var t=e.prototype;return t.render=function(n,s,o){var a=this._time,l=this._tDur,c=this._dur,u=n\u003el-ke\u0026\u0026n\u003e=0?l:n\u003cke?0:n,h,f,m,_,d,p,g,S,A;if(!c)Rf(this,n,s,o);else if(u!==this._tTime||!n||o||!this._initted\u0026\u0026this._tTime||this._startAt\u0026\u0026this._zTime\u003c0!=n\u003c0){if(h=u,S=this.timeline,this._repeat){if(_=c+this._rDelay,this._repeat\u003c-1\u0026\u0026n\u003c0)return this.totalTime(_*100+n,s,o);if(h=ft(u%_),u===l?(m=this._repeat,h=c):(m=~~(u/_),m\u0026\u0026m===u/_\u0026\u0026(h=c,m--),h\u003ec\u0026\u0026(h=c)),p=this._yoyo\u0026\u0026m\u00261,p\u0026\u0026(A=this._yEase,h=c-h),d=or(this._tTime,_),h===a\u0026\u0026!o\u0026\u0026this._initted)return this;m!==d\u0026\u0026(S\u0026\u0026this._yEase\u0026\u0026du(S,p),this.vars.repeatRefresh\u0026\u0026!p\u0026\u0026!this._lock\u0026\u0026(this._lock=o=1,this.render(ft(_*m),!0).invalidate()._lock=0))}if(!this._initted){if(tu(this,n\u003c0?n:h,o,s))return this._tTime=0,this;if(c!==this._dur)return this.render(n,s,o)}if(this._tTime=u,this._time=h,!this._act\u0026\u0026this._ts\u0026\u0026(this._act=1,this._lazy=0),this.ratio=g=(A||this._ease)(h/c),this._from\u0026\u0026(this.ratio=g=1-g),h\u0026\u0026!a\u0026\u0026!s\u0026\u0026(Ht(this,\"onStart\"),this._tTime!==u))return this;for(f=this._pt;f;)f.r(g,f.d),f=f._next;S\u0026\u0026S.render(n\u003c0?n:!h\u0026\u0026p?-ke:S._dur*S._ease(h/this._dur),s,o)||this._startAt\u0026\u0026(this._zTime=n),this._onUpdate\u0026\u0026!s\u0026\u0026(n\u003c0\u0026\u0026this._startAt\u0026\u0026this._startAt.render(n,!0,o),Ht(this,\"onUpdate\")),this._repeat\u0026\u0026m!==d\u0026\u0026this.vars.onRepeat\u0026\u0026!s\u0026\u0026this.parent\u0026\u0026Ht(this,\"onRepeat\"),(u===this._tDur||!u)\u0026\u0026this._tTime===u\u0026\u0026(n\u003c0\u0026\u0026this._startAt\u0026\u0026!this._onUpdate\u0026\u0026this._startAt.render(n,!0,!0),(n||!c)\u0026\u0026(u===this._tDur\u0026\u0026this._ts\u003e0||!u\u0026\u0026this._ts\u003c0)\u0026\u0026bi(this,1),!s\u0026\u0026!(n\u003c0\u0026\u0026!a)\u0026\u0026(u||a)\u0026\u0026(Ht(this,u===l?\"onComplete\":\"onReverseComplete\",!0),this._prom\u0026\u0026!(u\u003cl\u0026\u0026this.timeScale()\u003e0)\u0026\u0026this._prom()))}return this},t.targets=function(){return this._targets},t.invalidate=function(){return this._pt=this._op=this._startAt=this._onUpdate=this._lazy=this.ratio=0,this._ptLookup=[],this.timeline\u0026\u0026this.timeline.invalidate(),r.prototype.invalidate.call(this)},t.kill=function(n,s){if(s===void 0\u0026\u0026(s=\"all\"),!n\u0026\u0026(!s||s===\"all\"))return this._lazy=this._pt=0,this.parent?Sr(this):this;if(this.timeline){var o=this.timeline.totalDuration();return this.timeline.killTweensOf(n,s,Bi\u0026\u0026Bi.vars.overwrite!==!0)._first||Sr(this),this.parent\u0026\u0026o!==this.timeline.totalDuration()\u0026\u0026ar(this,this._dur*this.timeline._tDur/o,0,1),this}var a=this._targets,l=n?kt(n):a,c=this._ptLookup,u=this._pt,h,f,m,_,d,p,g;if((!s||s===\"all\")\u0026\u0026Ef(a,l))return s===\"all\"\u0026\u0026(this._pt=0),Sr(this);for(h=this._op=this._op||[],s!==\"all\"\u0026\u0026(st(s)\u0026\u0026(d={},Tt(s,function(S){return d[S]=1}),s=d),s=Kf(a,s)),g=a.length;g--;)if(~l.indexOf(a[g])){f=c[g],s===\"all\"?(h[g]=s,_=f,m={}):(m=h[g]=h[g]||{},_=s);for(d in _)p=f\u0026\u0026f[d],p\u0026\u0026((!(\"kill\"in p.d)||p.d.kill(d)===!0)\u0026\u0026Gs(this,p,\"_pt\"),delete f[d]),m!==\"all\"\u0026\u0026(m[d]=1)}return this._initted\u0026\u0026!this._pt\u0026\u0026u\u0026\u0026Sr(this),this},e.to=function(n,s){return new e(n,s,arguments[2])},e.from=function(n,s){return wr(1,arguments)},e.delayedCall=function(n,s,o,a){return new e(s,0,{immediateRender:!1,lazy:!1,overwrite:!1,delay:n,onComplete:s,onReverseComplete:s,onCompleteParams:o,onReverseCompleteParams:o,callbackScope:a})},e.fromTo=function(n,s,o){return wr(2,arguments)},e.set=function(n,s){return s.duration=0,s.repeatDelay||(s.repeat=0),new e(n,s)},e.killTweensOf=function(n,s,o){return qe.killTweensOf(n,s,o)},e}(Or);Vt(nt.prototype,{_targets:[],_lazy:0,_startAt:0,_op:0,_onInit:0});Tt(\"staggerTo,staggerFrom,staggerFromTo\",function(r){nt[r]=function(){var e=new bt,t=ra.call(arguments,0);return t.splice(r===\"staggerFromTo\"?5:4,0,0),e[r].apply(e,t)}});var Ma=function(e,t,i){return e[t]=i},vu=function(e,t,i){return e[t](i)},$f=function(e,t,i,n){return e[t](n.fp,i)},Qf=function(e,t,i){return e.setAttribute(t,i)},Ea=function(e,t){return rt(e[t])?vu:ma(e[t])\u0026\u0026e.setAttribute?Qf:Ma},yu=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e6)/1e6,t)},ed=function(e,t){return t.set(t.t,t.p,!!(t.s+t.c*e),t)},Su=function(e,t){var i=t._pt,n=\"\";if(!e\u0026\u0026t.b)n=t.b;else if(e===1\u0026\u0026t.e)n=t.e;else{for(;i;)n=i.p+(i.m?i.m(i.s+i.c*e):Math.round((i.s+i.c*e)*1e4)/1e4)+n,i=i._next;n+=t.c}t.set(t.t,t.p,n,t)},ba=function(e,t){for(var i=t._pt;i;)i.r(e,i.d),i=i._next},td=function(e,t,i,n){for(var s=this._pt,o;s;)o=s._next,s.p===n\u0026\u0026s.modifier(e,t,i),s=o},id=function(e){for(var t=this._pt,i,n;t;)n=t._next,t.p===e\u0026\u0026!t.op||t.op===e?Gs(this,t,\"_pt\"):t.dep||(i=1),t=n;return!i},nd=function(e,t,i,n){n.mSet(e,t,n.m.call(n.tween,i,n.mt),n)},Mu=function(e){for(var t=e._pt,i,n,s,o;t;){for(i=t._next,n=s;n\u0026\u0026n.pr\u003et.pr;)n=n._next;(t._prev=n?n._prev:o)?t._prev._next=t:s=t,(t._next=n)?n._prev=t:o=t,t=i}e._pt=s},At=function(){function r(t,i,n,s,o,a,l,c,u){this.t=i,this.s=s,this.c=o,this.p=n,this.r=a||yu,this.d=l||this,this.set=c||Ma,this.pr=u||0,this._next=t,t\u0026\u0026(t._prev=this)}var e=r.prototype;return e.modifier=function(i,n,s){this.mSet=this.mSet||this.set,this.set=nd,this.m=i,this.mt=s,this.tween=n},r}();Tt(va+\"parent,duration,ease,delay,overwrite,runBackwards,startAt,yoyo,immediateRender,repeat,repeatDelay,data,paused,reversed,lazy,callbackScope,stringFilter,id,yoyoEase,stagger,inherit,repeatRefresh,keyframes,autoRevert,scrollTrigger\",function(r){return xa[r]=1});It.TweenMax=It.TweenLite=nt;It.TimelineLite=It.TimelineMax=bt;qe=new bt({sortChildren:!1,defaults:rr,autoRemoveChildren:!0,id:\"root\",smoothChildTiming:!0});Dt.stringFilter=hu;var Is={registerPlugin:function(){for(var e=arguments.length,t=new Array(e),i=0;i\u003ce;i++)t[i]=arguments[i];t.forEach(function(n){return Gf(n)})},timeline:function(e){return new bt(e)},getTweensOf:function(e,t){return qe.getTweensOf(e,t)},getProperty:function(e,t,i,n){st(e)\u0026\u0026(e=kt(e)[0]);var s=_n(e||{}).get,o=i?jc:Kc;return i===\"native\"\u0026\u0026(i=\"\"),e\u0026\u0026(t?o((Lt[t]\u0026\u0026Lt[t].get||s)(e,t,i,n)):function(a,l,c){return o((Lt[a]\u0026\u0026Lt[a].get||s)(e,a,l,c))})},quickSetter:function(e,t,i){if(e=kt(e),e.length\u003e1){var n=e.map(function(u){return ui.quickSetter(u,t,i)}),s=n.length;return function(u){for(var h=s;h--;)n[h](u)}}e=e[0]||{};var o=Lt[t],a=_n(e),l=a.harness\u0026\u0026(a.harness.aliases||{})[t]||t,c=o?function(u){var h=new o;qn._pt=0,h.init(e,i?u+i:u,qn,0,[e]),h.render(1,h),qn._pt\u0026\u0026ba(1,qn)}:a.set(e,l);return o?c:function(u){return c(e,l,i?u+i:u,a,1)}},isTweening:function(e){return qe.getTweensOf(e,!0).length\u003e0},defaults:function(e){return e\u0026\u0026e.ease\u0026\u0026(e.ease=xn(e.ease,rr.ease)),Tl(rr,e||{})},config:function(e){return Tl(Dt,e||{})},registerEffect:function(e){var t=e.name,i=e.effect,n=e.plugins,s=e.defaults,o=e.extendTimeline;(n||\"\").split(\",\").forEach(function(a){return a\u0026\u0026!Lt[a]\u0026\u0026!It[a]\u0026\u0026Cs(t+\" effect requires \"+a+\" plugin.\")}),so[t]=function(a,l,c){return i(kt(a),Vt(l||{},s),c)},o\u0026\u0026(bt.prototype[t]=function(a,l,c){return this.add(so[t](a,Ai(l)?l:(c=l)\u0026\u0026{},this),c)})},registerEase:function(e,t){Pe[e]=xn(t)},parseEase:function(e,t){return arguments.length?xn(e,t):Pe},getById:function(e){return qe.getById(e)},exportRoot:function(e,t){e===void 0\u0026\u0026(e={});var i=new bt(e),n,s;for(i.smoothChildTiming=wt(e.smoothChildTiming),qe.remove(i),i._dp=0,i._time=i._tTime=qe._time,n=qe._first;n;)s=n._next,(t||!(!n._dur\u0026\u0026n instanceof nt\u0026\u0026n.vars.onComplete===n._targets[0]))\u0026\u0026ai(i,n,n._start-n._delay),n=s;return ai(qe,i,0),i},utils:{wrap:Uf,wrapYoyo:zf,distribute:ru,random:ou,snap:su,normalize:Of,getUnit:Et,clamp:Lf,splitColor:cu,toArray:kt,selector:Ff,mapRange:lu,pipe:If,unitize:Nf,interpolate:Bf,shuffle:nu},install:Xc,effects:so,ticker:Bt,updateRoot:bt.updateRoot,plugins:Lt,globalTimeline:qe,core:{PropTween:At,globals:qc,Tween:nt,Timeline:bt,Animation:Or,getCache:_n,_removeLinkedListItem:Gs,suppressOverwrites:function(e){return pa=e}}};Tt(\"to,from,fromTo,delayedCall,set,killTweensOf\",function(r){return Is[r]=nt[r]});Bt.add(bt.updateRoot);qn=Is.to({},{duration:0});var rd=function(e,t){for(var i=e._pt;i\u0026\u0026i.p!==t\u0026\u0026i.op!==t\u0026\u0026i.fp!==t;)i=i._next;return i},sd=function(e,t){var i=e._targets,n,s,o;for(n in t)for(s=i.length;s--;)o=e._ptLookup[s][n],o\u0026\u0026(o=o.d)\u0026\u0026(o._pt\u0026\u0026(o=rd(o,n)),o\u0026\u0026o.modifier\u0026\u0026o.modifier(t[n],e,i[s],n))},co=function(e,t){return{name:e,rawVars:1,init:function(n,s,o){o._onInit=function(a){var l,c;if(st(s)\u0026\u0026(l={},Tt(s,function(u){return l[u]=1}),s=l),t){l={};for(c in s)l[c]=t(s[c]);s=l}sd(a,s)}}}},ui=Is.registerPlugin({name:\"attr\",init:function(e,t,i,n,s){var o,a;for(o in t)a=this.add(e,\"setAttribute\",(e.getAttribute(o)||0)+\"\",t[o],n,s,0,0,o),a\u0026\u0026(a.op=o),this._props.push(o)}},{name:\"endArray\",init:function(e,t){for(var i=t.length;i--;)this.add(e,i,e[i]||0,t[i])}},co(\"roundProps\",sa),co(\"modifiers\"),co(\"snap\",su))||Is;nt.version=bt.version=ui.version=\"3.9.1\";Wc=1;Bc()\u0026\u0026lr();var Ll=Pe.Power0,uo=Pe.Power1,ho=Pe.Power2,fo=Pe.Power3;Pe.Power4;Pe.Linear;Pe.Quad;Pe.Cubic;Pe.Quart;Pe.Quint;Pe.Strong;var Dl=Pe.Elastic;Pe.Back;Pe.SteppedEase;Pe.Bounce;Pe.Sine;var po=Pe.Expo;Pe.Circ;/*!\n * CSSPlugin 3.9.1\n * https://greensock.com\n *\n * Copyright 2008-2021, GreenSock. All rights reserved.\n * Subject to the terms at https://greensock.com/standard-license or for\n * Club GreenSock members, the agreement issued with that membership.\n * @author: Jack Doyle, jack@greensock.com\n*/var Fl,Gi,jn,wa,dn,Il,od=function(){return typeof window!=\"undefined\"},Yi={},sn=180/Math.PI,$n=Math.PI/180,An=Math.atan2,Nl=1e8,Eu=/([A-Z])/g,ad=/(?:left|right|width|margin|padding|x)/i,ld=/[\\s,\\(]\\S/,ki={autoAlpha:\"opacity,visibility\",scale:\"scaleX,scaleY\",alpha:\"opacity\"},bu=function(e,t){return t.set(t.t,t.p,Math.round((t.s+t.c*e)*1e4)/1e4+t.u,t)},cd=function(e,t){return t.set(t.t,t.p,e===1?t.e:Math.round((t.s+t.c*e)*1e4)/1e4+t.u,t)},ud=function(e,t){return t.set(t.t,t.p,e?Math.round((t.s+t.c*e)*1e4)/1e4+t.u:t.b,t)},hd=function(e,t){var i=t.s+t.c*e;t.set(t.t,t.p,~~(i+(i\u003c0?-.5:.5))+t.u,t)},wu=function(e,t){return t.set(t.t,t.p,e?t.e:t.b,t)},Tu=function(e,t){return t.set(t.t,t.p,e!==1?t.b:t.e,t)},fd=function(e,t,i){return e.style[t]=i},dd=function(e,t,i){return e.style.setProperty(t,i)},pd=function(e,t,i){return e._gsap[t]=i},md=function(e,t,i){return e._gsap.scaleX=e._gsap.scaleY=i},_d=function(e,t,i,n,s){var o=e._gsap;o.scaleX=o.scaleY=i,o.renderTransform(s,o)},gd=function(e,t,i,n,s){var o=e._gsap;o[t]=i,o.renderTransform(s,o)},lt=\"transform\",Zi=lt+\"Origin\",Au,oa=function(e,t){var i=Gi.createElementNS?Gi.createElementNS((t||\"http://www.w3.org/1999/xhtml\").replace(/^https/,\"http\"),e):Gi.createElement(e);return i.style?i:Gi.createElement(e)},wi=function r(e,t,i){var n=getComputedStyle(e);return n[t]||n.getPropertyValue(t.replace(Eu,\"-$1\").toLowerCase())||n.getPropertyValue(t)||!i\u0026\u0026r(e,cr(t)||t,1)||\"\"},Ol=\"O,Moz,ms,Ms,Webkit\".split(\",\"),cr=function(e,t,i){var n=t||dn,s=n.style,o=5;if(e in s\u0026\u0026!i)return e;for(e=e.charAt(0).toUpperCase()+e.substr(1);o--\u0026\u0026!(Ol[o]+e in s););return o\u003c0?null:(o===3?\"ms\":o\u003e=0?Ol[o]:\"\")+e},aa=function(){od()\u0026\u0026window.document\u0026\u0026(Fl=window,Gi=Fl.document,jn=Gi.documentElement,dn=oa(\"div\")||{style:{}},oa(\"div\"),lt=cr(lt),Zi=lt+\"Origin\",dn.style.cssText=\"border-width:0;line-height:0;position:absolute;padding:0\",Au=!!cr(\"perspective\"),wa=1)},mo=function r(e){var t=oa(\"svg\",this.ownerSVGElement\u0026\u0026this.ownerSVGElement.getAttribute(\"xmlns\")||\"http://www.w3.org/2000/svg\"),i=this.parentNode,n=this.nextSibling,s=this.style.cssText,o;if(jn.appendChild(t),t.appendChild(this),this.style.display=\"block\",e)try{o=this.getBBox(),this._gsapBBox=this.getBBox,this.getBBox=r}catch{}else this._gsapBBox\u0026\u0026(o=this._gsapBBox());return i\u0026\u0026(n?i.insertBefore(this,n):i.appendChild(this)),jn.removeChild(t),this.style.cssText=s,o},Ul=function(e,t){for(var i=t.length;i--;)if(e.hasAttribute(t[i]))return e.getAttribute(t[i])},Ru=function(e){var t;try{t=e.getBBox()}catch{t=mo.call(e,!0)}return t\u0026\u0026(t.width||t.height)||e.getBBox===mo||(t=mo.call(e,!0)),t\u0026\u0026!t.width\u0026\u0026!t.x\u0026\u0026!t.y?{x:+Ul(e,[\"x\",\"cx\",\"x1\"])||0,y:+Ul(e,[\"y\",\"cy\",\"y1\"])||0,width:0,height:0}:t},Cu=function(e){return!!(e.getCTM\u0026\u0026(!e.parentNode||e.ownerSVGElement)\u0026\u0026Ru(e))},Ur=function(e,t){if(t){var i=e.style;t in Yi\u0026\u0026t!==Zi\u0026\u0026(t=lt),i.removeProperty?((t.substr(0,2)===\"ms\"||t.substr(0,6)===\"webkit\")\u0026\u0026(t=\"-\"+t),i.removeProperty(t.replace(Eu,\"-$1\").toLowerCase())):i.removeAttribute(t)}},Hi=function(e,t,i,n,s,o){var a=new At(e._pt,t,i,0,1,o?Tu:wu);return e._pt=a,a.b=n,a.e=s,e._props.push(i),a},zl={deg:1,rad:1,turn:1},Ji=function r(e,t,i,n){var s=parseFloat(i)||0,o=(i+\"\").trim().substr((s+\"\").length)||\"px\",a=dn.style,l=ad.test(t),c=e.tagName.toLowerCase()===\"svg\",u=(c?\"client\":\"offset\")+(l?\"Width\":\"Height\"),h=100,f=n===\"px\",m=n===\"%\",_,d,p,g;return n===o||!s||zl[n]||zl[o]?s:(o!==\"px\"\u0026\u0026!f\u0026\u0026(s=r(e,t,i,\"px\")),g=e.getCTM\u0026\u0026Cu(e),(m||o===\"%\")\u0026\u0026(Yi[t]||~t.indexOf(\"adius\"))?(_=g?e.getBBox()[l?\"width\":\"height\"]:e[u],Qe(m?s/_*h:s/100*_)):(a[l?\"width\":\"height\"]=h+(f?o:n),d=~t.indexOf(\"adius\")||n===\"em\"\u0026\u0026e.appendChild\u0026\u0026!c?e:e.parentNode,g\u0026\u0026(d=(e.ownerSVGElement||{}).parentNode),(!d||d===Gi||!d.appendChild)\u0026\u0026(d=Gi.body),p=d._gsap,p\u0026\u0026m\u0026\u0026p.width\u0026\u0026l\u0026\u0026p.time===Bt.time?Qe(s/p.width*h):((m||o===\"%\")\u0026\u0026(a.position=wi(e,\"position\")),d===e\u0026\u0026(a.position=\"static\"),d.appendChild(dn),_=dn[u],d.removeChild(dn),a.position=\"absolute\",l\u0026\u0026m\u0026\u0026(p=_n(d),p.time=Bt.time,p.width=d[u]),Qe(f?_*s/h:_\u0026\u0026s?h/_*s:0))))},on=function(e,t,i,n){var s;return wa||aa(),t in ki\u0026\u0026t!==\"transform\"\u0026\u0026(t=ki[t],~t.indexOf(\",\")\u0026\u0026(t=t.split(\",\")[0])),Yi[t]\u0026\u0026t!==\"transform\"?(s=Br(e,n),s=t!==\"transformOrigin\"?s[t]:s.svg?s.origin:Os(wi(e,Zi))+\" \"+s.zOrigin+\"px\"):(s=e.style[t],(!s||s===\"auto\"||n||~(s+\"\").indexOf(\"calc(\"))\u0026\u0026(s=Ns[t]\u0026\u0026Ns[t](e,t,i)||wi(e,t)||Zc(e,t)||(t===\"opacity\"?1:0))),i\u0026\u0026!~(s+\"\").trim().indexOf(\" \")?Ji(e,t,s,i)+i:s},xd=function(e,t,i,n){if(!i||i===\"none\"){var s=cr(t,e,1),o=s\u0026\u0026wi(e,s,1);o\u0026\u0026o!==i?(t=s,i=o):t===\"borderColor\"\u0026\u0026(i=wi(e,\"borderTopColor\"))}var a=new At(this._pt,e.style,t,0,1,Su),l=0,c=0,u,h,f,m,_,d,p,g,S,A,b,v,w;if(a.b=i,a.e=n,i+=\"\",n+=\"\",n===\"auto\"\u0026\u0026(e.style[t]=n,n=wi(e,t)||n,e.style[t]=i),u=[i,n],hu(u),i=u[0],n=u[1],f=i.match(Xn)||[],w=n.match(Xn)||[],w.length){for(;h=Xn.exec(n);)p=h[0],S=n.substring(l,h.index),_?_=(_+1)%5:(S.substr(-5)===\"rgba(\"||S.substr(-5)===\"hsla(\")\u0026\u0026(_=1),p!==(d=f[c++]||\"\")\u0026\u0026(m=parseFloat(d)||0,b=d.substr((m+\"\").length),v=p.charAt(1)===\"=\"?+(p.charAt(0)+\"1\"):0,v\u0026\u0026(p=p.substr(2)),g=parseFloat(p),A=p.substr((g+\"\").length),l=Xn.lastIndex-A.length,A||(A=A||Dt.units[t]||b,l===n.length\u0026\u0026(n+=A,a.e+=A)),b!==A\u0026\u0026(m=Ji(e,t,d,A)||0),a._pt={_next:a._pt,p:S||c===1?S:\",\",s:m,c:v?v*g:g-m,m:_\u0026\u0026_\u003c4||t===\"zIndex\"?Math.round:0});a.c=l\u003cn.length?n.substring(l,n.length):\"\"}else a.r=t===\"display\"\u0026\u0026n===\"none\"?Tu:wu;return Hc.test(n)\u0026\u0026(a.e=0),this._pt=a,a},Bl={top:\"0%\",bottom:\"100%\",left:\"0%\",right:\"100%\",center:\"50%\"},vd=function(e){var t=e.split(\" \"),i=t[0],n=t[1]||\"50%\";return(i===\"top\"||i===\"bottom\"||n===\"left\"||n===\"right\")\u0026\u0026(e=i,i=n,n=e),t[0]=Bl[i]||i,t[1]=Bl[n]||n,t.join(\" \")},yd=function(e,t){if(t.tween\u0026\u0026t.tween._time===t.tween._dur){var i=t.t,n=i.style,s=t.u,o=i._gsap,a,l,c;if(s===\"all\"||s===!0)n.cssText=\"\",l=1;else for(s=s.split(\",\"),c=s.length;--c\u003e-1;)a=s[c],Yi[a]\u0026\u0026(l=1,a=a===\"transformOrigin\"?Zi:lt),Ur(i,a);l\u0026\u0026(Ur(i,lt),o\u0026\u0026(o.svg\u0026\u0026i.removeAttribute(\"transform\"),Br(i,1),o.uncache=1))}},Ns={clearProps:function(e,t,i,n,s){if(s.data!==\"isFromStart\"){var o=e._pt=new At(e._pt,t,i,0,0,yd);return o.u=n,o.pr=-10,o.tween=s,e._props.push(i),1}}},zr=[1,0,0,1,0,0],Pu={},Lu=function(e){return e===\"matrix(1, 0, 0, 1, 0, 0)\"||e===\"none\"||!e},Gl=function(e){var t=wi(e,lt);return Lu(t)?zr:t.substr(7).match(kc).map(Qe)},Ta=function(e,t){var i=e._gsap||_n(e),n=e.style,s=Gl(e),o,a,l,c;return i.svg\u0026\u0026e.getAttribute(\"transform\")?(l=e.transform.baseVal.consolidate().matrix,s=[l.a,l.b,l.c,l.d,l.e,l.f],s.join(\",\")===\"1,0,0,1,0,0\"?zr:s):(s===zr\u0026\u0026!e.offsetParent\u0026\u0026e!==jn\u0026\u0026!i.svg\u0026\u0026(l=n.display,n.display=\"block\",o=e.parentNode,(!o||!e.offsetParent)\u0026\u0026(c=1,a=e.nextSibling,jn.appendChild(e)),s=Gl(e),l?n.display=l:Ur(e,\"display\"),c\u0026\u0026(a?o.insertBefore(e,a):o?o.appendChild(e):jn.removeChild(e))),t\u0026\u0026s.length\u003e6?[s[0],s[1],s[4],s[5],s[12],s[13]]:s)},la=function(e,t,i,n,s,o){var a=e._gsap,l=s||Ta(e,!0),c=a.xOrigin||0,u=a.yOrigin||0,h=a.xOffset||0,f=a.yOffset||0,m=l[0],_=l[1],d=l[2],p=l[3],g=l[4],S=l[5],A=t.split(\" \"),b=parseFloat(A[0])||0,v=parseFloat(A[1])||0,w,R,x,E;i?l!==zr\u0026\u0026(R=m*p-_*d)\u0026\u0026(x=b*(p/R)+v*(-d/R)+(d*S-p*g)/R,E=b*(-_/R)+v*(m/R)-(m*S-_*g)/R,b=x,v=E):(w=Ru(e),b=w.x+(~A[0].indexOf(\"%\")?b/100*w.width:b),v=w.y+(~(A[1]||A[0]).indexOf(\"%\")?v/100*w.height:v)),n||n!==!1\u0026\u0026a.smooth?(g=b-c,S=v-u,a.xOffset=h+(g*m+S*d)-g,a.yOffset=f+(g*_+S*p)-S):a.xOffset=a.yOffset=0,a.xOrigin=b,a.yOrigin=v,a.smooth=!!n,a.origin=t,a.originIsAbsolute=!!i,e.style[Zi]=\"0px 0px\",o\u0026\u0026(Hi(o,a,\"xOrigin\",c,b),Hi(o,a,\"yOrigin\",u,v),Hi(o,a,\"xOffset\",h,a.xOffset),Hi(o,a,\"yOffset\",f,a.yOffset)),e.setAttribute(\"data-svg-origin\",b+\" \"+v)},Br=function(e,t){var i=e._gsap||new mu(e);if(\"x\"in i\u0026\u0026!t\u0026\u0026!i.uncache)return i;var n=e.style,s=i.scaleX\u003c0,o=\"px\",a=\"deg\",l=wi(e,Zi)||\"0\",c,u,h,f,m,_,d,p,g,S,A,b,v,w,R,x,E,I,F,j,Z,P,H,U,V,X,B,q,Q,K,J,ae;return c=u=h=_=d=p=g=S=A=0,f=m=1,i.svg=!!(e.getCTM\u0026\u0026Cu(e)),w=Ta(e,i.svg),i.svg\u0026\u0026(U=(!i.uncache||l===\"0px 0px\")\u0026\u0026!t\u0026\u0026e.getAttribute(\"data-svg-origin\"),la(e,U||l,!!U||i.originIsAbsolute,i.smooth!==!1,w)),b=i.xOrigin||0,v=i.yOrigin||0,w!==zr\u0026\u0026(I=w[0],F=w[1],j=w[2],Z=w[3],c=P=w[4],u=H=w[5],w.length===6?(f=Math.sqrt(I*I+F*F),m=Math.sqrt(Z*Z+j*j),_=I||F?An(F,I)*sn:0,g=j||Z?An(j,Z)*sn+_:0,g\u0026\u0026(m*=Math.abs(Math.cos(g*$n))),i.svg\u0026\u0026(c-=b-(b*I+v*j),u-=v-(b*F+v*Z))):(ae=w[6],K=w[7],B=w[8],q=w[9],Q=w[10],J=w[11],c=w[12],u=w[13],h=w[14],R=An(ae,Q),d=R*sn,R\u0026\u0026(x=Math.cos(-R),E=Math.sin(-R),U=P*x+B*E,V=H*x+q*E,X=ae*x+Q*E,B=P*-E+B*x,q=H*-E+q*x,Q=ae*-E+Q*x,J=K*-E+J*x,P=U,H=V,ae=X),R=An(-j,Q),p=R*sn,R\u0026\u0026(x=Math.cos(-R),E=Math.sin(-R),U=I*x-B*E,V=F*x-q*E,X=j*x-Q*E,J=Z*E+J*x,I=U,F=V,j=X),R=An(F,I),_=R*sn,R\u0026\u0026(x=Math.cos(R),E=Math.sin(R),U=I*x+F*E,V=P*x+H*E,F=F*x-I*E,H=H*x-P*E,I=U,P=V),d\u0026\u0026Math.abs(d)+Math.abs(_)\u003e359.9\u0026\u0026(d=_=0,p=180-p),f=Qe(Math.sqrt(I*I+F*F+j*j)),m=Qe(Math.sqrt(H*H+ae*ae)),R=An(P,H),g=Math.abs(R)\u003e2e-4?R*sn:0,A=J?1/(J\u003c0?-J:J):0),i.svg\u0026\u0026(U=e.getAttribute(\"transform\"),i.forceCSS=e.setAttribute(\"transform\",\"\")||!Lu(wi(e,lt)),U\u0026\u0026e.setAttribute(\"transform\",U))),Math.abs(g)\u003e90\u0026\u0026Math.abs(g)\u003c270\u0026\u0026(s?(f*=-1,g+=_\u003c=0?180:-180,_+=_\u003c=0?180:-180):(m*=-1,g+=g\u003c=0?180:-180)),i.x=c-((i.xPercent=c\u0026\u0026(i.xPercent||(Math.round(e.offsetWidth/2)===Math.round(-c)?-50:0)))?e.offsetWidth*i.xPercent/100:0)+o,i.y=u-((i.yPercent=u\u0026\u0026(i.yPercent||(Math.round(e.offsetHeight/2)===Math.round(-u)?-50:0)))?e.offsetHeight*i.yPercent/100:0)+o,i.z=h+o,i.scaleX=Qe(f),i.scaleY=Qe(m),i.rotation=Qe(_)+a,i.rotationX=Qe(d)+a,i.rotationY=Qe(p)+a,i.skewX=g+a,i.skewY=S+a,i.transformPerspective=A+o,(i.zOrigin=parseFloat(l.split(\" \")[2])||0)\u0026\u0026(n[Zi]=Os(l)),i.xOffset=i.yOffset=0,i.force3D=Dt.force3D,i.renderTransform=i.svg?Md:Au?Du:Sd,i.uncache=0,i},Os=function(e){return(e=e.split(\" \"))[0]+\" \"+e[1]},_o=function(e,t,i){var n=Et(t);return Qe(parseFloat(t)+parseFloat(Ji(e,\"x\",i+\"px\",n)))+n},Sd=function(e,t){t.z=\"0px\",t.rotationY=t.rotationX=\"0deg\",t.force3D=0,Du(e,t)},Qi=\"0deg\",_r=\"0px\",en=\") \",Du=function(e,t){var i=t||this,n=i.xPercent,s=i.yPercent,o=i.x,a=i.y,l=i.z,c=i.rotation,u=i.rotationY,h=i.rotationX,f=i.skewX,m=i.skewY,_=i.scaleX,d=i.scaleY,p=i.transformPerspective,g=i.force3D,S=i.target,A=i.zOrigin,b=\"\",v=g===\"auto\"\u0026\u0026e\u0026\u0026e!==1||g===!0;if(A\u0026\u0026(h!==Qi||u!==Qi)){var w=parseFloat(u)*$n,R=Math.sin(w),x=Math.cos(w),E;w=parseFloat(h)*$n,E=Math.cos(w),o=_o(S,o,R*E*-A),a=_o(S,a,-Math.sin(w)*-A),l=_o(S,l,x*E*-A+A)}p!==_r\u0026\u0026(b+=\"perspective(\"+p+en),(n||s)\u0026\u0026(b+=\"translate(\"+n+\"%, \"+s+\"%) \"),(v||o!==_r||a!==_r||l!==_r)\u0026\u0026(b+=l!==_r||v?\"translate3d(\"+o+\", \"+a+\", \"+l+\") \":\"translate(\"+o+\", \"+a+en),c!==Qi\u0026\u0026(b+=\"rotate(\"+c+en),u!==Qi\u0026\u0026(b+=\"rotateY(\"+u+en),h!==Qi\u0026\u0026(b+=\"rotateX(\"+h+en),(f!==Qi||m!==Qi)\u0026\u0026(b+=\"skew(\"+f+\", \"+m+en),(_!==1||d!==1)\u0026\u0026(b+=\"scale(\"+_+\", \"+d+en),S.style[lt]=b||\"translate(0, 0)\"},Md=function(e,t){var i=t||this,n=i.xPercent,s=i.yPercent,o=i.x,a=i.y,l=i.rotation,c=i.skewX,u=i.skewY,h=i.scaleX,f=i.scaleY,m=i.target,_=i.xOrigin,d=i.yOrigin,p=i.xOffset,g=i.yOffset,S=i.forceCSS,A=parseFloat(o),b=parseFloat(a),v,w,R,x,E;l=parseFloat(l),c=parseFloat(c),u=parseFloat(u),u\u0026\u0026(u=parseFloat(u),c+=u,l+=u),l||c?(l*=$n,c*=$n,v=Math.cos(l)*h,w=Math.sin(l)*h,R=Math.sin(l-c)*-f,x=Math.cos(l-c)*f,c\u0026\u0026(u*=$n,E=Math.tan(c-u),E=Math.sqrt(1+E*E),R*=E,x*=E,u\u0026\u0026(E=Math.tan(u),E=Math.sqrt(1+E*E),v*=E,w*=E)),v=Qe(v),w=Qe(w),R=Qe(R),x=Qe(x)):(v=h,x=f,w=R=0),(A\u0026\u0026!~(o+\"\").indexOf(\"px\")||b\u0026\u0026!~(a+\"\").indexOf(\"px\"))\u0026\u0026(A=Ji(m,\"x\",o,\"px\"),b=Ji(m,\"y\",a,\"px\")),(_||d||p||g)\u0026\u0026(A=Qe(A+_-(_*v+d*R)+p),b=Qe(b+d-(_*w+d*x)+g)),(n||s)\u0026\u0026(E=m.getBBox(),A=Qe(A+n/100*E.width),b=Qe(b+s/100*E.height)),E=\"matrix(\"+v+\",\"+w+\",\"+R+\",\"+x+\",\"+A+\",\"+b+\")\",m.setAttribute(\"transform\",E),S\u0026\u0026(m.style[lt]=E)},Ed=function(e,t,i,n,s,o){var a=360,l=st(s),c=parseFloat(s)*(l\u0026\u0026~s.indexOf(\"rad\")?sn:1),u=o?c*o:c-n,h=n+u+\"deg\",f,m;return l\u0026\u0026(f=s.split(\"_\")[1],f===\"short\"\u0026\u0026(u%=a,u!==u%(a/2)\u0026\u0026(u+=u\u003c0?a:-a)),f===\"cw\"\u0026\u0026u\u003c0?u=(u+a*Nl)%a-~~(u/a)*a:f===\"ccw\"\u0026\u0026u\u003e0\u0026\u0026(u=(u-a*Nl)%a-~~(u/a)*a)),e._pt=m=new At(e._pt,t,i,n,u,cd),m.e=h,m.u=\"deg\",e._props.push(i),m},kl=function(e,t){for(var i in t)e[i]=t[i];return e},bd=function(e,t,i){var n=kl({},i._gsap),s=\"perspective,force3D,transformOrigin,svgOrigin\",o=i.style,a,l,c,u,h,f,m,_;n.svg?(c=i.getAttribute(\"transform\"),i.setAttribute(\"transform\",\"\"),o[lt]=t,a=Br(i,1),Ur(i,lt),i.setAttribute(\"transform\",c)):(c=getComputedStyle(i)[lt],o[lt]=t,a=Br(i,1),o[lt]=c);for(l in Yi)c=n[l],u=a[l],c!==u\u0026\u0026s.indexOf(l)\u003c0\u0026\u0026(m=Et(c),_=Et(u),h=m!==_?Ji(i,l,c,_):parseFloat(c),f=parseFloat(u),e._pt=new At(e._pt,a,l,h,f-h,bu),e._pt.u=_||0,e._props.push(l));kl(a,n)};Tt(\"padding,margin,Width,Radius\",function(r,e){var t=\"Top\",i=\"Right\",n=\"Bottom\",s=\"Left\",o=(e\u003c3?[t,i,n,s]:[t+s,t+i,n+i,n+s]).map(function(a){return e\u003c2?r+a:\"border\"+a+r});Ns[e\u003e1?\"border\"+r:r]=function(a,l,c,u,h){var f,m;if(arguments.length\u003c4)return f=o.map(function(_){return on(a,_,c)}),m=f.join(\" \"),m.split(f[0]).length===5?f[0]:m;f=(u+\"\").split(\" \"),m={},o.forEach(function(_,d){return m[_]=f[d]=f[d]||f[(d-1)/2|0]}),a.init(l,m,h)}});var Fu={name:\"css\",register:aa,targetTest:function(e){return e.style\u0026\u0026e.nodeType},init:function(e,t,i,n,s){var o=this._props,a=e.style,l=i.vars.startAt,c,u,h,f,m,_,d,p,g,S,A,b,v,w,R;wa||aa();for(d in t)if(d!==\"autoRound\"\u0026\u0026(u=t[d],!(Lt[d]\u0026\u0026_u(d,t,i,n,e,s)))){if(m=typeof u,_=Ns[d],m===\"function\"\u0026\u0026(u=u.call(i,n,e,s),m=typeof u),m===\"string\"\u0026\u0026~u.indexOf(\"random(\")\u0026\u0026(u=Nr(u)),_)_(this,e,d,u,i)\u0026\u0026(R=1);else if(d.substr(0,2)===\"--\")c=(getComputedStyle(e).getPropertyValue(d)+\"\").trim(),u+=\"\",Xi.lastIndex=0,Xi.test(c)||(p=Et(c),g=Et(u)),g?p!==g\u0026\u0026(c=Ji(e,d,c,g)+g):p\u0026\u0026(u+=p),this.add(a,\"setProperty\",c,u,n,s,0,0,d),o.push(d);else if(m!==\"undefined\"){if(l\u0026\u0026d in l?(c=typeof l[d]==\"function\"?l[d].call(i,n,e,s):l[d],st(c)\u0026\u0026~c.indexOf(\"random(\")\u0026\u0026(c=Nr(c)),Et(c+\"\")||(c+=Dt.units[d]||Et(on(e,d))||\"\"),(c+\"\").charAt(1)===\"=\"\u0026\u0026(c=on(e,d))):c=on(e,d),f=parseFloat(c),S=m===\"string\"\u0026\u0026u.charAt(1)===\"=\"?+(u.charAt(0)+\"1\"):0,S\u0026\u0026(u=u.substr(2)),h=parseFloat(u),d in ki\u0026\u0026(d===\"autoAlpha\"\u0026\u0026(f===1\u0026\u0026on(e,\"visibility\")===\"hidden\"\u0026\u0026h\u0026\u0026(f=0),Hi(this,a,\"visibility\",f?\"inherit\":\"hidden\",h?\"inherit\":\"hidden\",!h)),d!==\"scale\"\u0026\u0026d!==\"transform\"\u0026\u0026(d=ki[d],~d.indexOf(\",\")\u0026\u0026(d=d.split(\",\")[0]))),A=d in Yi,A){if(b||(v=e._gsap,v.renderTransform\u0026\u0026!t.parseTransform||Br(e,t.parseTransform),w=t.smoothOrigin!==!1\u0026\u0026v.smooth,b=this._pt=new At(this._pt,a,lt,0,1,v.renderTransform,v,0,-1),b.dep=1),d===\"scale\")this._pt=new At(this._pt,v,\"scaleY\",v.scaleY,(S?S*h:h-v.scaleY)||0),o.push(\"scaleY\",d),d+=\"X\";else if(d===\"transformOrigin\"){u=vd(u),v.svg?la(e,u,0,w,0,this):(g=parseFloat(u.split(\" \")[2])||0,g!==v.zOrigin\u0026\u0026Hi(this,v,\"zOrigin\",v.zOrigin,g),Hi(this,a,d,Os(c),Os(u)));continue}else if(d===\"svgOrigin\"){la(e,u,1,w,0,this);continue}else if(d in Pu){Ed(this,v,d,f,u,S);continue}else if(d===\"smoothOrigin\"){Hi(this,v,\"smooth\",v.smooth,u);continue}else if(d===\"force3D\"){v[d]=u;continue}else if(d===\"transform\"){bd(this,u,e);continue}}else d in a||(d=cr(d)||d);if(A||(h||h===0)\u0026\u0026(f||f===0)\u0026\u0026!ld.test(u)\u0026\u0026d in a)p=(c+\"\").substr((f+\"\").length),h||(h=0),g=Et(u)||(d in Dt.units?Dt.units[d]:p),p!==g\u0026\u0026(f=Ji(e,d,c,g)),this._pt=new At(this._pt,A?v:a,d,f,S?S*h:h-f,!A\u0026\u0026(g===\"px\"||d===\"zIndex\")\u0026\u0026t.autoRound!==!1?hd:bu),this._pt.u=g||0,p!==g\u0026\u0026g!==\"%\"\u0026\u0026(this._pt.b=c,this._pt.r=ud);else if(d in a)xd.call(this,e,d,c,u);else if(d in e)this.add(e,d,c||e[d],u,n,s);else{ga(d,u);continue}o.push(d)}}R\u0026\u0026Mu(this)},get:on,aliases:ki,getSetter:function(e,t,i){var n=ki[t];return n\u0026\u0026n.indexOf(\",\")\u003c0\u0026\u0026(t=n),t in Yi\u0026\u0026t!==Zi\u0026\u0026(e._gsap.x||on(e,\"x\"))?i\u0026\u0026Il===i?t===\"scale\"?md:pd:(Il=i||{})\u0026\u0026(t===\"scale\"?_d:gd):e.style\u0026\u0026!ma(e.style[t])?fd:~t.indexOf(\"-\")?dd:Ea(e,t)},core:{_removeProperty:Ur,_getMatrix:Ta}};ui.utils.checkPrefix=cr;(function(r,e,t,i){var n=Tt(r+\",\"+e+\",\"+t,function(s){Yi[s]=1});Tt(e,function(s){Dt.units[s]=\"deg\",Pu[s]=1}),ki[n[13]]=r+\",\"+e,Tt(i,function(s){var o=s.split(\":\");ki[o[1]]=n[o[0]]})})(\"x,y,z,scale,scaleX,scaleY,xPercent,yPercent\",\"rotation,rotationX,rotationY,skewX,skewY\",\"transform,transformOrigin,svgOrigin,force3D,smoothOrigin,transformPerspective\",\"0:translateX,1:translateY,2:translateZ,8:rotate,8:rotationZ,8:rotateZ,9:rotateX,10:rotateY\");Tt(\"x,y,z,top,right,bottom,left,width,height,fontSize,padding,margin,perspective\",function(r){Dt.units[r]=\"px\"});ui.registerPlugin(Fu);var Vn=ui.registerPlugin(Fu)||ui;Vn.core.Tween;const za=class{constructor(){}static get instance(){return this._instance||(this._instance=new za),this._instance}a(e,t,i=1,n=0,s=void 0,o=void 0,a=void 0,l=void 0){Vn.killTweensOf(e);let c={},u={};for(var h in t){const f=t[h];f[0]!=null\u0026\u0026f[0]!=null?(c[h]=f[0],u[h]=f[1]):u[h]=f}Vn.set(e,c),s==null\u0026\u0026(s=Ll.easeNone),u.ease=s,u.duration=i,u.delay=n,o!=null\u0026\u0026(u.onStart=o),a!=null\u0026\u0026(u.onUpdate=a),l!=null\u0026\u0026(u.onComplete=l),Vn.to(e,u)}set(e,t){Vn.set(e,t)}kill(e){Vn.killTweensOf(e)}};let He=za;O(He,\"_instance\"),O(He,\"EaseNone\",Ll.easeNone),O(He,\"Power1EaseIn\",uo.easeIn),O(He,\"Power1EaseOut\",uo.easeOut),O(He,\"Power1EaseInOut\",uo.easeInOut),O(He,\"Power2EaseIn\",ho.easeIn),O(He,\"Power2EaseOut\",ho.easeOut),O(He,\"Power2EaseInOut\",ho.easeInOut),O(He,\"Power3EaseIn\",fo.easeIn),O(He,\"Power3EaseOut\",fo.easeOut),O(He,\"Power3EaseInOut\",fo.easeInOut),O(He,\"ExpoEaseIn\",po.easeIn),O(He,\"ExpoEaseOut\",po.easeOut),O(He,\"ExpoEaseInOut\",po.easeInOut),O(He,\"SpringA\",Dl.easeOut.config(1,.5)),O(He,\"SpringB\",Dl.easeOut.config(1,.75));class Wr{constructor(e=0,t=0,i=0,n=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=i,this._w=n}static slerp(e,t,i,n){return console.warn(\"THREE.Quaternion: Static .slerp() has been deprecated. Use qm.slerpQuaternions( qa, qb, t ) instead.\"),i.slerpQuaternions(e,t,n)}static slerpFlat(e,t,i,n,s,o,a){let l=i[n+0],c=i[n+1],u=i[n+2],h=i[n+3];const f=s[o+0],m=s[o+1],_=s[o+2],d=s[o+3];if(a===0){e[t+0]=l,e[t+1]=c,e[t+2]=u,e[t+3]=h;return}if(a===1){e[t+0]=f,e[t+1]=m,e[t+2]=_,e[t+3]=d;return}if(h!==d||l!==f||c!==m||u!==_){let p=1-a;const g=l*f+c*m+u*_+h*d,S=g\u003e=0?1:-1,A=1-g*g;if(A\u003eNumber.EPSILON){const v=Math.sqrt(A),w=Math.atan2(v,g*S);p=Math.sin(p*w)/v,a=Math.sin(a*w)/v}const b=a*S;if(l=l*p+f*b,c=c*p+m*b,u=u*p+_*b,h=h*p+d*b,p===1-a){const v=1/Math.sqrt(l*l+c*c+u*u+h*h);l*=v,c*=v,u*=v,h*=v}}e[t]=l,e[t+1]=c,e[t+2]=u,e[t+3]=h}static multiplyQuaternionsFlat(e,t,i,n,s,o){const a=i[n],l=i[n+1],c=i[n+2],u=i[n+3],h=s[o],f=s[o+1],m=s[o+2],_=s[o+3];return e[t]=a*_+u*h+l*m-c*f,e[t+1]=l*_+u*f+c*h-a*m,e[t+2]=c*_+u*m+a*f-l*h,e[t+3]=u*_-a*h-l*f-c*m,e}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get w(){return this._w}set w(e){this._w=e,this._onChangeCallback()}set(e,t,i,n){return this._x=e,this._y=t,this._z=i,this._w=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._w)}copy(e){return this._x=e.x,this._y=e.y,this._z=e.z,this._w=e.w,this._onChangeCallback(),this}setFromEuler(e,t){if(!(e\u0026\u0026e.isEuler))throw new Error(\"THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.\");const i=e._x,n=e._y,s=e._z,o=e._order,a=Math.cos,l=Math.sin,c=a(i/2),u=a(n/2),h=a(s/2),f=l(i/2),m=l(n/2),_=l(s/2);switch(o){case\"XYZ\":this._x=f*u*h+c*m*_,this._y=c*m*h-f*u*_,this._z=c*u*_+f*m*h,this._w=c*u*h-f*m*_;break;case\"YXZ\":this._x=f*u*h+c*m*_,this._y=c*m*h-f*u*_,this._z=c*u*_-f*m*h,this._w=c*u*h+f*m*_;break;case\"ZXY\":this._x=f*u*h-c*m*_,this._y=c*m*h+f*u*_,this._z=c*u*_+f*m*h,this._w=c*u*h-f*m*_;break;case\"ZYX\":this._x=f*u*h-c*m*_,this._y=c*m*h+f*u*_,this._z=c*u*_-f*m*h,this._w=c*u*h+f*m*_;break;case\"YZX\":this._x=f*u*h+c*m*_,this._y=c*m*h+f*u*_,this._z=c*u*_-f*m*h,this._w=c*u*h-f*m*_;break;case\"XZY\":this._x=f*u*h-c*m*_,this._y=c*m*h-f*u*_,this._z=c*u*_+f*m*h,this._w=c*u*h+f*m*_;break;default:console.warn(\"THREE.Quaternion: .setFromEuler() encountered an unknown order: \"+o)}return t!==!1\u0026\u0026this._onChangeCallback(),this}setFromAxisAngle(e,t){const i=t/2,n=Math.sin(i);return this._x=e.x*n,this._y=e.y*n,this._z=e.z*n,this._w=Math.cos(i),this._onChangeCallback(),this}setFromRotationMatrix(e){const t=e.elements,i=t[0],n=t[4],s=t[8],o=t[1],a=t[5],l=t[9],c=t[2],u=t[6],h=t[10],f=i+a+h;if(f\u003e0){const m=.5/Math.sqrt(f+1);this._w=.25/m,this._x=(u-l)*m,this._y=(s-c)*m,this._z=(o-n)*m}else if(i\u003ea\u0026\u0026i\u003eh){const m=2*Math.sqrt(1+i-a-h);this._w=(u-l)/m,this._x=.25*m,this._y=(n+o)/m,this._z=(s+c)/m}else if(a\u003eh){const m=2*Math.sqrt(1+a-i-h);this._w=(s-c)/m,this._x=(n+o)/m,this._y=.25*m,this._z=(l+u)/m}else{const m=2*Math.sqrt(1+h-i-a);this._w=(o-n)/m,this._x=(s+c)/m,this._y=(l+u)/m,this._z=.25*m}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let i=e.dot(t)+1;return i\u003cNumber.EPSILON?(i=0,Math.abs(e.x)\u003eMath.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=i):(this._x=0,this._y=-e.z,this._z=e.y,this._w=i)):(this._x=e.y*t.z-e.z*t.y,this._y=e.z*t.x-e.x*t.z,this._z=e.x*t.y-e.y*t.x,this._w=i),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(gt(this.dot(e),-1,1)))}rotateTowards(e,t){const i=this.angleTo(e);if(i===0)return this;const n=Math.min(1,t/i);return this.slerp(e,n),this}identity(){return this.set(0,0,0,1)}invert(){return this.conjugate()}conjugate(){return this._x*=-1,this._y*=-1,this._z*=-1,this._onChangeCallback(),this}dot(e){return this._x*e._x+this._y*e._y+this._z*e._z+this._w*e._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 e=this.length();return e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x=this._x*e,this._y=this._y*e,this._z=this._z*e,this._w=this._w*e),this._onChangeCallback(),this}multiply(e,t){return t!==void 0?(console.warn(\"THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.\"),this.multiplyQuaternions(e,t)):this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){const i=e._x,n=e._y,s=e._z,o=e._w,a=t._x,l=t._y,c=t._z,u=t._w;return this._x=i*u+o*a+n*c-s*l,this._y=n*u+o*l+s*a-i*c,this._z=s*u+o*c+i*l-n*a,this._w=o*u-i*a-n*l-s*c,this._onChangeCallback(),this}slerp(e,t){if(t===0)return this;if(t===1)return this.copy(e);const i=this._x,n=this._y,s=this._z,o=this._w;let a=o*e._w+i*e._x+n*e._y+s*e._z;if(a\u003c0?(this._w=-e._w,this._x=-e._x,this._y=-e._y,this._z=-e._z,a=-a):this.copy(e),a\u003e=1)return this._w=o,this._x=i,this._y=n,this._z=s,this;const l=1-a*a;if(l\u003c=Number.EPSILON){const m=1-t;return this._w=m*o+t*this._w,this._x=m*i+t*this._x,this._y=m*n+t*this._y,this._z=m*s+t*this._z,this.normalize(),this._onChangeCallback(),this}const c=Math.sqrt(l),u=Math.atan2(c,a),h=Math.sin((1-t)*u)/c,f=Math.sin(t*u)/c;return this._w=o*h+this._w*f,this._x=i*h+this._x*f,this._y=n*h+this._y*f,this._z=s*h+this._z*f,this._onChangeCallback(),this}slerpQuaternions(e,t,i){return this.copy(e).slerp(t,i)}random(){const e=Math.random(),t=Math.sqrt(1-e),i=Math.sqrt(e),n=2*Math.PI*Math.random(),s=2*Math.PI*Math.random();return this.set(t*Math.cos(n),i*Math.sin(s),i*Math.cos(s),t*Math.sin(n))}equals(e){return e._x===this._x\u0026\u0026e._y===this._y\u0026\u0026e._z===this._z\u0026\u0026e._w===this._w}fromArray(e,t=0){return this._x=e[t],this._y=e[t+1],this._z=e[t+2],this._w=e[t+3],this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._w,e}fromBufferAttribute(e,t){return this._x=e.getX(t),this._y=e.getY(t),this._z=e.getZ(t),this._w=e.getW(t),this}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}}class L{constructor(e=0,t=0,i=0){this.isVector3=!0,this.x=e,this.y=t,this.z=i}set(e,t,i){return i===void 0\u0026\u0026(i=this.z),this.x=e,this.y=t,this.z=i,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;default:throw new Error(\"index is out of range: \"+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw new Error(\"index is out of range: \"+e)}}clone(){return new this.constructor(this.x,this.y,this.z)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this}add(e,t){return t!==void 0?(console.warn(\"THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this.z+=e.z,this)}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this}sub(e,t){return t!==void 0?(console.warn(\"THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this.z-=e.z,this)}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this}multiply(e,t){return t!==void 0?(console.warn(\"THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.\"),this.multiplyVectors(e,t)):(this.x*=e.x,this.y*=e.y,this.z*=e.z,this)}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this}multiplyVectors(e,t){return this.x=e.x*t.x,this.y=e.y*t.y,this.z=e.z*t.z,this}applyEuler(e){return e\u0026\u0026e.isEuler||console.error(\"THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.\"),this.applyQuaternion(Hl.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Hl.setFromAxisAngle(e,t))}applyMatrix3(e){const t=this.x,i=this.y,n=this.z,s=e.elements;return this.x=s[0]*t+s[3]*i+s[6]*n,this.y=s[1]*t+s[4]*i+s[7]*n,this.z=s[2]*t+s[5]*i+s[8]*n,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){const t=this.x,i=this.y,n=this.z,s=e.elements,o=1/(s[3]*t+s[7]*i+s[11]*n+s[15]);return this.x=(s[0]*t+s[4]*i+s[8]*n+s[12])*o,this.y=(s[1]*t+s[5]*i+s[9]*n+s[13])*o,this.z=(s[2]*t+s[6]*i+s[10]*n+s[14])*o,this}applyQuaternion(e){const t=this.x,i=this.y,n=this.z,s=e.x,o=e.y,a=e.z,l=e.w,c=l*t+o*n-a*i,u=l*i+a*t-s*n,h=l*n+s*i-o*t,f=-s*t-o*i-a*n;return this.x=c*l+f*-s+u*-a-h*-o,this.y=u*l+f*-o+h*-s-c*-a,this.z=h*l+f*-a+c*-o-u*-s,this}project(e){return this.applyMatrix4(e.matrixWorldInverse).applyMatrix4(e.projectionMatrix)}unproject(e){return this.applyMatrix4(e.projectionMatrixInverse).applyMatrix4(e.matrixWorld)}transformDirection(e){const t=this.x,i=this.y,n=this.z,s=e.elements;return this.x=s[0]*t+s[4]*i+s[8]*n,this.y=s[1]*t+s[5]*i+s[9]*n,this.z=s[2]*t+s[6]*i+s[10]*n,this.normalize()}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this}divideScalar(e){return this.multiplyScalar(1/e)}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z}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(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this}cross(e,t){return t!==void 0?(console.warn(\"THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.\"),this.crossVectors(e,t)):this.crossVectors(this,e)}crossVectors(e,t){const i=e.x,n=e.y,s=e.z,o=t.x,a=t.y,l=t.z;return this.x=n*l-s*a,this.y=s*o-i*l,this.z=i*a-n*o,this}projectOnVector(e){const t=e.lengthSq();if(t===0)return this.set(0,0,0);const i=e.dot(this)/t;return this.copy(e).multiplyScalar(i)}projectOnPlane(e){return go.copy(this).projectOnVector(e),this.sub(go)}reflect(e){return this.sub(go.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){const t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;const i=this.dot(e)/t;return Math.acos(gt(i,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y,n=this.z-e.z;return t*t+i*i+n*n}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)+Math.abs(this.z-e.z)}setFromSpherical(e){return this.setFromSphericalCoords(e.radius,e.phi,e.theta)}setFromSphericalCoords(e,t,i){const n=Math.sin(t)*e;return this.x=n*Math.sin(i),this.y=Math.cos(t)*e,this.z=n*Math.cos(i),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,i){return this.x=e*Math.sin(t),this.y=i,this.z=e*Math.cos(t),this}setFromMatrixPosition(e){const t=e.elements;return this.x=t[12],this.y=t[13],this.z=t[14],this}setFromMatrixScale(e){const t=this.setFromMatrixColumn(e,0).length(),i=this.setFromMatrixColumn(e,1).length(),n=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=i,this.z=n,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}equals(e){return e.x===this.x\u0026\u0026e.y===this.y\u0026\u0026e.z===this.z}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e}fromBufferAttribute(e,t,i){return i!==void 0\u0026\u0026console.warn(\"THREE.Vector3: offset has been removed from .fromBufferAttribute().\"),this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this}randomDirection(){const e=(Math.random()-.5)*2,t=Math.random()*Math.PI*2,i=Math.sqrt(1-e**2);return this.x=i*Math.cos(t),this.y=i*Math.sin(t),this.z=e,this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}}const go=new L,Hl=new Wr;class Xr{constructor(e=new L(1/0,1/0,1/0),t=new L(-1/0,-1/0,-1/0)){this.isBox3=!0,this.min=e,this.max=t}set(e,t){return this.min.copy(e),this.max.copy(t),this}setFromArray(e){let t=1/0,i=1/0,n=1/0,s=-1/0,o=-1/0,a=-1/0;for(let l=0,c=e.length;l\u003cc;l+=3){const u=e[l],h=e[l+1],f=e[l+2];u\u003ct\u0026\u0026(t=u),h\u003ci\u0026\u0026(i=h),f\u003cn\u0026\u0026(n=f),u\u003es\u0026\u0026(s=u),h\u003eo\u0026\u0026(o=h),f\u003ea\u0026\u0026(a=f)}return this.min.set(t,i,n),this.max.set(s,o,a),this}setFromBufferAttribute(e){let t=1/0,i=1/0,n=1/0,s=-1/0,o=-1/0,a=-1/0;for(let l=0,c=e.count;l\u003cc;l++){const u=e.getX(l),h=e.getY(l),f=e.getZ(l);u\u003ct\u0026\u0026(t=u),h\u003ci\u0026\u0026(i=h),f\u003cn\u0026\u0026(n=f),u\u003es\u0026\u0026(s=u),h\u003eo\u0026\u0026(o=h),f\u003ea\u0026\u0026(a=f)}return this.min.set(t,i,n),this.max.set(s,o,a),this}setFromPoints(e){this.makeEmpty();for(let t=0,i=e.length;t\u003ci;t++)this.expandByPoint(e[t]);return this}setFromCenterAndSize(e,t){const i=tn.copy(t).multiplyScalar(.5);return this.min.copy(e).sub(i),this.max.copy(e).add(i),this}setFromObject(e,t=!1){return this.makeEmpty(),this.expandByObject(e,t)}clone(){return new this.constructor().copy(this)}copy(e){return this.min.copy(e.min),this.max.copy(e.max),this}makeEmpty(){return this.min.x=this.min.y=this.min.z=1/0,this.max.x=this.max.y=this.max.z=-1/0,this}isEmpty(){return this.max.x\u003cthis.min.x||this.max.y\u003cthis.min.y||this.max.z\u003cthis.min.z}getCenter(e){return this.isEmpty()?e.set(0,0,0):e.addVectors(this.min,this.max).multiplyScalar(.5)}getSize(e){return this.isEmpty()?e.set(0,0,0):e.subVectors(this.max,this.min)}expandByPoint(e){return this.min.min(e),this.max.max(e),this}expandByVector(e){return this.min.sub(e),this.max.add(e),this}expandByScalar(e){return this.min.addScalar(-e),this.max.addScalar(e),this}expandByObject(e,t=!1){e.updateWorldMatrix(!1,!1);const i=e.geometry;if(i!==void 0)if(t\u0026\u0026i.attributes!=null\u0026\u0026i.attributes.position!==void 0){const s=i.attributes.position;for(let o=0,a=s.count;o\u003ca;o++)tn.fromBufferAttribute(s,o).applyMatrix4(e.matrixWorld),this.expandByPoint(tn)}else i.boundingBox===null\u0026\u0026i.computeBoundingBox(),xo.copy(i.boundingBox),xo.applyMatrix4(e.matrixWorld),this.union(xo);const n=e.children;for(let s=0,o=n.length;s\u003co;s++)this.expandByObject(n[s],t);return this}containsPoint(e){return!(e.x\u003cthis.min.x||e.x\u003ethis.max.x||e.y\u003cthis.min.y||e.y\u003ethis.max.y||e.z\u003cthis.min.z||e.z\u003ethis.max.z)}containsBox(e){return this.min.x\u003c=e.min.x\u0026\u0026e.max.x\u003c=this.max.x\u0026\u0026this.min.y\u003c=e.min.y\u0026\u0026e.max.y\u003c=this.max.y\u0026\u0026this.min.z\u003c=e.min.z\u0026\u0026e.max.z\u003c=this.max.z}getParameter(e,t){return t.set((e.x-this.min.x)/(this.max.x-this.min.x),(e.y-this.min.y)/(this.max.y-this.min.y),(e.z-this.min.z)/(this.max.z-this.min.z))}intersectsBox(e){return!(e.max.x\u003cthis.min.x||e.min.x\u003ethis.max.x||e.max.y\u003cthis.min.y||e.min.y\u003ethis.max.y||e.max.z\u003cthis.min.z||e.min.z\u003ethis.max.z)}intersectsSphere(e){return this.clampPoint(e.center,tn),tn.distanceToSquared(e.center)\u003c=e.radius*e.radius}intersectsPlane(e){let t,i;return e.normal.x\u003e0?(t=e.normal.x*this.min.x,i=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,i=e.normal.x*this.min.x),e.normal.y\u003e0?(t+=e.normal.y*this.min.y,i+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,i+=e.normal.y*this.min.y),e.normal.z\u003e0?(t+=e.normal.z*this.min.z,i+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,i+=e.normal.z*this.min.z),t\u003c=-e.constant\u0026\u0026i\u003e=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(gr),es.subVectors(this.max,gr),Rn.subVectors(e.a,gr),Cn.subVectors(e.b,gr),Pn.subVectors(e.c,gr),Li.subVectors(Cn,Rn),Di.subVectors(Pn,Cn),nn.subVectors(Rn,Pn);let t=[0,-Li.z,Li.y,0,-Di.z,Di.y,0,-nn.z,nn.y,Li.z,0,-Li.x,Di.z,0,-Di.x,nn.z,0,-nn.x,-Li.y,Li.x,0,-Di.y,Di.x,0,-nn.y,nn.x,0];return!vo(t,Rn,Cn,Pn,es)||(t=[1,0,0,0,1,0,0,0,1],!vo(t,Rn,Cn,Pn,es))?!1:(ts.crossVectors(Li,Di),t=[ts.x,ts.y,ts.z],vo(t,Rn,Cn,Pn,es))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return tn.copy(e).clamp(this.min,this.max).sub(e).length()}getBoundingSphere(e){return this.getCenter(e.center),e.radius=this.getSize(tn).length()*.5,e}intersect(e){return this.min.max(e.min),this.max.min(e.max),this.isEmpty()\u0026\u0026this.makeEmpty(),this}union(e){return this.min.min(e.min),this.max.max(e.max),this}applyMatrix4(e){return this.isEmpty()?this:(pi[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),pi[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),pi[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),pi[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),pi[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),pi[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),pi[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),pi[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(pi),this)}translate(e){return this.min.add(e),this.max.add(e),this}equals(e){return e.min.equals(this.min)\u0026\u0026e.max.equals(this.max)}}const pi=[new L,new L,new L,new L,new L,new L,new L,new L],tn=new L,xo=new Xr,Rn=new L,Cn=new L,Pn=new L,Li=new L,Di=new L,nn=new L,gr=new L,es=new L,ts=new L,rn=new L;function vo(r,e,t,i,n){for(let s=0,o=r.length-3;s\u003c=o;s+=3){rn.fromArray(r,s);const a=n.x*Math.abs(rn.x)+n.y*Math.abs(rn.y)+n.z*Math.abs(rn.z),l=e.dot(rn),c=t.dot(rn),u=i.dot(rn);if(Math.max(-Math.max(l,c,u),Math.min(l,c,u))\u003ea)return!1}return!0}const wd=new Xr,Vl=new L,is=new L,yo=new L;class Aa{constructor(e=new L,t=-1){this.center=e,this.radius=t}set(e,t){return this.center.copy(e),this.radius=t,this}setFromPoints(e,t){const i=this.center;t!==void 0?i.copy(t):wd.setFromPoints(e).getCenter(i);let n=0;for(let s=0,o=e.length;s\u003co;s++)n=Math.max(n,i.distanceToSquared(e[s]));return this.radius=Math.sqrt(n),this}copy(e){return this.center.copy(e.center),this.radius=e.radius,this}isEmpty(){return this.radius\u003c0}makeEmpty(){return this.center.set(0,0,0),this.radius=-1,this}containsPoint(e){return e.distanceToSquared(this.center)\u003c=this.radius*this.radius}distanceToPoint(e){return e.distanceTo(this.center)-this.radius}intersectsSphere(e){const t=this.radius+e.radius;return e.center.distanceToSquared(this.center)\u003c=t*t}intersectsBox(e){return e.intersectsSphere(this)}intersectsPlane(e){return Math.abs(e.distanceToPoint(this.center))\u003c=this.radius}clampPoint(e,t){const i=this.center.distanceToSquared(e);return t.copy(e),i\u003ethis.radius*this.radius\u0026\u0026(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),this.radius=this.radius*e.getMaxScaleOnAxis(),this}translate(e){return this.center.add(e),this}expandByPoint(e){yo.subVectors(e,this.center);const t=yo.lengthSq();if(t\u003ethis.radius*this.radius){const i=Math.sqrt(t),n=(i-this.radius)*.5;this.center.add(yo.multiplyScalar(n/i)),this.radius+=n}return this}union(e){return this.center.equals(e.center)===!0?is.set(0,0,1).multiplyScalar(e.radius):is.subVectors(e.center,this.center).normalize().multiplyScalar(e.radius),this.expandByPoint(Vl.copy(e.center).add(is)),this.expandByPoint(Vl.copy(e.center).sub(is)),this}equals(e){return e.center.equals(this.center)\u0026\u0026e.radius===this.radius}clone(){return new this.constructor().copy(this)}}class li{constructor(){this.isMatrix3=!0,this.elements=[1,0,0,0,1,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.\")}set(e,t,i,n,s,o,a,l,c){const u=this.elements;return u[0]=e,u[1]=n,u[2]=a,u[3]=t,u[4]=s,u[5]=l,u[6]=i,u[7]=o,u[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],this}extractBasis(e,t,i){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),i.setFromMatrix3Column(this,2),this}setFromMatrix4(e){const t=e.elements;return this.set(t[0],t[4],t[8],t[1],t[5],t[9],t[2],t[6],t[10]),this}multiply(e){return this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,n=t.elements,s=this.elements,o=i[0],a=i[3],l=i[6],c=i[1],u=i[4],h=i[7],f=i[2],m=i[5],_=i[8],d=n[0],p=n[3],g=n[6],S=n[1],A=n[4],b=n[7],v=n[2],w=n[5],R=n[8];return s[0]=o*d+a*S+l*v,s[3]=o*p+a*A+l*w,s[6]=o*g+a*b+l*R,s[1]=c*d+u*S+h*v,s[4]=c*p+u*A+h*w,s[7]=c*g+u*b+h*R,s[2]=f*d+m*S+_*v,s[5]=f*p+m*A+_*w,s[8]=f*g+m*b+_*R,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[3]*=e,t[6]*=e,t[1]*=e,t[4]*=e,t[7]*=e,t[2]*=e,t[5]*=e,t[8]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[1],n=e[2],s=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8];return t*o*u-t*a*c-i*s*u+i*a*l+n*s*c-n*o*l}invert(){const e=this.elements,t=e[0],i=e[1],n=e[2],s=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],h=u*o-a*c,f=a*l-u*s,m=c*s-o*l,_=t*h+i*f+n*m;if(_===0)return this.set(0,0,0,0,0,0,0,0,0);const d=1/_;return e[0]=h*d,e[1]=(n*c-u*i)*d,e[2]=(a*i-n*o)*d,e[3]=f*d,e[4]=(u*t-n*l)*d,e[5]=(n*s-a*t)*d,e[6]=m*d,e[7]=(i*l-c*t)*d,e[8]=(o*t-i*s)*d,this}transpose(){let e;const t=this.elements;return e=t[1],t[1]=t[3],t[3]=e,e=t[2],t[2]=t[6],t[6]=e,e=t[5],t[5]=t[7],t[7]=e,this}getNormalMatrix(e){return this.setFromMatrix4(e).invert().transpose()}transposeIntoArray(e){const t=this.elements;return e[0]=t[0],e[1]=t[3],e[2]=t[6],e[3]=t[1],e[4]=t[4],e[5]=t[7],e[6]=t[2],e[7]=t[5],e[8]=t[8],this}setUvTransform(e,t,i,n,s,o,a){const l=Math.cos(s),c=Math.sin(s);return this.set(i*l,i*c,-i*(l*o+c*a)+o+e,-n*c,n*l,-n*(-c*o+l*a)+a+t,0,0,1),this}scale(e,t){const i=this.elements;return i[0]*=e,i[3]*=e,i[6]*=e,i[1]*=t,i[4]*=t,i[7]*=t,this}rotate(e){const t=Math.cos(e),i=Math.sin(e),n=this.elements,s=n[0],o=n[3],a=n[6],l=n[1],c=n[4],u=n[7];return n[0]=t*s+i*l,n[3]=t*o+i*c,n[6]=t*a+i*u,n[1]=-i*s+t*l,n[4]=-i*o+t*c,n[7]=-i*a+t*u,this}translate(e,t){const i=this.elements;return i[0]+=e*i[2],i[3]+=e*i[5],i[6]+=e*i[8],i[1]+=t*i[2],i[4]+=t*i[5],i[7]+=t*i[8],this}equals(e){const t=this.elements,i=e.elements;for(let n=0;n\u003c9;n++)if(t[n]!==i[n])return!1;return!0}fromArray(e,t=0){for(let i=0;i\u003c9;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e}clone(){return new this.constructor().fromArray(this.elements)}}const So=new L,Td=new L,Ad=new li;class an{constructor(e=new L(1,0,0),t=0){this.isPlane=!0,this.normal=e,this.constant=t}set(e,t){return this.normal.copy(e),this.constant=t,this}setComponents(e,t,i,n){return this.normal.set(e,t,i),this.constant=n,this}setFromNormalAndCoplanarPoint(e,t){return this.normal.copy(e),this.constant=-t.dot(this.normal),this}setFromCoplanarPoints(e,t,i){const n=So.subVectors(i,t).cross(Td.subVectors(e,t)).normalize();return this.setFromNormalAndCoplanarPoint(n,e),this}copy(e){return this.normal.copy(e.normal),this.constant=e.constant,this}normalize(){const e=1/this.normal.length();return this.normal.multiplyScalar(e),this.constant*=e,this}negate(){return this.constant*=-1,this.normal.negate(),this}distanceToPoint(e){return this.normal.dot(e)+this.constant}distanceToSphere(e){return this.distanceToPoint(e.center)-e.radius}projectPoint(e,t){return t.copy(this.normal).multiplyScalar(-this.distanceToPoint(e)).add(e)}intersectLine(e,t){const i=e.delta(So),n=this.normal.dot(i);if(n===0)return this.distanceToPoint(e.start)===0?t.copy(e.start):null;const s=-(e.start.dot(this.normal)+this.constant)/n;return s\u003c0||s\u003e1?null:t.copy(i).multiplyScalar(s).add(e.start)}intersectsLine(e){const t=this.distanceToPoint(e.start),i=this.distanceToPoint(e.end);return t\u003c0\u0026\u0026i\u003e0||i\u003c0\u0026\u0026t\u003e0}intersectsBox(e){return e.intersectsPlane(this)}intersectsSphere(e){return e.intersectsPlane(this)}coplanarPoint(e){return e.copy(this.normal).multiplyScalar(-this.constant)}applyMatrix4(e,t){const i=t||Ad.getNormalMatrix(e),n=this.coplanarPoint(So).applyMatrix4(e),s=this.normal.applyMatrix3(i).normalize();return this.constant=-n.dot(s),this}translate(e){return this.constant-=e.dot(this.normal),this}equals(e){return e.normal.equals(this.normal)\u0026\u0026e.constant===this.constant}clone(){return new this.constructor().copy(this)}}const Ln=new Aa,ns=new L;class Iu{constructor(e=new an,t=new an,i=new an,n=new an,s=new an,o=new an){this.planes=[e,t,i,n,s,o]}set(e,t,i,n,s,o){const a=this.planes;return a[0].copy(e),a[1].copy(t),a[2].copy(i),a[3].copy(n),a[4].copy(s),a[5].copy(o),this}copy(e){const t=this.planes;for(let i=0;i\u003c6;i++)t[i].copy(e.planes[i]);return this}setFromProjectionMatrix(e){const t=this.planes,i=e.elements,n=i[0],s=i[1],o=i[2],a=i[3],l=i[4],c=i[5],u=i[6],h=i[7],f=i[8],m=i[9],_=i[10],d=i[11],p=i[12],g=i[13],S=i[14],A=i[15];return t[0].setComponents(a-n,h-l,d-f,A-p).normalize(),t[1].setComponents(a+n,h+l,d+f,A+p).normalize(),t[2].setComponents(a+s,h+c,d+m,A+g).normalize(),t[3].setComponents(a-s,h-c,d-m,A-g).normalize(),t[4].setComponents(a-o,h-u,d-_,A-S).normalize(),t[5].setComponents(a+o,h+u,d+_,A+S).normalize(),this}intersectsObject(e){const t=e.geometry;return t.boundingSphere===null\u0026\u0026t.computeBoundingSphere(),Ln.copy(t.boundingSphere).applyMatrix4(e.matrixWorld),this.intersectsSphere(Ln)}intersectsSprite(e){return Ln.center.set(0,0,0),Ln.radius=.7071067811865476,Ln.applyMatrix4(e.matrixWorld),this.intersectsSphere(Ln)}intersectsSphere(e){const t=this.planes,i=e.center,n=-e.radius;for(let s=0;s\u003c6;s++)if(t[s].distanceToPoint(i)\u003cn)return!1;return!0}intersectsBox(e){const t=this.planes;for(let i=0;i\u003c6;i++){const n=t[i];if(ns.x=n.normal.x\u003e0?e.max.x:e.min.x,ns.y=n.normal.y\u003e0?e.max.y:e.min.y,ns.z=n.normal.z\u003e0?e.max.z:e.min.z,n.distanceToPoint(ns)\u003c0)return!1}return!0}containsPoint(e){const t=this.planes;for(let i=0;i\u003c6;i++)if(t[i].distanceToPoint(e)\u003c0)return!1;return!0}clone(){return new this.constructor().copy(this)}}class ct{constructor(){this.isMatrix4=!0,this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],arguments.length\u003e0\u0026\u0026console.error(\"THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.\")}set(e,t,i,n,s,o,a,l,c,u,h,f,m,_,d,p){const g=this.elements;return g[0]=e,g[4]=t,g[8]=i,g[12]=n,g[1]=s,g[5]=o,g[9]=a,g[13]=l,g[2]=c,g[6]=u,g[10]=h,g[14]=f,g[3]=m,g[7]=_,g[11]=d,g[15]=p,this}identity(){return this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1),this}clone(){return new ct().fromArray(this.elements)}copy(e){const t=this.elements,i=e.elements;return t[0]=i[0],t[1]=i[1],t[2]=i[2],t[3]=i[3],t[4]=i[4],t[5]=i[5],t[6]=i[6],t[7]=i[7],t[8]=i[8],t[9]=i[9],t[10]=i[10],t[11]=i[11],t[12]=i[12],t[13]=i[13],t[14]=i[14],t[15]=i[15],this}copyPosition(e){const t=this.elements,i=e.elements;return t[12]=i[12],t[13]=i[13],t[14]=i[14],this}setFromMatrix3(e){const t=e.elements;return this.set(t[0],t[3],t[6],0,t[1],t[4],t[7],0,t[2],t[5],t[8],0,0,0,0,1),this}extractBasis(e,t,i){return e.setFromMatrixColumn(this,0),t.setFromMatrixColumn(this,1),i.setFromMatrixColumn(this,2),this}makeBasis(e,t,i){return this.set(e.x,t.x,i.x,0,e.y,t.y,i.y,0,e.z,t.z,i.z,0,0,0,0,1),this}extractRotation(e){const t=this.elements,i=e.elements,n=1/Dn.setFromMatrixColumn(e,0).length(),s=1/Dn.setFromMatrixColumn(e,1).length(),o=1/Dn.setFromMatrixColumn(e,2).length();return t[0]=i[0]*n,t[1]=i[1]*n,t[2]=i[2]*n,t[3]=0,t[4]=i[4]*s,t[5]=i[5]*s,t[6]=i[6]*s,t[7]=0,t[8]=i[8]*o,t[9]=i[9]*o,t[10]=i[10]*o,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromEuler(e){e\u0026\u0026e.isEuler||console.error(\"THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.\");const t=this.elements,i=e.x,n=e.y,s=e.z,o=Math.cos(i),a=Math.sin(i),l=Math.cos(n),c=Math.sin(n),u=Math.cos(s),h=Math.sin(s);if(e.order===\"XYZ\"){const f=o*u,m=o*h,_=a*u,d=a*h;t[0]=l*u,t[4]=-l*h,t[8]=c,t[1]=m+_*c,t[5]=f-d*c,t[9]=-a*l,t[2]=d-f*c,t[6]=_+m*c,t[10]=o*l}else if(e.order===\"YXZ\"){const f=l*u,m=l*h,_=c*u,d=c*h;t[0]=f+d*a,t[4]=_*a-m,t[8]=o*c,t[1]=o*h,t[5]=o*u,t[9]=-a,t[2]=m*a-_,t[6]=d+f*a,t[10]=o*l}else if(e.order===\"ZXY\"){const f=l*u,m=l*h,_=c*u,d=c*h;t[0]=f-d*a,t[4]=-o*h,t[8]=_+m*a,t[1]=m+_*a,t[5]=o*u,t[9]=d-f*a,t[2]=-o*c,t[6]=a,t[10]=o*l}else if(e.order===\"ZYX\"){const f=o*u,m=o*h,_=a*u,d=a*h;t[0]=l*u,t[4]=_*c-m,t[8]=f*c+d,t[1]=l*h,t[5]=d*c+f,t[9]=m*c-_,t[2]=-c,t[6]=a*l,t[10]=o*l}else if(e.order===\"YZX\"){const f=o*l,m=o*c,_=a*l,d=a*c;t[0]=l*u,t[4]=d-f*h,t[8]=_*h+m,t[1]=h,t[5]=o*u,t[9]=-a*u,t[2]=-c*u,t[6]=m*h+_,t[10]=f-d*h}else if(e.order===\"XZY\"){const f=o*l,m=o*c,_=a*l,d=a*c;t[0]=l*u,t[4]=-h,t[8]=c*u,t[1]=f*h+d,t[5]=o*u,t[9]=m*h-_,t[2]=_*h-m,t[6]=a*u,t[10]=d*h+f}return t[3]=0,t[7]=0,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,this}makeRotationFromQuaternion(e){return this.compose(Rd,e,Cd)}lookAt(e,t,i){const n=this.elements;return Ct.subVectors(e,t),Ct.lengthSq()===0\u0026\u0026(Ct.z=1),Ct.normalize(),Fi.crossVectors(i,Ct),Fi.lengthSq()===0\u0026\u0026(Math.abs(i.z)===1?Ct.x+=1e-4:Ct.z+=1e-4,Ct.normalize(),Fi.crossVectors(i,Ct)),Fi.normalize(),rs.crossVectors(Ct,Fi),n[0]=Fi.x,n[4]=rs.x,n[8]=Ct.x,n[1]=Fi.y,n[5]=rs.y,n[9]=Ct.y,n[2]=Fi.z,n[6]=rs.z,n[10]=Ct.z,this}multiply(e,t){return t!==void 0?(console.warn(\"THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.\"),this.multiplyMatrices(e,t)):this.multiplyMatrices(this,e)}premultiply(e){return this.multiplyMatrices(e,this)}multiplyMatrices(e,t){const i=e.elements,n=t.elements,s=this.elements,o=i[0],a=i[4],l=i[8],c=i[12],u=i[1],h=i[5],f=i[9],m=i[13],_=i[2],d=i[6],p=i[10],g=i[14],S=i[3],A=i[7],b=i[11],v=i[15],w=n[0],R=n[4],x=n[8],E=n[12],I=n[1],F=n[5],j=n[9],Z=n[13],P=n[2],H=n[6],U=n[10],V=n[14],X=n[3],B=n[7],q=n[11],Q=n[15];return s[0]=o*w+a*I+l*P+c*X,s[4]=o*R+a*F+l*H+c*B,s[8]=o*x+a*j+l*U+c*q,s[12]=o*E+a*Z+l*V+c*Q,s[1]=u*w+h*I+f*P+m*X,s[5]=u*R+h*F+f*H+m*B,s[9]=u*x+h*j+f*U+m*q,s[13]=u*E+h*Z+f*V+m*Q,s[2]=_*w+d*I+p*P+g*X,s[6]=_*R+d*F+p*H+g*B,s[10]=_*x+d*j+p*U+g*q,s[14]=_*E+d*Z+p*V+g*Q,s[3]=S*w+A*I+b*P+v*X,s[7]=S*R+A*F+b*H+v*B,s[11]=S*x+A*j+b*U+v*q,s[15]=S*E+A*Z+b*V+v*Q,this}multiplyScalar(e){const t=this.elements;return t[0]*=e,t[4]*=e,t[8]*=e,t[12]*=e,t[1]*=e,t[5]*=e,t[9]*=e,t[13]*=e,t[2]*=e,t[6]*=e,t[10]*=e,t[14]*=e,t[3]*=e,t[7]*=e,t[11]*=e,t[15]*=e,this}determinant(){const e=this.elements,t=e[0],i=e[4],n=e[8],s=e[12],o=e[1],a=e[5],l=e[9],c=e[13],u=e[2],h=e[6],f=e[10],m=e[14],_=e[3],d=e[7],p=e[11],g=e[15];return _*(+s*l*h-n*c*h-s*a*f+i*c*f+n*a*m-i*l*m)+d*(+t*l*m-t*c*f+s*o*f-n*o*m+n*c*u-s*l*u)+p*(+t*c*h-t*a*m-s*o*h+i*o*m+s*a*u-i*c*u)+g*(-n*a*u-t*l*h+t*a*f+n*o*h-i*o*f+i*l*u)}transpose(){const e=this.elements;let t;return t=e[1],e[1]=e[4],e[4]=t,t=e[2],e[2]=e[8],e[8]=t,t=e[6],e[6]=e[9],e[9]=t,t=e[3],e[3]=e[12],e[12]=t,t=e[7],e[7]=e[13],e[13]=t,t=e[11],e[11]=e[14],e[14]=t,this}setPosition(e,t,i){const n=this.elements;return e.isVector3?(n[12]=e.x,n[13]=e.y,n[14]=e.z):(n[12]=e,n[13]=t,n[14]=i),this}invert(){const e=this.elements,t=e[0],i=e[1],n=e[2],s=e[3],o=e[4],a=e[5],l=e[6],c=e[7],u=e[8],h=e[9],f=e[10],m=e[11],_=e[12],d=e[13],p=e[14],g=e[15],S=h*p*c-d*f*c+d*l*m-a*p*m-h*l*g+a*f*g,A=_*f*c-u*p*c-_*l*m+o*p*m+u*l*g-o*f*g,b=u*d*c-_*h*c+_*a*m-o*d*m-u*a*g+o*h*g,v=_*h*l-u*d*l-_*a*f+o*d*f+u*a*p-o*h*p,w=t*S+i*A+n*b+s*v;if(w===0)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);const R=1/w;return e[0]=S*R,e[1]=(d*f*s-h*p*s-d*n*m+i*p*m+h*n*g-i*f*g)*R,e[2]=(a*p*s-d*l*s+d*n*c-i*p*c-a*n*g+i*l*g)*R,e[3]=(h*l*s-a*f*s-h*n*c+i*f*c+a*n*m-i*l*m)*R,e[4]=A*R,e[5]=(u*p*s-_*f*s+_*n*m-t*p*m-u*n*g+t*f*g)*R,e[6]=(_*l*s-o*p*s-_*n*c+t*p*c+o*n*g-t*l*g)*R,e[7]=(o*f*s-u*l*s+u*n*c-t*f*c-o*n*m+t*l*m)*R,e[8]=b*R,e[9]=(_*h*s-u*d*s-_*i*m+t*d*m+u*i*g-t*h*g)*R,e[10]=(o*d*s-_*a*s+_*i*c-t*d*c-o*i*g+t*a*g)*R,e[11]=(u*a*s-o*h*s-u*i*c+t*h*c+o*i*m-t*a*m)*R,e[12]=v*R,e[13]=(u*d*n-_*h*n+_*i*f-t*d*f-u*i*p+t*h*p)*R,e[14]=(_*a*n-o*d*n-_*i*l+t*d*l+o*i*p-t*a*p)*R,e[15]=(o*h*n-u*a*n+u*i*l-t*h*l-o*i*f+t*a*f)*R,this}scale(e){const t=this.elements,i=e.x,n=e.y,s=e.z;return t[0]*=i,t[4]*=n,t[8]*=s,t[1]*=i,t[5]*=n,t[9]*=s,t[2]*=i,t[6]*=n,t[10]*=s,t[3]*=i,t[7]*=n,t[11]*=s,this}getMaxScaleOnAxis(){const e=this.elements,t=e[0]*e[0]+e[1]*e[1]+e[2]*e[2],i=e[4]*e[4]+e[5]*e[5]+e[6]*e[6],n=e[8]*e[8]+e[9]*e[9]+e[10]*e[10];return Math.sqrt(Math.max(t,i,n))}makeTranslation(e,t,i){return this.set(1,0,0,e,0,1,0,t,0,0,1,i,0,0,0,1),this}makeRotationX(e){const t=Math.cos(e),i=Math.sin(e);return this.set(1,0,0,0,0,t,-i,0,0,i,t,0,0,0,0,1),this}makeRotationY(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,0,i,0,0,1,0,0,-i,0,t,0,0,0,0,1),this}makeRotationZ(e){const t=Math.cos(e),i=Math.sin(e);return this.set(t,-i,0,0,i,t,0,0,0,0,1,0,0,0,0,1),this}makeRotationAxis(e,t){const i=Math.cos(t),n=Math.sin(t),s=1-i,o=e.x,a=e.y,l=e.z,c=s*o,u=s*a;return this.set(c*o+i,c*a-n*l,c*l+n*a,0,c*a+n*l,u*a+i,u*l-n*o,0,c*l-n*a,u*l+n*o,s*l*l+i,0,0,0,0,1),this}makeScale(e,t,i){return this.set(e,0,0,0,0,t,0,0,0,0,i,0,0,0,0,1),this}makeShear(e,t,i,n,s,o){return this.set(1,i,s,0,e,1,o,0,t,n,1,0,0,0,0,1),this}compose(e,t,i){const n=this.elements,s=t._x,o=t._y,a=t._z,l=t._w,c=s+s,u=o+o,h=a+a,f=s*c,m=s*u,_=s*h,d=o*u,p=o*h,g=a*h,S=l*c,A=l*u,b=l*h,v=i.x,w=i.y,R=i.z;return n[0]=(1-(d+g))*v,n[1]=(m+b)*v,n[2]=(_-A)*v,n[3]=0,n[4]=(m-b)*w,n[5]=(1-(f+g))*w,n[6]=(p+S)*w,n[7]=0,n[8]=(_+A)*R,n[9]=(p-S)*R,n[10]=(1-(f+d))*R,n[11]=0,n[12]=e.x,n[13]=e.y,n[14]=e.z,n[15]=1,this}decompose(e,t,i){const n=this.elements;let s=Dn.set(n[0],n[1],n[2]).length();const o=Dn.set(n[4],n[5],n[6]).length(),a=Dn.set(n[8],n[9],n[10]).length();this.determinant()\u003c0\u0026\u0026(s=-s),e.x=n[12],e.y=n[13],e.z=n[14],Yt.copy(this);const c=1/s,u=1/o,h=1/a;return Yt.elements[0]*=c,Yt.elements[1]*=c,Yt.elements[2]*=c,Yt.elements[4]*=u,Yt.elements[5]*=u,Yt.elements[6]*=u,Yt.elements[8]*=h,Yt.elements[9]*=h,Yt.elements[10]*=h,t.setFromRotationMatrix(Yt),i.x=s,i.y=o,i.z=a,this}makePerspective(e,t,i,n,s,o){o===void 0\u0026\u0026console.warn(\"THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.\");const a=this.elements,l=2*s/(t-e),c=2*s/(i-n),u=(t+e)/(t-e),h=(i+n)/(i-n),f=-(o+s)/(o-s),m=-2*o*s/(o-s);return a[0]=l,a[4]=0,a[8]=u,a[12]=0,a[1]=0,a[5]=c,a[9]=h,a[13]=0,a[2]=0,a[6]=0,a[10]=f,a[14]=m,a[3]=0,a[7]=0,a[11]=-1,a[15]=0,this}makeOrthographic(e,t,i,n,s,o){const a=this.elements,l=1/(t-e),c=1/(i-n),u=1/(o-s),h=(t+e)*l,f=(i+n)*c,m=(o+s)*u;return a[0]=2*l,a[4]=0,a[8]=0,a[12]=-h,a[1]=0,a[5]=2*c,a[9]=0,a[13]=-f,a[2]=0,a[6]=0,a[10]=-2*u,a[14]=-m,a[3]=0,a[7]=0,a[11]=0,a[15]=1,this}equals(e){const t=this.elements,i=e.elements;for(let n=0;n\u003c16;n++)if(t[n]!==i[n])return!1;return!0}fromArray(e,t=0){for(let i=0;i\u003c16;i++)this.elements[i]=e[i+t];return this}toArray(e=[],t=0){const i=this.elements;return e[t]=i[0],e[t+1]=i[1],e[t+2]=i[2],e[t+3]=i[3],e[t+4]=i[4],e[t+5]=i[5],e[t+6]=i[6],e[t+7]=i[7],e[t+8]=i[8],e[t+9]=i[9],e[t+10]=i[10],e[t+11]=i[11],e[t+12]=i[12],e[t+13]=i[13],e[t+14]=i[14],e[t+15]=i[15],e}}const Dn=new L,Yt=new ct,Rd=new L(0,0,0),Cd=new L(1,1,1),Fi=new L,rs=new L,Ct=new L;class fe{constructor(e=0,t=0){this.isVector2=!0,this.x=e,this.y=t}get width(){return this.x}set width(e){this.x=e}get height(){return this.y}set height(e){this.y=e}set(e,t){return this.x=e,this.y=t,this}setScalar(e){return this.x=e,this.y=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;default:throw new Error(\"index is out of range: \"+e)}return this}getComponent(e){switch(e){case 0:return this.x;case 1:return this.y;default:throw new Error(\"index is out of range: \"+e)}}clone(){return new this.constructor(this.x,this.y)}copy(e){return this.x=e.x,this.y=e.y,this}add(e,t){return t!==void 0?(console.warn(\"THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this)}addScalar(e){return this.x+=e,this.y+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this}sub(e,t){return t!==void 0?(console.warn(\"THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this)}subScalar(e){return this.x-=e,this.y-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this}multiply(e){return this.x*=e.x,this.y*=e.y,this}multiplyScalar(e){return this.x*=e,this.y*=e,this}divide(e){return this.x/=e.x,this.y/=e.y,this}divideScalar(e){return this.multiplyScalar(1/e)}applyMatrix3(e){const t=this.x,i=this.y,n=e.elements;return this.x=n[0]*t+n[3]*i+n[6],this.y=n[1]*t+n[4]*i+n[7],this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this}negate(){return this.x=-this.x,this.y=-this.y,this}dot(e){return this.x*e.x+this.y*e.y}cross(e){return this.x*e.y-this.y*e.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(){return Math.atan2(-this.y,-this.x)+Math.PI}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){const t=this.x-e.x,i=this.y-e.y;return t*t+i*i}manhattanDistanceTo(e){return Math.abs(this.x-e.x)+Math.abs(this.y-e.y)}setLength(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this}equals(e){return e.x===this.x\u0026\u0026e.y===this.y}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e}fromBufferAttribute(e,t,i){return i!==void 0\u0026\u0026console.warn(\"THREE.Vector2: offset has been removed from .fromBufferAttribute().\"),this.x=e.getX(t),this.y=e.getY(t),this}rotateAround(e,t){const i=Math.cos(t),n=Math.sin(t),s=this.x-e.x,o=this.y-e.y;return this.x=s*i-o*n+e.x,this.y=s*n+o*i+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}}class dt{constructor(e=0,t=0,i=0,n=1){this.isVector4=!0,this.x=e,this.y=t,this.z=i,this.w=n}get width(){return this.z}set width(e){this.z=e}get height(){return this.w}set height(e){this.w=e}set(e,t,i,n){return this.x=e,this.y=t,this.z=i,this.w=n,this}setScalar(e){return this.x=e,this.y=e,this.z=e,this.w=e,this}setX(e){return this.x=e,this}setY(e){return this.y=e,this}setZ(e){return this.z=e,this}setW(e){return this.w=e,this}setComponent(e,t){switch(e){case 0:this.x=t;break;case 1:this.y=t;break;case 2:this.z=t;break;case 3:this.w=t;break;default:throw new Error(\"index is out of range: \"+e)}return this}getComponent(e){switch(e){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: \"+e)}}clone(){return new this.constructor(this.x,this.y,this.z,this.w)}copy(e){return this.x=e.x,this.y=e.y,this.z=e.z,this.w=e.w!==void 0?e.w:1,this}add(e,t){return t!==void 0?(console.warn(\"THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.\"),this.addVectors(e,t)):(this.x+=e.x,this.y+=e.y,this.z+=e.z,this.w+=e.w,this)}addScalar(e){return this.x+=e,this.y+=e,this.z+=e,this.w+=e,this}addVectors(e,t){return this.x=e.x+t.x,this.y=e.y+t.y,this.z=e.z+t.z,this.w=e.w+t.w,this}addScaledVector(e,t){return this.x+=e.x*t,this.y+=e.y*t,this.z+=e.z*t,this.w+=e.w*t,this}sub(e,t){return t!==void 0?(console.warn(\"THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.\"),this.subVectors(e,t)):(this.x-=e.x,this.y-=e.y,this.z-=e.z,this.w-=e.w,this)}subScalar(e){return this.x-=e,this.y-=e,this.z-=e,this.w-=e,this}subVectors(e,t){return this.x=e.x-t.x,this.y=e.y-t.y,this.z=e.z-t.z,this.w=e.w-t.w,this}multiply(e){return this.x*=e.x,this.y*=e.y,this.z*=e.z,this.w*=e.w,this}multiplyScalar(e){return this.x*=e,this.y*=e,this.z*=e,this.w*=e,this}applyMatrix4(e){const t=this.x,i=this.y,n=this.z,s=this.w,o=e.elements;return this.x=o[0]*t+o[4]*i+o[8]*n+o[12]*s,this.y=o[1]*t+o[5]*i+o[9]*n+o[13]*s,this.z=o[2]*t+o[6]*i+o[10]*n+o[14]*s,this.w=o[3]*t+o[7]*i+o[11]*n+o[15]*s,this}divideScalar(e){return this.multiplyScalar(1/e)}setAxisAngleFromQuaternion(e){this.w=2*Math.acos(e.w);const t=Math.sqrt(1-e.w*e.w);return t\u003c1e-4?(this.x=1,this.y=0,this.z=0):(this.x=e.x/t,this.y=e.y/t,this.z=e.z/t),this}setAxisAngleFromRotationMatrix(e){let t,i,n,s;const l=e.elements,c=l[0],u=l[4],h=l[8],f=l[1],m=l[5],_=l[9],d=l[2],p=l[6],g=l[10];if(Math.abs(u-f)\u003c.01\u0026\u0026Math.abs(h-d)\u003c.01\u0026\u0026Math.abs(_-p)\u003c.01){if(Math.abs(u+f)\u003c.1\u0026\u0026Math.abs(h+d)\u003c.1\u0026\u0026Math.abs(_+p)\u003c.1\u0026\u0026Math.abs(c+m+g-3)\u003c.1)return this.set(1,0,0,0),this;t=Math.PI;const A=(c+1)/2,b=(m+1)/2,v=(g+1)/2,w=(u+f)/4,R=(h+d)/4,x=(_+p)/4;return A\u003eb\u0026\u0026A\u003ev?A\u003c.01?(i=0,n=.707106781,s=.707106781):(i=Math.sqrt(A),n=w/i,s=R/i):b\u003ev?b\u003c.01?(i=.707106781,n=0,s=.707106781):(n=Math.sqrt(b),i=w/n,s=x/n):v\u003c.01?(i=.707106781,n=.707106781,s=0):(s=Math.sqrt(v),i=R/s,n=x/s),this.set(i,n,s,t),this}let S=Math.sqrt((p-_)*(p-_)+(h-d)*(h-d)+(f-u)*(f-u));return Math.abs(S)\u003c.001\u0026\u0026(S=1),this.x=(p-_)/S,this.y=(h-d)/S,this.z=(f-u)/S,this.w=Math.acos((c+m+g-1)/2),this}min(e){return this.x=Math.min(this.x,e.x),this.y=Math.min(this.y,e.y),this.z=Math.min(this.z,e.z),this.w=Math.min(this.w,e.w),this}max(e){return this.x=Math.max(this.x,e.x),this.y=Math.max(this.y,e.y),this.z=Math.max(this.z,e.z),this.w=Math.max(this.w,e.w),this}clamp(e,t){return this.x=Math.max(e.x,Math.min(t.x,this.x)),this.y=Math.max(e.y,Math.min(t.y,this.y)),this.z=Math.max(e.z,Math.min(t.z,this.z)),this.w=Math.max(e.w,Math.min(t.w,this.w)),this}clampScalar(e,t){return this.x=Math.max(e,Math.min(t,this.x)),this.y=Math.max(e,Math.min(t,this.y)),this.z=Math.max(e,Math.min(t,this.z)),this.w=Math.max(e,Math.min(t,this.w)),this}clampLength(e,t){const i=this.length();return this.divideScalar(i||1).multiplyScalar(Math.max(e,Math.min(t,i)))}floor(){return this.x=Math.floor(this.x),this.y=Math.floor(this.y),this.z=Math.floor(this.z),this.w=Math.floor(this.w),this}ceil(){return this.x=Math.ceil(this.x),this.y=Math.ceil(this.y),this.z=Math.ceil(this.z),this.w=Math.ceil(this.w),this}round(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this.z=Math.round(this.z),this.w=Math.round(this.w),this}roundToZero(){return this.x=this.x\u003c0?Math.ceil(this.x):Math.floor(this.x),this.y=this.y\u003c0?Math.ceil(this.y):Math.floor(this.y),this.z=this.z\u003c0?Math.ceil(this.z):Math.floor(this.z),this.w=this.w\u003c0?Math.ceil(this.w):Math.floor(this.w),this}negate(){return this.x=-this.x,this.y=-this.y,this.z=-this.z,this.w=-this.w,this}dot(e){return this.x*e.x+this.y*e.y+this.z*e.z+this.w*e.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(e){return this.normalize().multiplyScalar(e)}lerp(e,t){return this.x+=(e.x-this.x)*t,this.y+=(e.y-this.y)*t,this.z+=(e.z-this.z)*t,this.w+=(e.w-this.w)*t,this}lerpVectors(e,t,i){return this.x=e.x+(t.x-e.x)*i,this.y=e.y+(t.y-e.y)*i,this.z=e.z+(t.z-e.z)*i,this.w=e.w+(t.w-e.w)*i,this}equals(e){return e.x===this.x\u0026\u0026e.y===this.y\u0026\u0026e.z===this.z\u0026\u0026e.w===this.w}fromArray(e,t=0){return this.x=e[t],this.y=e[t+1],this.z=e[t+2],this.w=e[t+3],this}toArray(e=[],t=0){return e[t]=this.x,e[t+1]=this.y,e[t+2]=this.z,e[t+3]=this.w,e}fromBufferAttribute(e,t,i){return i!==void 0\u0026\u0026console.warn(\"THREE.Vector4: offset has been removed from .fromBufferAttribute().\"),this.x=e.getX(t),this.y=e.getY(t),this.z=e.getZ(t),this.w=e.getW(t),this}random(){return this.x=Math.random(),this.y=Math.random(),this.z=Math.random(),this.w=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z,yield this.w}}function Nu(){let r=null,e=!1,t=null,i=null;function n(s,o){t(s,o),i=r.requestAnimationFrame(n)}return{start:function(){e!==!0\u0026\u0026t!==null\u0026\u0026(i=r.requestAnimationFrame(n),e=!0)},stop:function(){r.cancelAnimationFrame(i),e=!1},setAnimationLoop:function(s){t=s},setContext:function(s){r=s}}}function Pd(r,e){const t=e.isWebGL2,i=new WeakMap;function n(c,u){const h=c.array,f=c.usage,m=r.createBuffer();r.bindBuffer(u,m),r.bufferData(u,h,f),c.onUploadCallback();let _;if(h instanceof Float32Array)_=r.FLOAT;else if(h instanceof Uint16Array)if(c.isFloat16BufferAttribute)if(t)_=r.HALF_FLOAT;else throw new Error(\"THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.\");else _=r.UNSIGNED_SHORT;else if(h instanceof Int16Array)_=r.SHORT;else if(h instanceof Uint32Array)_=r.UNSIGNED_INT;else if(h instanceof Int32Array)_=r.INT;else if(h instanceof Int8Array)_=r.BYTE;else if(h instanceof Uint8Array)_=r.UNSIGNED_BYTE;else if(h instanceof Uint8ClampedArray)_=r.UNSIGNED_BYTE;else throw new Error(\"THREE.WebGLAttributes: Unsupported buffer data format: \"+h);return{buffer:m,type:_,bytesPerElement:h.BYTES_PER_ELEMENT,version:c.version}}function s(c,u,h){const f=u.array,m=u.updateRange;r.bindBuffer(h,c),m.count===-1?r.bufferSubData(h,0,f):(t?r.bufferSubData(h,m.offset*f.BYTES_PER_ELEMENT,f,m.offset,m.count):r.bufferSubData(h,m.offset*f.BYTES_PER_ELEMENT,f.subarray(m.offset,m.offset+m.count)),m.count=-1)}function o(c){return c.isInterleavedBufferAttribute\u0026\u0026(c=c.data),i.get(c)}function a(c){c.isInterleavedBufferAttribute\u0026\u0026(c=c.data);const u=i.get(c);u\u0026\u0026(r.deleteBuffer(u.buffer),i.delete(c))}function l(c,u){if(c.isGLBufferAttribute){const f=i.get(c);(!f||f.version\u003cc.version)\u0026\u0026i.set(c,{buffer:c.buffer,type:c.type,bytesPerElement:c.elementSize,version:c.version});return}c.isInterleavedBufferAttribute\u0026\u0026(c=c.data);const h=i.get(c);h===void 0?i.set(c,n(c,u)):h.version\u003cc.version\u0026\u0026(s(h.buffer,c,u),h.version=c.version)}return{get:o,remove:a,update:l}}class fr{addEventListener(e,t){this._listeners===void 0\u0026\u0026(this._listeners={});const i=this._listeners;i[e]===void 0\u0026\u0026(i[e]=[]),i[e].indexOf(t)===-1\u0026\u0026i[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;const i=this._listeners;return i[e]!==void 0\u0026\u0026i[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;const n=this._listeners[e];if(n!==void 0){const s=n.indexOf(t);s!==-1\u0026\u0026n.splice(s,1)}}dispatchEvent(e){if(this._listeners===void 0)return;const i=this._listeners[e.type];if(i!==void 0){e.target=this;const n=i.slice(0);for(let s=0,o=n.length;s\u003co;s++)n[s].call(this,e);e.target=null}}}const je=new L,ss=new fe;class ci{constructor(e,t,i){if(Array.isArray(e))throw new TypeError(\"THREE.BufferAttribute: array should be a Typed Array.\");this.isBufferAttribute=!0,this.name=\"\",this.array=e,this.itemSize=t,this.count=e!==void 0?e.length/t:0,this.normalized=i===!0,this.usage=El,this.updateRange={offset:0,count:-1},this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0\u0026\u0026this.version++}setUsage(e){return this.usage=e,this}copy(e){return this.name=e.name,this.array=new e.array.constructor(e.array),this.itemSize=e.itemSize,this.count=e.count,this.normalized=e.normalized,this.usage=e.usage,this}copyAt(e,t,i){e*=this.itemSize,i*=t.itemSize;for(let n=0,s=this.itemSize;n\u003cs;n++)this.array[e+n]=t.array[i+n];return this}copyArray(e){return this.array.set(e),this}copyColorsArray(e){const t=this.array;let i=0;for(let n=0,s=e.length;n\u003cs;n++){let o=e[n];o===void 0\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyColorsArray(): color is undefined\",n),o=new Le),t[i++]=o.r,t[i++]=o.g,t[i++]=o.b}return this}copyVector2sArray(e){const t=this.array;let i=0;for(let n=0,s=e.length;n\u003cs;n++){let o=e[n];o===void 0\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector2sArray(): vector is undefined\",n),o=new fe),t[i++]=o.x,t[i++]=o.y}return this}copyVector3sArray(e){const t=this.array;let i=0;for(let n=0,s=e.length;n\u003cs;n++){let o=e[n];o===void 0\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector3sArray(): vector is undefined\",n),o=new L),t[i++]=o.x,t[i++]=o.y,t[i++]=o.z}return this}copyVector4sArray(e){const t=this.array;let i=0;for(let n=0,s=e.length;n\u003cs;n++){let o=e[n];o===void 0\u0026\u0026(console.warn(\"THREE.BufferAttribute.copyVector4sArray(): vector is undefined\",n),o=new dt),t[i++]=o.x,t[i++]=o.y,t[i++]=o.z,t[i++]=o.w}return this}applyMatrix3(e){if(this.itemSize===2)for(let t=0,i=this.count;t\u003ci;t++)ss.fromBufferAttribute(this,t),ss.applyMatrix3(e),this.setXY(t,ss.x,ss.y);else if(this.itemSize===3)for(let t=0,i=this.count;t\u003ci;t++)je.fromBufferAttribute(this,t),je.applyMatrix3(e),this.setXYZ(t,je.x,je.y,je.z);return this}applyMatrix4(e){for(let t=0,i=this.count;t\u003ci;t++)je.fromBufferAttribute(this,t),je.applyMatrix4(e),this.setXYZ(t,je.x,je.y,je.z);return this}applyNormalMatrix(e){for(let t=0,i=this.count;t\u003ci;t++)je.fromBufferAttribute(this,t),je.applyNormalMatrix(e),this.setXYZ(t,je.x,je.y,je.z);return this}transformDirection(e){for(let t=0,i=this.count;t\u003ci;t++)je.fromBufferAttribute(this,t),je.transformDirection(e),this.setXYZ(t,je.x,je.y,je.z);return this}set(e,t=0){return this.array.set(e,t),this}getX(e){return this.array[e*this.itemSize]}setX(e,t){return this.array[e*this.itemSize]=t,this}getY(e){return this.array[e*this.itemSize+1]}setY(e,t){return this.array[e*this.itemSize+1]=t,this}getZ(e){return this.array[e*this.itemSize+2]}setZ(e,t){return this.array[e*this.itemSize+2]=t,this}getW(e){return this.array[e*this.itemSize+3]}setW(e,t){return this.array[e*this.itemSize+3]=t,this}setXY(e,t,i){return e*=this.itemSize,this.array[e+0]=t,this.array[e+1]=i,this}setXYZ(e,t,i,n){return e*=this.itemSize,this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=n,this}setXYZW(e,t,i,n,s){return e*=this.itemSize,this.array[e+0]=t,this.array[e+1]=i,this.array[e+2]=n,this.array[e+3]=s,this}onUpload(e){return this.onUploadCallback=e,this}clone(){return new this.constructor(this.array,this.itemSize).copy(this)}toJSON(){const e={itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized};return this.name!==\"\"\u0026\u0026(e.name=this.name),this.usage!==El\u0026\u0026(e.usage=this.usage),(this.updateRange.offset!==0||this.updateRange.count!==-1)\u0026\u0026(e.updateRange=this.updateRange),e}}class Ou extends ci{constructor(e,t,i){super(new Uint16Array(e),t,i)}}class Uu extends ci{constructor(e,t,i){super(new Uint32Array(e),t,i)}}class Ft extends ci{constructor(e,t,i){super(new Float32Array(e),t,i)}}const Wl=new ct,Xl=new Wr;class qr{constructor(e=0,t=0,i=0,n=qr.DefaultOrder){this.isEuler=!0,this._x=e,this._y=t,this._z=i,this._order=n}get x(){return this._x}set x(e){this._x=e,this._onChangeCallback()}get y(){return this._y}set y(e){this._y=e,this._onChangeCallback()}get z(){return this._z}set z(e){this._z=e,this._onChangeCallback()}get order(){return this._order}set order(e){this._order=e,this._onChangeCallback()}set(e,t,i,n=this._order){return this._x=e,this._y=t,this._z=i,this._order=n,this._onChangeCallback(),this}clone(){return new this.constructor(this._x,this._y,this._z,this._order)}copy(e){return this._x=e._x,this._y=e._y,this._z=e._z,this._order=e._order,this._onChangeCallback(),this}setFromRotationMatrix(e,t=this._order,i=!0){const n=e.elements,s=n[0],o=n[4],a=n[8],l=n[1],c=n[5],u=n[9],h=n[2],f=n[6],m=n[10];switch(t){case\"XYZ\":this._y=Math.asin(gt(a,-1,1)),Math.abs(a)\u003c.9999999?(this._x=Math.atan2(-u,m),this._z=Math.atan2(-o,s)):(this._x=Math.atan2(f,c),this._z=0);break;case\"YXZ\":this._x=Math.asin(-gt(u,-1,1)),Math.abs(u)\u003c.9999999?(this._y=Math.atan2(a,m),this._z=Math.atan2(l,c)):(this._y=Math.atan2(-h,s),this._z=0);break;case\"ZXY\":this._x=Math.asin(gt(f,-1,1)),Math.abs(f)\u003c.9999999?(this._y=Math.atan2(-h,m),this._z=Math.atan2(-o,c)):(this._y=0,this._z=Math.atan2(l,s));break;case\"ZYX\":this._y=Math.asin(-gt(h,-1,1)),Math.abs(h)\u003c.9999999?(this._x=Math.atan2(f,m),this._z=Math.atan2(l,s)):(this._x=0,this._z=Math.atan2(-o,c));break;case\"YZX\":this._z=Math.asin(gt(l,-1,1)),Math.abs(l)\u003c.9999999?(this._x=Math.atan2(-u,c),this._y=Math.atan2(-h,s)):(this._x=0,this._y=Math.atan2(a,m));break;case\"XZY\":this._z=Math.asin(-gt(o,-1,1)),Math.abs(o)\u003c.9999999?(this._x=Math.atan2(f,c),this._y=Math.atan2(a,s)):(this._x=Math.atan2(-u,m),this._y=0);break;default:console.warn(\"THREE.Euler: .setFromRotationMatrix() encountered an unknown order: \"+t)}return this._order=t,i===!0\u0026\u0026this._onChangeCallback(),this}setFromQuaternion(e,t,i){return Wl.makeRotationFromQuaternion(e),this.setFromRotationMatrix(Wl,t,i)}setFromVector3(e,t=this._order){return this.set(e.x,e.y,e.z,t)}reorder(e){return Xl.setFromEuler(this),this.setFromQuaternion(Xl,e)}equals(e){return e._x===this._x\u0026\u0026e._y===this._y\u0026\u0026e._z===this._z\u0026\u0026e._order===this._order}fromArray(e){return this._x=e[0],this._y=e[1],this._z=e[2],e[3]!==void 0\u0026\u0026(this._order=e[3]),this._onChangeCallback(),this}toArray(e=[],t=0){return e[t]=this._x,e[t+1]=this._y,e[t+2]=this._z,e[t+3]=this._order,e}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._order}toVector3(){console.error(\"THREE.Euler: .toVector3() has been removed. Use Vector3.setFromEuler() instead\")}}qr.DefaultOrder=\"XYZ\";qr.RotationOrders=[\"XYZ\",\"YZX\",\"ZXY\",\"XZY\",\"YXZ\",\"ZYX\"];class zu{constructor(){this.mask=1}set(e){this.mask=(1\u003c\u003ce|0)\u003e\u003e\u003e0}enable(e){this.mask|=1\u003c\u003ce|0}enableAll(){this.mask=-1}toggle(e){this.mask^=1\u003c\u003ce|0}disable(e){this.mask\u0026=~(1\u003c\u003ce|0)}disableAll(){this.mask=0}test(e){return(this.mask\u0026e.mask)!==0}isEnabled(e){return(this.mask\u0026(1\u003c\u003ce|0))!==0}}let Ld=0;const ql=new L,Fn=new Wr,mi=new ct,os=new L,xr=new L,Dd=new L,Fd=new Wr,Yl=new L(1,0,0),Zl=new L(0,1,0),Jl=new L(0,0,1),Id={type:\"added\"},Kl={type:\"removed\"};class tt extends fr{constructor(){super();this.isObject3D=!0,Object.defineProperty(this,\"id\",{value:Ld++}),this.uuid=hr(),this.name=\"\",this.type=\"Object3D\",this.parent=null,this.children=[],this.up=tt.DefaultUp.clone();const e=new L,t=new qr,i=new Wr,n=new L(1,1,1);function s(){i.setFromEuler(t,!1)}function o(){t.setFromQuaternion(i,void 0,!1)}t._onChange(s),i._onChange(o),Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:e},rotation:{configurable:!0,enumerable:!0,value:t},quaternion:{configurable:!0,enumerable:!0,value:i},scale:{configurable:!0,enumerable:!0,value:n},modelViewMatrix:{value:new ct},normalMatrix:{value:new li}}),this.matrix=new ct,this.matrixWorld=new ct,this.matrixAutoUpdate=tt.DefaultMatrixAutoUpdate,this.matrixWorldNeedsUpdate=!1,this.layers=new zu,this.visible=!0,this.castShadow=!1,this.receiveShadow=!1,this.frustumCulled=!0,this.renderOrder=0,this.animations=[],this.userData={}}onBeforeRender(){}onAfterRender(){}applyMatrix4(e){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),this.matrix.premultiply(e),this.matrix.decompose(this.position,this.quaternion,this.scale)}applyQuaternion(e){return this.quaternion.premultiply(e),this}setRotationFromAxisAngle(e,t){this.quaternion.setFromAxisAngle(e,t)}setRotationFromEuler(e){this.quaternion.setFromEuler(e,!0)}setRotationFromMatrix(e){this.quaternion.setFromRotationMatrix(e)}setRotationFromQuaternion(e){this.quaternion.copy(e)}rotateOnAxis(e,t){return Fn.setFromAxisAngle(e,t),this.quaternion.multiply(Fn),this}rotateOnWorldAxis(e,t){return Fn.setFromAxisAngle(e,t),this.quaternion.premultiply(Fn),this}rotateX(e){return this.rotateOnAxis(Yl,e)}rotateY(e){return this.rotateOnAxis(Zl,e)}rotateZ(e){return this.rotateOnAxis(Jl,e)}translateOnAxis(e,t){return ql.copy(e).applyQuaternion(this.quaternion),this.position.add(ql.multiplyScalar(t)),this}translateX(e){return this.translateOnAxis(Yl,e)}translateY(e){return this.translateOnAxis(Zl,e)}translateZ(e){return this.translateOnAxis(Jl,e)}localToWorld(e){return e.applyMatrix4(this.matrixWorld)}worldToLocal(e){return e.applyMatrix4(mi.copy(this.matrixWorld).invert())}lookAt(e,t,i){e.isVector3?os.copy(e):os.set(e,t,i);const n=this.parent;this.updateWorldMatrix(!0,!1),xr.setFromMatrixPosition(this.matrixWorld),this.isCamera||this.isLight?mi.lookAt(xr,os,this.up):mi.lookAt(os,xr,this.up),this.quaternion.setFromRotationMatrix(mi),n\u0026\u0026(mi.extractRotation(n.matrixWorld),Fn.setFromRotationMatrix(mi),this.quaternion.premultiply(Fn.invert()))}add(e){if(arguments.length\u003e1){for(let t=0;t\u003carguments.length;t++)this.add(arguments[t]);return this}return e===this?(console.error(\"THREE.Object3D.add: object can't be added as a child of itself.\",e),this):(e\u0026\u0026e.isObject3D?(e.parent!==null\u0026\u0026e.parent.remove(e),e.parent=this,this.children.push(e),e.dispatchEvent(Id)):console.error(\"THREE.Object3D.add: object not an instance of THREE.Object3D.\",e),this)}remove(e){if(arguments.length\u003e1){for(let i=0;i\u003carguments.length;i++)this.remove(arguments[i]);return this}const t=this.children.indexOf(e);return t!==-1\u0026\u0026(e.parent=null,this.children.splice(t,1),e.dispatchEvent(Kl)),this}removeFromParent(){const e=this.parent;return e!==null\u0026\u0026e.remove(this),this}clear(){for(let e=0;e\u003cthis.children.length;e++){const t=this.children[e];t.parent=null,t.dispatchEvent(Kl)}return this.children.length=0,this}attach(e){return this.updateWorldMatrix(!0,!1),mi.copy(this.matrixWorld).invert(),e.parent!==null\u0026\u0026(e.parent.updateWorldMatrix(!0,!1),mi.multiply(e.parent.matrixWorld)),e.applyMatrix4(mi),this.add(e),e.updateWorldMatrix(!1,!0),this}getObjectById(e){return this.getObjectByProperty(\"id\",e)}getObjectByName(e){return this.getObjectByProperty(\"name\",e)}getObjectByProperty(e,t){if(this[e]===t)return this;for(let i=0,n=this.children.length;i\u003cn;i++){const o=this.children[i].getObjectByProperty(e,t);if(o!==void 0)return o}}getWorldPosition(e){return this.updateWorldMatrix(!0,!1),e.setFromMatrixPosition(this.matrixWorld)}getWorldQuaternion(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(xr,e,Dd),e}getWorldScale(e){return this.updateWorldMatrix(!0,!1),this.matrixWorld.decompose(xr,Fd,e),e}getWorldDirection(e){this.updateWorldMatrix(!0,!1);const t=this.matrixWorld.elements;return e.set(t[8],t[9],t[10]).normalize()}raycast(){}traverse(e){e(this);const t=this.children;for(let i=0,n=t.length;i\u003cn;i++)t[i].traverse(e)}traverseVisible(e){if(this.visible===!1)return;e(this);const t=this.children;for(let i=0,n=t.length;i\u003cn;i++)t[i].traverseVisible(e)}traverseAncestors(e){const t=this.parent;t!==null\u0026\u0026(e(t),t.traverseAncestors(e))}updateMatrix(){this.matrix.compose(this.position,this.quaternion,this.scale),this.matrixWorldNeedsUpdate=!0}updateMatrixWorld(e){this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),(this.matrixWorldNeedsUpdate||e)\u0026\u0026(this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,e=!0);const t=this.children;for(let i=0,n=t.length;i\u003cn;i++)t[i].updateMatrixWorld(e)}updateWorldMatrix(e,t){const i=this.parent;if(e===!0\u0026\u0026i!==null\u0026\u0026i.updateWorldMatrix(!0,!1),this.matrixAutoUpdate\u0026\u0026this.updateMatrix(),this.parent===null?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),t===!0){const n=this.children;for(let s=0,o=n.length;s\u003co;s++)n[s].updateWorldMatrix(!1,!0)}}toJSON(e){const t=e===void 0||typeof e==\"string\",i={};t\u0026\u0026(e={geometries:{},materials:{},textures:{},images:{},shapes:{},skeletons:{},animations:{},nodes:{}},i.metadata={version:4.5,type:\"Object\",generator:\"Object3D.toJSON\"});const n={};n.uuid=this.uuid,n.type=this.type,this.name!==\"\"\u0026\u0026(n.name=this.name),this.castShadow===!0\u0026\u0026(n.castShadow=!0),this.receiveShadow===!0\u0026\u0026(n.receiveShadow=!0),this.visible===!1\u0026\u0026(n.visible=!1),this.frustumCulled===!1\u0026\u0026(n.frustumCulled=!1),this.renderOrder!==0\u0026\u0026(n.renderOrder=this.renderOrder),JSON.stringify(this.userData)!==\"{}\"\u0026\u0026(n.userData=this.userData),n.layers=this.layers.mask,n.matrix=this.matrix.toArray(),this.matrixAutoUpdate===!1\u0026\u0026(n.matrixAutoUpdate=!1),this.isInstancedMesh\u0026\u0026(n.type=\"InstancedMesh\",n.count=this.count,n.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null\u0026\u0026(n.instanceColor=this.instanceColor.toJSON()));function s(a,l){return a[l.uuid]===void 0\u0026\u0026(a[l.uuid]=l.toJSON(e)),l.uuid}if(this.isScene)this.background\u0026\u0026(this.background.isColor?n.background=this.background.toJSON():this.background.isTexture\u0026\u0026(n.background=this.background.toJSON(e).uuid)),this.environment\u0026\u0026this.environment.isTexture\u0026\u0026(n.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){n.geometry=s(e.geometries,this.geometry);const a=this.geometry.parameters;if(a!==void 0\u0026\u0026a.shapes!==void 0){const l=a.shapes;if(Array.isArray(l))for(let c=0,u=l.length;c\u003cu;c++){const h=l[c];s(e.shapes,h)}else s(e.shapes,l)}}if(this.isSkinnedMesh\u0026\u0026(n.bindMode=this.bindMode,n.bindMatrix=this.bindMatrix.toArray(),this.skeleton!==void 0\u0026\u0026(s(e.skeletons,this.skeleton),n.skeleton=this.skeleton.uuid)),this.material!==void 0)if(Array.isArray(this.material)){const a=[];for(let l=0,c=this.material.length;l\u003cc;l++)a.push(s(e.materials,this.material[l]));n.material=a}else n.material=s(e.materials,this.material);if(this.children.length\u003e0){n.children=[];for(let a=0;a\u003cthis.children.length;a++)n.children.push(this.children[a].toJSON(e).object)}if(this.animations.length\u003e0){n.animations=[];for(let a=0;a\u003cthis.animations.length;a++){const l=this.animations[a];n.animations.push(s(e.animations,l))}}if(t){const a=o(e.geometries),l=o(e.materials),c=o(e.textures),u=o(e.images),h=o(e.shapes),f=o(e.skeletons),m=o(e.animations),_=o(e.nodes);a.length\u003e0\u0026\u0026(i.geometries=a),l.length\u003e0\u0026\u0026(i.materials=l),c.length\u003e0\u0026\u0026(i.textures=c),u.length\u003e0\u0026\u0026(i.images=u),h.length\u003e0\u0026\u0026(i.shapes=h),f.length\u003e0\u0026\u0026(i.skeletons=f),m.length\u003e0\u0026\u0026(i.animations=m),_.length\u003e0\u0026\u0026(i.nodes=_)}return i.object=n,i;function o(a){const l=[];for(const c in a){const u=a[c];delete u.metadata,l.push(u)}return l}}clone(e){return new this.constructor().copy(this,e)}copy(e,t=!0){if(this.name=e.name,this.up.copy(e.up),this.position.copy(e.position),this.rotation.order=e.rotation.order,this.quaternion.copy(e.quaternion),this.scale.copy(e.scale),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,this.layers.mask=e.layers.mask,this.visible=e.visible,this.castShadow=e.castShadow,this.receiveShadow=e.receiveShadow,this.frustumCulled=e.frustumCulled,this.renderOrder=e.renderOrder,this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let i=0;i\u003ce.children.length;i++){const n=e.children[i];this.add(n.clone())}return this}}tt.DefaultUp=new L(0,1,0);tt.DefaultMatrixAutoUpdate=!0;function Bu(r){for(let e=r.length-1;e\u003e=0;--e)if(r[e]\u003e65535)return!0;return!1}function Us(r){return document.createElementNS(\"http://www.w3.org/1999/xhtml\",r)}let Nd=0;const Nt=new ct,Mo=new tt,In=new L,Pt=new Xr,vr=new Xr,it=new L;class Ri extends fr{constructor(){super();this.isBufferGeometry=!0,Object.defineProperty(this,\"id\",{value:Nd++}),this.uuid=hr(),this.name=\"\",this.type=\"BufferGeometry\",this.index=null,this.attributes={},this.morphAttributes={},this.morphTargetsRelative=!1,this.groups=[],this.boundingBox=null,this.boundingSphere=null,this.drawRange={start:0,count:1/0},this.userData={}}getIndex(){return this.index}setIndex(e){return Array.isArray(e)?this.index=new(Bu(e)?Uu:Ou)(e,1):this.index=e,this}getAttribute(e){return this.attributes[e]}setAttribute(e,t){return this.attributes[e]=t,this}deleteAttribute(e){return delete this.attributes[e],this}hasAttribute(e){return this.attributes[e]!==void 0}addGroup(e,t,i=0){this.groups.push({start:e,count:t,materialIndex:i})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){const t=this.attributes.position;t!==void 0\u0026\u0026(t.applyMatrix4(e),t.needsUpdate=!0);const i=this.attributes.normal;if(i!==void 0){const s=new li().getNormalMatrix(e);i.applyNormalMatrix(s),i.needsUpdate=!0}const n=this.attributes.tangent;return n!==void 0\u0026\u0026(n.transformDirection(e),n.needsUpdate=!0),this.boundingBox!==null\u0026\u0026this.computeBoundingBox(),this.boundingSphere!==null\u0026\u0026this.computeBoundingSphere(),this}applyQuaternion(e){return Nt.makeRotationFromQuaternion(e),this.applyMatrix4(Nt),this}rotateX(e){return Nt.makeRotationX(e),this.applyMatrix4(Nt),this}rotateY(e){return Nt.makeRotationY(e),this.applyMatrix4(Nt),this}rotateZ(e){return Nt.makeRotationZ(e),this.applyMatrix4(Nt),this}translate(e,t,i){return Nt.makeTranslation(e,t,i),this.applyMatrix4(Nt),this}scale(e,t,i){return Nt.makeScale(e,t,i),this.applyMatrix4(Nt),this}lookAt(e){return Mo.lookAt(e),Mo.updateMatrix(),this.applyMatrix4(Mo.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(In).negate(),this.translate(In.x,In.y,In.z),this}setFromPoints(e){const t=[];for(let i=0,n=e.length;i\u003cn;i++){const s=e[i];t.push(s.x,s.y,s.z||0)}return this.setAttribute(\"position\",new Ft(t,3)),this}computeBoundingBox(){this.boundingBox===null\u0026\u0026(this.boundingBox=new Xr);const e=this.attributes.position,t=this.morphAttributes.position;if(e\u0026\u0026e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),this.boundingBox.set(new L(-1/0,-1/0,-1/0),new L(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let i=0,n=t.length;i\u003cn;i++){const s=t[i];Pt.setFromBufferAttribute(s),this.morphTargetsRelative?(it.addVectors(this.boundingBox.min,Pt.min),this.boundingBox.expandByPoint(it),it.addVectors(this.boundingBox.max,Pt.max),this.boundingBox.expandByPoint(it)):(this.boundingBox.expandByPoint(Pt.min),this.boundingBox.expandByPoint(Pt.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.',this)}computeBoundingSphere(){this.boundingSphere===null\u0026\u0026(this.boundingSphere=new Aa);const e=this.attributes.position,t=this.morphAttributes.position;if(e\u0026\u0026e.isGLBufferAttribute){console.error('THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set \"mesh.frustumCulled\" to \"false\".',this),this.boundingSphere.set(new L,1/0);return}if(e){const i=this.boundingSphere.center;if(Pt.setFromBufferAttribute(e),t)for(let s=0,o=t.length;s\u003co;s++){const a=t[s];vr.setFromBufferAttribute(a),this.morphTargetsRelative?(it.addVectors(Pt.min,vr.min),Pt.expandByPoint(it),it.addVectors(Pt.max,vr.max),Pt.expandByPoint(it)):(Pt.expandByPoint(vr.min),Pt.expandByPoint(vr.max))}Pt.getCenter(i);let n=0;for(let s=0,o=e.count;s\u003co;s++)it.fromBufferAttribute(e,s),n=Math.max(n,i.distanceToSquared(it));if(t)for(let s=0,o=t.length;s\u003co;s++){const a=t[s],l=this.morphTargetsRelative;for(let c=0,u=a.count;c\u003cu;c++)it.fromBufferAttribute(a,c),l\u0026\u0026(In.fromBufferAttribute(e,c),it.add(In)),n=Math.max(n,i.distanceToSquared(it))}this.boundingSphere.radius=Math.sqrt(n),isNaN(this.boundingSphere.radius)\u0026\u0026console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.',this)}}computeTangents(){const e=this.index,t=this.attributes;if(e===null||t.position===void 0||t.normal===void 0||t.uv===void 0){console.error(\"THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)\");return}const i=e.array,n=t.position.array,s=t.normal.array,o=t.uv.array,a=n.length/3;this.hasAttribute(\"tangent\")===!1\u0026\u0026this.setAttribute(\"tangent\",new ci(new Float32Array(4*a),4));const l=this.getAttribute(\"tangent\").array,c=[],u=[];for(let I=0;I\u003ca;I++)c[I]=new L,u[I]=new L;const h=new L,f=new L,m=new L,_=new fe,d=new fe,p=new fe,g=new L,S=new L;function A(I,F,j){h.fromArray(n,I*3),f.fromArray(n,F*3),m.fromArray(n,j*3),_.fromArray(o,I*2),d.fromArray(o,F*2),p.fromArray(o,j*2),f.sub(h),m.sub(h),d.sub(_),p.sub(_);const Z=1/(d.x*p.y-p.x*d.y);!isFinite(Z)||(g.copy(f).multiplyScalar(p.y).addScaledVector(m,-d.y).multiplyScalar(Z),S.copy(m).multiplyScalar(d.x).addScaledVector(f,-p.x).multiplyScalar(Z),c[I].add(g),c[F].add(g),c[j].add(g),u[I].add(S),u[F].add(S),u[j].add(S))}let b=this.groups;b.length===0\u0026\u0026(b=[{start:0,count:i.length}]);for(let I=0,F=b.length;I\u003cF;++I){const j=b[I],Z=j.start,P=j.count;for(let H=Z,U=Z+P;H\u003cU;H+=3)A(i[H+0],i[H+1],i[H+2])}const v=new L,w=new L,R=new L,x=new L;function E(I){R.fromArray(s,I*3),x.copy(R);const F=c[I];v.copy(F),v.sub(R.multiplyScalar(R.dot(F))).normalize(),w.crossVectors(x,F);const Z=w.dot(u[I])\u003c0?-1:1;l[I*4]=v.x,l[I*4+1]=v.y,l[I*4+2]=v.z,l[I*4+3]=Z}for(let I=0,F=b.length;I\u003cF;++I){const j=b[I],Z=j.start,P=j.count;for(let H=Z,U=Z+P;H\u003cU;H+=3)E(i[H+0]),E(i[H+1]),E(i[H+2])}}computeVertexNormals(){const e=this.index,t=this.getAttribute(\"position\");if(t!==void 0){let i=this.getAttribute(\"normal\");if(i===void 0)i=new ci(new Float32Array(t.count*3),3),this.setAttribute(\"normal\",i);else for(let f=0,m=i.count;f\u003cm;f++)i.setXYZ(f,0,0,0);const n=new L,s=new L,o=new L,a=new L,l=new L,c=new L,u=new L,h=new L;if(e)for(let f=0,m=e.count;f\u003cm;f+=3){const _=e.getX(f+0),d=e.getX(f+1),p=e.getX(f+2);n.fromBufferAttribute(t,_),s.fromBufferAttribute(t,d),o.fromBufferAttribute(t,p),u.subVectors(o,s),h.subVectors(n,s),u.cross(h),a.fromBufferAttribute(i,_),l.fromBufferAttribute(i,d),c.fromBufferAttribute(i,p),a.add(u),l.add(u),c.add(u),i.setXYZ(_,a.x,a.y,a.z),i.setXYZ(d,l.x,l.y,l.z),i.setXYZ(p,c.x,c.y,c.z)}else for(let f=0,m=t.count;f\u003cm;f+=3)n.fromBufferAttribute(t,f+0),s.fromBufferAttribute(t,f+1),o.fromBufferAttribute(t,f+2),u.subVectors(o,s),h.subVectors(n,s),u.cross(h),i.setXYZ(f+0,u.x,u.y,u.z),i.setXYZ(f+1,u.x,u.y,u.z),i.setXYZ(f+2,u.x,u.y,u.z);this.normalizeNormals(),i.needsUpdate=!0}}merge(e,t){if(!(e\u0026\u0026e.isBufferGeometry)){console.error(\"THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.\",e);return}t===void 0\u0026\u0026(t=0,console.warn(\"THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.\"));const i=this.attributes;for(const n in i){if(e.attributes[n]===void 0)continue;const o=i[n].array,a=e.attributes[n],l=a.array,c=a.itemSize*t,u=Math.min(l.length,o.length-c);for(let h=0,f=c;h\u003cu;h++,f++)o[f]=l[h]}return this}normalizeNormals(){const e=this.attributes.normal;for(let t=0,i=e.count;t\u003ci;t++)it.fromBufferAttribute(e,t),it.normalize(),e.setXYZ(t,it.x,it.y,it.z)}toNonIndexed(){function e(a,l){const c=a.array,u=a.itemSize,h=a.normalized,f=new c.constructor(l.length*u);let m=0,_=0;for(let d=0,p=l.length;d\u003cp;d++){a.isInterleavedBufferAttribute?m=l[d]*a.data.stride+a.offset:m=l[d]*u;for(let g=0;g\u003cu;g++)f[_++]=c[m++]}return new ci(f,u,h)}if(this.index===null)return console.warn(\"THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.\"),this;const t=new Ri,i=this.index.array,n=this.attributes;for(const a in n){const l=n[a],c=e(l,i);t.setAttribute(a,c)}const s=this.morphAttributes;for(const a in s){const l=[],c=s[a];for(let u=0,h=c.length;u\u003ch;u++){const f=c[u],m=e(f,i);l.push(m)}t.morphAttributes[a]=l}t.morphTargetsRelative=this.morphTargetsRelative;const o=this.groups;for(let a=0,l=o.length;a\u003cl;a++){const c=o[a];t.addGroup(c.start,c.count,c.materialIndex)}return t}toJSON(){const e={metadata:{version:4.5,type:\"BufferGeometry\",generator:\"BufferGeometry.toJSON\"}};if(e.uuid=this.uuid,e.type=this.type,this.name!==\"\"\u0026\u0026(e.name=this.name),Object.keys(this.userData).length\u003e0\u0026\u0026(e.userData=this.userData),this.parameters!==void 0){const l=this.parameters;for(const c in l)l[c]!==void 0\u0026\u0026(e[c]=l[c]);return e}e.data={attributes:{}};const t=this.index;t!==null\u0026\u0026(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});const i=this.attributes;for(const l in i){const c=i[l];e.data.attributes[l]=c.toJSON(e.data)}const n={};let s=!1;for(const l in this.morphAttributes){const c=this.morphAttributes[l],u=[];for(let h=0,f=c.length;h\u003cf;h++){const m=c[h];u.push(m.toJSON(e.data))}u.length\u003e0\u0026\u0026(n[l]=u,s=!0)}s\u0026\u0026(e.data.morphAttributes=n,e.data.morphTargetsRelative=this.morphTargetsRelative);const o=this.groups;o.length\u003e0\u0026\u0026(e.data.groups=JSON.parse(JSON.stringify(o)));const a=this.boundingSphere;return a!==null\u0026\u0026(e.data.boundingSphere={center:a.center.toArray(),radius:a.radius}),e}clone(){return new this.constructor().copy(this)}copy(e){this.index=null,this.attributes={},this.morphAttributes={},this.groups=[],this.boundingBox=null,this.boundingSphere=null;const t={};this.name=e.name;const i=e.index;i!==null\u0026\u0026this.setIndex(i.clone(t));const n=e.attributes;for(const c in n){const u=n[c];this.setAttribute(c,u.clone(t))}const s=e.morphAttributes;for(const c in s){const u=[],h=s[c];for(let f=0,m=h.length;f\u003cm;f++)u.push(h[f].clone(t));this.morphAttributes[c]=u}this.morphTargetsRelative=e.morphTargetsRelative;const o=e.groups;for(let c=0,u=o.length;c\u003cu;c++){const h=o[c];this.addGroup(h.start,h.count,h.materialIndex)}const a=e.boundingBox;a!==null\u0026\u0026(this.boundingBox=a.clone());const l=e.boundingSphere;return l!==null\u0026\u0026(this.boundingSphere=l.clone()),this.drawRange.start=e.drawRange.start,this.drawRange.count=e.drawRange.count,this.userData=e.userData,e.parameters!==void 0\u0026\u0026(this.parameters=Object.assign({},e.parameters)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}}class Yr extends Ri{constructor(e=1,t=1,i=1,n=1,s=1,o=1){super();this.type=\"BoxGeometry\",this.parameters={width:e,height:t,depth:i,widthSegments:n,heightSegments:s,depthSegments:o};const a=this;n=Math.floor(n),s=Math.floor(s),o=Math.floor(o);const l=[],c=[],u=[],h=[];let f=0,m=0;_(\"z\",\"y\",\"x\",-1,-1,i,t,e,o,s,0),_(\"z\",\"y\",\"x\",1,-1,i,t,-e,o,s,1),_(\"x\",\"z\",\"y\",1,1,e,i,t,n,o,2),_(\"x\",\"z\",\"y\",1,-1,e,i,-t,n,o,3),_(\"x\",\"y\",\"z\",1,-1,e,t,i,n,s,4),_(\"x\",\"y\",\"z\",-1,-1,e,t,-i,n,s,5),this.setIndex(l),this.setAttribute(\"position\",new Ft(c,3)),this.setAttribute(\"normal\",new Ft(u,3)),this.setAttribute(\"uv\",new Ft(h,2));function _(d,p,g,S,A,b,v,w,R,x,E){const I=b/R,F=v/x,j=b/2,Z=v/2,P=w/2,H=R+1,U=x+1;let V=0,X=0;const B=new L;for(let q=0;q\u003cU;q++){const Q=q*F-Z;for(let K=0;K\u003cH;K++){const J=K*I-j;B[d]=J*S,B[p]=Q*A,B[g]=P,c.push(B.x,B.y,B.z),B[d]=0,B[p]=0,B[g]=w\u003e0?1:-1,u.push(B.x,B.y,B.z),h.push(K/R),h.push(1-q/x),V+=1}}for(let q=0;q\u003cx;q++)for(let Q=0;Q\u003cR;Q++){const K=f+Q+H*q,J=f+Q+H*(q+1),ae=f+(Q+1)+H*(q+1),pe=f+(Q+1)+H*q;l.push(K,J,pe),l.push(J,ae,pe),X+=6}a.addGroup(m,X,E),m+=X,f+=V}}static fromJSON(e){return new Yr(e.width,e.height,e.depth,e.widthSegments,e.heightSegments,e.depthSegments)}}class Hs extends Ri{constructor(e=1,t=1,i=1,n=1){super();this.type=\"PlaneGeometry\",this.parameters={width:e,height:t,widthSegments:i,heightSegments:n};const s=e/2,o=t/2,a=Math.floor(i),l=Math.floor(n),c=a+1,u=l+1,h=e/a,f=t/l,m=[],_=[],d=[],p=[];for(let g=0;g\u003cu;g++){const S=g*f-o;for(let A=0;A\u003cc;A++){const b=A*h-s;_.push(b,-S,0),d.push(0,0,1),p.push(A/a),p.push(1-g/l)}}for(let g=0;g\u003cl;g++)for(let S=0;S\u003ca;S++){const A=S+c*g,b=S+c*(g+1),v=S+1+c*(g+1),w=S+1+c*g;m.push(A,b,w),m.push(b,v,w)}this.setIndex(m),this.setAttribute(\"position\",new Ft(_,3)),this.setAttribute(\"normal\",new Ft(d,3)),this.setAttribute(\"uv\",new Ft(p,2))}static fromJSON(e){return new Hs(e.width,e.height,e.widthSegments,e.heightSegments)}}let Od=0;class Zr extends fr{constructor(){super();this.isMaterial=!0,Object.defineProperty(this,\"id\",{value:Od++}),this.uuid=hr(),this.name=\"\",this.type=\"Material\",this.blending=Jn,this.side=Dr,this.vertexColors=!1,this.opacity=1,this.transparent=!1,this.blendSrc=Pc,this.blendDst=Lc,this.blendEquation=Hn,this.blendSrcAlpha=null,this.blendDstAlpha=null,this.blendEquationAlpha=null,this.depthFunc=qo,this.depthTest=!0,this.depthWrite=!0,this.stencilWriteMask=255,this.stencilFunc=pf,this.stencilRef=0,this.stencilFuncMask=255,this.stencilFail=to,this.stencilZFail=to,this.stencilZPass=to,this.stencilWrite=!1,this.clippingPlanes=null,this.clipIntersection=!1,this.clipShadows=!1,this.shadowSide=null,this.colorWrite=!0,this.precision=null,this.polygonOffset=!1,this.polygonOffsetFactor=0,this.polygonOffsetUnits=0,this.dithering=!1,this.alphaToCoverage=!1,this.premultipliedAlpha=!1,this.visible=!0,this.toneMapped=!0,this.userData={},this.version=0,this._alphaTest=0}get alphaTest(){return this._alphaTest}set alphaTest(e){this._alphaTest\u003e0!=e\u003e0\u0026\u0026this.version++,this._alphaTest=e}onBuild(){}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(const t in e){const i=e[t];if(i===void 0){console.warn(\"THREE.Material: '\"+t+\"' parameter is undefined.\");continue}if(t===\"shading\"){console.warn(\"THREE.\"+this.type+\": .shading has been removed. Use the boolean .flatShading instead.\"),this.flatShading=i===yh;continue}const n=this[t];if(n===void 0){console.warn(\"THREE.\"+this.type+\": '\"+t+\"' is not a property of this material.\");continue}n\u0026\u0026n.isColor?n.set(i):n\u0026\u0026n.isVector3\u0026\u0026i\u0026\u0026i.isVector3?n.copy(i):this[t]=i}}toJSON(e){const t=e===void 0||typeof e==\"string\";t\u0026\u0026(e={textures:{},images:{}});const i={metadata:{version:4.5,type:\"Material\",generator:\"Material.toJSON\"}};i.uuid=this.uuid,i.type=this.type,this.name!==\"\"\u0026\u0026(i.name=this.name),this.color\u0026\u0026this.color.isColor\u0026\u0026(i.color=this.color.getHex()),this.roughness!==void 0\u0026\u0026(i.roughness=this.roughness),this.metalness!==void 0\u0026\u0026(i.metalness=this.metalness),this.sheen!==void 0\u0026\u0026(i.sheen=this.sheen),this.sheenColor\u0026\u0026this.sheenColor.isColor\u0026\u0026(i.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0\u0026\u0026(i.sheenRoughness=this.sheenRoughness),this.emissive\u0026\u0026this.emissive.isColor\u0026\u0026(i.emissive=this.emissive.getHex()),this.emissiveIntensity\u0026\u0026this.emissiveIntensity!==1\u0026\u0026(i.emissiveIntensity=this.emissiveIntensity),this.specular\u0026\u0026this.specular.isColor\u0026\u0026(i.specular=this.specular.getHex()),this.specularIntensity!==void 0\u0026\u0026(i.specularIntensity=this.specularIntensity),this.specularColor\u0026\u0026this.specularColor.isColor\u0026\u0026(i.specularColor=this.specularColor.getHex()),this.shininess!==void 0\u0026\u0026(i.shininess=this.shininess),this.clearcoat!==void 0\u0026\u0026(i.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0\u0026\u0026(i.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap\u0026\u0026this.clearcoatMap.isTexture\u0026\u0026(i.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap\u0026\u0026this.clearcoatRoughnessMap.isTexture\u0026\u0026(i.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap\u0026\u0026this.clearcoatNormalMap.isTexture\u0026\u0026(i.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,i.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.iridescence!==void 0\u0026\u0026(i.iridescence=this.iridescence),this.iridescenceIOR!==void 0\u0026\u0026(i.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0\u0026\u0026(i.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap\u0026\u0026this.iridescenceMap.isTexture\u0026\u0026(i.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap\u0026\u0026this.iridescenceThicknessMap.isTexture\u0026\u0026(i.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.map\u0026\u0026this.map.isTexture\u0026\u0026(i.map=this.map.toJSON(e).uuid),this.matcap\u0026\u0026this.matcap.isTexture\u0026\u0026(i.matcap=this.matcap.toJSON(e).uuid),this.alphaMap\u0026\u0026this.alphaMap.isTexture\u0026\u0026(i.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap\u0026\u0026this.lightMap.isTexture\u0026\u0026(i.lightMap=this.lightMap.toJSON(e).uuid,i.lightMapIntensity=this.lightMapIntensity),this.aoMap\u0026\u0026this.aoMap.isTexture\u0026\u0026(i.aoMap=this.aoMap.toJSON(e).uuid,i.aoMapIntensity=this.aoMapIntensity),this.bumpMap\u0026\u0026this.bumpMap.isTexture\u0026\u0026(i.bumpMap=this.bumpMap.toJSON(e).uuid,i.bumpScale=this.bumpScale),this.normalMap\u0026\u0026this.normalMap.isTexture\u0026\u0026(i.normalMap=this.normalMap.toJSON(e).uuid,i.normalMapType=this.normalMapType,i.normalScale=this.normalScale.toArray()),this.displacementMap\u0026\u0026this.displacementMap.isTexture\u0026\u0026(i.displacementMap=this.displacementMap.toJSON(e).uuid,i.displacementScale=this.displacementScale,i.displacementBias=this.displacementBias),this.roughnessMap\u0026\u0026this.roughnessMap.isTexture\u0026\u0026(i.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap\u0026\u0026this.metalnessMap.isTexture\u0026\u0026(i.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap\u0026\u0026this.emissiveMap.isTexture\u0026\u0026(i.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap\u0026\u0026this.specularMap.isTexture\u0026\u0026(i.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap\u0026\u0026this.specularIntensityMap.isTexture\u0026\u0026(i.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap\u0026\u0026this.specularColorMap.isTexture\u0026\u0026(i.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap\u0026\u0026this.envMap.isTexture\u0026\u0026(i.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0\u0026\u0026(i.combine=this.combine)),this.envMapIntensity!==void 0\u0026\u0026(i.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0\u0026\u0026(i.reflectivity=this.reflectivity),this.refractionRatio!==void 0\u0026\u0026(i.refractionRatio=this.refractionRatio),this.gradientMap\u0026\u0026this.gradientMap.isTexture\u0026\u0026(i.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0\u0026\u0026(i.transmission=this.transmission),this.transmissionMap\u0026\u0026this.transmissionMap.isTexture\u0026\u0026(i.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0\u0026\u0026(i.thickness=this.thickness),this.thicknessMap\u0026\u0026this.thicknessMap.isTexture\u0026\u0026(i.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0\u0026\u0026(i.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0\u0026\u0026(i.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0\u0026\u0026(i.size=this.size),this.shadowSide!==null\u0026\u0026(i.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0\u0026\u0026(i.sizeAttenuation=this.sizeAttenuation),this.blending!==Jn\u0026\u0026(i.blending=this.blending),this.side!==Dr\u0026\u0026(i.side=this.side),this.vertexColors\u0026\u0026(i.vertexColors=!0),this.opacity\u003c1\u0026\u0026(i.opacity=this.opacity),this.transparent===!0\u0026\u0026(i.transparent=this.transparent),i.depthFunc=this.depthFunc,i.depthTest=this.depthTest,i.depthWrite=this.depthWrite,i.colorWrite=this.colorWrite,i.stencilWrite=this.stencilWrite,i.stencilWriteMask=this.stencilWriteMask,i.stencilFunc=this.stencilFunc,i.stencilRef=this.stencilRef,i.stencilFuncMask=this.stencilFuncMask,i.stencilFail=this.stencilFail,i.stencilZFail=this.stencilZFail,i.stencilZPass=this.stencilZPass,this.rotation!==void 0\u0026\u0026this.rotation!==0\u0026\u0026(i.rotation=this.rotation),this.polygonOffset===!0\u0026\u0026(i.polygonOffset=!0),this.polygonOffsetFactor!==0\u0026\u0026(i.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0\u0026\u0026(i.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0\u0026\u0026this.linewidth!==1\u0026\u0026(i.linewidth=this.linewidth),this.dashSize!==void 0\u0026\u0026(i.dashSize=this.dashSize),this.gapSize!==void 0\u0026\u0026(i.gapSize=this.gapSize),this.scale!==void 0\u0026\u0026(i.scale=this.scale),this.dithering===!0\u0026\u0026(i.dithering=!0),this.alphaTest\u003e0\u0026\u0026(i.alphaTest=this.alphaTest),this.alphaToCoverage===!0\u0026\u0026(i.alphaToCoverage=this.alphaToCoverage),this.premultipliedAlpha===!0\u0026\u0026(i.premultipliedAlpha=this.premultipliedAlpha),this.wireframe===!0\u0026\u0026(i.wireframe=this.wireframe),this.wireframeLinewidth\u003e1\u0026\u0026(i.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==\"round\"\u0026\u0026(i.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==\"round\"\u0026\u0026(i.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0\u0026\u0026(i.flatShading=this.flatShading),this.visible===!1\u0026\u0026(i.visible=!1),this.toneMapped===!1\u0026\u0026(i.toneMapped=!1),this.fog===!1\u0026\u0026(i.fog=!1),JSON.stringify(this.userData)!==\"{}\"\u0026\u0026(i.userData=this.userData);function n(s){const o=[];for(const a in s){const l=s[a];delete l.metadata,o.push(l)}return o}if(t){const s=n(e.textures),o=n(e.images);s.length\u003e0\u0026\u0026(i.textures=s),o.length\u003e0\u0026\u0026(i.images=o)}return i}clone(){return new this.constructor().copy(this)}copy(e){this.name=e.name,this.blending=e.blending,this.side=e.side,this.vertexColors=e.vertexColors,this.opacity=e.opacity,this.transparent=e.transparent,this.blendSrc=e.blendSrc,this.blendDst=e.blendDst,this.blendEquation=e.blendEquation,this.blendSrcAlpha=e.blendSrcAlpha,this.blendDstAlpha=e.blendDstAlpha,this.blendEquationAlpha=e.blendEquationAlpha,this.depthFunc=e.depthFunc,this.depthTest=e.depthTest,this.depthWrite=e.depthWrite,this.stencilWriteMask=e.stencilWriteMask,this.stencilFunc=e.stencilFunc,this.stencilRef=e.stencilRef,this.stencilFuncMask=e.stencilFuncMask,this.stencilFail=e.stencilFail,this.stencilZFail=e.stencilZFail,this.stencilZPass=e.stencilZPass,this.stencilWrite=e.stencilWrite;const t=e.clippingPlanes;let i=null;if(t!==null){const n=t.length;i=new Array(n);for(let s=0;s!==n;++s)i[s]=t[s].clone()}return this.clippingPlanes=i,this.clipIntersection=e.clipIntersection,this.clipShadows=e.clipShadows,this.shadowSide=e.shadowSide,this.colorWrite=e.colorWrite,this.precision=e.precision,this.polygonOffset=e.polygonOffset,this.polygonOffsetFactor=e.polygonOffsetFactor,this.polygonOffsetUnits=e.polygonOffsetUnits,this.dithering=e.dithering,this.alphaTest=e.alphaTest,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.visible=e.visible,this.toneMapped=e.toneMapped,this.userData=JSON.parse(JSON.stringify(e.userData)),this}dispose(){this.dispatchEvent({type:\"dispose\"})}set needsUpdate(e){e===!0\u0026\u0026this.version++}get vertexTangents(){return console.warn(\"THREE.\"+this.type+\": .vertexTangents has been removed.\"),!1}set vertexTangents(e){console.warn(\"THREE.\"+this.type+\": .vertexTangents has been removed.\")}}Zr.fromType=function(){return null};function ur(r){const e={};for(const t in r){e[t]={};for(const i in r[t]){const n=r[t][i];n\u0026\u0026(n.isColor||n.isMatrix3||n.isMatrix4||n.isVector2||n.isVector3||n.isVector4||n.isTexture||n.isQuaternion)?e[t][i]=n.clone():Array.isArray(n)?e[t][i]=n.slice():e[t][i]=n}}return e}function ht(r){const e={};for(let t=0;t\u003cr.length;t++){const i=ur(r[t]);for(const n in i)e[n]=i[n]}return e}const Ud={clone:ur,merge:ht};var zd=`\nvoid main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}\n`,Bd=`\nvoid main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}\n`;class Sn extends Zr{constructor(e){super();this.isShaderMaterial=!0,this.type=\"ShaderMaterial\",this.defines={},this.uniforms={},this.vertexShader=zd,this.fragmentShader=Bd,this.linewidth=1,this.wireframe=!1,this.wireframeLinewidth=1,this.fog=!1,this.lights=!1,this.clipping=!1,this.extensions={derivatives:!1,fragDepth:!1,drawBuffers:!1,shaderTextureLOD:!1},this.defaultAttributeValues={color:[1,1,1],uv:[0,0],uv2:[0,0]},this.index0AttributeName=void 0,this.uniformsNeedUpdate=!1,this.glslVersion=null,e!==void 0\u0026\u0026(e.attributes!==void 0\u0026\u0026console.error(\"THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.\"),this.setValues(e))}copy(e){return super.copy(e),this.fragmentShader=e.fragmentShader,this.vertexShader=e.vertexShader,this.uniforms=ur(e.uniforms),this.defines=Object.assign({},e.defines),this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.fog=e.fog,this.lights=e.lights,this.clipping=e.clipping,this.extensions=Object.assign({},e.extensions),this.glslVersion=e.glslVersion,this}toJSON(e){const t=super.toJSON(e);t.glslVersion=this.glslVersion,t.uniforms={};for(const n in this.uniforms){const o=this.uniforms[n].value;o\u0026\u0026o.isTexture?t.uniforms[n]={type:\"t\",value:o.toJSON(e).uuid}:o\u0026\u0026o.isColor?t.uniforms[n]={type:\"c\",value:o.getHex()}:o\u0026\u0026o.isVector2?t.uniforms[n]={type:\"v2\",value:o.toArray()}:o\u0026\u0026o.isVector3?t.uniforms[n]={type:\"v3\",value:o.toArray()}:o\u0026\u0026o.isVector4?t.uniforms[n]={type:\"v4\",value:o.toArray()}:o\u0026\u0026o.isMatrix3?t.uniforms[n]={type:\"m3\",value:o.toArray()}:o\u0026\u0026o.isMatrix4?t.uniforms[n]={type:\"m4\",value:o.toArray()}:t.uniforms[n]={value:o}}Object.keys(this.defines).length\u003e0\u0026\u0026(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader;const i={};for(const n in this.extensions)this.extensions[n]===!0\u0026\u0026(i[n]=!0);return Object.keys(i).length\u003e0\u0026\u0026(t.extensions=i),t}}const _i=new L,Eo=new L,as=new L,Ii=new L,bo=new L,ls=new L,wo=new L;class Gd{constructor(e=new L,t=new L(0,0,-1)){this.origin=e,this.direction=t}set(e,t){return this.origin.copy(e),this.direction.copy(t),this}copy(e){return this.origin.copy(e.origin),this.direction.copy(e.direction),this}at(e,t){return t.copy(this.direction).multiplyScalar(e).add(this.origin)}lookAt(e){return this.direction.copy(e).sub(this.origin).normalize(),this}recast(e){return this.origin.copy(this.at(e,_i)),this}closestPointToPoint(e,t){t.subVectors(e,this.origin);const i=t.dot(this.direction);return i\u003c0?t.copy(this.origin):t.copy(this.direction).multiplyScalar(i).add(this.origin)}distanceToPoint(e){return Math.sqrt(this.distanceSqToPoint(e))}distanceSqToPoint(e){const t=_i.subVectors(e,this.origin).dot(this.direction);return t\u003c0?this.origin.distanceToSquared(e):(_i.copy(this.direction).multiplyScalar(t).add(this.origin),_i.distanceToSquared(e))}distanceSqToSegment(e,t,i,n){Eo.copy(e).add(t).multiplyScalar(.5),as.copy(t).sub(e).normalize(),Ii.copy(this.origin).sub(Eo);const s=e.distanceTo(t)*.5,o=-this.direction.dot(as),a=Ii.dot(this.direction),l=-Ii.dot(as),c=Ii.lengthSq(),u=Math.abs(1-o*o);let h,f,m,_;if(u\u003e0)if(h=o*l-a,f=o*a-l,_=s*u,h\u003e=0)if(f\u003e=-_)if(f\u003c=_){const d=1/u;h*=d,f*=d,m=h*(h+o*f+2*a)+f*(o*h+f+2*l)+c}else f=s,h=Math.max(0,-(o*f+a)),m=-h*h+f*(f+2*l)+c;else f=-s,h=Math.max(0,-(o*f+a)),m=-h*h+f*(f+2*l)+c;else f\u003c=-_?(h=Math.max(0,-(-o*s+a)),f=h\u003e0?-s:Math.min(Math.max(-s,-l),s),m=-h*h+f*(f+2*l)+c):f\u003c=_?(h=0,f=Math.min(Math.max(-s,-l),s),m=f*(f+2*l)+c):(h=Math.max(0,-(o*s+a)),f=h\u003e0?s:Math.min(Math.max(-s,-l),s),m=-h*h+f*(f+2*l)+c);else f=o\u003e0?-s:s,h=Math.max(0,-(o*f+a)),m=-h*h+f*(f+2*l)+c;return i\u0026\u0026i.copy(this.direction).multiplyScalar(h).add(this.origin),n\u0026\u0026n.copy(as).multiplyScalar(f).add(Eo),m}intersectSphere(e,t){_i.subVectors(e.center,this.origin);const i=_i.dot(this.direction),n=_i.dot(_i)-i*i,s=e.radius*e.radius;if(n\u003es)return null;const o=Math.sqrt(s-n),a=i-o,l=i+o;return a\u003c0\u0026\u0026l\u003c0?null:a\u003c0?this.at(l,t):this.at(a,t)}intersectsSphere(e){return this.distanceSqToPoint(e.center)\u003c=e.radius*e.radius}distanceToPlane(e){const t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;const i=-(this.origin.dot(e.normal)+e.constant)/t;return i\u003e=0?i:null}intersectPlane(e,t){const i=this.distanceToPlane(e);return i===null?null:this.at(i,t)}intersectsPlane(e){const t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t\u003c0}intersectBox(e,t){let i,n,s,o,a,l;const c=1/this.direction.x,u=1/this.direction.y,h=1/this.direction.z,f=this.origin;return c\u003e=0?(i=(e.min.x-f.x)*c,n=(e.max.x-f.x)*c):(i=(e.max.x-f.x)*c,n=(e.min.x-f.x)*c),u\u003e=0?(s=(e.min.y-f.y)*u,o=(e.max.y-f.y)*u):(s=(e.max.y-f.y)*u,o=(e.min.y-f.y)*u),i\u003eo||s\u003en||((s\u003ei||i!==i)\u0026\u0026(i=s),(o\u003cn||n!==n)\u0026\u0026(n=o),h\u003e=0?(a=(e.min.z-f.z)*h,l=(e.max.z-f.z)*h):(a=(e.max.z-f.z)*h,l=(e.min.z-f.z)*h),i\u003el||a\u003en)||((a\u003ei||i!==i)\u0026\u0026(i=a),(l\u003cn||n!==n)\u0026\u0026(n=l),n\u003c0)?null:this.at(i\u003e=0?i:n,t)}intersectsBox(e){return this.intersectBox(e,_i)!==null}intersectTriangle(e,t,i,n,s){bo.subVectors(t,e),ls.subVectors(i,e),wo.crossVectors(bo,ls);let o=this.direction.dot(wo),a;if(o\u003e0){if(n)return null;a=1}else if(o\u003c0)a=-1,o=-o;else return null;Ii.subVectors(this.origin,e);const l=a*this.direction.dot(ls.crossVectors(Ii,ls));if(l\u003c0)return null;const c=a*this.direction.dot(bo.cross(Ii));if(c\u003c0||l+c\u003eo)return null;const u=-a*Ii.dot(wo);return u\u003c0?null:this.at(u/o,s)}applyMatrix4(e){return this.origin.applyMatrix4(e),this.direction.transformDirection(e),this}equals(e){return e.origin.equals(this.origin)\u0026\u0026e.direction.equals(this.direction)}clone(){return new this.constructor().copy(this)}}const Zt=new L,gi=new L,To=new L,xi=new L,Nn=new L,On=new L,jl=new L,Ao=new L,Ro=new L,Co=new L;class Si{constructor(e=new L,t=new L,i=new L){this.a=e,this.b=t,this.c=i}static getNormal(e,t,i,n){n.subVectors(i,t),Zt.subVectors(e,t),n.cross(Zt);const s=n.lengthSq();return s\u003e0?n.multiplyScalar(1/Math.sqrt(s)):n.set(0,0,0)}static getBarycoord(e,t,i,n,s){Zt.subVectors(n,t),gi.subVectors(i,t),To.subVectors(e,t);const o=Zt.dot(Zt),a=Zt.dot(gi),l=Zt.dot(To),c=gi.dot(gi),u=gi.dot(To),h=o*c-a*a;if(h===0)return s.set(-2,-1,-1);const f=1/h,m=(c*l-a*u)*f,_=(o*u-a*l)*f;return s.set(1-m-_,_,m)}static containsPoint(e,t,i,n){return this.getBarycoord(e,t,i,n,xi),xi.x\u003e=0\u0026\u0026xi.y\u003e=0\u0026\u0026xi.x+xi.y\u003c=1}static getUV(e,t,i,n,s,o,a,l){return this.getBarycoord(e,t,i,n,xi),l.set(0,0),l.addScaledVector(s,xi.x),l.addScaledVector(o,xi.y),l.addScaledVector(a,xi.z),l}static isFrontFacing(e,t,i,n){return Zt.subVectors(i,t),gi.subVectors(e,t),Zt.cross(gi).dot(n)\u003c0}set(e,t,i){return this.a.copy(e),this.b.copy(t),this.c.copy(i),this}setFromPointsAndIndices(e,t,i,n){return this.a.copy(e[t]),this.b.copy(e[i]),this.c.copy(e[n]),this}setFromAttributeAndIndices(e,t,i,n){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,i),this.c.fromBufferAttribute(e,n),this}clone(){return new this.constructor().copy(this)}copy(e){return this.a.copy(e.a),this.b.copy(e.b),this.c.copy(e.c),this}getArea(){return Zt.subVectors(this.c,this.b),gi.subVectors(this.a,this.b),Zt.cross(gi).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(e){return Si.getNormal(this.a,this.b,this.c,e)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(e,t){return Si.getBarycoord(e,this.a,this.b,this.c,t)}getUV(e,t,i,n,s){return Si.getUV(e,this.a,this.b,this.c,t,i,n,s)}containsPoint(e){return Si.containsPoint(e,this.a,this.b,this.c)}isFrontFacing(e){return Si.isFrontFacing(this.a,this.b,this.c,e)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){const i=this.a,n=this.b,s=this.c;let o,a;Nn.subVectors(n,i),On.subVectors(s,i),Ao.subVectors(e,i);const l=Nn.dot(Ao),c=On.dot(Ao);if(l\u003c=0\u0026\u0026c\u003c=0)return t.copy(i);Ro.subVectors(e,n);const u=Nn.dot(Ro),h=On.dot(Ro);if(u\u003e=0\u0026\u0026h\u003c=u)return t.copy(n);const f=l*h-u*c;if(f\u003c=0\u0026\u0026l\u003e=0\u0026\u0026u\u003c=0)return o=l/(l-u),t.copy(i).addScaledVector(Nn,o);Co.subVectors(e,s);const m=Nn.dot(Co),_=On.dot(Co);if(_\u003e=0\u0026\u0026m\u003c=_)return t.copy(s);const d=m*c-l*_;if(d\u003c=0\u0026\u0026c\u003e=0\u0026\u0026_\u003c=0)return a=c/(c-_),t.copy(i).addScaledVector(On,a);const p=u*_-m*h;if(p\u003c=0\u0026\u0026h-u\u003e=0\u0026\u0026m-_\u003e=0)return jl.subVectors(s,n),a=(h-u)/(h-u+(m-_)),t.copy(n).addScaledVector(jl,a);const g=1/(p+d+f);return o=d*g,a=f*g,t.copy(i).addScaledVector(Nn,o).addScaledVector(On,a)}equals(e){return e.a.equals(this.a)\u0026\u0026e.b.equals(this.b)\u0026\u0026e.c.equals(this.c)}}class Ci extends Zr{constructor(e){super();this.isMeshBasicMaterial=!0,this.type=\"MeshBasicMaterial\",this.color=new Le(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.combine=Dc,this.reflectivity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=\"round\",this.wireframeLinejoin=\"round\",this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.combine=e.combine,this.reflectivity=e.reflectivity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}}const $l=new ct,Un=new Gd,Po=new Aa,Ni=new L,Oi=new L,Ui=new L,Lo=new L,Do=new L,Fo=new L,cs=new L,us=new L,hs=new L,fs=new fe,ds=new fe,ps=new fe,Io=new L,ms=new L;class xt extends tt{constructor(e=new Ri,t=new Ci){super();this.isMesh=!0,this.type=\"Mesh\",this.geometry=e,this.material=t,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0\u0026\u0026(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0\u0026\u0026(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=e.material,this.geometry=e.geometry,this}updateMorphTargets(){const t=this.geometry.morphAttributes,i=Object.keys(t);if(i.length\u003e0){const n=t[i[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let s=0,o=n.length;s\u003co;s++){const a=n[s].name||String(s);this.morphTargetInfluences.push(0),this.morphTargetDictionary[a]=s}}}}raycast(e,t){const i=this.geometry,n=this.material,s=this.matrixWorld;if(n===void 0||(i.boundingSphere===null\u0026\u0026i.computeBoundingSphere(),Po.copy(i.boundingSphere),Po.applyMatrix4(s),e.ray.intersectsSphere(Po)===!1)||($l.copy(s).invert(),Un.copy(e.ray).applyMatrix4($l),i.boundingBox!==null\u0026\u0026Un.intersectsBox(i.boundingBox)===!1))return;let o;const a=i.index,l=i.attributes.position,c=i.morphAttributes.position,u=i.morphTargetsRelative,h=i.attributes.uv,f=i.attributes.uv2,m=i.groups,_=i.drawRange;if(a!==null)if(Array.isArray(n))for(let d=0,p=m.length;d\u003cp;d++){const g=m[d],S=n[g.materialIndex],A=Math.max(g.start,_.start),b=Math.min(a.count,Math.min(g.start+g.count,_.start+_.count));for(let v=A,w=b;v\u003cw;v+=3){const R=a.getX(v),x=a.getX(v+1),E=a.getX(v+2);o=_s(this,S,e,Un,l,c,u,h,f,R,x,E),o\u0026\u0026(o.faceIndex=Math.floor(v/3),o.face.materialIndex=g.materialIndex,t.push(o))}}else{const d=Math.max(0,_.start),p=Math.min(a.count,_.start+_.count);for(let g=d,S=p;g\u003cS;g+=3){const A=a.getX(g),b=a.getX(g+1),v=a.getX(g+2);o=_s(this,n,e,Un,l,c,u,h,f,A,b,v),o\u0026\u0026(o.faceIndex=Math.floor(g/3),t.push(o))}}else if(l!==void 0)if(Array.isArray(n))for(let d=0,p=m.length;d\u003cp;d++){const g=m[d],S=n[g.materialIndex],A=Math.max(g.start,_.start),b=Math.min(l.count,Math.min(g.start+g.count,_.start+_.count));for(let v=A,w=b;v\u003cw;v+=3){const R=v,x=v+1,E=v+2;o=_s(this,S,e,Un,l,c,u,h,f,R,x,E),o\u0026\u0026(o.faceIndex=Math.floor(v/3),o.face.materialIndex=g.materialIndex,t.push(o))}}else{const d=Math.max(0,_.start),p=Math.min(l.count,_.start+_.count);for(let g=d,S=p;g\u003cS;g+=3){const A=g,b=g+1,v=g+2;o=_s(this,n,e,Un,l,c,u,h,f,A,b,v),o\u0026\u0026(o.faceIndex=Math.floor(g/3),t.push(o))}}}}function kd(r,e,t,i,n,s,o,a){let l;if(e.side===jt?l=i.intersectTriangle(o,s,n,!0,a):l=i.intersectTriangle(n,s,o,e.side!==Qn,a),l===null)return null;ms.copy(a),ms.applyMatrix4(r.matrixWorld);const c=t.ray.origin.distanceTo(ms);return c\u003ct.near||c\u003et.far?null:{distance:c,point:ms.clone(),object:r}}function _s(r,e,t,i,n,s,o,a,l,c,u,h){Ni.fromBufferAttribute(n,c),Oi.fromBufferAttribute(n,u),Ui.fromBufferAttribute(n,h);const f=r.morphTargetInfluences;if(s\u0026\u0026f){cs.set(0,0,0),us.set(0,0,0),hs.set(0,0,0);for(let _=0,d=s.length;_\u003cd;_++){const p=f[_],g=s[_];p!==0\u0026\u0026(Lo.fromBufferAttribute(g,c),Do.fromBufferAttribute(g,u),Fo.fromBufferAttribute(g,h),o?(cs.addScaledVector(Lo,p),us.addScaledVector(Do,p),hs.addScaledVector(Fo,p)):(cs.addScaledVector(Lo.sub(Ni),p),us.addScaledVector(Do.sub(Oi),p),hs.addScaledVector(Fo.sub(Ui),p)))}Ni.add(cs),Oi.add(us),Ui.add(hs)}r.isSkinnedMesh\u0026\u0026(r.boneTransform(c,Ni),r.boneTransform(u,Oi),r.boneTransform(h,Ui));const m=kd(r,e,t,i,Ni,Oi,Ui,Io);if(m){a\u0026\u0026(fs.fromBufferAttribute(a,c),ds.fromBufferAttribute(a,u),ps.fromBufferAttribute(a,h),m.uv=Si.getUV(Io,Ni,Oi,Ui,fs,ds,ps,new fe)),l\u0026\u0026(fs.fromBufferAttribute(l,c),ds.fromBufferAttribute(l,u),ps.fromBufferAttribute(l,h),m.uv2=Si.getUV(Io,Ni,Oi,Ui,fs,ds,ps,new fe));const _={a:c,b:u,c:h,normal:new L,materialIndex:0};Si.getNormal(Ni,Oi,Ui,_.normal),m.face=_}return m}var Hd=`\n#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\n\n#endif\n`,Vd=`\n#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n`,Wd=`\n#ifdef USE_ALPHATEST\n\n\tif ( diffuseColor.a \u003c alphaTest ) discard;\n\n#endif\n`,Xd=`\n#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif\n`,qd=`\n#ifdef USE_AOMAP\n\n\t// reads channel R, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\n\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\n\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD )\n\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\n\t#endif\n\n#endif\n`,Yd=`\n#ifdef USE_AOMAP\n\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n\n#endif\n`,Zd=`\nvec3 transformed = vec3( position );\n`,Jd=`\nvec3 objectNormal = vec3( normal );\n\n#ifdef USE_TANGENT\n\n\tvec3 objectTangent = vec3( tangent.xyz );\n\n#endif\n`,Kd=`\n\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\n\treturn RECIPROCAL_PI * diffuseColor;\n\n} // validated\n\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\n\t// Original approximation by Christophe Schlick '94\n\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\n\n\t// Optimized variant (presented by Epic at SIGGRAPH '13)\n\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n\n} // validated\n\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\n\t// Original approximation by Christophe Schlick '94\n\t// float fresnel = pow( 1.0 - dotVH, 5.0 );\n\n\t// Optimized variant (presented by Epic at SIGGRAPH '13)\n\t// https://cdn2.unrealengine.com/Resources/files/2013SiggraphPresentationsNotes-26915738.pdf\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n\n} // validated\n\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\n return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\n\n// Moving Frostbite to Physically Based Rendering 3.0 - page 12, listing 2\n// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\n\tfloat a2 = pow2( alpha );\n\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\n\treturn 0.5 / max( gv + gl, EPSILON );\n\n}\n\n// Microfacet Models for Refraction through Rough Surfaces - equation (33)\n// http://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html\n// alpha is \"roughness squared\" in Disney\\u2019s reparameterization\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\n\tfloat a2 = pow2( alpha );\n\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; // avoid alpha = 0 with dotNH = 1\n\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n\n}\n\n// GGX Distribution, Schlick Fresnel, GGX_SmithCorrelated Visibility\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float roughness ) {\n\n\tfloat alpha = pow2( roughness ); // UE4's roughness\n\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\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\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\n\tfloat D = D_GGX( alpha, dotNH );\n\n\treturn F * ( V * D );\n\n}\n\n#ifdef USE_IRIDESCENCE\n\nvec3 BRDF_GGX_Iridescence( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 f0, const in float f90, const in float iridescence, const in vec3 iridescenceFresnel, const in float roughness ) {\n\n\tfloat alpha = pow2( roughness ); // UE4's roughness\n\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\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\n\tvec3 F = mix(F_Schlick( f0, f90, dotVH ), iridescenceFresnel, iridescence);\n\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\n\tfloat D = D_GGX( alpha, dotNH );\n\n\treturn F * ( V * D );\n\n}\n\n#endif\n\n// Rect Area Light\n\n// Real-Time Polygonal-Light Shading with Linearly Transformed Cosines\n// by Eric Heitz, Jonathan Dupuy, Stephen Hill and David Neubelt\n// code: https://github.com/selfshadow/ltc_code/\n\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\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\n\tfloat dotNV = saturate( dot( N, V ) );\n\n\t// texture parameterized by sqrt( GGX alpha ) and sqrt( 1 - cos( theta ) )\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\n\treturn uv;\n\n}\n\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\n\t// Real-Time Area Lighting: a Journey from Research to Production (p.102)\n\t// An approximation of the form factor of a horizon-clipped rectangle.\n\n\tfloat l = length( f );\n\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n\n}\n\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\n\tfloat x = dot( v1, v2 );\n\n\tfloat y = abs( x );\n\n\t// rational polynomial approximation to theta / sin( theta ) / 2PI\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\n\tfloat theta_sintheta = ( x \u003e 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\n\treturn cross( v1, v2 ) * theta_sintheta;\n\n}\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\n\t// bail if point is on back side of plane of light\n\t// assumes ccw winding order of light vertices\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) \u003c 0.0 ) return vec3( 0.0 );\n\n\t// construct orthonormal basis around N\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 ); // negated from paper; possibly due to a different handedness of world coordinate system\n\n\t// compute transform\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\n\t// transform rect\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\n\t// project rect onto sphere\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\n\t// calculate vector form factor\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\n\t// adjust for horizon clipping\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\n/*\n\t// alternate method of adjusting for horizon clipping (see referece)\n\t// refactoring required\n\tfloat len = length( vectorFormFactor );\n\tfloat z = vectorFormFactor.z / len;\n\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\n\t// tabulated horizon-clipped sphere, apparently...\n\tvec2 uv = vec2( z * 0.5 + 0.5, len );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\n\tfloat scale = texture2D( ltc_2, uv ).w;\n\n\tfloat result = len * scale;\n*/\n\n\treturn vec3( result );\n\n}\n\n// End Rect Area Light\n\n\nfloat G_BlinnPhong_Implicit( /* const in float dotNL, const in float dotNV */ ) {\n\n\t// geometry term is (n dot l)(n dot v) / 4(n dot l)(n dot v)\n\treturn 0.25;\n\n}\n\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n\n}\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\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\n\tfloat G = G_BlinnPhong_Implicit( /* dotNL, dotNV */ );\n\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\n\treturn F * ( G * D );\n\n} // validated\n\n#if defined( USE_SHEEN )\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\nfloat D_Charlie( float roughness, float dotNH ) {\n\n\tfloat alpha = pow2( roughness );\n\n\t// Estevez and Kulla 2017, \"Production Friendly Microfacet Sheen BRDF\"\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 ); // 2^(-14/2), so sin2h^2 \u003e 0 in fp16\n\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n\n}\n\n// https://github.com/google/filament/blob/master/shaders/src/brdf.fs\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\n\t// Neubelt and Pettineo 2013, \"Crafting a Next-gen Material Pipeline for The Order: 1886\"\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n\n}\n\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\n\treturn sheenColor * ( D * V );\n\n}\n\n#endif\n`,jd=`\n\n#ifdef USE_IRIDESCENCE\n\n// XYZ to sRGB color space\nconst 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\n// Assume air interface for top\n// Note: We don't handle the case fresnel0 == 1\nvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n vec3 sqrtF0 = sqrt( fresnel0 );\n return ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n}\n\n// Conversion FO/IOR\nvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n}\n\n// ior is a value between 1.0 and 3.0. 1.0 is air interface\nfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n return pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n}\n\n// Fresnel equations for dielectric/dielectric interfaces.\n// Ref: https://belcour.github.io/blog/research/2017/05/01/brdf-thin-film.html\n// Evaluation XYZ sensitivity curves in Fourier space\nvec3 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\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\n vec3 srgb = XYZ_TO_REC709 * xyz;\n return srgb;\n}\n\nvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n vec3 I;\n\n // Force iridescenceIOR -\u003e outsideIOR when thinFilmThickness -\u003e 0.0\n float iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n // Evaluate the cosTheta on the base layer (Snell law)\n float sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\n // Handle TIR:\n float cosTheta2Sq = 1.0 - sinTheta2Sq;\n if ( cosTheta2Sq \u003c 0.0 ) {\n return vec3( 1.0 );\n }\n\n float cosTheta2 = sqrt( cosTheta2Sq );\n\n // First interface\n float R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n float R12 = F_Schlick( R0, 1.0, cosTheta1 );\n float R21 = R12;\n float T121 = 1.0 - R12;\n float phi12 = 0.0;\n if ( iridescenceIOR \u003c outsideIOR ) phi12 = PI;\n float phi21 = PI - phi12;\n\n // Second interface\n vec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) ); // guard against 1.0\n vec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n vec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n vec3 phi23 = vec3( 0.0 );\n if ( baseIOR[0] \u003c iridescenceIOR ) phi23[0] = PI;\n if ( baseIOR[1] \u003c iridescenceIOR ) phi23[1] = PI;\n if ( baseIOR[2] \u003c iridescenceIOR ) phi23[2] = PI;\n\n // Phase shift\n float OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n vec3 phi = vec3( phi21 ) + phi23;\n\n // Compound terms\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\n // Reflectance term for m = 0 (DC term amplitude)\n vec3 C0 = R12 + Rs;\n I = C0;\n\n // Reflectance term for m \u003e 0 (pairs of diracs)\n vec3 Cm = Rs - T121;\n for ( int m = 1; m \u003c= 2; ++m ) {\n Cm *= r123;\n vec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n I += Cm * Sm;\n }\n\n // Since out of gamut colors might be produced, negative color values are clamped to 0.\n return max( I, vec3( 0.0 ) );\n}\n\n#endif\n\n`,$d=`\n#ifdef USE_BUMPMAP\n\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\n\t// Bump Mapping Unparametrized Surfaces on the GPU by Morten S. Mikkelsen\n\t// https://mmikk.github.io/papers3d/mm_sfgrad_bump.pdf\n\n\t// Evaluate the derivative of the height w.r.t. screen-space using forward differencing (listing 2)\n\n\tvec2 dHdxy_fwd() {\n\n\t\tvec2 dSTdx = dFdx( vUv );\n\t\tvec2 dSTdy = dFdy( vUv );\n\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\n\n\t\treturn vec2( dBx, dBy );\n\n\t}\n\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\n\t\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\n\n\t\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\n\t\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\n\t\tvec3 vN = surf_norm;\t\t// normalized\n\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\n\t}\n\n#endif\n`,Qd=`\n#if NUM_CLIPPING_PLANES \u003e 0\n\n\tvec4 plane;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c UNION_CLIPPING_PLANES; i ++ ) {\n\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) discard;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#if UNION_CLIPPING_PLANES \u003c NUM_CLIPPING_PLANES\n\n\t\tbool clipped = true;\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i \u003c NUM_CLIPPING_PLANES; i ++ ) {\n\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) \u003e plane.w ) \u0026\u0026 clipped;\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t\tif ( clipped ) discard;\n\n\t#endif\n\n#endif\n`,ep=`\n#if NUM_CLIPPING_PLANES \u003e 0\n\n\tvarying vec3 vClipPosition;\n\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n\n#endif\n`,tp=`\n#if NUM_CLIPPING_PLANES \u003e 0\n\n\tvarying vec3 vClipPosition;\n\n#endif\n`,ip=`\n#if NUM_CLIPPING_PLANES \u003e 0\n\n\tvClipPosition = - mvPosition.xyz;\n\n#endif\n`,np=`\n#if defined( USE_COLOR_ALPHA )\n\n\tdiffuseColor *= vColor;\n\n#elif defined( USE_COLOR )\n\n\tdiffuseColor.rgb *= vColor;\n\n#endif\n`,rp=`\n#if defined( USE_COLOR_ALPHA )\n\n\tvarying vec4 vColor;\n\n#elif defined( USE_COLOR )\n\n\tvarying vec3 vColor;\n\n#endif\n`,sp=`\n#if defined( USE_COLOR_ALPHA )\n\n\tvarying vec4 vColor;\n\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\n\tvarying vec3 vColor;\n\n#endif\n`,op=`\n#if defined( USE_COLOR_ALPHA )\n\n\tvColor = vec4( 1.0 );\n\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\n\tvColor = vec3( 1.0 );\n\n#endif\n\n#ifdef USE_COLOR\n\n\tvColor *= color;\n\n#endif\n\n#ifdef USE_INSTANCING_COLOR\n\n\tvColor.xyz *= instanceColor.xyz;\n\n#endif\n`,ap=`\n#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\n#ifndef saturate\n// \u003ctonemapping_pars_fragment\u003e may have defined saturate() already\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\n\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 color ) { return dot( color, vec3( 0.3333 ) ); }\n\n// expects values in the range of [0,1]x[0,1], returns values in the [0,1] range.\n// do not collapse into a single function per: http://byteblacksmith.com/improvements-to-the-canonical-one-liner-glsl-rand-for-opengl-es-2-0/\nhighp float rand( const in vec2 uv ) {\n\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\n\treturn fract( sin( sn ) * c );\n\n}\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\n\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\n\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\n\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\n\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n\n}\n\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\n\t// dir can be either a direction vector or a normal vector\n\t// upper-left 3x3 of matrix is assumed to be orthogonal\n\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n\n}\n\nmat3 transposeMat3( const in mat3 m ) {\n\n\tmat3 tmp;\n\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\n\treturn tmp;\n\n}\n\n// https://en.wikipedia.org/wiki/Relative_luminance\nfloat linearToRelativeLuminance( const in vec3 color ) {\n\n\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\n\n\treturn dot( weights, color.rgb );\n\n}\n\nbool isPerspectiveMatrix( mat4 m ) {\n\n\treturn m[ 2 ][ 3 ] == - 1.0;\n\n}\n\nvec2 equirectUv( in vec3 dir ) {\n\n\t// dir is assumed to be unit length\n\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\n\treturn vec2( u, v );\n\n}\n`,lp=`\n#ifdef ENVMAP_TYPE_CUBE_UV\n\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\n\t// These shader functions convert between the UV coordinates of a single face of\n\t// a cubemap, the 0-5 integer index of a cube face, and the direction vector for\n\t// sampling a textureCube (not generally normalized ).\n\n\tfloat getFace( vec3 direction ) {\n\n\t\tvec3 absDirection = abs( direction );\n\n\t\tfloat face = - 1.0;\n\n\t\tif ( absDirection.x \u003e absDirection.z ) {\n\n\t\t\tif ( absDirection.x \u003e absDirection.y )\n\n\t\t\t\tface = direction.x \u003e 0.0 ? 0.0 : 3.0;\n\n\t\t\telse\n\n\t\t\t\tface = direction.y \u003e 0.0 ? 1.0 : 4.0;\n\n\t\t} else {\n\n\t\t\tif ( absDirection.z \u003e absDirection.y )\n\n\t\t\t\tface = direction.z \u003e 0.0 ? 2.0 : 5.0;\n\n\t\t\telse\n\n\t\t\t\tface = direction.y \u003e 0.0 ? 1.0 : 4.0;\n\n\t\t}\n\n\t\treturn face;\n\n\t}\n\n\t// RH coordinate system; PMREM face-indexing convention\n\tvec2 getUV( vec3 direction, float face ) {\n\n\t\tvec2 uv;\n\n\t\tif ( face == 0.0 ) {\n\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x ); // pos x\n\n\t\t} else if ( face == 1.0 ) {\n\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y ); // pos y\n\n\t\t} else if ( face == 2.0 ) {\n\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z ); // pos z\n\n\t\t} else if ( face == 3.0 ) {\n\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x ); // neg x\n\n\t\t} else if ( face == 4.0 ) {\n\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y ); // neg y\n\n\t\t} else {\n\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z ); // neg z\n\n\t\t}\n\n\t\treturn 0.5 * ( uv + 1.0 );\n\n\t}\n\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\n\t\tfloat face = getFace( direction );\n\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\n\t\tfloat faceSize = exp2( mipInt );\n\n\t\tvec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\n\t\tif ( face \u003e 2.0 ) {\n\n\t\t\tuv.y += faceSize;\n\n\t\t\tface -= 3.0;\n\n\t\t}\n\n\t\tuv.x += face * faceSize;\n\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\n\t\t#ifdef texture2DGradEXT\n\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; // disable anisotropic filtering\n\n\t\t#else\n\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\n\t\t#endif\n\n\t}\n\n\t// These defines must match with PMREMGenerator\n\n\t#define r0 1.0\n\t#define v0 0.339\n\t#define m0 - 2.0\n\t#define r1 0.8\n\t#define v1 0.276\n\t#define m1 - 1.0\n\t#define r4 0.4\n\t#define v4 0.046\n\t#define m4 2.0\n\t#define r5 0.305\n\t#define v5 0.016\n\t#define m5 3.0\n\t#define r6 0.21\n\t#define v6 0.0038\n\t#define m6 4.0\n\n\tfloat roughnessToMip( float roughness ) {\n\n\t\tfloat mip = 0.0;\n\n\t\tif ( roughness \u003e= r1 ) {\n\n\t\t\tmip = ( r0 - roughness ) * ( m1 - m0 ) / ( r0 - r1 ) + m0;\n\n\t\t} else if ( roughness \u003e= r4 ) {\n\n\t\t\tmip = ( r1 - roughness ) * ( m4 - m1 ) / ( r1 - r4 ) + m1;\n\n\t\t} else if ( roughness \u003e= r5 ) {\n\n\t\t\tmip = ( r4 - roughness ) * ( m5 - m4 ) / ( r4 - r5 ) + m4;\n\n\t\t} else if ( roughness \u003e= r6 ) {\n\n\t\t\tmip = ( r5 - roughness ) * ( m6 - m5 ) / ( r5 - r6 ) + m5;\n\n\t\t} else {\n\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness ); // 1.16 = 1.79^0.25\n\t\t}\n\n\t\treturn mip;\n\n\t}\n\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\n\t\tfloat mip = clamp( roughnessToMip( roughness ), m0, CUBEUV_MAX_MIP );\n\n\t\tfloat mipF = fract( mip );\n\n\t\tfloat mipInt = floor( mip );\n\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\n\t\tif ( mipF == 0.0 ) {\n\n\t\t\treturn vec4( color0, 1.0 );\n\n\t\t} else {\n\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\n\t\t}\n\n\t}\n\n#endif\n`,cp=`\nvec3 transformedNormal = objectNormal;\n\n#ifdef USE_INSTANCING\n\n\t// this is in lieu of a per-instance normal-matrix\n\t// shear transforms in the instance matrix are not supported\n\n\tmat3 m = mat3( instanceMatrix );\n\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\n\ttransformedNormal = m * transformedNormal;\n\n#endif\n\ntransformedNormal = normalMatrix * transformedNormal;\n\n#ifdef FLIP_SIDED\n\n\ttransformedNormal = - transformedNormal;\n\n#endif\n\n#ifdef USE_TANGENT\n\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\n\t#ifdef FLIP_SIDED\n\n\t\ttransformedTangent = - transformedTangent;\n\n\t#endif\n\n#endif\n`,up=`\n#ifdef USE_DISPLACEMENTMAP\n\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n\n#endif\n`,hp=`\n#ifdef USE_DISPLACEMENTMAP\n\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );\n\n#endif\n`,fp=`\n#ifdef USE_EMISSIVEMAP\n\n\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\n\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n\n#endif\n`,dp=`\n#ifdef USE_EMISSIVEMAP\n\n\tuniform sampler2D emissiveMap;\n\n#endif\n`,pp=`\ngl_FragColor = linearToOutputTexel( gl_FragColor );\n`,mp=`\n\nvec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\n\nvec4 LinearTosRGB( 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\n`,_p=`\n#ifdef USE_ENVMAP\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvec3 cameraToFrag;\n\n\t\tif ( isOrthographic ) {\n\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\n\t\t} else {\n\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\n\t\t}\n\n\t\t// Transforming Normal Vectors with the Inverse Transformation\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\n\t\t#else\n\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#else\n\n\t\tvec3 reflectVec = vReflect;\n\n\t#endif\n\n\t#ifdef ENVMAP_TYPE_CUBE\n\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\tvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );\n\n\t#else\n\n\t\tvec4 envColor = vec4( 0.0 );\n\n\t#endif\n\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\n\t#endif\n\n#endif\n`,gp=`\n#ifdef USE_ENVMAP\n\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\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`,xp=`\n#ifdef USE_ENVMAP\n\n\tuniform float reflectivity;\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\n\n\t\t#define ENV_WORLDPOS\n\n\t#endif\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n\n#endif\n`,vp=`\n#ifdef USE_ENVMAP\n\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )\n\n\t\t#define ENV_WORLDPOS\n\n\t#endif\n\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\n\t#else\n\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\n\t#endif\n\n#endif\n`,yp=`\n#ifdef USE_ENVMAP\n\n\t#ifdef ENV_WORLDPOS\n\n\t\tvWorldPosition = worldPosition.xyz;\n\n\t#else\n\n\t\tvec3 cameraToVertex;\n\n\t\tif ( isOrthographic ) {\n\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\n\t\t} else {\n\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\n\t\t}\n\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\n\t\t#else\n\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\n\t\t#endif\n\n\t#endif\n\n#endif\n`,Sp=`\n#ifdef USE_FOG\n\n\tvFogDepth = - mvPosition.z;\n\n#endif\n`,Mp=`\n#ifdef USE_FOG\n\n\tvarying float vFogDepth;\n\n#endif\n`,Ep=`\n#ifdef USE_FOG\n\n\t#ifdef FOG_EXP2\n\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\n\t#else\n\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\n\t#endif\n\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n\n#endif\n`,bp=`\n#ifdef USE_FOG\n\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\n\t#ifdef FOG_EXP2\n\n\t\tuniform float fogDensity;\n\n\t#else\n\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\n\t#endif\n\n#endif\n`,wp=`\n\n#ifdef USE_GRADIENTMAP\n\n\tuniform sampler2D gradientMap;\n\n#endif\n\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\n\t// dotNL will be from -1.0 to 1.0\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\n\t#ifdef USE_GRADIENTMAP\n\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\n\t#else\n\n\t\treturn ( coord.x \u003c 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\n\n\t#endif\n\n}\n`,Tp=`\n#ifdef USE_LIGHTMAP\n\n\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n\n#endif\n`,Ap=`\n#ifdef USE_LIGHTMAP\n\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n\n#endif\n`,Rp=`\nvec3 diffuse = vec3( 1.0 );\n\nGeometricContext geometry;\ngeometry.position = mvPosition.xyz;\ngeometry.normal = normalize( transformedNormal );\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( -mvPosition.xyz );\n\nGeometricContext backGeometry;\nbackGeometry.position = geometry.position;\nbackGeometry.normal = -geometry.normal;\nbackGeometry.viewDir = geometry.viewDir;\n\nvLightFront = vec3( 0.0 );\nvIndirectFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\n\tvLightBack = vec3( 0.0 );\n\tvIndirectBack = vec3( 0.0 );\n#endif\n\nIncidentLight directLight;\nfloat dotNL;\nvec3 directLightColor_Diffuse;\n\nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );\n\nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry.normal );\n\n#ifdef DOUBLE_SIDED\n\n\tvIndirectBack += getAmbientLightIrradiance( ambientLightColor );\n\n\tvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry.normal );\n\n#endif\n\n#if NUM_POINT_LIGHTS \u003e 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tgetPointLightInfo( pointLights[ i ], geometry, directLight );\n\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if NUM_SPOT_LIGHTS \u003e 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tgetSpotLightInfo( spotLights[ i ], geometry, directLight );\n\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t#endif\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if NUM_DIR_LIGHTS \u003e 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tgetDirectionalLightInfo( directionalLights[ i ], geometry, directLight );\n\n\t\tdotNL = dot( geometry.normal, directLight.direction );\n\t\tdirectLightColor_Diffuse = directLight.color;\n\n\t\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvLightBack += saturate( - dotNL ) * directLightColor_Diffuse;\n\n\t\t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if NUM_HEMI_LIGHTS \u003e 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\tvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\tvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry.normal );\n\n\t\t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n`,Cp=`\nuniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\n\n// get the irradiance (radiance convolved with cosine lobe) at the point 'normal' on the unit sphere\n// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\n\t// normal is assumed to have unit length\n\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\n\t// band 0\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\n\t// band 1\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\n\t// band 2\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\n\treturn result;\n\n}\n\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\n\treturn irradiance;\n\n}\n\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\n\tvec3 irradiance = ambientLightColor;\n\n\treturn irradiance;\n\n}\n\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\n\t#if defined ( PHYSICALLY_CORRECT_LIGHTS )\n\n\t\t// based upon Frostbite 3 Moving to Physically-based Rendering\n\t\t// page 32, equation 26: E[window1]\n\t\t// https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\n\t\tif ( cutoffDistance \u003e 0.0 ) {\n\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\n\t\t}\n\n\t\treturn distanceFalloff;\n\n\t#else\n\n\t\tif ( cutoffDistance \u003e 0.0 \u0026\u0026 decayExponent \u003e 0.0 ) {\n\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\n\t\t}\n\n\t\treturn 1.0;\n\n\t#endif\n\n}\n\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n\n}\n\n#if NUM_DIR_LIGHTS \u003e 0\n\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\n\t}\n\n#endif\n\n\n#if NUM_POINT_LIGHTS \u003e 0\n\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\n\t// light is an out parameter as having it as a return value caused compiler errors on some devices\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\n\t\tlight.direction = normalize( lVector );\n\n\t\tfloat lightDistance = length( lVector );\n\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\n\t}\n\n#endif\n\n\n#if NUM_SPOT_LIGHTS \u003e 0\n\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\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\n\t// light is an out parameter as having it as a return value caused compiler errors on some devices\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\n\t\tlight.direction = normalize( lVector );\n\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\n\t\tif ( spotAttenuation \u003e 0.0 ) {\n\n\t\t\tfloat lightDistance = length( lVector );\n\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\n\t\t} else {\n\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\n\t\t}\n\n\t}\n\n#endif\n\n\n#if NUM_RECT_AREA_LIGHTS \u003e 0\n\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\n\t// Pre-computed values of LinearTransformedCosine approximation of BRDF\n\t// BRDF approximation Texture is 64x64\n\tuniform sampler2D ltc_1; // RGBA Float\n\tuniform sampler2D ltc_2; // RGBA Float\n\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n\n#endif\n\n\n#if NUM_HEMI_LIGHTS \u003e 0\n\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\n\t\treturn irradiance;\n\n\t}\n\n#endif\n`,Pp=`\n#if defined( USE_ENVMAP )\n\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\n\t\t#else\n\n\t\t\treturn vec3( 0.0 );\n\n\t\t#endif\n\n\t}\n\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\n\t\t\t// Mixing the reflection with the normal is more accurate and keeps rough objects from gathering light from behind their tangent plane.\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\n\t\t#else\n\n\t\t\treturn vec3( 0.0 );\n\n\t\t#endif\n\n\t}\n\n#endif\n`,Lp=`\nToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\n`,Dp=`\nvarying vec3 vViewPosition;\n\nstruct ToonMaterial {\n\n\tvec3 diffuseColor;\n\n};\n\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon\n\n#define Material_LightProbeLOD( material )\t(0)\n`,Fp=`\nBlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;\n`,Ip=`\nvarying vec3 vViewPosition;\n\nstruct BlinnPhongMaterial {\n\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n\n};\n\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n\n}\n\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong\n\n#define Material_LightProbeLOD( material )\t(0)\n`,Np=`\nPhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\n\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\n\nmaterial.roughness = max( roughnessFactor, 0.0525 );// 0.0525 corresponds to the base mip of a 256 cubemap.\nmaterial.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n\n#ifdef IOR\n\n\t#ifdef SPECULAR\n\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\n\t\t#ifdef USE_SPECULARINTENSITYMAP\n\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vUv ).a;\n\n\t\t#endif\n\n\t\t#ifdef USE_SPECULARCOLORMAP\n\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vUv ).rgb;\n\n\t\t#endif\n\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\n\t#else\n\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\n\t#endif\n\n\tmaterial.specularColor = mix( min( pow2( ( ior - 1.0 ) / ( ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n\n#else\n\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n\n#endif\n\n#ifdef USE_CLEARCOAT\n\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\n\t#ifdef USE_CLEARCOATMAP\n\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;\n\n\t#endif\n\n\tmaterial.clearcoat = saturate( material.clearcoat ); // Burley clearcoat model\n\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n\n#endif\n\n#ifdef USE_IRIDESCENCE\n\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\n\t#ifdef USE_IRIDESCENCEMAP\n\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vUv ).r;\n\n\t#endif\n\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vUv ).g + iridescenceThicknessMinimum;\n\n\t#else\n\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\n\t#endif\n\n#endif\n\n#ifdef USE_SHEEN\n\n\tmaterial.sheenColor = sheenColor;\n\n\t#ifdef USE_SHEENCOLORMAP\n\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vUv ).rgb;\n\n\t#endif\n\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\n\t#ifdef USE_SHEENROUGHNESSMAP\n\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vUv ).a;\n\n\t#endif\n\n#endif\n`,Op=`\nstruct PhysicalMaterial {\n\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\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\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\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\n};\n\n// temporary\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\n\n// This is a curve-fit approxmation to the \"Charlie sheen\" BRDF integrated over the hemisphere from \n// Estevez and Kulla 2017, \"Production Friendly Microfacet Sheen BRDF\". The analysis can be found\n// in the Sheen section of https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness) {\n\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\n\tfloat r2 = roughness * roughness;\n\n\tfloat a = roughness \u003c 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\n\tfloat b = roughness \u003c 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\n\tfloat DG = exp( a * dotNV + b ) + ( roughness \u003c 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\n\treturn saturate( DG * RECIPROCAL_PI );\n\n}\n\n// Analytical approximation of the DFG LUT, one half of the\n// split-sum approximation used in indirect specular lighting.\n// via 'environmentBRDF' from \"Physically Based Shading on Mobile\"\n// https://www.unrealengine.com/blog/physically-based-shading-on-mobile\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\n\tvec4 r = roughness * c0 + c1;\n\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\n\treturn fab;\n\n}\n\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\n\treturn specularColor * fab.x + specularF90 * fab.y;\n\n}\n\n// Fdez-Ag\\xFCera's \"Multiple-Scattering Microfacet Model for Real-Time Image Based Lighting\"\n// Approximates multiscattering in order to preserve energy.\n// http://www.jcgt.org/published/0008/01/03/\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\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\n\t#ifdef USE_IRIDESCENCE\n\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\n\t#else\n\n\t\tvec3 Fr = specularColor;\n\n\t#endif\n\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; // 1/21\n\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n\n}\n\n#if NUM_RECT_AREA_LIGHTS \u003e 0\n\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\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\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight; // counterclockwise; light shines in local neg z direction\n\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\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\n\t\t// LTC Fresnel Approximation by Stephen Hill\n\t\t// http://blog.selfshadow.com/publications/s2016-advances/s2016_ltc_fresnel.pdf\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\n\t}\n\n#endif\n\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\n\tvec3 irradiance = dotNL * directLight.color;\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\n\t#endif\n\n\t#ifdef USE_SHEEN\n\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\n\t#endif\n\n\t#ifdef USE_IRIDESCENCE\n\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX_Iridescence( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness );\n\n\t#else\n\n\t\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularF90, material.roughness );\n\n\t#endif\n\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\n}\n\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\n\t#endif\n\n\t#ifdef USE_SHEEN\n\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\n\t#endif\n\n\t// Both indirect specular and indirect diffuse light accumulate here\n\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\n\t#ifdef USE_IRIDESCENCE\n\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\n\t#else\n\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\n\t#endif\n\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n\n}\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\n\n// ref: https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n\n}\n`,Up=`\n/**\n * This is a template that can be used to light a material, it uses pluggable\n * RenderEquations (RE)for specific lighting scenarios.\n *\n * Instructions for use:\n * - Ensure that both RE_Direct, RE_IndirectDiffuse and RE_IndirectSpecular are defined\n * - If you have defined an RE_IndirectSpecular, you need to also provide a Material_LightProbeLOD. \u003c---- ???\n * - Create a material parameter that is to be passed as the third parameter to your lighting functions.\n *\n * TODO:\n * - Add area light support.\n * - Add sphere light support.\n * - Add diffuse light probe (irradiance cubemap) support.\n */\n\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef USE_CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\n#ifdef USE_IRIDESCENCE\n\nfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\nif ( material.iridescenceThickness == 0.0 ) {\n\n\tmaterial.iridescence = 0.0;\n\n} else {\n\n\tmaterial.iridescence = saturate( material.iridescence );\n\n}\n\nif ( material.iridescence \u003e 0.0 ) {\n\n\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\n\t// Iridescence F0 approximation\n\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\n}\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_POINT_LIGHT_SHADOWS \u003e 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_SPOT_LIGHT_SHADOWS \u003e 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) \u0026\u0026 NUM_DIR_LIGHT_SHADOWS \u003e 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) \u0026\u0026 ( UNROLLED_LOOP_INDEX \u003c NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS \u003e 0 ) \u0026\u0026 defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\n\t#if ( NUM_HEMI_LIGHTS \u003e 0 )\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i \u003c NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n`,zp=`\n#if defined( RE_IndirectDiffuse )\n\n\t#ifdef USE_LIGHTMAP\n\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\n\t\tirradiance += lightMapIrradiance;\n\n\t#endif\n\n\t#if defined( USE_ENVMAP ) \u0026\u0026 defined( STANDARD ) \u0026\u0026 defined( ENVMAP_TYPE_CUBE_UV )\n\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\n\t#endif\n\n#endif\n\n#if defined( USE_ENVMAP ) \u0026\u0026 defined( RE_IndirectSpecular )\n\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\n\t#endif\n\n#endif\n`,Bp=`\n#if defined( RE_IndirectDiffuse )\n\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n\n#endif\n`,Gp=`\n#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\n\n\t// Doing a strict comparison with == 1.0 can cause noise artifacts\n\t// on some platforms. See issue #17623.\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n\n#endif\n`,kp=`\n#if defined( USE_LOGDEPTHBUF ) \u0026\u0026 defined( USE_LOGDEPTHBUF_EXT )\n\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n\n#endif\n`,Hp=`\n#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\n\t#else\n\n\t\tuniform float logDepthBufFC;\n\n\t#endif\n\n#endif\n`,Vp=`\n#ifdef USE_LOGDEPTHBUF\n\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\n\t#else\n\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\n\t\t\tgl_Position.z *= gl_Position.w;\n\n\t\t}\n\n\t#endif\n\n#endif\n`,Wp=`\n#ifdef USE_MAP\n\n\tvec4 sampledDiffuseColor = texture2D( map, vUv );\n\n\t#ifdef DECODE_VIDEO_TEXTURE\n\n\t\t// inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved)\n\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\n\t#endif\n\n\tdiffuseColor *= sampledDiffuseColor;\n\n#endif\n`,Xp=`\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif\n`,qp=`\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\n\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\n#endif\n\n#ifdef USE_MAP\n\n\tdiffuseColor *= texture2D( map, uv );\n\n#endif\n\n#ifdef USE_ALPHAMAP\n\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n\n#endif\n`,Yp=`\n#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\n\tuniform mat3 uvTransform;\n\n#endif\n\n#ifdef USE_MAP\n\n\tuniform sampler2D map;\n\n#endif\n\n#ifdef USE_ALPHAMAP\n\n\tuniform sampler2D alphaMap;\n\n#endif\n`,Zp=`\nfloat metalnessFactor = metalness;\n\n#ifdef USE_METALNESSMAP\n\n\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\n\n\t// reads channel B, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\tmetalnessFactor *= texelMetalness.b;\n\n#endif\n`,Jp=`\n#ifdef USE_METALNESSMAP\n\n\tuniform sampler2D metalnessMap;\n\n#endif\n`,Kp=`\n#if defined( USE_MORPHCOLORS ) \u0026\u0026 defined( MORPHTARGETS_TEXTURE )\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\tvColor *= morphTargetBaseInfluence;\n\n\tfor ( int i = 0; i \u003c MORPHTARGETS_COUNT; i ++ ) {\n\n\t\t#if defined( USE_COLOR_ALPHA )\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\n\t\t#elif defined( USE_COLOR )\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\n\t\t#endif\n\n\t}\n\n#endif\n`,jp=`\n#ifdef USE_MORPHNORMALS\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in normal = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\tobjectNormal *= morphTargetBaseInfluence;\n\n\t#ifdef MORPHTARGETS_TEXTURE\n\n\t\tfor ( int i = 0; i \u003c MORPHTARGETS_COUNT; i ++ ) {\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\n\t\t}\n\n\t#else\n\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\n\t#endif\n\n#endif\n`,$p=`\n#ifdef USE_MORPHTARGETS\n\n\tuniform float morphTargetBaseInfluence;\n\n\t#ifdef MORPHTARGETS_TEXTURE\n\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\n\t\t}\n\n\t#else\n\n\t\t#ifndef USE_MORPHNORMALS\n\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\n\t\t#else\n\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\n\t\t#endif\n\n\t#endif\n\n#endif\n`,Qp=`\n#ifdef USE_MORPHTARGETS\n\n\t// morphTargetBaseInfluence is set based on BufferGeometry.morphTargetsRelative value:\n\t// When morphTargetsRelative is false, this is set to 1 - sum(influences); this results in position = sum((target - base) * influence)\n\t// When morphTargetsRelative is true, this is set to 1; as a result, all morph targets are simply added to the base after weighting\n\ttransformed *= morphTargetBaseInfluence;\n\n\t#ifdef MORPHTARGETS_TEXTURE\n\n\t\tfor ( int i = 0; i \u003c MORPHTARGETS_COUNT; i ++ ) {\n\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\n\t\t}\n\n\t#else\n\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\n\t\t#ifndef USE_MORPHNORMALS\n\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\n\t\t#endif\n\n\t#endif\n\n#endif\n`,em=`\nfloat faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n\n#ifdef FLAT_SHADED\n\n\t// Workaround for Adreno GPUs not able to do dFdx( vViewPosition )\n\n\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\n\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n\n#else\n\n\tvec3 normal = normalize( vNormal );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * faceDirection;\n\n\t#endif\n\n\t#ifdef USE_TANGENT\n\n\t\tvec3 tangent = normalize( vTangent );\n\t\tvec3 bitangent = normalize( vBitangent );\n\n\t\t#ifdef DOUBLE_SIDED\n\n\t\t\ttangent = tangent * faceDirection;\n\t\t\tbitangent = bitangent * faceDirection;\n\n\t\t#endif\n\n\t\t#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )\n\n\t\t\tmat3 vTBN = mat3( tangent, bitangent, normal );\n\n\t\t#endif\n\n\t#endif\n\n#endif\n\n// non perturbed normal for clearcoat among others\n\nvec3 geometryNormal = normal;\n\n`,tm=`\n\n#ifdef OBJECTSPACE_NORMALMAP\n\n\tnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0; // overrides both flatShading and attribute normals\n\n\t#ifdef FLIP_SIDED\n\n\t\tnormal = - normal;\n\n\t#endif\n\n\t#ifdef DOUBLE_SIDED\n\n\t\tnormal = normal * faceDirection;\n\n\t#endif\n\n\tnormal = normalize( normalMatrix * normal );\n\n#elif defined( TANGENTSPACE_NORMALMAP )\n\n\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\n\t#ifdef USE_TANGENT\n\n\t\tnormal = normalize( vTBN * mapN );\n\n\t#else\n\n\t\tnormal = perturbNormal2Arb( - vViewPosition, normal, mapN, faceDirection );\n\n\t#endif\n\n#elif defined( USE_BUMPMAP )\n\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n\n#endif\n`,im=`\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n`,nm=`\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n\t#ifdef USE_TANGENT\n\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\n\t#endif\n\n#endif\n`,rm=`\n#ifndef FLAT_SHADED // normal is computed with derivatives when FLAT_SHADED\n\n\tvNormal = normalize( transformedNormal );\n\n\t#ifdef USE_TANGENT\n\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\n\t#endif\n\n#endif\n`,sm=`\n#ifdef USE_NORMALMAP\n\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n\n#endif\n\n#ifdef OBJECTSPACE_NORMALMAP\n\n\tuniform mat3 normalMatrix;\n\n#endif\n\n#if ! defined ( USE_TANGENT ) \u0026\u0026 ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\n\t// Normal Mapping Without Precomputed Tangents\n\t// http://www.thetenthplanet.de/archives/1180\n\n\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN, float faceDirection ) {\n\n\t\t// Workaround for Adreno 3XX dFd*( vec3 ) bug. See #9988\n\n\t\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\n\t\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\n\t\tvec2 st0 = dFdx( vUv.st );\n\t\tvec2 st1 = dFdy( vUv.st );\n\n\t\tvec3 N = surf_norm; // normalized\n\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : faceDirection * inversesqrt( det );\n\n\t\treturn normalize( T * ( mapN.x * scale ) + B * ( mapN.y * scale ) + N * mapN.z );\n\n\t}\n\n#endif\n`,om=`\n#ifdef USE_CLEARCOAT\n\n\tvec3 clearcoatNormal = geometryNormal;\n\n#endif\n`,am=`\n#ifdef USE_CLEARCOAT_NORMALMAP\n\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\n\t#ifdef USE_TANGENT\n\n\t\tclearcoatNormal = normalize( vTBN * clearcoatMapN );\n\n\t#else\n\n\t\tclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN, faceDirection );\n\n\t#endif\n\n#endif\n`,lm=`\n\n#ifdef USE_CLEARCOATMAP\n\n\tuniform sampler2D clearcoatMap;\n\n#endif\n\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\n\tuniform sampler2D clearcoatRoughnessMap;\n\n#endif\n\n#ifdef USE_CLEARCOAT_NORMALMAP\n\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n\n#endif\n`,cm=`\n\n#ifdef USE_IRIDESCENCEMAP\n\n\tuniform sampler2D iridescenceMap;\n\n#endif\n\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\n\tuniform sampler2D iridescenceThicknessMap;\n\n#endif\n`,um=`\n#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n\n// https://github.com/mrdoob/three.js/pull/22425\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= transmissionAlpha + 0.1;\n#endif\n\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );\n`,hm=`\nvec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\n\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\n\nconst float PackUpscale = 256. / 255.; // fraction -\u003e 0..1 (including 1)\nconst float UnpackDownscale = 255. / 256.; // 0..1 -\u003e fraction (excluding 1)\n\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\n\nconst float ShiftRight8 = 1. / 256.;\n\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8; // tidy overflow\n\treturn r * PackUpscale;\n}\n\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\n\nvec4 pack2HalfToRGBA( 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}\n\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\n\n// NOTE: viewZ/eyeZ is \u003c 0 when in front of the camera per OpenGL conventions\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 linearClipZ, const in float near, const in float far ) {\n\treturn linearClipZ * ( near - far ) - near;\n}\n\n// NOTE: https://twitter.com/gonnavis/status/1377183786949959682\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 invClipZ, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\n}\n`,fm=`\n#ifdef PREMULTIPLIED_ALPHA\n\n\t// Get get normal blending with premultipled, use with CustomBlending, OneFactor, OneMinusSrcAlphaFactor, AddEquation.\n\tgl_FragColor.rgb *= gl_FragColor.a;\n\n#endif\n`,dm=`\nvec4 mvPosition = vec4( transformed, 1.0 );\n\n#ifdef USE_INSTANCING\n\n\tmvPosition = instanceMatrix * mvPosition;\n\n#endif\n\nmvPosition = modelViewMatrix * mvPosition;\n\ngl_Position = projectionMatrix * mvPosition;\n`,pm=`\n#ifdef DITHERING\n\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n\n#endif\n`,mm=`\n#ifdef DITHERING\n\n\t// based on https://www.shadertoy.com/view/MslGR8\n\tvec3 dithering( vec3 color ) {\n\t\t//Calculate grid position\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\n\t\t//Shift the individual colors differently, thus making it even harder to see the dithering pattern\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\n\t\t//modify shift according to grid position.\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\n\t\t//shift the color by dither_shift\n\t\treturn color + dither_shift_RGB;\n\t}\n\n#endif\n`,_m=`\nfloat roughnessFactor = roughness;\n\n#ifdef USE_ROUGHNESSMAP\n\n\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\n\n\t// reads channel G, compatible with a combined OcclusionRoughnessMetallic (RGB) texture\n\troughnessFactor *= texelRoughness.g;\n\n#endif\n`,gm=`\n#ifdef USE_ROUGHNESSMAP\n\n\tuniform sampler2D roughnessMap;\n\n#endif\n`,xm=`\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\n\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS \u003e 0\n\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\n\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t\tstruct PointLightShadow {\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\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS \u003e 0\n\n\t\t// TODO (abelnation): create uniforms for area light shadows\n\n\t#endif\n\t*/\n\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\n\t}\n\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\n\t}\n\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\n\t\tfloat occlusion = 1.0;\n\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\n\t\tfloat hard_shadow = step( compare , distribution.x ); // Hard Shadow\n\n\t\tif (hard_shadow != 1.0 ) {\n\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 ); // Chebeyshevs inequality\n\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 ); // 0.3 reduces light bleed\n\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\n\t\t}\n\t\treturn occlusion;\n\n\t}\n\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\n\t\tfloat shadow = 1.0;\n\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\n\t\t// if ( something \u0026\u0026 something ) breaks ATI OpenGL shader compiler\n\t\t// if ( all( something, something ) ) using this instead\n\n\t\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x \u003e= 0.0, shadowCoord.x \u003c= 1.0, shadowCoord.y \u003e= 0.0, shadowCoord.y \u003c= 1.0 );\n\t\tbool inFrustum = all( inFrustumVec );\n\n\t\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z \u003c= 1.0 );\n\n\t\tbool frustumTest = all( frustumTestVec );\n\n\t\tif ( frustumTest ) {\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\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\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\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\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\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#else // no percentage-closer filtering:\n\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\n\t\t#endif\n\n\t\t}\n\n\t\treturn shadow;\n\n\t}\n\n\t// cubeToUV() maps a 3D direction vector suitable for cube texture mapping to a 2D\n\t// vector suitable for 2D texture mapping. This code uses the following layout for the\n\t// 2D texture:\n\t//\n\t// xzXZ\n\t// y Y\n\t//\n\t// Y - Positive y direction\n\t// y - Negative y direction\n\t// X - Positive x direction\n\t// x - Negative x direction\n\t// Z - Positive z direction\n\t// z - Negative z direction\n\t//\n\t// Source and test bed:\n\t// https://gist.github.com/tschw/da10c43c467ce8afd0c4\n\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\n\t\t// Number of texels to avoid at the edge of each square\n\n\t\tvec3 absV = abs( v );\n\n\t\t// Intersect unit cube\n\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\n\t\t// Apply scale to avoid seams\n\n\t\t// two texels less per square (one texel will do for NEAREST)\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\n\t\t// Unwrap\n\n\t\t// space: -1 ... 1 range for each square\n\t\t//\n\t\t// #X##\t\tdim := ( 4 , 2 )\n\t\t// # #\t\tcenter := ( 1 , 1 )\n\n\t\tvec2 planar = v.xy;\n\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\n\t\tif ( absV.z \u003e= almostOne ) {\n\n\t\t\tif ( v.z \u003e 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\n\t\t} else if ( absV.x \u003e= almostOne ) {\n\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\n\t\t} else if ( absV.y \u003e= almostOne ) {\n\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\n\t\t}\n\n\t\t// Transform to UV space\n\n\t\t// scale := 0.5 / dim\n\t\t// translate := ( center + 0.5 ) / dim\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\n\t}\n\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\n\t\t// for point lights, the uniform @vShadowCoord is re-purposed to hold\n\t\t// the vector from the light to the world-space position of the fragment.\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\n\t\t// dp = normalized distance from light to fragment position\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear ); // need to clamp?\n\t\tdp += shadowBias;\n\n\t\t// bd3D = base direction 3D\n\t\tvec3 bd3D = normalize( lightToPosition );\n\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\n\t\t#else // no percentage-closer filtering\n\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\n\t\t#endif\n\n\t}\n\n#endif\n`,vm=`\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\n\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS \u003e 0\n\n\t\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\n\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t\tstruct PointLightShadow {\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\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS \u003e 0\n\n\t\t// TODO (abelnation): uniforms for area light shadows\n\n\t#endif\n\t*/\n\n#endif\n`,ym=`\n#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0 || NUM_SPOT_LIGHT_SHADOWS \u003e 0 || NUM_POINT_LIGHT_SHADOWS \u003e 0\n\n\t\t// Offsetting the position used for querying occlusion along the world normal can be used to reduce shadow acne.\n\t\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\tvec4 shadowWorldPosition;\n\n\t#endif\n\n\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS \u003e 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS \u003e 0\n\n\t\t// TODO (abelnation): update vAreaShadowCoord with area light info\n\n\t#endif\n\t*/\n\n#endif\n`,Sm=`\nfloat getShadowMask() {\n\n\tfloat shadow = 1.0;\n\n\t#ifdef USE_SHADOWMAP\n\n\t#if NUM_DIR_LIGHT_SHADOWS \u003e 0\n\n\tDirectionalLightShadow directionalLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_SPOT_LIGHT_SHADOWS \u003e 0\n\n\tSpotLightShadow spotLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if NUM_POINT_LIGHT_SHADOWS \u003e 0\n\n\tPointLightShadow pointLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i \u003c NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\n\t}\n\t#pragma unroll_loop_end\n\n\t#endif\n\n\t/*\n\t#if NUM_RECT_AREA_LIGHTS \u003e 0\n\n\t\t// TODO (abelnation): update shadow for Area light\n\n\t#endif\n\t*/\n\n\t#endif\n\n\treturn shadow;\n\n}\n`,Mm=`\n#ifdef USE_SKINNING\n\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\n#endif\n`,Em=`\n#ifdef USE_SKINNING\n\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\n\tmat4 getBoneMatrix( const in float i ) {\n\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\n\t\ty = dy * ( y + 0.5 );\n\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\n\t\treturn bone;\n\n\t}\n\n#endif\n`,bm=`\n#ifdef USE_SKINNING\n\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\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\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n\n#endif\n`,wm=`\n#ifdef USE_SKINNING\n\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\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\n\t#ifdef USE_TANGENT\n\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\n\t#endif\n\n#endif\n`,Tm=`\nfloat specularStrength;\n\n#ifdef USE_SPECULARMAP\n\n\tvec4 texelSpecular = texture2D( specularMap, vUv );\n\tspecularStrength = texelSpecular.r;\n\n#else\n\n\tspecularStrength = 1.0;\n\n#endif\n`,Am=`\n#ifdef USE_SPECULARMAP\n\n\tuniform sampler2D specularMap;\n\n#endif\n`,Rm=`\n#if defined( TONE_MAPPING )\n\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n\n#endif\n`,Cm=`\n#ifndef saturate\n// \u003ccommon\u003e may have defined saturate() already\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n\nuniform float toneMappingExposure;\n\n// exposure only\nvec3 LinearToneMapping( vec3 color ) {\n\n\treturn toneMappingExposure * color;\n\n}\n\n// source: https://www.cs.utah.edu/docs/techreports/2002/pdf/UUCS-02-001.pdf\nvec3 ReinhardToneMapping( vec3 color ) {\n\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n\n}\n\n// source: http://filmicworlds.com/blog/filmic-tonemapping-operators/\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\n\t// optimized filmic operator by Jim Hejl and Richard Burgess-Dawson\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\n}\n\n// source: https://github.com/selfshadow/ltc_code/blob/master/webgl/shaders/ltc/ltc_blit.fs\nvec3 RRTAndODTFit( vec3 v ) {\n\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\n}\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\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\n\t// sRGB =\u003e XYZ =\u003e D65_2_D60 =\u003e AP1 =\u003e RRT_SAT\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\n\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\n\t// ODT_SAT =\u003e XYZ =\u003e D60_2_D65 =\u003e sRGB\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3( 1.60475, -0.10208, -0.00327 ), // transposed from source\n\t\tvec3( -0.53108, 1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605, 1.07602 )\n\t);\n\n\tcolor *= toneMappingExposure / 0.6;\n\n\tcolor = ACESInputMat * color;\n\n\t// Apply RRT and ODT\n\tcolor = RRTAndODTFit( color );\n\n\tcolor = ACESOutputMat * color;\n\n\t// Clamp to [0, 1]\n\treturn saturate( color );\n\n}\n\nvec3 CustomToneMapping( vec3 color ) { return color; }\n`,Pm=`\n#ifdef USE_TRANSMISSION\n\n\tfloat transmissionAlpha = 1.0;\n\tfloat transmissionFactor = transmission;\n\tfloat thicknessFactor = thickness;\n\n\t#ifdef USE_TRANSMISSIONMAP\n\n\t\ttransmissionFactor *= texture2D( transmissionMap, vUv ).r;\n\n\t#endif\n\n\t#ifdef USE_THICKNESSMAP\n\n\t\tthicknessFactor *= texture2D( thicknessMap, vUv ).g;\n\n\t#endif\n\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, roughnessFactor, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, ior, thicknessFactor,\n\t\tattenuationColor, attenuationDistance );\n\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, transmissionFactor );\n\ttransmissionAlpha = mix( transmissionAlpha, transmission.a, transmissionFactor );\n#endif\n`,Lm=`\n#ifdef USE_TRANSMISSION\n\n\t// Transmission code is based on glTF-Sampler-Viewer\n\t// https://github.com/KhronosGroup/glTF-Sample-Viewer\n\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\n\t#ifdef USE_TRANSMISSIONMAP\n\n\t\tuniform sampler2D transmissionMap;\n\n\t#endif\n\n\t#ifdef USE_THICKNESSMAP\n\n\t\tuniform sampler2D thicknessMap;\n\n\t#endif\n\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\n\tvarying vec3 vWorldPosition;\n\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\n\t\t// Direction of refracted light.\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\n\t\t// Compute rotation-independant scaling of the model matrix.\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\n\t\t// The thickness is specified in local space.\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\n\t}\n\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\n\t\t// Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\n\t\t// an IOR of 1.5 results in the default amount of microfacet refraction.\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\n\t}\n\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\n\t\tfloat framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\n\t\t#ifdef texture2DLodEXT\n\n\t\t\treturn texture2DLodEXT( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\n\t\t#else\n\n\t\t\treturn texture2D( transmissionSamplerMap, fragCoord.xy, framebufferLod );\n\n\t\t#endif\n\n\t}\n\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\n\t\tif ( attenuationDistance == 0.0 ) {\n\n\t\t\t// Attenuation distance is +\\u221E (which we indicate by zero), i.e. the transmitted color is not attenuated at all.\n\t\t\treturn radiance;\n\n\t\t} else {\n\n\t\t\t// Compute light attenuation using Beer's law.\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law\n\t\t\treturn transmittance * radiance;\n\n\t\t}\n\n\t}\n\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 ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\n\t\t// Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\n\t\t// Sample framebuffer to get pixel the refracted ray hits.\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\n\t\t// Get the specular component.\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\n\t}\n#endif\n`,Dm=`\n#if ( defined( USE_UV ) \u0026\u0026 ! defined( UVS_VERTEX_ONLY ) )\n\n\tvarying vec2 vUv;\n\n#endif\n`,Fm=`\n#ifdef USE_UV\n\n\t#ifdef UVS_VERTEX_ONLY\n\n\t\tvec2 vUv;\n\n\t#else\n\n\t\tvarying vec2 vUv;\n\n\t#endif\n\n\tuniform mat3 uvTransform;\n\n#endif\n`,Im=`\n#ifdef USE_UV\n\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\n#endif\n`,Nm=`\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tvarying vec2 vUv2;\n\n#endif\n`,Om=`\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tattribute vec2 uv2;\n\tvarying vec2 vUv2;\n\n\tuniform mat3 uv2Transform;\n\n#endif\n`,Um=`\n#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\n\n\tvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;\n\n#endif\n`,zm=`\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION )\n\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\n\t#ifdef USE_INSTANCING\n\n\t\tworldPosition = instanceMatrix * worldPosition;\n\n\t#endif\n\n\tworldPosition = modelMatrix * worldPosition;\n\n#endif\n`;const Bm=`\nvarying vec2 vUv;\nuniform mat3 uvTransform;\n\nvoid main() {\n\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n\n}\n`,Gm=`\nuniform sampler2D t2D;\n\nvarying vec2 vUv;\n\nvoid main() {\n\n\tgl_FragColor = texture2D( t2D, vUv );\n\n\t#ifdef DECODE_VIDEO_TEXTURE\n\n\t\t// inline sRGB decode (TODO: Remove this code when https://crbug.com/1256340 is solved)\n\n\t\tgl_FragColor = vec4( mix( pow( gl_FragColor.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), gl_FragColor.rgb * 0.0773993808, vec3( lessThanEqual( gl_FragColor.rgb, vec3( 0.04045 ) ) ) ), gl_FragColor.w );\n\n\t#endif\n\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\n}\n`,km=`\nvarying vec3 vWorldDirection;\n\n#include \u003ccommon\u003e\n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\n\tgl_Position.z = gl_Position.w; // set z to camera.far\n\n}\n`,Hm=`\n#include \u003cenvmap_common_pars_fragment\u003e\nuniform float opacity;\n\nvarying vec3 vWorldDirection;\n\n#include \u003ccube_uv_reflection_fragment\u003e\n\nvoid main() {\n\n\tvec3 vReflect = vWorldDirection;\n\t#include \u003cenvmap_fragment\u003e\n\n\tgl_FragColor = envColor;\n\tgl_FragColor.a *= opacity;\n\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\n}\n`,Vm=`\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cdisplacementmap_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\n// This is used for computing an equivalent of gl_FragCoord.z that is as high precision as possible.\n// Some platforms compute gl_FragCoord at a lower precision which makes the manually computed value better for\n// depth-based postprocessing effects. Reproduced on iPad with A10 processor / iPadOS 13.3.1.\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\n\t#include \u003cskinbase_vertex\u003e\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \u003cbeginnormal_vertex\u003e\n\t\t#include \u003cmorphnormal_vertex\u003e\n\t\t#include \u003cskinnormal_vertex\u003e\n\n\t#endif\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cdisplacementmap_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n\tvHighPrecisionZW = gl_Position.zw;\n\n}\n`,Wm=`\n#if DEPTH_PACKING == 3200\n\n\tuniform float opacity;\n\n#endif\n\n#include \u003ccommon\u003e\n#include \u003cpacking\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvarying vec2 vHighPrecisionZW;\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tdiffuseColor.a = opacity;\n\n\t#endif\n\n\t#include \u003cmap_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\n\t// Higher precision equivalent of gl_FragCoord.z. This assumes depthRange has been left to its default values.\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\n\t#if DEPTH_PACKING == 3200\n\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\n\t#elif DEPTH_PACKING == 3201\n\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\n\t#endif\n\n}\n`,Xm=`\n#define DISTANCE\n\nvarying vec3 vWorldPosition;\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cdisplacementmap_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\n\t#include \u003cskinbase_vertex\u003e\n\n\t#ifdef USE_DISPLACEMENTMAP\n\n\t\t#include \u003cbeginnormal_vertex\u003e\n\t\t#include \u003cmorphnormal_vertex\u003e\n\t\t#include \u003cskinnormal_vertex\u003e\n\n\t#endif\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cdisplacementmap_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n\tvWorldPosition = worldPosition.xyz;\n\n}\n`,qm=`\n#define DISTANCE\n\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n\n#include \u003ccommon\u003e\n#include \u003cpacking\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main () {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( 1.0 );\n\n\t#include \u003cmap_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist ); // clamp to [ 0, 1 ]\n\n\tgl_FragColor = packDepthToRGBA( dist );\n\n}\n`,Ym=`\nvarying vec3 vWorldDirection;\n\n#include \u003ccommon\u003e\n\nvoid main() {\n\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\n}\n`,Zm=`\nuniform sampler2D tEquirect;\n\nvarying vec3 vWorldDirection;\n\n#include \u003ccommon\u003e\n\nvoid main() {\n\n\tvec3 direction = normalize( vWorldDirection );\n\n\tvec2 sampleUV = equirectUv( direction );\n\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\n}\n`,Jm=`\nuniform float scale;\nattribute float lineDistance;\n\nvarying float vLineDistance;\n\n#include \u003ccommon\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\tvLineDistance = scale * lineDistance;\n\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n}\n`,Km=`\nuniform vec3 diffuse;\nuniform float opacity;\n\nuniform float dashSize;\nuniform float totalSize;\n\nvarying float vLineDistance;\n\n#include \u003ccommon\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tif ( mod( vLineDistance, totalSize ) \u003e dashSize ) {\n\n\t\tdiscard;\n\n\t}\n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\n\toutgoingLight = diffuseColor.rgb; // simple shader\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\n}\n`,jm=`\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cuv2_pars_vertex\u003e\n#include \u003cenvmap_pars_vertex\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\t#include \u003cuv2_vertex\u003e\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\n\t\t#include \u003cbeginnormal_vertex\u003e\n\t\t#include \u003cmorphnormal_vertex\u003e\n\t\t#include \u003cskinbase_vertex\u003e\n\t\t#include \u003cskinnormal_vertex\u003e\n\t\t#include \u003cdefaultnormal_vertex\u003e\n\n\t#endif\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cenvmap_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n}\n`,$m=`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#ifndef FLAT_SHADED\n\n\tvarying vec3 vNormal;\n\n#endif\n\n#include \u003ccommon\u003e\n#include \u003cdithering_pars_fragment\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cuv2_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003caomap_pars_fragment\u003e\n#include \u003clightmap_pars_fragment\u003e\n#include \u003cenvmap_common_pars_fragment\u003e\n#include \u003cenvmap_pars_fragment\u003e\n#include \u003ccube_uv_reflection_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003cspecularmap_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\t#include \u003cspecularmap_fragment\u003e\n\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\n\t// accumulation (baked indirect lighting only)\n\t#ifdef USE_LIGHTMAP\n\n\t\tvec4 lightMapTexel = texture2D( lightMap, vUv2 );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\n\t#else\n\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\n\t#endif\n\n\t// modulation\n\t#include \u003caomap_fragment\u003e\n\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\n\t#include \u003cenvmap_fragment\u003e\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\t#include \u003cdithering_fragment\u003e\n\n}\n`,Qm=`\n#define LAMBERT\n\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cuv2_pars_vertex\u003e\n#include \u003cenvmap_pars_vertex\u003e\n#include \u003cbsdfs\u003e\n#include \u003clights_pars_begin\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003cshadowmap_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\t#include \u003cuv2_vertex\u003e\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\n\t#include \u003cbeginnormal_vertex\u003e\n\t#include \u003cmorphnormal_vertex\u003e\n\t#include \u003cskinbase_vertex\u003e\n\t#include \u003cskinnormal_vertex\u003e\n\t#include \u003cdefaultnormal_vertex\u003e\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cenvmap_vertex\u003e\n\t#include \u003clights_lambert_vertex\u003e\n\t#include \u003cshadowmap_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n}\n`,e_=`\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\nvarying vec3 vLightFront;\nvarying vec3 vIndirectFront;\n\n#ifdef DOUBLE_SIDED\n\tvarying vec3 vLightBack;\n\tvarying vec3 vIndirectBack;\n#endif\n\n\n#include \u003ccommon\u003e\n#include \u003cpacking\u003e\n#include \u003cdithering_pars_fragment\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cuv2_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003caomap_pars_fragment\u003e\n#include \u003clightmap_pars_fragment\u003e\n#include \u003cemissivemap_pars_fragment\u003e\n#include \u003cenvmap_common_pars_fragment\u003e\n#include \u003cenvmap_pars_fragment\u003e\n#include \u003ccube_uv_reflection_fragment\u003e\n#include \u003cbsdfs\u003e\n#include \u003clights_pars_begin\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003cshadowmap_pars_fragment\u003e\n#include \u003cshadowmask_pars_fragment\u003e\n#include \u003cspecularmap_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\t#include \u003cspecularmap_fragment\u003e\n\t#include \u003cemissivemap_fragment\u003e\n\n\t// accumulation\n\n\t#ifdef DOUBLE_SIDED\n\n\t\treflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;\n\n\t#else\n\n\t\treflectedLight.indirectDiffuse += vIndirectFront;\n\n\t#endif\n\n\t#include \u003clightmap_fragment\u003e\n\n\treflectedLight.indirectDiffuse *= BRDF_Lambert( diffuseColor.rgb );\n\n\t#ifdef DOUBLE_SIDED\n\n\t\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\n\n\t#else\n\n\t\treflectedLight.directDiffuse = vLightFront;\n\n\t#endif\n\n\treflectedLight.directDiffuse *= BRDF_Lambert( diffuseColor.rgb ) * getShadowMask();\n\n\t// modulation\n\n\t#include \u003caomap_fragment\u003e\n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t#include \u003cenvmap_fragment\u003e\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\t#include \u003cdithering_fragment\u003e\n}\n`,t_=`\n#define MATCAP\n\nvarying vec3 vViewPosition;\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cdisplacementmap_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cnormal_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\t#include \u003cbeginnormal_vertex\u003e\n\t#include \u003cmorphnormal_vertex\u003e\n\t#include \u003cskinbase_vertex\u003e\n\t#include \u003cskinnormal_vertex\u003e\n\t#include \u003cdefaultnormal_vertex\u003e\n\t#include \u003cnormal_vertex\u003e\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cdisplacementmap_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n\tvViewPosition = - mvPosition.xyz;\n\n}\n`,i_=`\n#define MATCAP\n\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\n\nvarying vec3 vViewPosition;\n\n#include \u003ccommon\u003e\n#include \u003cdithering_pars_fragment\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003cnormal_pars_fragment\u003e\n#include \u003cbumpmap_pars_fragment\u003e\n#include \u003cnormalmap_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\t#include \u003cnormal_fragment_begin\u003e\n\t#include \u003cnormal_fragment_maps\u003e\n\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; // 0.495 to remove artifacts caused by undersized matcap disks\n\n\t#ifdef USE_MATCAP\n\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\n\t#else\n\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); // default if matcap is missing\n\n\t#endif\n\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\t#include \u003cdithering_fragment\u003e\n\n}\n`,n_=`\n#define NORMAL\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cdisplacementmap_pars_vertex\u003e\n#include \u003cnormal_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\n\t#include \u003cbeginnormal_vertex\u003e\n\t#include \u003cmorphnormal_vertex\u003e\n\t#include \u003cskinbase_vertex\u003e\n\t#include \u003cskinnormal_vertex\u003e\n\t#include \u003cdefaultnormal_vertex\u003e\n\t#include \u003cnormal_vertex\u003e\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cdisplacementmap_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvViewPosition = - mvPosition.xyz;\n\n#endif\n\n}\n`,r_=`\n#define NORMAL\n\nuniform float opacity;\n\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )\n\n\tvarying vec3 vViewPosition;\n\n#endif\n\n#include \u003cpacking\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cnormal_pars_fragment\u003e\n#include \u003cbumpmap_pars_fragment\u003e\n#include \u003cnormalmap_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cnormal_fragment_begin\u003e\n\t#include \u003cnormal_fragment_maps\u003e\n\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\n\t#ifdef OPAQUE\n\n\t\tgl_FragColor.a = 1.0;\n\n\t#endif\n\n}\n`,s_=`\n#define PHONG\n\nvarying vec3 vViewPosition;\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cuv2_pars_vertex\u003e\n#include \u003cdisplacementmap_pars_vertex\u003e\n#include \u003cenvmap_pars_vertex\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cnormal_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003cshadowmap_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\t#include \u003cuv2_vertex\u003e\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\n\t#include \u003cbeginnormal_vertex\u003e\n\t#include \u003cmorphnormal_vertex\u003e\n\t#include \u003cskinbase_vertex\u003e\n\t#include \u003cskinnormal_vertex\u003e\n\t#include \u003cdefaultnormal_vertex\u003e\n\t#include \u003cnormal_vertex\u003e\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cdisplacementmap_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cenvmap_vertex\u003e\n\t#include \u003cshadowmap_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n}\n`,o_=`\n#define PHONG\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n\n#include \u003ccommon\u003e\n#include \u003cpacking\u003e\n#include \u003cdithering_pars_fragment\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cuv2_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003caomap_pars_fragment\u003e\n#include \u003clightmap_pars_fragment\u003e\n#include \u003cemissivemap_pars_fragment\u003e\n#include \u003cenvmap_common_pars_fragment\u003e\n#include \u003cenvmap_pars_fragment\u003e\n#include \u003ccube_uv_reflection_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003cbsdfs\u003e\n#include \u003clights_pars_begin\u003e\n#include \u003cnormal_pars_fragment\u003e\n#include \u003clights_phong_pars_fragment\u003e\n#include \u003cshadowmap_pars_fragment\u003e\n#include \u003cbumpmap_pars_fragment\u003e\n#include \u003cnormalmap_pars_fragment\u003e\n#include \u003cspecularmap_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\t#include \u003cspecularmap_fragment\u003e\n\t#include \u003cnormal_fragment_begin\u003e\n\t#include \u003cnormal_fragment_maps\u003e\n\t#include \u003cemissivemap_fragment\u003e\n\n\t// accumulation\n\t#include \u003clights_phong_fragment\u003e\n\t#include \u003clights_fragment_begin\u003e\n\t#include \u003clights_fragment_maps\u003e\n\t#include \u003clights_fragment_end\u003e\n\n\t// modulation\n\t#include \u003caomap_fragment\u003e\n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\n\t#include \u003cenvmap_fragment\u003e\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\t#include \u003cdithering_fragment\u003e\n\n}\n`,a_=`\n#define STANDARD\n\nvarying vec3 vViewPosition;\n\n#ifdef USE_TRANSMISSION\n\n\tvarying vec3 vWorldPosition;\n\n#endif\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cuv2_pars_vertex\u003e\n#include \u003cdisplacementmap_pars_vertex\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cnormal_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003cshadowmap_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\t#include \u003cuv2_vertex\u003e\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\n\t#include \u003cbeginnormal_vertex\u003e\n\t#include \u003cmorphnormal_vertex\u003e\n\t#include \u003cskinbase_vertex\u003e\n\t#include \u003cskinnormal_vertex\u003e\n\t#include \u003cdefaultnormal_vertex\u003e\n\t#include \u003cnormal_vertex\u003e\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cdisplacementmap_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cshadowmap_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n#ifdef USE_TRANSMISSION\n\n\tvWorldPosition = worldPosition.xyz;\n\n#endif\n}\n`,l_=`\n#define STANDARD\n\n#ifdef PHYSICAL\n\t#define IOR\n\t#define SPECULAR\n#endif\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n\n#ifdef IOR\n\tuniform float ior;\n#endif\n\n#ifdef SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\n\t#ifdef USE_SPECULARINTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n\n\t#ifdef USE_SPECULARCOLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n#endif\n\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\n\t#ifdef USE_SHEENCOLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\n\t#ifdef USE_SHEENROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\n\nvarying vec3 vViewPosition;\n\n#include \u003ccommon\u003e\n#include \u003cpacking\u003e\n#include \u003cdithering_pars_fragment\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cuv2_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003caomap_pars_fragment\u003e\n#include \u003clightmap_pars_fragment\u003e\n#include \u003cemissivemap_pars_fragment\u003e\n#include \u003cbsdfs\u003e\n#include \u003ciridescence_fragment\u003e\n#include \u003ccube_uv_reflection_fragment\u003e\n#include \u003cenvmap_common_pars_fragment\u003e\n#include \u003cenvmap_physical_pars_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003clights_pars_begin\u003e\n#include \u003cnormal_pars_fragment\u003e\n#include \u003clights_physical_pars_fragment\u003e\n#include \u003ctransmission_pars_fragment\u003e\n#include \u003cshadowmap_pars_fragment\u003e\n#include \u003cbumpmap_pars_fragment\u003e\n#include \u003cnormalmap_pars_fragment\u003e\n#include \u003cclearcoat_pars_fragment\u003e\n#include \u003ciridescence_pars_fragment\u003e\n#include \u003croughnessmap_pars_fragment\u003e\n#include \u003cmetalnessmap_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\t#include \u003croughnessmap_fragment\u003e\n\t#include \u003cmetalnessmap_fragment\u003e\n\t#include \u003cnormal_fragment_begin\u003e\n\t#include \u003cnormal_fragment_maps\u003e\n\t#include \u003cclearcoat_normal_fragment_begin\u003e\n\t#include \u003cclearcoat_normal_fragment_maps\u003e\n\t#include \u003cemissivemap_fragment\u003e\n\n\t// accumulation\n\t#include \u003clights_physical_fragment\u003e\n\t#include \u003clights_fragment_begin\u003e\n\t#include \u003clights_fragment_maps\u003e\n\t#include \u003clights_fragment_end\u003e\n\n\t// modulation\n\t#include \u003caomap_fragment\u003e\n\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\n\t#include \u003ctransmission_fragment\u003e\n\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\n\t#ifdef USE_SHEEN\n\n\t\t// Sheen energy compensation approximation calculation can be found at the end of\n\t\t// https://drive.google.com/file/d/1T0D1VSyR4AllqIJTQAraEIzjlb5h4FKH/view?usp=sharing\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\n\t#endif\n\n\t#ifdef USE_CLEARCOAT\n\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\n\t#endif\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\t#include \u003cdithering_fragment\u003e\n\n}\n`,c_=`\n#define TOON\n\nvarying vec3 vViewPosition;\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cuv2_pars_vertex\u003e\n#include \u003cdisplacementmap_pars_vertex\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cnormal_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003cshadowmap_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\t#include \u003cuv2_vertex\u003e\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\n\t#include \u003cbeginnormal_vertex\u003e\n\t#include \u003cmorphnormal_vertex\u003e\n\t#include \u003cskinbase_vertex\u003e\n\t#include \u003cskinnormal_vertex\u003e\n\t#include \u003cdefaultnormal_vertex\u003e\n\t#include \u003cnormal_vertex\u003e\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cdisplacementmap_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\n\tvViewPosition = - mvPosition.xyz;\n\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cshadowmap_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n}\n`,u_=`\n#define TOON\n\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n\n#include \u003ccommon\u003e\n#include \u003cpacking\u003e\n#include \u003cdithering_pars_fragment\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cuv2_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003caomap_pars_fragment\u003e\n#include \u003clightmap_pars_fragment\u003e\n#include \u003cemissivemap_pars_fragment\u003e\n#include \u003cgradientmap_pars_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003cbsdfs\u003e\n#include \u003clights_pars_begin\u003e\n#include \u003cnormal_pars_fragment\u003e\n#include \u003clights_toon_pars_fragment\u003e\n#include \u003cshadowmap_pars_fragment\u003e\n#include \u003cbumpmap_pars_fragment\u003e\n#include \u003cnormalmap_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\t#include \u003cnormal_fragment_begin\u003e\n\t#include \u003cnormal_fragment_maps\u003e\n\t#include \u003cemissivemap_fragment\u003e\n\n\t// accumulation\n\t#include \u003clights_toon_fragment\u003e\n\t#include \u003clights_fragment_begin\u003e\n\t#include \u003clights_fragment_maps\u003e\n\t#include \u003clights_fragment_end\u003e\n\n\t// modulation\n\t#include \u003caomap_fragment\u003e\n\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\t#include \u003cdithering_fragment\u003e\n\n}\n`,h_=`\nuniform float size;\nuniform float scale;\n\n#include \u003ccommon\u003e\n#include \u003ccolor_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003ccolor_vertex\u003e\n\t#include \u003cmorphcolor_vertex\u003e\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\n\tgl_PointSize = size;\n\n\t#ifdef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\n\t#endif\n\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n}\n`,f_=`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \u003ccommon\u003e\n#include \u003ccolor_pars_fragment\u003e\n#include \u003cmap_particle_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_particle_fragment\u003e\n\t#include \u003ccolor_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\n\toutgoingLight = diffuseColor.rgb;\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\t#include \u003cpremultiplied_alpha_fragment\u003e\n\n}\n`,d_=`\n#include \u003ccommon\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003cmorphtarget_pars_vertex\u003e\n#include \u003cskinning_pars_vertex\u003e\n#include \u003cshadowmap_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cbeginnormal_vertex\u003e\n\t#include \u003cmorphnormal_vertex\u003e\n\t#include \u003cskinbase_vertex\u003e\n\t#include \u003cskinnormal_vertex\u003e\n\t#include \u003cdefaultnormal_vertex\u003e\n\n\t#include \u003cbegin_vertex\u003e\n\t#include \u003cmorphtarget_vertex\u003e\n\t#include \u003cskinning_vertex\u003e\n\t#include \u003cproject_vertex\u003e\n\n\t#include \u003cworldpos_vertex\u003e\n\t#include \u003cshadowmap_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n}\n`,p_=`\nuniform vec3 color;\nuniform float opacity;\n\n#include \u003ccommon\u003e\n#include \u003cpacking\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003cbsdfs\u003e\n#include \u003clights_pars_begin\u003e\n#include \u003cshadowmap_pars_fragment\u003e\n#include \u003cshadowmask_pars_fragment\u003e\n\nvoid main() {\n\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\n}\n`,m_=`\nuniform float rotation;\nuniform vec2 center;\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_vertex\u003e\n#include \u003cfog_pars_vertex\u003e\n#include \u003clogdepthbuf_pars_vertex\u003e\n#include \u003cclipping_planes_pars_vertex\u003e\n\nvoid main() {\n\n\t#include \u003cuv_vertex\u003e\n\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\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\n\t#ifndef USE_SIZEATTENUATION\n\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\n\t#endif\n\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\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\n\tmvPosition.xy += rotatedPosition;\n\n\tgl_Position = projectionMatrix * mvPosition;\n\n\t#include \u003clogdepthbuf_vertex\u003e\n\t#include \u003cclipping_planes_vertex\u003e\n\t#include \u003cfog_vertex\u003e\n\n}\n`,__=`\nuniform vec3 diffuse;\nuniform float opacity;\n\n#include \u003ccommon\u003e\n#include \u003cuv_pars_fragment\u003e\n#include \u003cmap_pars_fragment\u003e\n#include \u003calphamap_pars_fragment\u003e\n#include \u003calphatest_pars_fragment\u003e\n#include \u003cfog_pars_fragment\u003e\n#include \u003clogdepthbuf_pars_fragment\u003e\n#include \u003cclipping_planes_pars_fragment\u003e\n\nvoid main() {\n\n\t#include \u003cclipping_planes_fragment\u003e\n\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\n\t#include \u003clogdepthbuf_fragment\u003e\n\t#include \u003cmap_fragment\u003e\n\t#include \u003calphamap_fragment\u003e\n\t#include \u003calphatest_fragment\u003e\n\n\toutgoingLight = diffuseColor.rgb;\n\n\t#include \u003coutput_fragment\u003e\n\t#include \u003ctonemapping_fragment\u003e\n\t#include \u003cencodings_fragment\u003e\n\t#include \u003cfog_fragment\u003e\n\n}\n`,Re={alphamap_fragment:Hd,alphamap_pars_fragment:Vd,alphatest_fragment:Wd,alphatest_pars_fragment:Xd,aomap_fragment:qd,aomap_pars_fragment:Yd,begin_vertex:Zd,beginnormal_vertex:Jd,bsdfs:Kd,iridescence_fragment:jd,bumpmap_pars_fragment:$d,clipping_planes_fragment:Qd,clipping_planes_pars_fragment:ep,clipping_planes_pars_vertex:tp,clipping_planes_vertex:ip,color_fragment:np,color_pars_fragment:rp,color_pars_vertex:sp,color_vertex:op,common:ap,cube_uv_reflection_fragment:lp,defaultnormal_vertex:cp,displacementmap_pars_vertex:up,displacementmap_vertex:hp,emissivemap_fragment:fp,emissivemap_pars_fragment:dp,encodings_fragment:pp,encodings_pars_fragment:mp,envmap_fragment:_p,envmap_common_pars_fragment:gp,envmap_pars_fragment:xp,envmap_pars_vertex:vp,envmap_physical_pars_fragment:Pp,envmap_vertex:yp,fog_vertex:Sp,fog_pars_vertex:Mp,fog_fragment:Ep,fog_pars_fragment:bp,gradientmap_pars_fragment:wp,lightmap_fragment:Tp,lightmap_pars_fragment:Ap,lights_lambert_vertex:Rp,lights_pars_begin:Cp,lights_toon_fragment:Lp,lights_toon_pars_fragment:Dp,lights_phong_fragment:Fp,lights_phong_pars_fragment:Ip,lights_physical_fragment:Np,lights_physical_pars_fragment:Op,lights_fragment_begin:Up,lights_fragment_maps:zp,lights_fragment_end:Bp,logdepthbuf_fragment:Gp,logdepthbuf_pars_fragment:kp,logdepthbuf_pars_vertex:Hp,logdepthbuf_vertex:Vp,map_fragment:Wp,map_pars_fragment:Xp,map_particle_fragment:qp,map_particle_pars_fragment:Yp,metalnessmap_fragment:Zp,metalnessmap_pars_fragment:Jp,morphcolor_vertex:Kp,morphnormal_vertex:jp,morphtarget_pars_vertex:$p,morphtarget_vertex:Qp,normal_fragment_begin:em,normal_fragment_maps:tm,normal_pars_fragment:im,normal_pars_vertex:nm,normal_vertex:rm,normalmap_pars_fragment:sm,clearcoat_normal_fragment_begin:om,clearcoat_normal_fragment_maps:am,clearcoat_pars_fragment:lm,iridescence_pars_fragment:cm,output_fragment:um,packing:hm,premultiplied_alpha_fragment:fm,project_vertex:dm,dithering_fragment:pm,dithering_pars_fragment:mm,roughnessmap_fragment:_m,roughnessmap_pars_fragment:gm,shadowmap_pars_fragment:xm,shadowmap_pars_vertex:vm,shadowmap_vertex:ym,shadowmask_pars_fragment:Sm,skinbase_vertex:Mm,skinning_pars_vertex:Em,skinning_vertex:bm,skinnormal_vertex:wm,specularmap_fragment:Tm,specularmap_pars_fragment:Am,tonemapping_fragment:Rm,tonemapping_pars_fragment:Cm,transmission_fragment:Pm,transmission_pars_fragment:Lm,uv_pars_fragment:Dm,uv_pars_vertex:Fm,uv_vertex:Im,uv2_pars_fragment:Nm,uv2_pars_vertex:Om,uv2_vertex:Um,worldpos_vertex:zm,background_vert:Bm,background_frag:Gm,cube_vert:km,cube_frag:Hm,depth_vert:Vm,depth_frag:Wm,distanceRGBA_vert:Xm,distanceRGBA_frag:qm,equirect_vert:Ym,equirect_frag:Zm,linedashed_vert:Jm,linedashed_frag:Km,meshbasic_vert:jm,meshbasic_frag:$m,meshlambert_vert:Qm,meshlambert_frag:e_,meshmatcap_vert:t_,meshmatcap_frag:i_,meshnormal_vert:n_,meshnormal_frag:r_,meshphong_vert:s_,meshphong_frag:o_,meshphysical_vert:a_,meshphysical_frag:l_,meshtoon_vert:c_,meshtoon_frag:u_,points_vert:h_,points_frag:f_,shadow_vert:d_,shadow_frag:p_,sprite_vert:m_,sprite_frag:__},se={common:{diffuse:{value:new Le(16777215)},opacity:{value:1},map:{value:null},uvTransform:{value:new li},uv2Transform:{value:new li},alphaMap:{value:null},alphaTest:{value:0}},specularmap:{specularMap:{value:null}},envmap:{envMap:{value:null},flipEnvMap:{value:-1},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1}},emissivemap:{emissiveMap:{value:null}},bumpmap:{bumpMap:{value:null},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalScale:{value:new fe(1,1)}},displacementmap:{displacementMap:{value:null},displacementScale:{value:1},displacementBias:{value:0}},roughnessmap:{roughnessMap:{value:null}},metalnessmap:{metalnessMap:{value:null}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Le(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMap:{value:[]},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotShadowMap:{value:[]},spotShadowMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMap:{value:[]},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null}},points:{diffuse:{value:new Le(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new li}},sprite:{diffuse:{value:new Le(16777215)},opacity:{value:1},center:{value:new fe(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},alphaTest:{value:0},uvTransform:{value:new li}}},oi={basic:{uniforms:ht([se.common,se.specularmap,se.envmap,se.aomap,se.lightmap,se.fog]),vertexShader:Re.meshbasic_vert,fragmentShader:Re.meshbasic_frag},lambert:{uniforms:ht([se.common,se.specularmap,se.envmap,se.aomap,se.lightmap,se.emissivemap,se.fog,se.lights,{emissive:{value:new Le(0)}}]),vertexShader:Re.meshlambert_vert,fragmentShader:Re.meshlambert_frag},phong:{uniforms:ht([se.common,se.specularmap,se.envmap,se.aomap,se.lightmap,se.emissivemap,se.bumpmap,se.normalmap,se.displacementmap,se.fog,se.lights,{emissive:{value:new Le(0)},specular:{value:new Le(1118481)},shininess:{value:30}}]),vertexShader:Re.meshphong_vert,fragmentShader:Re.meshphong_frag},standard:{uniforms:ht([se.common,se.envmap,se.aomap,se.lightmap,se.emissivemap,se.bumpmap,se.normalmap,se.displacementmap,se.roughnessmap,se.metalnessmap,se.fog,se.lights,{emissive:{value:new Le(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:Re.meshphysical_vert,fragmentShader:Re.meshphysical_frag},toon:{uniforms:ht([se.common,se.aomap,se.lightmap,se.emissivemap,se.bumpmap,se.normalmap,se.displacementmap,se.gradientmap,se.fog,se.lights,{emissive:{value:new Le(0)}}]),vertexShader:Re.meshtoon_vert,fragmentShader:Re.meshtoon_frag},matcap:{uniforms:ht([se.common,se.bumpmap,se.normalmap,se.displacementmap,se.fog,{matcap:{value:null}}]),vertexShader:Re.meshmatcap_vert,fragmentShader:Re.meshmatcap_frag},points:{uniforms:ht([se.points,se.fog]),vertexShader:Re.points_vert,fragmentShader:Re.points_frag},dashed:{uniforms:ht([se.common,se.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:Re.linedashed_vert,fragmentShader:Re.linedashed_frag},depth:{uniforms:ht([se.common,se.displacementmap]),vertexShader:Re.depth_vert,fragmentShader:Re.depth_frag},normal:{uniforms:ht([se.common,se.bumpmap,se.normalmap,se.displacementmap,{opacity:{value:1}}]),vertexShader:Re.meshnormal_vert,fragmentShader:Re.meshnormal_frag},sprite:{uniforms:ht([se.sprite,se.fog]),vertexShader:Re.sprite_vert,fragmentShader:Re.sprite_frag},background:{uniforms:{uvTransform:{value:new li},t2D:{value:null}},vertexShader:Re.background_vert,fragmentShader:Re.background_frag},cube:{uniforms:ht([se.envmap,{opacity:{value:1}}]),vertexShader:Re.cube_vert,fragmentShader:Re.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:Re.equirect_vert,fragmentShader:Re.equirect_frag},distanceRGBA:{uniforms:ht([se.common,se.displacementmap,{referencePosition:{value:new L},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:Re.distanceRGBA_vert,fragmentShader:Re.distanceRGBA_frag},shadow:{uniforms:ht([se.lights,se.fog,{color:{value:new Le(0)},opacity:{value:1}}]),vertexShader:Re.shadow_vert,fragmentShader:Re.shadow_frag}};oi.physical={uniforms:ht([oi.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new fe(1,1)},clearcoatNormalMap:{value:null},iridescence:{value:0},iridescenceMap:{value:null},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},sheen:{value:0},sheenColor:{value:new Le(0)},sheenColorMap:{value:null},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},transmission:{value:0},transmissionMap:{value:null},transmissionSamplerSize:{value:new fe},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},attenuationDistance:{value:0},attenuationColor:{value:new Le(0)},specularIntensity:{value:1},specularIntensityMap:{value:null},specularColor:{value:new Le(1,1,1)},specularColorMap:{value:null}}]),vertexShader:Re.meshphysical_vert,fragmentShader:Re.meshphysical_frag};function g_(r,e,t,i,n,s){const o=new Le(0);let a=n===!0?0:1,l,c,u=null,h=0,f=null;function m(d,p){let g=!1,S=p.isScene===!0?p.background:null;S\u0026\u0026S.isTexture\u0026\u0026(S=e.get(S));const A=r.xr,b=A.getSession\u0026\u0026A.getSession();b\u0026\u0026b.environmentBlendMode===\"additive\"\u0026\u0026(S=null),S===null?_(o,a):S\u0026\u0026S.isColor\u0026\u0026(_(S,1),g=!0),(r.autoClear||g)\u0026\u0026r.clear(r.autoClearColor,r.autoClearDepth,r.autoClearStencil),S\u0026\u0026(S.isCubeTexture||S.mapping===zs)?(c===void 0\u0026\u0026(c=new xt(new Yr(1,1,1),new Sn({name:\"BackgroundCubeMaterial\",uniforms:ur(oi.cube.uniforms),vertexShader:oi.cube.vertexShader,fragmentShader:oi.cube.fragmentShader,side:jt,depthTest:!1,depthWrite:!1,fog:!1})),c.geometry.deleteAttribute(\"normal\"),c.geometry.deleteAttribute(\"uv\"),c.onBeforeRender=function(v,w,R){this.matrixWorld.copyPosition(R.matrixWorld)},Object.defineProperty(c.material,\"envMap\",{get:function(){return this.uniforms.envMap.value}}),i.update(c)),c.material.uniforms.envMap.value=S,c.material.uniforms.flipEnvMap.value=S.isCubeTexture\u0026\u0026S.isRenderTargetTexture===!1?-1:1,(u!==S||h!==S.version||f!==r.toneMapping)\u0026\u0026(c.material.needsUpdate=!0,u=S,h=S.version,f=r.toneMapping),c.layers.enableAll(),d.unshift(c,c.geometry,c.material,0,0,null)):S\u0026\u0026S.isTexture\u0026\u0026(l===void 0\u0026\u0026(l=new xt(new Hs(2,2),new Sn({name:\"BackgroundMaterial\",uniforms:ur(oi.background.uniforms),vertexShader:oi.background.vertexShader,fragmentShader:oi.background.fragmentShader,side:Dr,depthTest:!1,depthWrite:!1,fog:!1})),l.geometry.deleteAttribute(\"normal\"),Object.defineProperty(l.material,\"map\",{get:function(){return this.uniforms.t2D.value}}),i.update(l)),l.material.uniforms.t2D.value=S,S.matrixAutoUpdate===!0\u0026\u0026S.updateMatrix(),l.material.uniforms.uvTransform.value.copy(S.matrix),(u!==S||h!==S.version||f!==r.toneMapping)\u0026\u0026(l.material.needsUpdate=!0,u=S,h=S.version,f=r.toneMapping),l.layers.enableAll(),d.unshift(l,l.geometry,l.material,0,0,null))}function _(d,p){t.buffers.color.setClear(d.r,d.g,d.b,p,s)}return{getClearColor:function(){return o},setClearColor:function(d,p=1){o.set(d),a=p,_(o,a)},getClearAlpha:function(){return a},setClearAlpha:function(d){a=d,_(o,a)},render:m}}function x_(r,e,t,i){const n=r.getParameter(r.MAX_VERTEX_ATTRIBS),s=i.isWebGL2?null:e.get(\"OES_vertex_array_object\"),o=i.isWebGL2||s!==null,a={},l=p(null);let c=l,u=!1;function h(P,H,U,V,X){let B=!1;if(o){const q=d(V,U,H);c!==q\u0026\u0026(c=q,m(c.object)),B=g(P,V,U,X),B\u0026\u0026S(P,V,U,X)}else{const q=H.wireframe===!0;(c.geometry!==V.id||c.program!==U.id||c.wireframe!==q)\u0026\u0026(c.geometry=V.id,c.program=U.id,c.wireframe=q,B=!0)}X!==null\u0026\u0026t.update(X,r.ELEMENT_ARRAY_BUFFER),(B||u)\u0026\u0026(u=!1,x(P,H,U,V),X!==null\u0026\u0026r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,t.get(X).buffer))}function f(){return i.isWebGL2?r.createVertexArray():s.createVertexArrayOES()}function m(P){return i.isWebGL2?r.bindVertexArray(P):s.bindVertexArrayOES(P)}function _(P){return i.isWebGL2?r.deleteVertexArray(P):s.deleteVertexArrayOES(P)}function d(P,H,U){const V=U.wireframe===!0;let X=a[P.id];X===void 0\u0026\u0026(X={},a[P.id]=X);let B=X[H.id];B===void 0\u0026\u0026(B={},X[H.id]=B);let q=B[V];return q===void 0\u0026\u0026(q=p(f()),B[V]=q),q}function p(P){const H=[],U=[],V=[];for(let X=0;X\u003cn;X++)H[X]=0,U[X]=0,V[X]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:H,enabledAttributes:U,attributeDivisors:V,object:P,attributes:{},index:null}}function g(P,H,U,V){const X=c.attributes,B=H.attributes;let q=0;const Q=U.getAttributes();for(const K in Q)if(Q[K].location\u003e=0){const ae=X[K];let pe=B[K];if(pe===void 0\u0026\u0026(K===\"instanceMatrix\"\u0026\u0026P.instanceMatrix\u0026\u0026(pe=P.instanceMatrix),K===\"instanceColor\"\u0026\u0026P.instanceColor\u0026\u0026(pe=P.instanceColor)),ae===void 0||ae.attribute!==pe||pe\u0026\u0026ae.data!==pe.data)return!0;q++}return c.attributesNum!==q||c.index!==V}function S(P,H,U,V){const X={},B=H.attributes;let q=0;const Q=U.getAttributes();for(const K in Q)if(Q[K].location\u003e=0){let ae=B[K];ae===void 0\u0026\u0026(K===\"instanceMatrix\"\u0026\u0026P.instanceMatrix\u0026\u0026(ae=P.instanceMatrix),K===\"instanceColor\"\u0026\u0026P.instanceColor\u0026\u0026(ae=P.instanceColor));const pe={};pe.attribute=ae,ae\u0026\u0026ae.data\u0026\u0026(pe.data=ae.data),X[K]=pe,q++}c.attributes=X,c.attributesNum=q,c.index=V}function A(){const P=c.newAttributes;for(let H=0,U=P.length;H\u003cU;H++)P[H]=0}function b(P){v(P,0)}function v(P,H){const U=c.newAttributes,V=c.enabledAttributes,X=c.attributeDivisors;U[P]=1,V[P]===0\u0026\u0026(r.enableVertexAttribArray(P),V[P]=1),X[P]!==H\u0026\u0026((i.isWebGL2?r:e.get(\"ANGLE_instanced_arrays\"))[i.isWebGL2?\"vertexAttribDivisor\":\"vertexAttribDivisorANGLE\"](P,H),X[P]=H)}function w(){const P=c.newAttributes,H=c.enabledAttributes;for(let U=0,V=H.length;U\u003cV;U++)H[U]!==P[U]\u0026\u0026(r.disableVertexAttribArray(U),H[U]=0)}function R(P,H,U,V,X,B){i.isWebGL2===!0\u0026\u0026(U===r.INT||U===r.UNSIGNED_INT)?r.vertexAttribIPointer(P,H,U,X,B):r.vertexAttribPointer(P,H,U,V,X,B)}function x(P,H,U,V){if(i.isWebGL2===!1\u0026\u0026(P.isInstancedMesh||V.isInstancedBufferGeometry)\u0026\u0026e.get(\"ANGLE_instanced_arrays\")===null)return;A();const X=V.attributes,B=U.getAttributes(),q=H.defaultAttributeValues;for(const Q in B){const K=B[Q];if(K.location\u003e=0){let J=X[Q];if(J===void 0\u0026\u0026(Q===\"instanceMatrix\"\u0026\u0026P.instanceMatrix\u0026\u0026(J=P.instanceMatrix),Q===\"instanceColor\"\u0026\u0026P.instanceColor\u0026\u0026(J=P.instanceColor)),J!==void 0){const ae=J.normalized,pe=J.itemSize,D=t.get(J);if(D===void 0)continue;const We=D.buffer,Ee=D.type,be=D.bytesPerElement;if(J.isInterleavedBufferAttribute){const le=J.data,ze=le.stride,Ce=J.offset;if(le.isInstancedInterleavedBuffer){for(let ye=0;ye\u003cK.locationSize;ye++)v(K.location+ye,le.meshPerAttribute);P.isInstancedMesh!==!0\u0026\u0026V._maxInstanceCount===void 0\u0026\u0026(V._maxInstanceCount=le.meshPerAttribute*le.count)}else for(let ye=0;ye\u003cK.locationSize;ye++)b(K.location+ye);r.bindBuffer(r.ARRAY_BUFFER,We);for(let ye=0;ye\u003cK.locationSize;ye++)R(K.location+ye,pe/K.locationSize,Ee,ae,ze*be,(Ce+pe/K.locationSize*ye)*be)}else{if(J.isInstancedBufferAttribute){for(let le=0;le\u003cK.locationSize;le++)v(K.location+le,J.meshPerAttribute);P.isInstancedMesh!==!0\u0026\u0026V._maxInstanceCount===void 0\u0026\u0026(V._maxInstanceCount=J.meshPerAttribute*J.count)}else for(let le=0;le\u003cK.locationSize;le++)b(K.location+le);r.bindBuffer(r.ARRAY_BUFFER,We);for(let le=0;le\u003cK.locationSize;le++)R(K.location+le,pe/K.locationSize,Ee,ae,pe*be,pe/K.locationSize*le*be)}}else if(q!==void 0){const ae=q[Q];if(ae!==void 0)switch(ae.length){case 2:r.vertexAttrib2fv(K.location,ae);break;case 3:r.vertexAttrib3fv(K.location,ae);break;case 4:r.vertexAttrib4fv(K.location,ae);break;default:r.vertexAttrib1fv(K.location,ae)}}}}w()}function E(){j();for(const P in a){const H=a[P];for(const U in H){const V=H[U];for(const X in V)_(V[X].object),delete V[X];delete H[U]}delete a[P]}}function I(P){if(a[P.id]===void 0)return;const H=a[P.id];for(const U in H){const V=H[U];for(const X in V)_(V[X].object),delete V[X];delete H[U]}delete a[P.id]}function F(P){for(const H in a){const U=a[H];if(U[P.id]===void 0)continue;const V=U[P.id];for(const X in V)_(V[X].object),delete V[X];delete U[P.id]}}function j(){Z(),u=!0,c!==l\u0026\u0026(c=l,m(c.object))}function Z(){l.geometry=null,l.program=null,l.wireframe=!1}return{setup:h,reset:j,resetDefaultState:Z,dispose:E,releaseStatesOfGeometry:I,releaseStatesOfProgram:F,initAttributes:A,enableAttribute:b,disableUnusedAttributes:w}}function v_(r,e,t,i){const n=i.isWebGL2;let s;function o(c){s=c}function a(c,u){r.drawArrays(s,c,u),t.update(u,s,1)}function l(c,u,h){if(h===0)return;let f,m;if(n)f=r,m=\"drawArraysInstanced\";else if(f=e.get(\"ANGLE_instanced_arrays\"),m=\"drawArraysInstancedANGLE\",f===null){console.error(\"THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");return}f[m](s,c,u,h),t.update(u,s,h)}this.setMode=o,this.render=a,this.renderInstances=l}function y_(r,e,t){let i;function n(){if(i!==void 0)return i;if(e.has(\"EXT_texture_filter_anisotropic\")===!0){const R=e.get(\"EXT_texture_filter_anisotropic\");i=r.getParameter(R.MAX_TEXTURE_MAX_ANISOTROPY_EXT)}else i=0;return i}function s(R){if(R===\"highp\"){if(r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.HIGH_FLOAT).precision\u003e0\u0026\u0026r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.HIGH_FLOAT).precision\u003e0)return\"highp\";R=\"mediump\"}return R===\"mediump\"\u0026\u0026r.getShaderPrecisionFormat(r.VERTEX_SHADER,r.MEDIUM_FLOAT).precision\u003e0\u0026\u0026r.getShaderPrecisionFormat(r.FRAGMENT_SHADER,r.MEDIUM_FLOAT).precision\u003e0?\"mediump\":\"lowp\"}const o=typeof WebGL2RenderingContext!=\"undefined\"\u0026\u0026r instanceof WebGL2RenderingContext||typeof WebGL2ComputeRenderingContext!=\"undefined\"\u0026\u0026r instanceof WebGL2ComputeRenderingContext;let a=t.precision!==void 0?t.precision:\"highp\";const l=s(a);l!==a\u0026\u0026(console.warn(\"THREE.WebGLRenderer:\",a,\"not supported, using\",l,\"instead.\"),a=l);const c=o||e.has(\"WEBGL_draw_buffers\"),u=t.logarithmicDepthBuffer===!0,h=r.getParameter(r.MAX_TEXTURE_IMAGE_UNITS),f=r.getParameter(r.MAX_VERTEX_TEXTURE_IMAGE_UNITS),m=r.getParameter(r.MAX_TEXTURE_SIZE),_=r.getParameter(r.MAX_CUBE_MAP_TEXTURE_SIZE),d=r.getParameter(r.MAX_VERTEX_ATTRIBS),p=r.getParameter(r.MAX_VERTEX_UNIFORM_VECTORS),g=r.getParameter(r.MAX_VARYING_VECTORS),S=r.getParameter(r.MAX_FRAGMENT_UNIFORM_VECTORS),A=f\u003e0,b=o||e.has(\"OES_texture_float\"),v=A\u0026\u0026b,w=o?r.getParameter(r.MAX_SAMPLES):0;return{isWebGL2:o,drawBuffers:c,getMaxAnisotropy:n,getMaxPrecision:s,precision:a,logarithmicDepthBuffer:u,maxTextures:h,maxVertexTextures:f,maxTextureSize:m,maxCubemapSize:_,maxAttributes:d,maxVertexUniforms:p,maxVaryings:g,maxFragmentUniforms:S,vertexTextures:A,floatFragmentTextures:b,floatVertexTextures:v,maxSamples:w}}function S_(r){const e=this;let t=null,i=0,n=!1,s=!1;const o=new an,a=new li,l={value:null,needsUpdate:!1};this.uniform=l,this.numPlanes=0,this.numIntersection=0,this.init=function(h,f,m){const _=h.length!==0||f||i!==0||n;return n=f,t=u(h,m,0),i=h.length,_},this.beginShadows=function(){s=!0,u(null)},this.endShadows=function(){s=!1,c()},this.setState=function(h,f,m){const _=h.clippingPlanes,d=h.clipIntersection,p=h.clipShadows,g=r.get(h);if(!n||_===null||_.length===0||s\u0026\u0026!p)s?u(null):c();else{const S=s?0:i,A=S*4;let b=g.clippingState||null;l.value=b,b=u(_,f,A,m);for(let v=0;v!==A;++v)b[v]=t[v];g.clippingState=b,this.numIntersection=d?this.numPlanes:0,this.numPlanes+=S}};function c(){l.value!==t\u0026\u0026(l.value=t,l.needsUpdate=i\u003e0),e.numPlanes=i,e.numIntersection=0}function u(h,f,m,_){const d=h!==null?h.length:0;let p=null;if(d!==0){if(p=l.value,_!==!0||p===null){const g=m+d*4,S=f.matrixWorldInverse;a.getNormalMatrix(S),(p===null||p.length\u003cg)\u0026\u0026(p=new Float32Array(g));for(let A=0,b=m;A!==d;++A,b+=4)o.copy(h[A]).applyMatrix4(S,a),o.normal.toArray(p,b),p[b+3]=o.constant}l.value=p,l.needsUpdate=!0}return e.numPlanes=d,e.numIntersection=0,p}}let zn;class Gu{static getDataURL(e){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement==\"undefined\")return e.src;let t;if(e instanceof HTMLCanvasElement)t=e;else{zn===void 0\u0026\u0026(zn=Us(\"canvas\")),zn.width=e.width,zn.height=e.height;const i=zn.getContext(\"2d\");e instanceof ImageData?i.putImageData(e,0,0):i.drawImage(e,0,0,e.width,e.height),t=zn}return t.width\u003e2048||t.height\u003e2048?(console.warn(\"THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons\",e),t.toDataURL(\"image/jpeg\",.6)):t.toDataURL(\"image/png\")}static sRGBToLinear(e){if(typeof HTMLImageElement!=\"undefined\"\u0026\u0026e instanceof HTMLImageElement||typeof HTMLCanvasElement!=\"undefined\"\u0026\u0026e instanceof HTMLCanvasElement||typeof ImageBitmap!=\"undefined\"\u0026\u0026e instanceof ImageBitmap){const t=Us(\"canvas\");t.width=e.width,t.height=e.height;const i=t.getContext(\"2d\");i.drawImage(e,0,0,e.width,e.height);const n=i.getImageData(0,0,e.width,e.height),s=n.data;for(let o=0;o\u003cs.length;o++)s[o]=mn(s[o]/255)*255;return i.putImageData(n,0,0),t}else if(e.data){const t=e.data.slice(0);for(let i=0;i\u003ct.length;i++)t instanceof Uint8Array||t instanceof Uint8ClampedArray?t[i]=Math.floor(mn(t[i]/255)*255):t[i]=mn(t[i]);return{data:t,width:e.width,height:e.height}}else return console.warn(\"THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.\"),e}}class ku{constructor(e=null){this.isSource=!0,this.uuid=hr(),this.data=e,this.version=0}set needsUpdate(e){e===!0\u0026\u0026this.version++}toJSON(e){const t=e===void 0||typeof e==\"string\";if(!t\u0026\u0026e.images[this.uuid]!==void 0)return e.images[this.uuid];const i={uuid:this.uuid,url:\"\"},n=this.data;if(n!==null){let s;if(Array.isArray(n)){s=[];for(let o=0,a=n.length;o\u003ca;o++)n[o].isDataTexture?s.push(No(n[o].image)):s.push(No(n[o]))}else s=No(n);i.url=s}return t||(e.images[this.uuid]=i),i}}function No(r){return typeof HTMLImageElement!=\"undefined\"\u0026\u0026r instanceof HTMLImageElement||typeof HTMLCanvasElement!=\"undefined\"\u0026\u0026r instanceof HTMLCanvasElement||typeof ImageBitmap!=\"undefined\"\u0026\u0026r instanceof ImageBitmap?Gu.getDataURL(r):r.data?{data:Array.prototype.slice.call(r.data),width:r.width,height:r.height,type:r.data.constructor.name}:(console.warn(\"THREE.Texture: Unable to serialize Texture.\"),{})}let M_=0;class Qt extends fr{constructor(e=Qt.DEFAULT_IMAGE,t=Qt.DEFAULT_MAPPING,i=Jt,n=Jt,s=Ut,o=Bs,a=Kt,l=vn,c=1,u=yn){super();this.isTexture=!0,Object.defineProperty(this,\"id\",{value:M_++}),this.uuid=hr(),this.name=\"\",this.source=new ku(e),this.mipmaps=[],this.mapping=t,this.wrapS=i,this.wrapT=n,this.magFilter=s,this.minFilter=o,this.anisotropy=c,this.format=a,this.internalFormat=null,this.type=l,this.offset=new fe(0,0),this.repeat=new fe(1,1),this.center=new fe(0,0),this.rotation=0,this.matrixAutoUpdate=!0,this.matrix=new li,this.generateMipmaps=!0,this.premultiplyAlpha=!1,this.flipY=!0,this.unpackAlignment=4,this.encoding=u,this.userData={},this.version=0,this.onUpdate=null,this.isRenderTargetTexture=!1,this.needsPMREMUpdate=!1}get image(){return this.source.data}set image(e){this.source.data=e}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(e){return this.name=e.name,this.source=e.source,this.mipmaps=e.mipmaps.slice(0),this.mapping=e.mapping,this.wrapS=e.wrapS,this.wrapT=e.wrapT,this.magFilter=e.magFilter,this.minFilter=e.minFilter,this.anisotropy=e.anisotropy,this.format=e.format,this.internalFormat=e.internalFormat,this.type=e.type,this.offset.copy(e.offset),this.repeat.copy(e.repeat),this.center.copy(e.center),this.rotation=e.rotation,this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrix.copy(e.matrix),this.generateMipmaps=e.generateMipmaps,this.premultiplyAlpha=e.premultiplyAlpha,this.flipY=e.flipY,this.unpackAlignment=e.unpackAlignment,this.encoding=e.encoding,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}toJSON(e){const t=e===void 0||typeof e==\"string\";if(!t\u0026\u0026e.textures[this.uuid]!==void 0)return e.textures[this.uuid];const i={metadata:{version:4.5,type:\"Texture\",generator:\"Texture.toJSON\"},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,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,type:this.type,encoding:this.encoding,minFilter:this.minFilter,magFilter:this.magFilter,anisotropy:this.anisotropy,flipY:this.flipY,premultiplyAlpha:this.premultiplyAlpha,unpackAlignment:this.unpackAlignment};return JSON.stringify(this.userData)!==\"{}\"\u0026\u0026(i.userData=this.userData),t||(e.textures[this.uuid]=i),i}dispose(){this.dispatchEvent({type:\"dispose\"})}transformUv(e){if(this.mapping!==Fc)return e;if(e.applyMatrix3(this.matrix),e.x\u003c0||e.x\u003e1)switch(this.wrapS){case Jo:e.x=e.x-Math.floor(e.x);break;case Jt:e.x=e.x\u003c0?0:1;break;case Ko:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x=e.x-Math.floor(e.x);break}if(e.y\u003c0||e.y\u003e1)switch(this.wrapT){case Jo:e.y=e.y-Math.floor(e.y);break;case Jt:e.y=e.y\u003c0?0:1;break;case Ko:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y=e.y-Math.floor(e.y);break}return this.flipY\u0026\u0026(e.y=1-e.y),e}set needsUpdate(e){e===!0\u0026\u0026(this.version++,this.source.needsUpdate=!0)}}Qt.DEFAULT_IMAGE=null;Qt.DEFAULT_MAPPING=Fc;class qi extends fr{constructor(e,t,i={}){super();this.isWebGLRenderTarget=!0,this.width=e,this.height=t,this.depth=1,this.scissor=new dt(0,0,e,t),this.scissorTest=!1,this.viewport=new dt(0,0,e,t);const n={width:e,height:t,depth:1};this.texture=new Qt(n,i.mapping,i.wrapS,i.wrapT,i.magFilter,i.minFilter,i.format,i.type,i.anisotropy,i.encoding),this.texture.isRenderTargetTexture=!0,this.texture.flipY=!1,this.texture.generateMipmaps=i.generateMipmaps!==void 0?i.generateMipmaps:!1,this.texture.internalFormat=i.internalFormat!==void 0?i.internalFormat:null,this.texture.minFilter=i.minFilter!==void 0?i.minFilter:Ut,this.depthBuffer=i.depthBuffer!==void 0?i.depthBuffer:!0,this.stencilBuffer=i.stencilBuffer!==void 0?i.stencilBuffer:!1,this.depthTexture=i.depthTexture!==void 0?i.depthTexture:null,this.samples=i.samples!==void 0?i.samples:0}setSize(e,t,i=1){(this.width!==e||this.height!==t||this.depth!==i)\u0026\u0026(this.width=e,this.height=t,this.depth=i,this.texture.image.width=e,this.texture.image.height=t,this.texture.image.depth=i,this.dispose()),this.viewport.set(0,0,e,t),this.scissor.set(0,0,e,t)}clone(){return new this.constructor().copy(this)}copy(e){this.width=e.width,this.height=e.height,this.depth=e.depth,this.viewport.copy(e.viewport),this.texture=e.texture.clone(),this.texture.isRenderTargetTexture=!0;const t=Object.assign({},e.texture.image);return this.texture.source=new ku(t),this.depthBuffer=e.depthBuffer,this.stencilBuffer=e.stencilBuffer,e.depthTexture!==null\u0026\u0026(this.depthTexture=e.depthTexture.clone()),this.samples=e.samples,this}dispose(){this.dispatchEvent({type:\"dispose\"})}}class Hu extends tt{constructor(){super();this.isCamera=!0,this.type=\"Camera\",this.matrixWorldInverse=new ct,this.projectionMatrix=new ct,this.projectionMatrixInverse=new ct}copy(e,t){return super.copy(e,t),this.matrixWorldInverse.copy(e.matrixWorldInverse),this.projectionMatrix.copy(e.projectionMatrix),this.projectionMatrixInverse.copy(e.projectionMatrixInverse),this}getWorldDirection(e){this.updateWorldMatrix(!0,!1);const t=this.matrixWorld.elements;return e.set(-t[8],-t[9],-t[10]).normalize()}updateMatrixWorld(e){super.updateMatrixWorld(e),this.matrixWorldInverse.copy(this.matrixWorld).invert()}updateWorldMatrix(e,t){super.updateWorldMatrix(e,t),this.matrixWorldInverse.copy(this.matrixWorld).invert()}clone(){return new this.constructor().copy(this)}}class zt extends Hu{constructor(e=50,t=1,i=.1,n=2e3){super();this.isPerspectiveCamera=!0,this.type=\"PerspectiveCamera\",this.fov=e,this.zoom=1,this.near=i,this.far=n,this.focus=10,this.aspect=t,this.view=null,this.filmGauge=35,this.filmOffset=0,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.fov=e.fov,this.zoom=e.zoom,this.near=e.near,this.far=e.far,this.focus=e.focus,this.aspect=e.aspect,this.view=e.view===null?null:Object.assign({},e.view),this.filmGauge=e.filmGauge,this.filmOffset=e.filmOffset,this}setFocalLength(e){const t=.5*this.getFilmHeight()/e;this.fov=qa*2*Math.atan(t),this.updateProjectionMatrix()}getFocalLength(){const e=Math.tan(Js*.5*this.fov);return .5*this.getFilmHeight()/e}getEffectiveFOV(){return qa*2*Math.atan(Math.tan(Js*.5*this.fov)/this.zoom)}getFilmWidth(){return this.filmGauge*Math.min(this.aspect,1)}getFilmHeight(){return this.filmGauge/Math.max(this.aspect,1)}setViewOffset(e,t,i,n,s,o){this.aspect=e/t,this.view===null\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=n,this.view.width=s,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=this.near;let t=e*Math.tan(Js*.5*this.fov)/this.zoom,i=2*t,n=this.aspect*i,s=-.5*n;const o=this.view;if(this.view!==null\u0026\u0026this.view.enabled){const l=o.fullWidth,c=o.fullHeight;s+=o.offsetX*n/l,t-=o.offsetY*i/c,n*=o.width/l,i*=o.height/c}const a=this.filmOffset;a!==0\u0026\u0026(s+=e*a/this.getFilmWidth()),this.projectionMatrix.makePerspective(s,s+n,t,t-i,e,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.fov=this.fov,t.object.zoom=this.zoom,t.object.near=this.near,t.object.far=this.far,t.object.focus=this.focus,t.object.aspect=this.aspect,this.view!==null\u0026\u0026(t.object.view=Object.assign({},this.view)),t.object.filmGauge=this.filmGauge,t.object.filmOffset=this.filmOffset,t}}const Bn=90,Gn=1;class E_ extends tt{constructor(e,t,i){super();if(this.type=\"CubeCamera\",i.isWebGLCubeRenderTarget!==!0){console.error(\"THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.\");return}this.renderTarget=i;const n=new zt(Bn,Gn,e,t);n.layers=this.layers,n.up.set(0,-1,0),n.lookAt(new L(1,0,0)),this.add(n);const s=new zt(Bn,Gn,e,t);s.layers=this.layers,s.up.set(0,-1,0),s.lookAt(new L(-1,0,0)),this.add(s);const o=new zt(Bn,Gn,e,t);o.layers=this.layers,o.up.set(0,0,1),o.lookAt(new L(0,1,0)),this.add(o);const a=new zt(Bn,Gn,e,t);a.layers=this.layers,a.up.set(0,0,-1),a.lookAt(new L(0,-1,0)),this.add(a);const l=new zt(Bn,Gn,e,t);l.layers=this.layers,l.up.set(0,-1,0),l.lookAt(new L(0,0,1)),this.add(l);const c=new zt(Bn,Gn,e,t);c.layers=this.layers,c.up.set(0,-1,0),c.lookAt(new L(0,0,-1)),this.add(c)}update(e,t){this.parent===null\u0026\u0026this.updateMatrixWorld();const i=this.renderTarget,[n,s,o,a,l,c]=this.children,u=e.getRenderTarget(),h=e.toneMapping,f=e.xr.enabled;e.toneMapping=Mi,e.xr.enabled=!1;const m=i.texture.generateMipmaps;i.texture.generateMipmaps=!1,e.setRenderTarget(i,0),e.render(t,n),e.setRenderTarget(i,1),e.render(t,s),e.setRenderTarget(i,2),e.render(t,o),e.setRenderTarget(i,3),e.render(t,a),e.setRenderTarget(i,4),e.render(t,l),i.texture.generateMipmaps=m,e.setRenderTarget(i,5),e.render(t,c),e.setRenderTarget(u),e.toneMapping=h,e.xr.enabled=f,i.texture.needsPMREMUpdate=!0}}class Vu extends Qt{constructor(e,t,i,n,s,o,a,l,c,u){e=e!==void 0?e:[],t=t!==void 0?t:er;super(e,t,i,n,s,o,a,l,c,u);this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}}class b_ extends qi{constructor(e,t={}){super(e,e,t);this.isWebGLCubeRenderTarget=!0;const i={width:e,height:e,depth:1},n=[i,i,i,i,i,i];this.texture=new Vu(n,t.mapping,t.wrapS,t.wrapT,t.magFilter,t.minFilter,t.format,t.type,t.anisotropy,t.encoding),this.texture.isRenderTargetTexture=!0,this.texture.generateMipmaps=t.generateMipmaps!==void 0?t.generateMipmaps:!1,this.texture.minFilter=t.minFilter!==void 0?t.minFilter:Ut}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.encoding=t.encoding,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;const i={uniforms:{tEquirect:{value:null}},vertexShader:`\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 \u003cbegin_vertex\u003e\n\t\t\t\t\t#include \u003cproject_vertex\u003e\n\n\t\t\t\t}\n\t\t\t`,fragmentShader:`\n\n\t\t\t\tuniform sampler2D tEquirect;\n\n\t\t\t\tvarying vec3 vWorldDirection;\n\n\t\t\t\t#include \u003ccommon\u003e\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=new Yr(5,5,5),s=new Sn({name:\"CubemapFromEquirect\",uniforms:ur(i.uniforms),vertexShader:i.vertexShader,fragmentShader:i.fragmentShader,side:jt,blending:Vi});s.uniforms.tEquirect.value=t;const o=new xt(n,s),a=t.minFilter;return t.minFilter===Bs\u0026\u0026(t.minFilter=Ut),new E_(1,10,this).update(e,o),t.minFilter=a,o.geometry.dispose(),o.material.dispose(),this}clear(e,t,i,n){const s=e.getRenderTarget();for(let o=0;o\u003c6;o++)e.setRenderTarget(this,o),e.clear(t,i,n);e.setRenderTarget(s)}}function w_(r){let e=new WeakMap;function t(o,a){return a===Yo?o.mapping=er:a===Zo\u0026\u0026(o.mapping=tr),o}function i(o){if(o\u0026\u0026o.isTexture\u0026\u0026o.isRenderTargetTexture===!1){const a=o.mapping;if(a===Yo||a===Zo)if(e.has(o)){const l=e.get(o).texture;return t(l,o.mapping)}else{const l=o.image;if(l\u0026\u0026l.height\u003e0){const c=new b_(l.height/2);return c.fromEquirectangularTexture(r,o),e.set(o,c),o.addEventListener(\"dispose\",n),t(c.texture,o.mapping)}else return null}}return o}function n(o){const a=o.target;a.removeEventListener(\"dispose\",n);const l=e.get(a);l!==void 0\u0026\u0026(e.delete(a),l.dispose())}function s(){e=new WeakMap}return{get:i,dispose:s}}class Wu extends Hu{constructor(e=-1,t=1,i=1,n=-1,s=.1,o=2e3){super();this.isOrthographicCamera=!0,this.type=\"OrthographicCamera\",this.zoom=1,this.view=null,this.left=e,this.right=t,this.top=i,this.bottom=n,this.near=s,this.far=o,this.updateProjectionMatrix()}copy(e,t){return super.copy(e,t),this.left=e.left,this.right=e.right,this.top=e.top,this.bottom=e.bottom,this.near=e.near,this.far=e.far,this.zoom=e.zoom,this.view=e.view===null?null:Object.assign({},e.view),this}setViewOffset(e,t,i,n,s,o){this.view===null\u0026\u0026(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1}),this.view.enabled=!0,this.view.fullWidth=e,this.view.fullHeight=t,this.view.offsetX=i,this.view.offsetY=n,this.view.width=s,this.view.height=o,this.updateProjectionMatrix()}clearViewOffset(){this.view!==null\u0026\u0026(this.view.enabled=!1),this.updateProjectionMatrix()}updateProjectionMatrix(){const e=(this.right-this.left)/(2*this.zoom),t=(this.top-this.bottom)/(2*this.zoom),i=(this.right+this.left)/2,n=(this.top+this.bottom)/2;let s=i-e,o=i+e,a=n+t,l=n-t;if(this.view!==null\u0026\u0026this.view.enabled){const c=(this.right-this.left)/this.view.fullWidth/this.zoom,u=(this.top-this.bottom)/this.view.fullHeight/this.zoom;s+=c*this.view.offsetX,o=s+c*this.view.width,a-=u*this.view.offsetY,l=a-u*this.view.height}this.projectionMatrix.makeOrthographic(s,o,a,l,this.near,this.far),this.projectionMatrixInverse.copy(this.projectionMatrix).invert()}toJSON(e){const t=super.toJSON(e);return t.object.zoom=this.zoom,t.object.left=this.left,t.object.right=this.right,t.object.top=this.top,t.object.bottom=this.bottom,t.object.near=this.near,t.object.far=this.far,this.view!==null\u0026\u0026(t.object.view=Object.assign({},this.view)),t}}const Yn=4,Ql=[.125,.215,.35,.446,.526,.582],cn=20,Oo=new Wu,ec=new Le;let Uo=null;const ln=(1+Math.sqrt(5))/2,kn=1/ln,tc=[new L(1,1,1),new L(-1,1,1),new L(1,1,-1),new L(-1,1,-1),new L(0,ln,kn),new L(0,ln,-kn),new L(kn,0,ln),new L(-kn,0,ln),new L(ln,kn,0),new L(-ln,kn,0)];class ic{constructor(e){this._renderer=e,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)}fromScene(e,t=0,i=.1,n=100){Uo=this._renderer.getRenderTarget(),this._setSize(256);const s=this._allocateTargets();return s.depthBuffer=!0,this._sceneToCubeUV(e,i,n,s),t\u003e0\u0026\u0026this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null\u0026\u0026(this._cubemapMaterial=sc(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null\u0026\u0026(this._equirectMaterial=rc(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null\u0026\u0026this._cubemapMaterial.dispose(),this._equirectMaterial!==null\u0026\u0026this._equirectMaterial.dispose()}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=Math.pow(2,this._lodMax)}_dispose(){this._blurMaterial!==null\u0026\u0026this._blurMaterial.dispose(),this._pingPongRenderTarget!==null\u0026\u0026this._pingPongRenderTarget.dispose();for(let e=0;e\u003cthis._lodPlanes.length;e++)this._lodPlanes[e].dispose()}_cleanup(e){this._renderer.setRenderTarget(Uo),e.scissorTest=!1,gs(e,0,0,e.width,e.height)}_fromTexture(e,t){e.mapping===er||e.mapping===tr?this._setSize(e.image.length===0?16:e.image[0].width||e.image[0].image.width):this._setSize(e.image.width/4),Uo=this._renderer.getRenderTarget();const i=t||this._allocateTargets();return this._textureToCubeUV(e,i),this._applyPMREM(i),this._cleanup(i),i}_allocateTargets(){const e=3*Math.max(this._cubeSize,112),t=4*this._cubeSize,i={magFilter:Ut,minFilter:Ut,generateMipmaps:!1,type:Fr,format:Kt,encoding:yn,depthBuffer:!1},n=nc(e,t,i);if(this._pingPongRenderTarget===null||this._pingPongRenderTarget.width!==e){this._pingPongRenderTarget!==null\u0026\u0026this._dispose(),this._pingPongRenderTarget=nc(e,t,i);const{_lodMax:s}=this;({sizeLods:this._sizeLods,lodPlanes:this._lodPlanes,sigmas:this._sigmas}=T_(s)),this._blurMaterial=A_(s,e,t)}return n}_compileMaterial(e){const t=new xt(this._lodPlanes[0],e);this._renderer.compile(t,Oo)}_sceneToCubeUV(e,t,i,n){const a=new zt(90,1,t,i),l=[1,-1,1,1,1,1],c=[1,1,1,-1,-1,-1],u=this._renderer,h=u.autoClear,f=u.toneMapping;u.getClearColor(ec),u.toneMapping=Mi,u.autoClear=!1;const m=new Ci({name:\"PMREM.Background\",side:jt,depthWrite:!1,depthTest:!1}),_=new xt(new Yr,m);let d=!1;const p=e.background;p?p.isColor\u0026\u0026(m.color.copy(p),e.background=null,d=!0):(m.color.copy(ec),d=!0);for(let g=0;g\u003c6;g++){const S=g%3;S===0?(a.up.set(0,l[g],0),a.lookAt(c[g],0,0)):S===1?(a.up.set(0,0,l[g]),a.lookAt(0,c[g],0)):(a.up.set(0,l[g],0),a.lookAt(0,0,c[g]));const A=this._cubeSize;gs(n,S*A,g\u003e2?A:0,A,A),u.setRenderTarget(n),d\u0026\u0026u.render(_,a),u.render(e,a)}_.geometry.dispose(),_.material.dispose(),u.toneMapping=f,u.autoClear=h,e.background=p}_textureToCubeUV(e,t){const i=this._renderer,n=e.mapping===er||e.mapping===tr;n?(this._cubemapMaterial===null\u0026\u0026(this._cubemapMaterial=sc()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null\u0026\u0026(this._equirectMaterial=rc());const s=n?this._cubemapMaterial:this._equirectMaterial,o=new xt(this._lodPlanes[0],s),a=s.uniforms;a.envMap.value=e;const l=this._cubeSize;gs(t,0,0,3*l,2*l),i.setRenderTarget(t),i.render(o,Oo)}_applyPMREM(e){const t=this._renderer,i=t.autoClear;t.autoClear=!1;for(let n=1;n\u003cthis._lodPlanes.length;n++){const s=Math.sqrt(this._sigmas[n]*this._sigmas[n]-this._sigmas[n-1]*this._sigmas[n-1]),o=tc[(n-1)%tc.length];this._blur(e,n-1,n,s,o)}t.autoClear=i}_blur(e,t,i,n,s){const o=this._pingPongRenderTarget;this._halfBlur(e,o,t,i,n,\"latitudinal\",s),this._halfBlur(o,e,i,i,n,\"longitudinal\",s)}_halfBlur(e,t,i,n,s,o,a){const l=this._renderer,c=this._blurMaterial;o!==\"latitudinal\"\u0026\u0026o!==\"longitudinal\"\u0026\u0026console.error(\"blur direction must be either latitudinal or longitudinal!\");const u=3,h=new xt(this._lodPlanes[n],c),f=c.uniforms,m=this._sizeLods[i]-1,_=isFinite(s)?Math.PI/(2*m):2*Math.PI/(2*cn-1),d=s/_,p=isFinite(s)?1+Math.floor(u*d):cn;p\u003ecn\u0026\u0026console.warn(`sigmaRadians, ${s}, is too large and will clip, as it requested ${p} samples when the maximum is set to ${cn}`);const g=[];let S=0;for(let R=0;R\u003ccn;++R){const x=R/d,E=Math.exp(-x*x/2);g.push(E),R===0?S+=E:R\u003cp\u0026\u0026(S+=2*E)}for(let R=0;R\u003cg.length;R++)g[R]=g[R]/S;f.envMap.value=e.texture,f.samples.value=p,f.weights.value=g,f.latitudinal.value=o===\"latitudinal\",a\u0026\u0026(f.poleAxis.value=a);const{_lodMax:A}=this;f.dTheta.value=_,f.mipInt.value=A-i;const b=this._sizeLods[n],v=3*b*(n\u003eA-Yn?n-A+Yn:0),w=4*(this._cubeSize-b);gs(t,v,w,3*b,2*b),l.setRenderTarget(t),l.render(h,Oo)}}function T_(r){const e=[],t=[],i=[];let n=r;const s=r-Yn+1+Ql.length;for(let o=0;o\u003cs;o++){const a=Math.pow(2,n);t.push(a);let l=1/a;o\u003er-Yn?l=Ql[o-r+Yn-1]:o===0\u0026\u0026(l=0),i.push(l);const c=1/(a-2),u=-c,h=1+c,f=[u,u,h,u,h,h,u,u,h,h,u,h],m=6,_=6,d=3,p=2,g=1,S=new Float32Array(d*_*m),A=new Float32Array(p*_*m),b=new Float32Array(g*_*m);for(let w=0;w\u003cm;w++){const R=w%3*2/3-1,x=w\u003e2?0:-1,E=[R,x,0,R+2/3,x,0,R+2/3,x+1,0,R,x,0,R+2/3,x+1,0,R,x+1,0];S.set(E,d*_*w),A.set(f,p*_*w);const I=[w,w,w,w,w,w];b.set(I,g*_*w)}const v=new Ri;v.setAttribute(\"position\",new ci(S,d)),v.setAttribute(\"uv\",new ci(A,p)),v.setAttribute(\"faceIndex\",new ci(b,g)),e.push(v),n\u003eYn\u0026\u0026n--}return{lodPlanes:e,sizeLods:t,sigmas:i}}function nc(r,e,t){const i=new qi(r,e,t);return i.texture.mapping=zs,i.texture.name=\"PMREM.cubeUv\",i.scissorTest=!0,i}function gs(r,e,t,i,n){r.viewport.set(e,t,i,n),r.scissor.set(e,t,i,n)}function A_(r,e,t){const i=new Float32Array(cn),n=new L(0,1,0);return new Sn({name:\"SphericalGaussianBlur\",defines:{n:cn,CUBEUV_TEXEL_WIDTH:1/e,CUBEUV_TEXEL_HEIGHT:1/t,CUBEUV_MAX_MIP:`${r}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:i},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:n}},vertexShader:Ra(),fragmentShader:`\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 \u003ccube_uv_reflection_fragment\u003e\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 \u003c n; i++ ) {\n\n\t\t\t\t\tif ( i \u003e= 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`,blending:Vi,depthTest:!1,depthWrite:!1})}function rc(){return new Sn({name:\"EquirectangularToCubeUV\",uniforms:{envMap:{value:null}},vertexShader:Ra(),fragmentShader:`\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 \u003ccommon\u003e\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`,blending:Vi,depthTest:!1,depthWrite:!1})}function sc(){return new Sn({name:\"CubemapToCubeUV\",uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Ra(),fragmentShader:`\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`,blending:Vi,depthTest:!1,depthWrite:!1})}function Ra(){return`\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`}function R_(r){let e=new WeakMap,t=null;function i(a){if(a\u0026\u0026a.isTexture){const l=a.mapping,c=l===Yo||l===Zo,u=l===er||l===tr;if(c||u)if(a.isRenderTargetTexture\u0026\u0026a.needsPMREMUpdate===!0){a.needsPMREMUpdate=!1;let h=e.get(a);return t===null\u0026\u0026(t=new ic(r)),h=c?t.fromEquirectangular(a,h):t.fromCubemap(a,h),e.set(a,h),h.texture}else{if(e.has(a))return e.get(a).texture;{const h=a.image;if(c\u0026\u0026h\u0026\u0026h.height\u003e0||u\u0026\u0026h\u0026\u0026n(h)){t===null\u0026\u0026(t=new ic(r));const f=c?t.fromEquirectangular(a):t.fromCubemap(a);return e.set(a,f),a.addEventListener(\"dispose\",s),f.texture}else return null}}}return a}function n(a){let l=0;const c=6;for(let u=0;u\u003cc;u++)a[u]!==void 0\u0026\u0026l++;return l===c}function s(a){const l=a.target;l.removeEventListener(\"dispose\",s);const c=e.get(l);c!==void 0\u0026\u0026(e.delete(l),c.dispose())}function o(){e=new WeakMap,t!==null\u0026\u0026(t.dispose(),t=null)}return{get:i,dispose:o}}function C_(r){const e={};function t(i){if(e[i]!==void 0)return e[i];let n;switch(i){case\"WEBGL_depth_texture\":n=r.getExtension(\"WEBGL_depth_texture\")||r.getExtension(\"MOZ_WEBGL_depth_texture\")||r.getExtension(\"WEBKIT_WEBGL_depth_texture\");break;case\"EXT_texture_filter_anisotropic\":n=r.getExtension(\"EXT_texture_filter_anisotropic\")||r.getExtension(\"MOZ_EXT_texture_filter_anisotropic\")||r.getExtension(\"WEBKIT_EXT_texture_filter_anisotropic\");break;case\"WEBGL_compressed_texture_s3tc\":n=r.getExtension(\"WEBGL_compressed_texture_s3tc\")||r.getExtension(\"MOZ_WEBGL_compressed_texture_s3tc\")||r.getExtension(\"WEBKIT_WEBGL_compressed_texture_s3tc\");break;case\"WEBGL_compressed_texture_pvrtc\":n=r.getExtension(\"WEBGL_compressed_texture_pvrtc\")||r.getExtension(\"WEBKIT_WEBGL_compressed_texture_pvrtc\");break;default:n=r.getExtension(i)}return e[i]=n,n}return{has:function(i){return t(i)!==null},init:function(i){i.isWebGL2?t(\"EXT_color_buffer_float\"):(t(\"WEBGL_depth_texture\"),t(\"OES_texture_float\"),t(\"OES_texture_half_float\"),t(\"OES_texture_half_float_linear\"),t(\"OES_standard_derivatives\"),t(\"OES_element_index_uint\"),t(\"OES_vertex_array_object\"),t(\"ANGLE_instanced_arrays\")),t(\"OES_texture_float_linear\"),t(\"EXT_color_buffer_half_float\"),t(\"WEBGL_multisampled_render_to_texture\")},get:function(i){const n=t(i);return n===null\u0026\u0026console.warn(\"THREE.WebGLRenderer: \"+i+\" extension not supported.\"),n}}}function P_(r,e,t,i){const n={},s=new WeakMap;function o(h){const f=h.target;f.index!==null\u0026\u0026e.remove(f.index);for(const _ in f.attributes)e.remove(f.attributes[_]);f.removeEventListener(\"dispose\",o),delete n[f.id];const m=s.get(f);m\u0026\u0026(e.remove(m),s.delete(f)),i.releaseStatesOfGeometry(f),f.isInstancedBufferGeometry===!0\u0026\u0026delete f._maxInstanceCount,t.memory.geometries--}function a(h,f){return n[f.id]===!0||(f.addEventListener(\"dispose\",o),n[f.id]=!0,t.memory.geometries++),f}function l(h){const f=h.attributes;for(const _ in f)e.update(f[_],r.ARRAY_BUFFER);const m=h.morphAttributes;for(const _ in m){const d=m[_];for(let p=0,g=d.length;p\u003cg;p++)e.update(d[p],r.ARRAY_BUFFER)}}function c(h){const f=[],m=h.index,_=h.attributes.position;let d=0;if(m!==null){const S=m.array;d=m.version;for(let A=0,b=S.length;A\u003cb;A+=3){const v=S[A+0],w=S[A+1],R=S[A+2];f.push(v,w,w,R,R,v)}}else{const S=_.array;d=_.version;for(let A=0,b=S.length/3-1;A\u003cb;A+=3){const v=A+0,w=A+1,R=A+2;f.push(v,w,w,R,R,v)}}const p=new(Bu(f)?Uu:Ou)(f,1);p.version=d;const g=s.get(h);g\u0026\u0026e.remove(g),s.set(h,p)}function u(h){const f=s.get(h);if(f){const m=h.index;m!==null\u0026\u0026f.version\u003cm.version\u0026\u0026c(h)}else c(h);return s.get(h)}return{get:a,update:l,getWireframeAttribute:u}}function L_(r,e,t,i){const n=i.isWebGL2;let s;function o(f){s=f}let a,l;function c(f){a=f.type,l=f.bytesPerElement}function u(f,m){r.drawElements(s,m,a,f*l),t.update(m,s,1)}function h(f,m,_){if(_===0)return;let d,p;if(n)d=r,p=\"drawElementsInstanced\";else if(d=e.get(\"ANGLE_instanced_arrays\"),p=\"drawElementsInstancedANGLE\",d===null){console.error(\"THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.\");return}d[p](s,m,a,f*l,_),t.update(m,s,_)}this.setMode=o,this.setIndex=c,this.render=u,this.renderInstances=h}function D_(r){const e={geometries:0,textures:0},t={frame:0,calls:0,triangles:0,points:0,lines:0};function i(s,o,a){switch(t.calls++,o){case r.TRIANGLES:t.triangles+=a*(s/3);break;case r.LINES:t.lines+=a*(s/2);break;case r.LINE_STRIP:t.lines+=a*(s-1);break;case r.LINE_LOOP:t.lines+=a*s;break;case r.POINTS:t.points+=a*s;break;default:console.error(\"THREE.WebGLInfo: Unknown draw mode:\",o);break}}function n(){t.frame++,t.calls=0,t.triangles=0,t.points=0,t.lines=0}return{memory:e,render:t,programs:null,autoReset:!0,reset:n,update:i}}class Xu extends Qt{constructor(e=null,t=1,i=1,n=1){super(null);this.isDataArrayTexture=!0,this.image={data:e,width:t,height:i,depth:n},this.magFilter=Mt,this.minFilter=Mt,this.wrapR=Jt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}function F_(r,e){return r[0]-e[0]}function I_(r,e){return Math.abs(e[1])-Math.abs(r[1])}function zo(r,e){let t=1;const i=e.isInterleavedBufferAttribute?e.data.array:e.array;i instanceof Int8Array?t=127:i instanceof Int16Array?t=32767:i instanceof Int32Array?t=2147483647:console.error(\"THREE.WebGLMorphtargets: Unsupported morph attribute data type: \",i),r.divideScalar(t)}function N_(r,e,t){const i={},n=new Float32Array(8),s=new WeakMap,o=new dt,a=[];for(let c=0;c\u003c8;c++)a[c]=[c,0];function l(c,u,h,f){const m=c.morphTargetInfluences;if(e.isWebGL2===!0){const d=u.morphAttributes.position||u.morphAttributes.normal||u.morphAttributes.color,p=d!==void 0?d.length:0;let g=s.get(u);if(g===void 0||g.count!==p){let U=function(){P.dispose(),s.delete(u),u.removeEventListener(\"dispose\",U)};var _=U;g!==void 0\u0026\u0026g.texture.dispose();const b=u.morphAttributes.position!==void 0,v=u.morphAttributes.normal!==void 0,w=u.morphAttributes.color!==void 0,R=u.morphAttributes.position||[],x=u.morphAttributes.normal||[],E=u.morphAttributes.color||[];let I=0;b===!0\u0026\u0026(I=1),v===!0\u0026\u0026(I=2),w===!0\u0026\u0026(I=3);let F=u.attributes.position.count*I,j=1;F\u003ee.maxTextureSize\u0026\u0026(j=Math.ceil(F/e.maxTextureSize),F=e.maxTextureSize);const Z=new Float32Array(F*j*4*p),P=new Xu(Z,F,j,p);P.type=hn,P.needsUpdate=!0;const H=I*4;for(let V=0;V\u003cp;V++){const X=R[V],B=x[V],q=E[V],Q=F*j*4*V;for(let K=0;K\u003cX.count;K++){const J=K*H;b===!0\u0026\u0026(o.fromBufferAttribute(X,K),X.normalized===!0\u0026\u0026zo(o,X),Z[Q+J+0]=o.x,Z[Q+J+1]=o.y,Z[Q+J+2]=o.z,Z[Q+J+3]=0),v===!0\u0026\u0026(o.fromBufferAttribute(B,K),B.normalized===!0\u0026\u0026zo(o,B),Z[Q+J+4]=o.x,Z[Q+J+5]=o.y,Z[Q+J+6]=o.z,Z[Q+J+7]=0),w===!0\u0026\u0026(o.fromBufferAttribute(q,K),q.normalized===!0\u0026\u0026zo(o,q),Z[Q+J+8]=o.x,Z[Q+J+9]=o.y,Z[Q+J+10]=o.z,Z[Q+J+11]=q.itemSize===4?o.w:1)}}g={count:p,texture:P,size:new fe(F,j)},s.set(u,g),u.addEventListener(\"dispose\",U)}let S=0;for(let b=0;b\u003cm.length;b++)S+=m[b];const A=u.morphTargetsRelative?1:1-S;f.getUniforms().setValue(r,\"morphTargetBaseInfluence\",A),f.getUniforms().setValue(r,\"morphTargetInfluences\",m),f.getUniforms().setValue(r,\"morphTargetsTexture\",g.texture,t),f.getUniforms().setValue(r,\"morphTargetsTextureSize\",g.size)}else{const d=m===void 0?0:m.length;let p=i[u.id];if(p===void 0||p.length!==d){p=[];for(let v=0;v\u003cd;v++)p[v]=[v,0];i[u.id]=p}for(let v=0;v\u003cd;v++){const w=p[v];w[0]=v,w[1]=m[v]}p.sort(I_);for(let v=0;v\u003c8;v++)v\u003cd\u0026\u0026p[v][1]?(a[v][0]=p[v][0],a[v][1]=p[v][1]):(a[v][0]=Number.MAX_SAFE_INTEGER,a[v][1]=0);a.sort(F_);const g=u.morphAttributes.position,S=u.morphAttributes.normal;let A=0;for(let v=0;v\u003c8;v++){const w=a[v],R=w[0],x=w[1];R!==Number.MAX_SAFE_INTEGER\u0026\u0026x?(g\u0026\u0026u.getAttribute(\"morphTarget\"+v)!==g[R]\u0026\u0026u.setAttribute(\"morphTarget\"+v,g[R]),S\u0026\u0026u.getAttribute(\"morphNormal\"+v)!==S[R]\u0026\u0026u.setAttribute(\"morphNormal\"+v,S[R]),n[v]=x,A+=x):(g\u0026\u0026u.hasAttribute(\"morphTarget\"+v)===!0\u0026\u0026u.deleteAttribute(\"morphTarget\"+v),S\u0026\u0026u.hasAttribute(\"morphNormal\"+v)===!0\u0026\u0026u.deleteAttribute(\"morphNormal\"+v),n[v]=0)}const b=u.morphTargetsRelative?1:1-A;f.getUniforms().setValue(r,\"morphTargetBaseInfluence\",b),f.getUniforms().setValue(r,\"morphTargetInfluences\",n)}}return{update:l}}function O_(r,e,t,i){let n=new WeakMap;function s(l){const c=i.render.frame,u=l.geometry,h=e.get(l,u);return n.get(h)!==c\u0026\u0026(e.update(h),n.set(h,c)),l.isInstancedMesh\u0026\u0026(l.hasEventListener(\"dispose\",a)===!1\u0026\u0026l.addEventListener(\"dispose\",a),t.update(l.instanceMatrix,r.ARRAY_BUFFER),l.instanceColor!==null\u0026\u0026t.update(l.instanceColor,r.ARRAY_BUFFER)),h}function o(){n=new WeakMap}function a(l){const c=l.target;c.removeEventListener(\"dispose\",a),t.remove(c.instanceMatrix),c.instanceColor!==null\u0026\u0026t.remove(c.instanceColor)}return{update:s,dispose:o}}class U_ extends Qt{constructor(e=null,t=1,i=1,n=1){super(null);this.isData3DTexture=!0,this.image={data:e,width:t,height:i,depth:n},this.magFilter=Mt,this.minFilter=Mt,this.wrapR=Jt,this.generateMipmaps=!1,this.flipY=!1,this.unpackAlignment=1}}const qu=new Qt,Yu=new Xu,Zu=new U_,Ju=new Vu,oc=[],ac=[],lc=new Float32Array(16),cc=new Float32Array(9),uc=new Float32Array(4);function dr(r,e,t){const i=r[0];if(i\u003c=0||i\u003e0)return r;const n=e*t;let s=oc[n];if(s===void 0\u0026\u0026(s=new Float32Array(n),oc[n]=s),e!==0){i.toArray(s,0);for(let o=1,a=0;o!==e;++o)a+=t,r[o].toArray(s,a)}return s}function vt(r,e){if(r.length!==e.length)return!1;for(let t=0,i=r.length;t\u003ci;t++)if(r[t]!==e[t])return!1;return!0}function yt(r,e){for(let t=0,i=e.length;t\u003ci;t++)r[t]=e[t]}function Vs(r,e){let t=ac[e];t===void 0\u0026\u0026(t=new Int32Array(e),ac[e]=t);for(let i=0;i!==e;++i)t[i]=r.allocateTextureUnit();return t}function z_(r,e){const t=this.cache;t[0]!==e\u0026\u0026(r.uniform1f(this.addr,e),t[0]=e)}function B_(r,e){const t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y)\u0026\u0026(r.uniform2f(this.addr,e.x,e.y),t[0]=e.x,t[1]=e.y);else{if(vt(t,e))return;r.uniform2fv(this.addr,e),yt(t,e)}}function G_(r,e){const t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z)\u0026\u0026(r.uniform3f(this.addr,e.x,e.y,e.z),t[0]=e.x,t[1]=e.y,t[2]=e.z);else if(e.r!==void 0)(t[0]!==e.r||t[1]!==e.g||t[2]!==e.b)\u0026\u0026(r.uniform3f(this.addr,e.r,e.g,e.b),t[0]=e.r,t[1]=e.g,t[2]=e.b);else{if(vt(t,e))return;r.uniform3fv(this.addr,e),yt(t,e)}}function k_(r,e){const t=this.cache;if(e.x!==void 0)(t[0]!==e.x||t[1]!==e.y||t[2]!==e.z||t[3]!==e.w)\u0026\u0026(r.uniform4f(this.addr,e.x,e.y,e.z,e.w),t[0]=e.x,t[1]=e.y,t[2]=e.z,t[3]=e.w);else{if(vt(t,e))return;r.uniform4fv(this.addr,e),yt(t,e)}}function H_(r,e){const t=this.cache,i=e.elements;if(i===void 0){if(vt(t,e))return;r.uniformMatrix2fv(this.addr,!1,e),yt(t,e)}else{if(vt(t,i))return;uc.set(i),r.uniformMatrix2fv(this.addr,!1,uc),yt(t,i)}}function V_(r,e){const t=this.cache,i=e.elements;if(i===void 0){if(vt(t,e))return;r.uniformMatrix3fv(this.addr,!1,e),yt(t,e)}else{if(vt(t,i))return;cc.set(i),r.uniformMatrix3fv(this.addr,!1,cc),yt(t,i)}}function W_(r,e){const t=this.cache,i=e.elements;if(i===void 0){if(vt(t,e))return;r.uniformMatrix4fv(this.addr,!1,e),yt(t,e)}else{if(vt(t,i))return;lc.set(i),r.uniformMatrix4fv(this.addr,!1,lc),yt(t,i)}}function X_(r,e){const t=this.cache;t[0]!==e\u0026\u0026(r.uniform1i(this.addr,e),t[0]=e)}function q_(r,e){const t=this.cache;vt(t,e)||(r.uniform2iv(this.addr,e),yt(t,e))}function Y_(r,e){const t=this.cache;vt(t,e)||(r.uniform3iv(this.addr,e),yt(t,e))}function Z_(r,e){const t=this.cache;vt(t,e)||(r.uniform4iv(this.addr,e),yt(t,e))}function J_(r,e){const t=this.cache;t[0]!==e\u0026\u0026(r.uniform1ui(this.addr,e),t[0]=e)}function K_(r,e){const t=this.cache;vt(t,e)||(r.uniform2uiv(this.addr,e),yt(t,e))}function j_(r,e){const t=this.cache;vt(t,e)||(r.uniform3uiv(this.addr,e),yt(t,e))}function $_(r,e){const t=this.cache;vt(t,e)||(r.uniform4uiv(this.addr,e),yt(t,e))}function Q_(r,e,t){const i=this.cache,n=t.allocateTextureUnit();i[0]!==n\u0026\u0026(r.uniform1i(this.addr,n),i[0]=n),t.setTexture2D(e||qu,n)}function eg(r,e,t){const i=this.cache,n=t.allocateTextureUnit();i[0]!==n\u0026\u0026(r.uniform1i(this.addr,n),i[0]=n),t.setTexture3D(e||Zu,n)}function tg(r,e,t){const i=this.cache,n=t.allocateTextureUnit();i[0]!==n\u0026\u0026(r.uniform1i(this.addr,n),i[0]=n),t.setTextureCube(e||Ju,n)}function ig(r,e,t){const i=this.cache,n=t.allocateTextureUnit();i[0]!==n\u0026\u0026(r.uniform1i(this.addr,n),i[0]=n),t.setTexture2DArray(e||Yu,n)}function ng(r){switch(r){case 5126:return z_;case 35664:return B_;case 35665:return G_;case 35666:return k_;case 35674:return H_;case 35675:return V_;case 35676:return W_;case 5124:case 35670:return X_;case 35667:case 35671:return q_;case 35668:case 35672:return Y_;case 35669:case 35673:return Z_;case 5125:return J_;case 36294:return K_;case 36295:return j_;case 36296:return $_;case 35678:case 36198:case 36298:case 36306:case 35682:return Q_;case 35679:case 36299:case 36307:return eg;case 35680:case 36300:case 36308:case 36293:return tg;case 36289:case 36303:case 36311:case 36292:return ig}}function rg(r,e){r.uniform1fv(this.addr,e)}function sg(r,e){const t=dr(e,this.size,2);r.uniform2fv(this.addr,t)}function og(r,e){const t=dr(e,this.size,3);r.uniform3fv(this.addr,t)}function ag(r,e){const t=dr(e,this.size,4);r.uniform4fv(this.addr,t)}function lg(r,e){const t=dr(e,this.size,4);r.uniformMatrix2fv(this.addr,!1,t)}function cg(r,e){const t=dr(e,this.size,9);r.uniformMatrix3fv(this.addr,!1,t)}function ug(r,e){const t=dr(e,this.size,16);r.uniformMatrix4fv(this.addr,!1,t)}function hg(r,e){r.uniform1iv(this.addr,e)}function fg(r,e){r.uniform2iv(this.addr,e)}function dg(r,e){r.uniform3iv(this.addr,e)}function pg(r,e){r.uniform4iv(this.addr,e)}function mg(r,e){r.uniform1uiv(this.addr,e)}function _g(r,e){r.uniform2uiv(this.addr,e)}function gg(r,e){r.uniform3uiv(this.addr,e)}function xg(r,e){r.uniform4uiv(this.addr,e)}function vg(r,e,t){const i=e.length,n=Vs(t,i);r.uniform1iv(this.addr,n);for(let s=0;s!==i;++s)t.setTexture2D(e[s]||qu,n[s])}function yg(r,e,t){const i=e.length,n=Vs(t,i);r.uniform1iv(this.addr,n);for(let s=0;s!==i;++s)t.setTexture3D(e[s]||Zu,n[s])}function Sg(r,e,t){const i=e.length,n=Vs(t,i);r.uniform1iv(this.addr,n);for(let s=0;s!==i;++s)t.setTextureCube(e[s]||Ju,n[s])}function Mg(r,e,t){const i=e.length,n=Vs(t,i);r.uniform1iv(this.addr,n);for(let s=0;s!==i;++s)t.setTexture2DArray(e[s]||Yu,n[s])}function Eg(r){switch(r){case 5126:return rg;case 35664:return sg;case 35665:return og;case 35666:return ag;case 35674:return lg;case 35675:return cg;case 35676:return ug;case 5124:case 35670:return hg;case 35667:case 35671:return fg;case 35668:case 35672:return dg;case 35669:case 35673:return pg;case 5125:return mg;case 36294:return _g;case 36295:return gg;case 36296:return xg;case 35678:case 36198:case 36298:case 36306:case 35682:return vg;case 35679:case 36299:case 36307:return yg;case 35680:case 36300:case 36308:case 36293:return Sg;case 36289:case 36303:case 36311:case 36292:return Mg}}class bg{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.setValue=ng(t.type)}}class wg{constructor(e,t,i){this.id=e,this.addr=i,this.cache=[],this.size=t.size,this.setValue=Eg(t.type)}}class Tg{constructor(e){this.id=e,this.seq=[],this.map={}}setValue(e,t,i){const n=this.seq;for(let s=0,o=n.length;s!==o;++s){const a=n[s];a.setValue(e,t[a.id],i)}}}const Bo=/(\\w+)(\\])?(\\[|\\.)?/g;function hc(r,e){r.seq.push(e),r.map[e.id]=e}function Ag(r,e,t){const i=r.name,n=i.length;for(Bo.lastIndex=0;;){const s=Bo.exec(i),o=Bo.lastIndex;let a=s[1];const l=s[2]===\"]\",c=s[3];if(l\u0026\u0026(a=a|0),c===void 0||c===\"[\"\u0026\u0026o+2===n){hc(t,c===void 0?new bg(a,r,e):new wg(a,r,e));break}else{let h=t.map[a];h===void 0\u0026\u0026(h=new Tg(a),hc(t,h)),t=h}}}class Ts{constructor(e,t){this.seq=[],this.map={};const i=e.getProgramParameter(t,e.ACTIVE_UNIFORMS);for(let n=0;n\u003ci;++n){const s=e.getActiveUniform(t,n),o=e.getUniformLocation(t,s.name);Ag(s,o,this)}}setValue(e,t,i,n){const s=this.map[t];s!==void 0\u0026\u0026s.setValue(e,i,n)}setOptional(e,t,i){const n=t[i];n!==void 0\u0026\u0026this.setValue(e,i,n)}static upload(e,t,i,n){for(let s=0,o=t.length;s!==o;++s){const a=t[s],l=i[a.id];l.needsUpdate!==!1\u0026\u0026a.setValue(e,l.value,n)}}static seqWithValue(e,t){const i=[];for(let n=0,s=e.length;n!==s;++n){const o=e[n];o.id in t\u0026\u0026i.push(o)}return i}}function fc(r,e,t){const i=r.createShader(e);return r.shaderSource(i,t),r.compileShader(i),i}let Rg=0;function Cg(r,e){const t=r.split(`\n`),i=[],n=Math.max(e-6,0),s=Math.min(e+6,t.length);for(let o=n;o\u003cs;o++){const a=o+1;i.push(`${a===e?\"\u003e\":\" \"} ${a}: ${t[o]}`)}return i.join(`\n`)}function Pg(r){switch(r){case yn:return[\"Linear\",\"( value )\"];case Xe:return[\"sRGB\",\"( value )\"];default:return console.warn(\"THREE.WebGLProgram: Unsupported encoding:\",r),[\"Linear\",\"( value )\"]}}function dc(r,e,t){const i=r.getShaderParameter(e,r.COMPILE_STATUS),n=r.getShaderInfoLog(e).trim();if(i\u0026\u0026n===\"\")return\"\";const s=/ERROR: 0:(\\d+)/.exec(n);if(s){const o=parseInt(s[1]);return t.toUpperCase()+`\n\n`+n+`\n\n`+Cg(r.getShaderSource(e),o)}else return n}function Lg(r,e){const t=Pg(e);return\"vec4 \"+r+\"( vec4 value ) { return LinearTo\"+t[0]+t[1]+\"; }\"}function Dg(r,e){let t;switch(e){case Hh:t=\"Linear\";break;case Vh:t=\"Reinhard\";break;case Wh:t=\"OptimizedCineon\";break;case Xh:t=\"ACESFilmic\";break;case qh:t=\"Custom\";break;default:console.warn(\"THREE.WebGLProgram: Unsupported toneMapping:\",e),t=\"Linear\"}return\"vec3 \"+r+\"( vec3 color ) { return \"+t+\"ToneMapping( color ); }\"}function Fg(r){return[r.extensionDerivatives||!!r.envMapCubeUVHeight||r.bumpMap||r.tangentSpaceNormalMap||r.clearcoatNormalMap||r.flatShading||r.shaderID===\"physical\"?\"#extension GL_OES_standard_derivatives : enable\":\"\",(r.extensionFragDepth||r.logarithmicDepthBuffer)\u0026\u0026r.rendererExtensionFragDepth?\"#extension GL_EXT_frag_depth : enable\":\"\",r.extensionDrawBuffers\u0026\u0026r.rendererExtensionDrawBuffers?\"#extension GL_EXT_draw_buffers : require\":\"\",(r.extensionShaderTextureLOD||r.envMap||r.transmission)\u0026\u0026r.rendererExtensionShaderTextureLod?\"#extension GL_EXT_shader_texture_lod : enable\":\"\"].filter(Er).join(`\n`)}function Ig(r){const e=[];for(const t in r){const i=r[t];i!==!1\u0026\u0026e.push(\"#define \"+t+\" \"+i)}return e.join(`\n`)}function Ng(r,e){const t={},i=r.getProgramParameter(e,r.ACTIVE_ATTRIBUTES);for(let n=0;n\u003ci;n++){const s=r.getActiveAttrib(e,n),o=s.name;let a=1;s.type===r.FLOAT_MAT2\u0026\u0026(a=2),s.type===r.FLOAT_MAT3\u0026\u0026(a=3),s.type===r.FLOAT_MAT4\u0026\u0026(a=4),t[o]={type:s.type,location:r.getAttribLocation(e,o),locationSize:a}}return t}function Er(r){return r!==\"\"}function pc(r,e){return r.replace(/NUM_DIR_LIGHTS/g,e.numDirLights).replace(/NUM_SPOT_LIGHTS/g,e.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,e.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,e.numPointLights).replace(/NUM_HEMI_LIGHTS/g,e.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,e.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,e.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,e.numPointLightShadows)}function mc(r,e){return r.replace(/NUM_CLIPPING_PLANES/g,e.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,e.numClippingPlanes-e.numClipIntersection)}const Og=/^[ \\t]*#include +\u003c([\\w\\d./]+)\u003e/gm;function ca(r){return r.replace(Og,Ug)}function Ug(r,e){const t=Re[e];if(t===void 0)throw new Error(\"Can not resolve #include \u003c\"+e+\"\u003e\");return ca(t)}const zg=/#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i \u003c (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g,Bg=/#pragma unroll_loop_start\\s+for\\s*\\(\\s*int\\s+i\\s*=\\s*(\\d+)\\s*;\\s*i\\s*\u003c\\s*(\\d+)\\s*;\\s*i\\s*\\+\\+\\s*\\)\\s*{([\\s\\S]+?)}\\s+#pragma unroll_loop_end/g;function _c(r){return r.replace(Bg,Ku).replace(zg,Gg)}function Gg(r,e,t,i){return console.warn(\"WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.\"),Ku(r,e,t,i)}function Ku(r,e,t,i){let n=\"\";for(let s=parseInt(e);s\u003cparseInt(t);s++)n+=i.replace(/\\[\\s*i\\s*\\]/g,\"[ \"+s+\" ]\").replace(/UNROLLED_LOOP_INDEX/g,s);return n}function gc(r){let e=\"precision \"+r.precision+` float;\nprecision `+r.precision+\" int;\";return r.precision===\"highp\"?e+=`\n#define HIGH_PRECISION`:r.precision===\"mediump\"?e+=`\n#define MEDIUM_PRECISION`:r.precision===\"lowp\"\u0026\u0026(e+=`\n#define LOW_PRECISION`),e}function kg(r){let e=\"SHADOWMAP_TYPE_BASIC\";return r.shadowMapType===Cc?e=\"SHADOWMAP_TYPE_PCF\":r.shadowMapType===vh?e=\"SHADOWMAP_TYPE_PCF_SOFT\":r.shadowMapType===yr\u0026\u0026(e=\"SHADOWMAP_TYPE_VSM\"),e}function Hg(r){let e=\"ENVMAP_TYPE_CUBE\";if(r.envMap)switch(r.envMapMode){case er:case tr:e=\"ENVMAP_TYPE_CUBE\";break;case zs:e=\"ENVMAP_TYPE_CUBE_UV\";break}return e}function Vg(r){let e=\"ENVMAP_MODE_REFLECTION\";if(r.envMap)switch(r.envMapMode){case tr:e=\"ENVMAP_MODE_REFRACTION\";break}return e}function Wg(r){let e=\"ENVMAP_BLENDING_NONE\";if(r.envMap)switch(r.combine){case Dc:e=\"ENVMAP_BLENDING_MULTIPLY\";break;case Gh:e=\"ENVMAP_BLENDING_MIX\";break;case kh:e=\"ENVMAP_BLENDING_ADD\";break}return e}function Xg(r){const e=r.envMapCubeUVHeight;if(e===null)return null;const t=Math.log2(e)-2,i=1/e;return{texelWidth:1/(3*Math.max(Math.pow(2,t),7*16)),texelHeight:i,maxMip:t}}function qg(r,e,t,i){const n=r.getContext(),s=t.defines;let o=t.vertexShader,a=t.fragmentShader;const l=kg(t),c=Hg(t),u=Vg(t),h=Wg(t),f=Xg(t),m=t.isWebGL2?\"\":Fg(t),_=Ig(s),d=n.createProgram();let p,g,S=t.glslVersion?\"#version \"+t.glslVersion+`\n`:\"\";t.isRawShaderMaterial?(p=[_].filter(Er).join(`\n`),p.length\u003e0\u0026\u0026(p+=`\n`),g=[m,_].filter(Er).join(`\n`),g.length\u003e0\u0026\u0026(g+=`\n`)):(p=[gc(t),\"#define SHADER_NAME \"+t.shaderName,_,t.instancing?\"#define USE_INSTANCING\":\"\",t.instancingColor?\"#define USE_INSTANCING_COLOR\":\"\",t.supportsVertexTextures?\"#define VERTEX_TEXTURES\":\"\",t.useFog\u0026\u0026t.fog?\"#define USE_FOG\":\"\",t.useFog\u0026\u0026t.fogExp2?\"#define FOG_EXP2\":\"\",t.map?\"#define USE_MAP\":\"\",t.envMap?\"#define USE_ENVMAP\":\"\",t.envMap?\"#define \"+u:\"\",t.lightMap?\"#define USE_LIGHTMAP\":\"\",t.aoMap?\"#define USE_AOMAP\":\"\",t.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",t.bumpMap?\"#define USE_BUMPMAP\":\"\",t.normalMap?\"#define USE_NORMALMAP\":\"\",t.normalMap\u0026\u0026t.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",t.normalMap\u0026\u0026t.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",t.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",t.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",t.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",t.iridescenceMap?\"#define USE_IRIDESCENCEMAP\":\"\",t.iridescenceThicknessMap?\"#define USE_IRIDESCENCE_THICKNESSMAP\":\"\",t.displacementMap\u0026\u0026t.supportsVertexTextures?\"#define USE_DISPLACEMENTMAP\":\"\",t.specularMap?\"#define USE_SPECULARMAP\":\"\",t.specularIntensityMap?\"#define USE_SPECULARINTENSITYMAP\":\"\",t.specularColorMap?\"#define USE_SPECULARCOLORMAP\":\"\",t.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",t.metalnessMap?\"#define USE_METALNESSMAP\":\"\",t.alphaMap?\"#define USE_ALPHAMAP\":\"\",t.transmission?\"#define USE_TRANSMISSION\":\"\",t.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",t.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",t.sheenColorMap?\"#define USE_SHEENCOLORMAP\":\"\",t.sheenRoughnessMap?\"#define USE_SHEENROUGHNESSMAP\":\"\",t.vertexTangents?\"#define USE_TANGENT\":\"\",t.vertexColors?\"#define USE_COLOR\":\"\",t.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",t.vertexUvs?\"#define USE_UV\":\"\",t.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",t.flatShading?\"#define FLAT_SHADED\":\"\",t.skinning?\"#define USE_SKINNING\":\"\",t.morphTargets?\"#define USE_MORPHTARGETS\":\"\",t.morphNormals\u0026\u0026t.flatShading===!1?\"#define USE_MORPHNORMALS\":\"\",t.morphColors\u0026\u0026t.isWebGL2?\"#define USE_MORPHCOLORS\":\"\",t.morphTargetsCount\u003e0\u0026\u0026t.isWebGL2?\"#define MORPHTARGETS_TEXTURE\":\"\",t.morphTargetsCount\u003e0\u0026\u0026t.isWebGL2?\"#define MORPHTARGETS_TEXTURE_STRIDE \"+t.morphTextureStride:\"\",t.morphTargetsCount\u003e0\u0026\u0026t.isWebGL2?\"#define MORPHTARGETS_COUNT \"+t.morphTargetsCount:\"\",t.doubleSided?\"#define DOUBLE_SIDED\":\"\",t.flipSided?\"#define FLIP_SIDED\":\"\",t.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",t.shadowMapEnabled?\"#define \"+l:\"\",t.sizeAttenuation?\"#define USE_SIZEATTENUATION\":\"\",t.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",t.logarithmicDepthBuffer\u0026\u0026t.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 modelMatrix;\",\"uniform mat4 modelViewMatrix;\",\"uniform mat4 projectionMatrix;\",\"uniform mat4 viewMatrix;\",\"uniform mat3 normalMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",\"#ifdef USE_INSTANCING\",\"\tattribute mat4 instanceMatrix;\",\"#endif\",\"#ifdef USE_INSTANCING_COLOR\",\"\tattribute vec3 instanceColor;\",\"#endif\",\"attribute vec3 position;\",\"attribute vec3 normal;\",\"attribute vec2 uv;\",\"#ifdef USE_TANGENT\",\"\tattribute vec4 tangent;\",\"#endif\",\"#if defined( USE_COLOR_ALPHA )\",\"\tattribute vec4 color;\",\"#elif defined( USE_COLOR )\",\"\tattribute vec3 color;\",\"#endif\",\"#if ( defined( USE_MORPHTARGETS ) \u0026\u0026 ! defined( MORPHTARGETS_TEXTURE ) )\",\"\tattribute vec3 morphTarget0;\",\"\tattribute vec3 morphTarget1;\",\"\tattribute vec3 morphTarget2;\",\"\tattribute vec3 morphTarget3;\",\"\t#ifdef USE_MORPHNORMALS\",\"\t\tattribute vec3 morphNormal0;\",\"\t\tattribute vec3 morphNormal1;\",\"\t\tattribute vec3 morphNormal2;\",\"\t\tattribute vec3 morphNormal3;\",\"\t#else\",\"\t\tattribute vec3 morphTarget4;\",\"\t\tattribute vec3 morphTarget5;\",\"\t\tattribute vec3 morphTarget6;\",\"\t\tattribute vec3 morphTarget7;\",\"\t#endif\",\"#endif\",\"#ifdef USE_SKINNING\",\"\tattribute vec4 skinIndex;\",\"\tattribute vec4 skinWeight;\",\"#endif\",`\n`].filter(Er).join(`\n`),g=[m,gc(t),\"#define SHADER_NAME \"+t.shaderName,_,t.useFog\u0026\u0026t.fog?\"#define USE_FOG\":\"\",t.useFog\u0026\u0026t.fogExp2?\"#define FOG_EXP2\":\"\",t.map?\"#define USE_MAP\":\"\",t.matcap?\"#define USE_MATCAP\":\"\",t.envMap?\"#define USE_ENVMAP\":\"\",t.envMap?\"#define \"+c:\"\",t.envMap?\"#define \"+u:\"\",t.envMap?\"#define \"+h:\"\",f?\"#define CUBEUV_TEXEL_WIDTH \"+f.texelWidth:\"\",f?\"#define CUBEUV_TEXEL_HEIGHT \"+f.texelHeight:\"\",f?\"#define CUBEUV_MAX_MIP \"+f.maxMip+\".0\":\"\",t.lightMap?\"#define USE_LIGHTMAP\":\"\",t.aoMap?\"#define USE_AOMAP\":\"\",t.emissiveMap?\"#define USE_EMISSIVEMAP\":\"\",t.bumpMap?\"#define USE_BUMPMAP\":\"\",t.normalMap?\"#define USE_NORMALMAP\":\"\",t.normalMap\u0026\u0026t.objectSpaceNormalMap?\"#define OBJECTSPACE_NORMALMAP\":\"\",t.normalMap\u0026\u0026t.tangentSpaceNormalMap?\"#define TANGENTSPACE_NORMALMAP\":\"\",t.clearcoat?\"#define USE_CLEARCOAT\":\"\",t.clearcoatMap?\"#define USE_CLEARCOATMAP\":\"\",t.clearcoatRoughnessMap?\"#define USE_CLEARCOAT_ROUGHNESSMAP\":\"\",t.clearcoatNormalMap?\"#define USE_CLEARCOAT_NORMALMAP\":\"\",t.iridescence?\"#define USE_IRIDESCENCE\":\"\",t.iridescenceMap?\"#define USE_IRIDESCENCEMAP\":\"\",t.iridescenceThicknessMap?\"#define USE_IRIDESCENCE_THICKNESSMAP\":\"\",t.specularMap?\"#define USE_SPECULARMAP\":\"\",t.specularIntensityMap?\"#define USE_SPECULARINTENSITYMAP\":\"\",t.specularColorMap?\"#define USE_SPECULARCOLORMAP\":\"\",t.roughnessMap?\"#define USE_ROUGHNESSMAP\":\"\",t.metalnessMap?\"#define USE_METALNESSMAP\":\"\",t.alphaMap?\"#define USE_ALPHAMAP\":\"\",t.alphaTest?\"#define USE_ALPHATEST\":\"\",t.sheen?\"#define USE_SHEEN\":\"\",t.sheenColorMap?\"#define USE_SHEENCOLORMAP\":\"\",t.sheenRoughnessMap?\"#define USE_SHEENROUGHNESSMAP\":\"\",t.transmission?\"#define USE_TRANSMISSION\":\"\",t.transmissionMap?\"#define USE_TRANSMISSIONMAP\":\"\",t.thicknessMap?\"#define USE_THICKNESSMAP\":\"\",t.decodeVideoTexture?\"#define DECODE_VIDEO_TEXTURE\":\"\",t.vertexTangents?\"#define USE_TANGENT\":\"\",t.vertexColors||t.instancingColor?\"#define USE_COLOR\":\"\",t.vertexAlphas?\"#define USE_COLOR_ALPHA\":\"\",t.vertexUvs?\"#define USE_UV\":\"\",t.uvsVertexOnly?\"#define UVS_VERTEX_ONLY\":\"\",t.gradientMap?\"#define USE_GRADIENTMAP\":\"\",t.flatShading?\"#define FLAT_SHADED\":\"\",t.doubleSided?\"#define DOUBLE_SIDED\":\"\",t.flipSided?\"#define FLIP_SIDED\":\"\",t.shadowMapEnabled?\"#define USE_SHADOWMAP\":\"\",t.shadowMapEnabled?\"#define \"+l:\"\",t.premultipliedAlpha?\"#define PREMULTIPLIED_ALPHA\":\"\",t.physicallyCorrectLights?\"#define PHYSICALLY_CORRECT_LIGHTS\":\"\",t.logarithmicDepthBuffer?\"#define USE_LOGDEPTHBUF\":\"\",t.logarithmicDepthBuffer\u0026\u0026t.rendererExtensionFragDepth?\"#define USE_LOGDEPTHBUF_EXT\":\"\",\"uniform mat4 viewMatrix;\",\"uniform vec3 cameraPosition;\",\"uniform bool isOrthographic;\",t.toneMapping!==Mi?\"#define TONE_MAPPING\":\"\",t.toneMapping!==Mi?Re.tonemapping_pars_fragment:\"\",t.toneMapping!==Mi?Dg(\"toneMapping\",t.toneMapping):\"\",t.dithering?\"#define DITHERING\":\"\",t.opaque?\"#define OPAQUE\":\"\",Re.encodings_pars_fragment,Lg(\"linearToOutputTexel\",t.outputEncoding),t.useDepthPacking?\"#define DEPTH_PACKING \"+t.depthPacking:\"\",`\n`].filter(Er).join(`\n`)),o=ca(o),o=pc(o,t),o=mc(o,t),a=ca(a),a=pc(a,t),a=mc(a,t),o=_c(o),a=_c(a),t.isWebGL2\u0026\u0026t.isRawShaderMaterial!==!0\u0026\u0026(S=`#version 300 es\n`,p=[\"precision mediump sampler2DArray;\",\"#define attribute in\",\"#define varying out\",\"#define texture2D texture\"].join(`\n`)+`\n`+p,g=[\"#define varying in\",t.glslVersion===bl?\"\":\"layout(location = 0) out highp vec4 pc_fragColor;\",t.glslVersion===bl?\"\":\"#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`+g);const A=S+p+o,b=S+g+a,v=fc(n,n.VERTEX_SHADER,A),w=fc(n,n.FRAGMENT_SHADER,b);if(n.attachShader(d,v),n.attachShader(d,w),t.index0AttributeName!==void 0?n.bindAttribLocation(d,0,t.index0AttributeName):t.morphTargets===!0\u0026\u0026n.bindAttribLocation(d,0,\"position\"),n.linkProgram(d),r.debug.checkShaderErrors){const E=n.getProgramInfoLog(d).trim(),I=n.getShaderInfoLog(v).trim(),F=n.getShaderInfoLog(w).trim();let j=!0,Z=!0;if(n.getProgramParameter(d,n.LINK_STATUS)===!1){j=!1;const P=dc(n,v,\"vertex\"),H=dc(n,w,\"fragment\");console.error(\"THREE.WebGLProgram: Shader Error \"+n.getError()+\" - VALIDATE_STATUS \"+n.getProgramParameter(d,n.VALIDATE_STATUS)+`\n\nProgram Info Log: `+E+`\n`+P+`\n`+H)}else E!==\"\"?console.warn(\"THREE.WebGLProgram: Program Info Log:\",E):(I===\"\"||F===\"\")\u0026\u0026(Z=!1);Z\u0026\u0026(this.diagnostics={runnable:j,programLog:E,vertexShader:{log:I,prefix:p},fragmentShader:{log:F,prefix:g}})}n.deleteShader(v),n.deleteShader(w);let R;this.getUniforms=function(){return R===void 0\u0026\u0026(R=new Ts(n,d)),R};let x;return this.getAttributes=function(){return x===void 0\u0026\u0026(x=Ng(n,d)),x},this.destroy=function(){i.releaseStatesOfProgram(this),n.deleteProgram(d),this.program=void 0},this.name=t.shaderName,this.id=Rg++,this.cacheKey=e,this.usedTimes=1,this.program=d,this.vertexShader=v,this.fragmentShader=w,this}let Yg=0;class Zg{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){const t=e.vertexShader,i=e.fragmentShader,n=this._getShaderStage(t),s=this._getShaderStage(i),o=this._getShaderCacheForMaterial(e);return o.has(n)===!1\u0026\u0026(o.add(n),n.usedTimes++),o.has(s)===!1\u0026\u0026(o.add(s),s.usedTimes++),this}remove(e){const t=this.materialCache.get(e);for(const i of t)i.usedTimes--,i.usedTimes===0\u0026\u0026this.shaderCache.delete(i.code);return this.materialCache.delete(e),this}getVertexShaderID(e){return this._getShaderStage(e.vertexShader).id}getFragmentShaderID(e){return this._getShaderStage(e.fragmentShader).id}dispose(){this.shaderCache.clear(),this.materialCache.clear()}_getShaderCacheForMaterial(e){const t=this.materialCache;return t.has(e)===!1\u0026\u0026t.set(e,new Set),t.get(e)}_getShaderStage(e){const t=this.shaderCache;if(t.has(e)===!1){const i=new Jg(e);t.set(e,i)}return t.get(e)}}class Jg{constructor(e){this.id=Yg++,this.code=e,this.usedTimes=0}}function Kg(r,e,t,i,n,s,o){const a=new zu,l=new Zg,c=[],u=n.isWebGL2,h=n.logarithmicDepthBuffer,f=n.vertexTextures;let m=n.precision;const _={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 d(x,E,I,F,j){const Z=F.fog,P=j.geometry,H=x.isMeshStandardMaterial?F.environment:null,U=(x.isMeshStandardMaterial?t:e).get(x.envMap||H),V=!!U\u0026\u0026U.mapping===zs?U.image.height:null,X=_[x.type];x.precision!==null\u0026\u0026(m=n.getMaxPrecision(x.precision),m!==x.precision\u0026\u0026console.warn(\"THREE.WebGLProgram.getParameters:\",x.precision,\"not supported, using\",m,\"instead.\"));const B=P.morphAttributes.position||P.morphAttributes.normal||P.morphAttributes.color,q=B!==void 0?B.length:0;let Q=0;P.morphAttributes.position!==void 0\u0026\u0026(Q=1),P.morphAttributes.normal!==void 0\u0026\u0026(Q=2),P.morphAttributes.color!==void 0\u0026\u0026(Q=3);let K,J,ae,pe;if(X){const ze=oi[X];K=ze.vertexShader,J=ze.fragmentShader}else K=x.vertexShader,J=x.fragmentShader,l.update(x),ae=l.getVertexShaderID(x),pe=l.getFragmentShaderID(x);const D=r.getRenderTarget(),We=x.alphaTest\u003e0,Ee=x.clearcoat\u003e0,be=x.iridescence\u003e0;return{isWebGL2:u,shaderID:X,shaderName:x.type,vertexShader:K,fragmentShader:J,defines:x.defines,customVertexShaderID:ae,customFragmentShaderID:pe,isRawShaderMaterial:x.isRawShaderMaterial===!0,glslVersion:x.glslVersion,precision:m,instancing:j.isInstancedMesh===!0,instancingColor:j.isInstancedMesh===!0\u0026\u0026j.instanceColor!==null,supportsVertexTextures:f,outputEncoding:D===null?r.outputEncoding:D.isXRRenderTarget===!0?D.texture.encoding:yn,map:!!x.map,matcap:!!x.matcap,envMap:!!U,envMapMode:U\u0026\u0026U.mapping,envMapCubeUVHeight:V,lightMap:!!x.lightMap,aoMap:!!x.aoMap,emissiveMap:!!x.emissiveMap,bumpMap:!!x.bumpMap,normalMap:!!x.normalMap,objectSpaceNormalMap:x.normalMapType===df,tangentSpaceNormalMap:x.normalMapType===ff,decodeVideoTexture:!!x.map\u0026\u0026x.map.isVideoTexture===!0\u0026\u0026x.map.encoding===Xe,clearcoat:Ee,clearcoatMap:Ee\u0026\u0026!!x.clearcoatMap,clearcoatRoughnessMap:Ee\u0026\u0026!!x.clearcoatRoughnessMap,clearcoatNormalMap:Ee\u0026\u0026!!x.clearcoatNormalMap,iridescence:be,iridescenceMap:be\u0026\u0026!!x.iridescenceMap,iridescenceThicknessMap:be\u0026\u0026!!x.iridescenceThicknessMap,displacementMap:!!x.displacementMap,roughnessMap:!!x.roughnessMap,metalnessMap:!!x.metalnessMap,specularMap:!!x.specularMap,specularIntensityMap:!!x.specularIntensityMap,specularColorMap:!!x.specularColorMap,opaque:x.transparent===!1\u0026\u0026x.blending===Jn,alphaMap:!!x.alphaMap,alphaTest:We,gradientMap:!!x.gradientMap,sheen:x.sheen\u003e0,sheenColorMap:!!x.sheenColorMap,sheenRoughnessMap:!!x.sheenRoughnessMap,transmission:x.transmission\u003e0,transmissionMap:!!x.transmissionMap,thicknessMap:!!x.thicknessMap,combine:x.combine,vertexTangents:!!x.normalMap\u0026\u0026!!P.attributes.tangent,vertexColors:x.vertexColors,vertexAlphas:x.vertexColors===!0\u0026\u0026!!P.attributes.color\u0026\u0026P.attributes.color.itemSize===4,vertexUvs:!!x.map||!!x.bumpMap||!!x.normalMap||!!x.specularMap||!!x.alphaMap||!!x.emissiveMap||!!x.roughnessMap||!!x.metalnessMap||!!x.clearcoatMap||!!x.clearcoatRoughnessMap||!!x.clearcoatNormalMap||!!x.iridescenceMap||!!x.iridescenceThicknessMap||!!x.displacementMap||!!x.transmissionMap||!!x.thicknessMap||!!x.specularIntensityMap||!!x.specularColorMap||!!x.sheenColorMap||!!x.sheenRoughnessMap,uvsVertexOnly:!(!!x.map||!!x.bumpMap||!!x.normalMap||!!x.specularMap||!!x.alphaMap||!!x.emissiveMap||!!x.roughnessMap||!!x.metalnessMap||!!x.clearcoatNormalMap||!!x.iridescenceMap||!!x.iridescenceThicknessMap||x.transmission\u003e0||!!x.transmissionMap||!!x.thicknessMap||!!x.specularIntensityMap||!!x.specularColorMap||x.sheen\u003e0||!!x.sheenColorMap||!!x.sheenRoughnessMap)\u0026\u0026!!x.displacementMap,fog:!!Z,useFog:x.fog===!0,fogExp2:Z\u0026\u0026Z.isFogExp2,flatShading:!!x.flatShading,sizeAttenuation:x.sizeAttenuation,logarithmicDepthBuffer:h,skinning:j.isSkinnedMesh===!0,morphTargets:P.morphAttributes.position!==void 0,morphNormals:P.morphAttributes.normal!==void 0,morphColors:P.morphAttributes.color!==void 0,morphTargetsCount:q,morphTextureStride:Q,numDirLights:E.directional.length,numPointLights:E.point.length,numSpotLights:E.spot.length,numRectAreaLights:E.rectArea.length,numHemiLights:E.hemi.length,numDirLightShadows:E.directionalShadowMap.length,numPointLightShadows:E.pointShadowMap.length,numSpotLightShadows:E.spotShadowMap.length,numClippingPlanes:o.numPlanes,numClipIntersection:o.numIntersection,dithering:x.dithering,shadowMapEnabled:r.shadowMap.enabled\u0026\u0026I.length\u003e0,shadowMapType:r.shadowMap.type,toneMapping:x.toneMapped?r.toneMapping:Mi,physicallyCorrectLights:r.physicallyCorrectLights,premultipliedAlpha:x.premultipliedAlpha,doubleSided:x.side===Qn,flipSided:x.side===jt,useDepthPacking:!!x.depthPacking,depthPacking:x.depthPacking||0,index0AttributeName:x.index0AttributeName,extensionDerivatives:x.extensions\u0026\u0026x.extensions.derivatives,extensionFragDepth:x.extensions\u0026\u0026x.extensions.fragDepth,extensionDrawBuffers:x.extensions\u0026\u0026x.extensions.drawBuffers,extensionShaderTextureLOD:x.extensions\u0026\u0026x.extensions.shaderTextureLOD,rendererExtensionFragDepth:u||i.has(\"EXT_frag_depth\"),rendererExtensionDrawBuffers:u||i.has(\"WEBGL_draw_buffers\"),rendererExtensionShaderTextureLod:u||i.has(\"EXT_shader_texture_lod\"),customProgramCacheKey:x.customProgramCacheKey()}}function p(x){const E=[];if(x.shaderID?E.push(x.shaderID):(E.push(x.customVertexShaderID),E.push(x.customFragmentShaderID)),x.defines!==void 0)for(const I in x.defines)E.push(I),E.push(x.defines[I]);return x.isRawShaderMaterial===!1\u0026\u0026(g(E,x),S(E,x),E.push(r.outputEncoding)),E.push(x.customProgramCacheKey),E.join()}function g(x,E){x.push(E.precision),x.push(E.outputEncoding),x.push(E.envMapMode),x.push(E.envMapCubeUVHeight),x.push(E.combine),x.push(E.vertexUvs),x.push(E.fogExp2),x.push(E.sizeAttenuation),x.push(E.morphTargetsCount),x.push(E.morphAttributeCount),x.push(E.numDirLights),x.push(E.numPointLights),x.push(E.numSpotLights),x.push(E.numHemiLights),x.push(E.numRectAreaLights),x.push(E.numDirLightShadows),x.push(E.numPointLightShadows),x.push(E.numSpotLightShadows),x.push(E.shadowMapType),x.push(E.toneMapping),x.push(E.numClippingPlanes),x.push(E.numClipIntersection),x.push(E.depthPacking)}function S(x,E){a.disableAll(),E.isWebGL2\u0026\u0026a.enable(0),E.supportsVertexTextures\u0026\u0026a.enable(1),E.instancing\u0026\u0026a.enable(2),E.instancingColor\u0026\u0026a.enable(3),E.map\u0026\u0026a.enable(4),E.matcap\u0026\u0026a.enable(5),E.envMap\u0026\u0026a.enable(6),E.lightMap\u0026\u0026a.enable(7),E.aoMap\u0026\u0026a.enable(8),E.emissiveMap\u0026\u0026a.enable(9),E.bumpMap\u0026\u0026a.enable(10),E.normalMap\u0026\u0026a.enable(11),E.objectSpaceNormalMap\u0026\u0026a.enable(12),E.tangentSpaceNormalMap\u0026\u0026a.enable(13),E.clearcoat\u0026\u0026a.enable(14),E.clearcoatMap\u0026\u0026a.enable(15),E.clearcoatRoughnessMap\u0026\u0026a.enable(16),E.clearcoatNormalMap\u0026\u0026a.enable(17),E.iridescence\u0026\u0026a.enable(18),E.iridescenceMap\u0026\u0026a.enable(19),E.iridescenceThicknessMap\u0026\u0026a.enable(20),E.displacementMap\u0026\u0026a.enable(21),E.specularMap\u0026\u0026a.enable(22),E.roughnessMap\u0026\u0026a.enable(23),E.metalnessMap\u0026\u0026a.enable(24),E.gradientMap\u0026\u0026a.enable(25),E.alphaMap\u0026\u0026a.enable(26),E.alphaTest\u0026\u0026a.enable(27),E.vertexColors\u0026\u0026a.enable(28),E.vertexAlphas\u0026\u0026a.enable(29),E.vertexUvs\u0026\u0026a.enable(30),E.vertexTangents\u0026\u0026a.enable(31),E.uvsVertexOnly\u0026\u0026a.enable(32),E.fog\u0026\u0026a.enable(33),x.push(a.mask),a.disableAll(),E.useFog\u0026\u0026a.enable(0),E.flatShading\u0026\u0026a.enable(1),E.logarithmicDepthBuffer\u0026\u0026a.enable(2),E.skinning\u0026\u0026a.enable(3),E.morphTargets\u0026\u0026a.enable(4),E.morphNormals\u0026\u0026a.enable(5),E.morphColors\u0026\u0026a.enable(6),E.premultipliedAlpha\u0026\u0026a.enable(7),E.shadowMapEnabled\u0026\u0026a.enable(8),E.physicallyCorrectLights\u0026\u0026a.enable(9),E.doubleSided\u0026\u0026a.enable(10),E.flipSided\u0026\u0026a.enable(11),E.useDepthPacking\u0026\u0026a.enable(12),E.dithering\u0026\u0026a.enable(13),E.specularIntensityMap\u0026\u0026a.enable(14),E.specularColorMap\u0026\u0026a.enable(15),E.transmission\u0026\u0026a.enable(16),E.transmissionMap\u0026\u0026a.enable(17),E.thicknessMap\u0026\u0026a.enable(18),E.sheen\u0026\u0026a.enable(19),E.sheenColorMap\u0026\u0026a.enable(20),E.sheenRoughnessMap\u0026\u0026a.enable(21),E.decodeVideoTexture\u0026\u0026a.enable(22),E.opaque\u0026\u0026a.enable(23),x.push(a.mask)}function A(x){const E=_[x.type];let I;if(E){const F=oi[E];I=Ud.clone(F.uniforms)}else I=x.uniforms;return I}function b(x,E){let I;for(let F=0,j=c.length;F\u003cj;F++){const Z=c[F];if(Z.cacheKey===E){I=Z,++I.usedTimes;break}}return I===void 0\u0026\u0026(I=new qg(r,E,x,s),c.push(I)),I}function v(x){if(--x.usedTimes===0){const E=c.indexOf(x);c[E]=c[c.length-1],c.pop(),x.destroy()}}function w(x){l.remove(x)}function R(){l.dispose()}return{getParameters:d,getProgramCacheKey:p,getUniforms:A,acquireProgram:b,releaseProgram:v,releaseShaderCache:w,programs:c,dispose:R}}function jg(){let r=new WeakMap;function e(s){let o=r.get(s);return o===void 0\u0026\u0026(o={},r.set(s,o)),o}function t(s){r.delete(s)}function i(s,o,a){r.get(s)[o]=a}function n(){r=new WeakMap}return{get:e,remove:t,update:i,dispose:n}}function $g(r,e){return r.groupOrder!==e.groupOrder?r.groupOrder-e.groupOrder:r.renderOrder!==e.renderOrder?r.renderOrder-e.renderOrder:r.material.id!==e.material.id?r.material.id-e.material.id:r.z!==e.z?r.z-e.z:r.id-e.id}function xc(r,e){return r.groupOrder!==e.groupOrder?r.groupOrder-e.groupOrder:r.renderOrder!==e.renderOrder?r.renderOrder-e.renderOrder:r.z!==e.z?e.z-r.z:r.id-e.id}function vc(){const r=[];let e=0;const t=[],i=[],n=[];function s(){e=0,t.length=0,i.length=0,n.length=0}function o(h,f,m,_,d,p){let g=r[e];return g===void 0?(g={id:h.id,object:h,geometry:f,material:m,groupOrder:_,renderOrder:h.renderOrder,z:d,group:p},r[e]=g):(g.id=h.id,g.object=h,g.geometry=f,g.material=m,g.groupOrder=_,g.renderOrder=h.renderOrder,g.z=d,g.group=p),e++,g}function a(h,f,m,_,d,p){const g=o(h,f,m,_,d,p);m.transmission\u003e0?i.push(g):m.transparent===!0?n.push(g):t.push(g)}function l(h,f,m,_,d,p){const g=o(h,f,m,_,d,p);m.transmission\u003e0?i.unshift(g):m.transparent===!0?n.unshift(g):t.unshift(g)}function c(h,f){t.length\u003e1\u0026\u0026t.sort(h||$g),i.length\u003e1\u0026\u0026i.sort(f||xc),n.length\u003e1\u0026\u0026n.sort(f||xc)}function u(){for(let h=e,f=r.length;h\u003cf;h++){const m=r[h];if(m.id===null)break;m.id=null,m.object=null,m.geometry=null,m.material=null,m.group=null}}return{opaque:t,transmissive:i,transparent:n,init:s,push:a,unshift:l,finish:u,sort:c}}function Qg(){let r=new WeakMap;function e(i,n){let s;return r.has(i)===!1?(s=new vc,r.set(i,[s])):n\u003e=r.get(i).length?(s=new vc,r.get(i).push(s)):s=r.get(i)[n],s}function t(){r=new WeakMap}return{get:e,dispose:t}}function e0(){const r={};return{get:function(e){if(r[e.id]!==void 0)return r[e.id];let t;switch(e.type){case\"DirectionalLight\":t={direction:new L,color:new Le};break;case\"SpotLight\":t={position:new L,direction:new L,color:new Le,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case\"PointLight\":t={position:new L,color:new Le,distance:0,decay:0};break;case\"HemisphereLight\":t={direction:new L,skyColor:new Le,groundColor:new Le};break;case\"RectAreaLight\":t={color:new Le,position:new L,halfWidth:new L,halfHeight:new L};break}return r[e.id]=t,t}}}function t0(){const r={};return{get:function(e){if(r[e.id]!==void 0)return r[e.id];let t;switch(e.type){case\"DirectionalLight\":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fe};break;case\"SpotLight\":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fe};break;case\"PointLight\":t={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new fe,shadowCameraNear:1,shadowCameraFar:1e3};break}return r[e.id]=t,t}}}let i0=0;function n0(r,e){return(e.castShadow?1:0)-(r.castShadow?1:0)}function r0(r,e){const t=new e0,i=t0(),n={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1},ambient:[0,0,0],probe:[],directional:[],directionalShadow:[],directionalShadowMap:[],directionalShadowMatrix:[],spot:[],spotShadow:[],spotShadowMap:[],spotShadowMatrix:[],rectArea:[],rectAreaLTC1:null,rectAreaLTC2:null,point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]};for(let u=0;u\u003c9;u++)n.probe.push(new L);const s=new L,o=new ct,a=new ct;function l(u,h){let f=0,m=0,_=0;for(let E=0;E\u003c9;E++)n.probe[E].set(0,0,0);let d=0,p=0,g=0,S=0,A=0,b=0,v=0,w=0;u.sort(n0);const R=h!==!0?Math.PI:1;for(let E=0,I=u.length;E\u003cI;E++){const F=u[E],j=F.color,Z=F.intensity,P=F.distance,H=F.shadow\u0026\u0026F.shadow.map?F.shadow.map.texture:null;if(F.isAmbientLight)f+=j.r*Z*R,m+=j.g*Z*R,_+=j.b*Z*R;else if(F.isLightProbe)for(let U=0;U\u003c9;U++)n.probe[U].addScaledVector(F.sh.coefficients[U],Z);else if(F.isDirectionalLight){const U=t.get(F);if(U.color.copy(F.color).multiplyScalar(F.intensity*R),F.castShadow){const V=F.shadow,X=i.get(F);X.shadowBias=V.bias,X.shadowNormalBias=V.normalBias,X.shadowRadius=V.radius,X.shadowMapSize=V.mapSize,n.directionalShadow[d]=X,n.directionalShadowMap[d]=H,n.directionalShadowMatrix[d]=F.shadow.matrix,b++}n.directional[d]=U,d++}else if(F.isSpotLight){const U=t.get(F);if(U.position.setFromMatrixPosition(F.matrixWorld),U.color.copy(j).multiplyScalar(Z*R),U.distance=P,U.coneCos=Math.cos(F.angle),U.penumbraCos=Math.cos(F.angle*(1-F.penumbra)),U.decay=F.decay,F.castShadow){const V=F.shadow,X=i.get(F);X.shadowBias=V.bias,X.shadowNormalBias=V.normalBias,X.shadowRadius=V.radius,X.shadowMapSize=V.mapSize,n.spotShadow[g]=X,n.spotShadowMap[g]=H,n.spotShadowMatrix[g]=F.shadow.matrix,w++}n.spot[g]=U,g++}else if(F.isRectAreaLight){const U=t.get(F);U.color.copy(j).multiplyScalar(Z),U.halfWidth.set(F.width*.5,0,0),U.halfHeight.set(0,F.height*.5,0),n.rectArea[S]=U,S++}else if(F.isPointLight){const U=t.get(F);if(U.color.copy(F.color).multiplyScalar(F.intensity*R),U.distance=F.distance,U.decay=F.decay,F.castShadow){const V=F.shadow,X=i.get(F);X.shadowBias=V.bias,X.shadowNormalBias=V.normalBias,X.shadowRadius=V.radius,X.shadowMapSize=V.mapSize,X.shadowCameraNear=V.camera.near,X.shadowCameraFar=V.camera.far,n.pointShadow[p]=X,n.pointShadowMap[p]=H,n.pointShadowMatrix[p]=F.shadow.matrix,v++}n.point[p]=U,p++}else if(F.isHemisphereLight){const U=t.get(F);U.skyColor.copy(F.color).multiplyScalar(Z*R),U.groundColor.copy(F.groundColor).multiplyScalar(Z*R),n.hemi[A]=U,A++}}S\u003e0\u0026\u0026(e.isWebGL2||r.has(\"OES_texture_float_linear\")===!0?(n.rectAreaLTC1=se.LTC_FLOAT_1,n.rectAreaLTC2=se.LTC_FLOAT_2):r.has(\"OES_texture_half_float_linear\")===!0?(n.rectAreaLTC1=se.LTC_HALF_1,n.rectAreaLTC2=se.LTC_HALF_2):console.error(\"THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.\")),n.ambient[0]=f,n.ambient[1]=m,n.ambient[2]=_;const x=n.hash;(x.directionalLength!==d||x.pointLength!==p||x.spotLength!==g||x.rectAreaLength!==S||x.hemiLength!==A||x.numDirectionalShadows!==b||x.numPointShadows!==v||x.numSpotShadows!==w)\u0026\u0026(n.directional.length=d,n.spot.length=g,n.rectArea.length=S,n.point.length=p,n.hemi.length=A,n.directionalShadow.length=b,n.directionalShadowMap.length=b,n.pointShadow.length=v,n.pointShadowMap.length=v,n.spotShadow.length=w,n.spotShadowMap.length=w,n.directionalShadowMatrix.length=b,n.pointShadowMatrix.length=v,n.spotShadowMatrix.length=w,x.directionalLength=d,x.pointLength=p,x.spotLength=g,x.rectAreaLength=S,x.hemiLength=A,x.numDirectionalShadows=b,x.numPointShadows=v,x.numSpotShadows=w,n.version=i0++)}function c(u,h){let f=0,m=0,_=0,d=0,p=0;const g=h.matrixWorldInverse;for(let S=0,A=u.length;S\u003cA;S++){const b=u[S];if(b.isDirectionalLight){const v=n.directional[f];v.direction.setFromMatrixPosition(b.matrixWorld),s.setFromMatrixPosition(b.target.matrixWorld),v.direction.sub(s),v.direction.transformDirection(g),f++}else if(b.isSpotLight){const v=n.spot[_];v.position.setFromMatrixPosition(b.matrixWorld),v.position.applyMatrix4(g),v.direction.setFromMatrixPosition(b.matrixWorld),s.setFromMatrixPosition(b.target.matrixWorld),v.direction.sub(s),v.direction.transformDirection(g),_++}else if(b.isRectAreaLight){const v=n.rectArea[d];v.position.setFromMatrixPosition(b.matrixWorld),v.position.applyMatrix4(g),a.identity(),o.copy(b.matrixWorld),o.premultiply(g),a.extractRotation(o),v.halfWidth.set(b.width*.5,0,0),v.halfHeight.set(0,b.height*.5,0),v.halfWidth.applyMatrix4(a),v.halfHeight.applyMatrix4(a),d++}else if(b.isPointLight){const v=n.point[m];v.position.setFromMatrixPosition(b.matrixWorld),v.position.applyMatrix4(g),m++}else if(b.isHemisphereLight){const v=n.hemi[p];v.direction.setFromMatrixPosition(b.matrixWorld),v.direction.transformDirection(g),p++}}}return{setup:l,setupView:c,state:n}}function yc(r,e){const t=new r0(r,e),i=[],n=[];function s(){i.length=0,n.length=0}function o(h){i.push(h)}function a(h){n.push(h)}function l(h){t.setup(i,h)}function c(h){t.setupView(i,h)}return{init:s,state:{lightsArray:i,shadowsArray:n,lights:t},setupLights:l,setupLightsView:c,pushLight:o,pushShadow:a}}function s0(r,e){let t=new WeakMap;function i(s,o=0){let a;return t.has(s)===!1?(a=new yc(r,e),t.set(s,[a])):o\u003e=t.get(s).length?(a=new yc(r,e),t.get(s).push(a)):a=t.get(s)[o],a}function n(){t=new WeakMap}return{get:i,dispose:n}}class o0 extends Zr{constructor(e){super();this.isMeshDepthMaterial=!0,this.type=\"MeshDepthMaterial\",this.depthPacking=uf,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.setValues(e)}copy(e){return super.copy(e),this.depthPacking=e.depthPacking,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this}}class a0 extends Zr{constructor(e){super();this.isMeshDistanceMaterial=!0,this.type=\"MeshDistanceMaterial\",this.referencePosition=new L,this.nearDistance=1,this.farDistance=1e3,this.map=null,this.alphaMap=null,this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.setValues(e)}copy(e){return super.copy(e),this.referencePosition.copy(e.referencePosition),this.nearDistance=e.nearDistance,this.farDistance=e.farDistance,this.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}}const l0=`\nvoid main() {\n\n\tgl_Position = vec4( position, 1.0 );\n\n}\n`,c0=`\nuniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n\n#include \u003cpacking\u003e\n\nvoid main() {\n\n\tconst float samples = float( VSM_SAMPLES );\n\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\n\t// This seems totally useless but it's a crazy work around for a Adreno compiler bug\n\t// float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );\n\n\tfloat uvStride = samples \u003c= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples \u003c= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i \u003c samples; i ++ ) {\n\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\n\t\t#ifdef HORIZONTAL_PASS\n\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\n\t\t#else\n\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\n\t\t#endif\n\n\t}\n\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n\n}\n`;function u0(r,e,t){let i=new Iu;const n=new fe,s=new fe,o=new dt,a=new o0({depthPacking:hf}),l=new a0,c={},u=t.maxTextureSize,h={0:jt,1:Dr,2:Qn},f=new Sn({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new fe},radius:{value:4}},vertexShader:l0,fragmentShader:c0}),m=f.clone();m.defines.HORIZONTAL_PASS=1;const _=new Ri;_.setAttribute(\"position\",new ci(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));const d=new xt(_,f),p=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=Cc,this.render=function(b,v,w){if(p.enabled===!1||p.autoUpdate===!1\u0026\u0026p.needsUpdate===!1||b.length===0)return;const R=r.getRenderTarget(),x=r.getActiveCubeFace(),E=r.getActiveMipmapLevel(),I=r.state;I.setBlending(Vi),I.buffers.color.setClear(1,1,1,1),I.buffers.depth.setTest(!0),I.setScissorTest(!1);for(let F=0,j=b.length;F\u003cj;F++){const Z=b[F],P=Z.shadow;if(P===void 0){console.warn(\"THREE.WebGLShadowMap:\",Z,\"has no shadow.\");continue}if(P.autoUpdate===!1\u0026\u0026P.needsUpdate===!1)continue;n.copy(P.mapSize);const H=P.getFrameExtents();if(n.multiply(H),s.copy(P.mapSize),(n.x\u003eu||n.y\u003eu)\u0026\u0026(n.x\u003eu\u0026\u0026(s.x=Math.floor(u/H.x),n.x=s.x*H.x,P.mapSize.x=s.x),n.y\u003eu\u0026\u0026(s.y=Math.floor(u/H.y),n.y=s.y*H.y,P.mapSize.y=s.y)),P.map===null\u0026\u0026!P.isPointLightShadow\u0026\u0026this.type===yr\u0026\u0026(P.map=new qi(n.x,n.y),P.map.texture.name=Z.name+\".shadowMap\",P.mapPass=new qi(n.x,n.y),P.camera.updateProjectionMatrix()),P.map===null){const V={minFilter:Mt,magFilter:Mt,format:Kt};P.map=new qi(n.x,n.y,V),P.map.texture.name=Z.name+\".shadowMap\",P.camera.updateProjectionMatrix()}r.setRenderTarget(P.map),r.clear();const U=P.getViewportCount();for(let V=0;V\u003cU;V++){const X=P.getViewport(V);o.set(s.x*X.x,s.y*X.y,s.x*X.z,s.y*X.w),I.viewport(o),P.updateMatrices(Z,V),i=P.getFrustum(),A(v,w,P.camera,Z,this.type)}!P.isPointLightShadow\u0026\u0026this.type===yr\u0026\u0026g(P,w),P.needsUpdate=!1}p.needsUpdate=!1,r.setRenderTarget(R,x,E)};function g(b,v){const w=e.update(d);f.defines.VSM_SAMPLES!==b.blurSamples\u0026\u0026(f.defines.VSM_SAMPLES=b.blurSamples,m.defines.VSM_SAMPLES=b.blurSamples,f.needsUpdate=!0,m.needsUpdate=!0),f.uniforms.shadow_pass.value=b.map.texture,f.uniforms.resolution.value=b.mapSize,f.uniforms.radius.value=b.radius,r.setRenderTarget(b.mapPass),r.clear(),r.renderBufferDirect(v,null,w,f,d,null),m.uniforms.shadow_pass.value=b.mapPass.texture,m.uniforms.resolution.value=b.mapSize,m.uniforms.radius.value=b.radius,r.setRenderTarget(b.map),r.clear(),r.renderBufferDirect(v,null,w,m,d,null)}function S(b,v,w,R,x,E){let I=null;const F=w.isPointLight===!0?b.customDistanceMaterial:b.customDepthMaterial;if(F!==void 0?I=F:I=w.isPointLight===!0?l:a,r.localClippingEnabled\u0026\u0026v.clipShadows===!0\u0026\u0026v.clippingPlanes.length!==0||v.displacementMap\u0026\u0026v.displacementScale!==0||v.alphaMap\u0026\u0026v.alphaTest\u003e0){const j=I.uuid,Z=v.uuid;let P=c[j];P===void 0\u0026\u0026(P={},c[j]=P);let H=P[Z];H===void 0\u0026\u0026(H=I.clone(),P[Z]=H),I=H}return I.visible=v.visible,I.wireframe=v.wireframe,E===yr?I.side=v.shadowSide!==null?v.shadowSide:v.side:I.side=v.shadowSide!==null?v.shadowSide:h[v.side],I.alphaMap=v.alphaMap,I.alphaTest=v.alphaTest,I.clipShadows=v.clipShadows,I.clippingPlanes=v.clippingPlanes,I.clipIntersection=v.clipIntersection,I.displacementMap=v.displacementMap,I.displacementScale=v.displacementScale,I.displacementBias=v.displacementBias,I.wireframeLinewidth=v.wireframeLinewidth,I.linewidth=v.linewidth,w.isPointLight===!0\u0026\u0026I.isMeshDistanceMaterial===!0\u0026\u0026(I.referencePosition.setFromMatrixPosition(w.matrixWorld),I.nearDistance=R,I.farDistance=x),I}function A(b,v,w,R,x){if(b.visible===!1)return;if(b.layers.test(v.layers)\u0026\u0026(b.isMesh||b.isLine||b.isPoints)\u0026\u0026(b.castShadow||b.receiveShadow\u0026\u0026x===yr)\u0026\u0026(!b.frustumCulled||i.intersectsObject(b))){b.modelViewMatrix.multiplyMatrices(w.matrixWorldInverse,b.matrixWorld);const F=e.update(b),j=b.material;if(Array.isArray(j)){const Z=F.groups;for(let P=0,H=Z.length;P\u003cH;P++){const U=Z[P],V=j[U.materialIndex];if(V\u0026\u0026V.visible){const X=S(b,V,R,w.near,w.far,x);r.renderBufferDirect(w,null,F,X,b,U)}}}else if(j.visible){const Z=S(b,j,R,w.near,w.far,x);r.renderBufferDirect(w,null,F,Z,b,null)}}const I=b.children;for(let F=0,j=I.length;F\u003cj;F++)A(I[F],v,w,R,x)}}function h0(r,e,t){const i=t.isWebGL2;function n(){let C=!1;const re=new dt;let ne=null;const me=new dt(0,0,0,0);return{setMask:function(ue){ne!==ue\u0026\u0026!C\u0026\u0026(r.colorMask(ue,ue,ue,ue),ne=ue)},setLocked:function(ue){C=ue},setClear:function(ue,xe,te,ve,Ne){Ne===!0\u0026\u0026(ue*=ve,xe*=ve,te*=ve),re.set(ue,xe,te,ve),me.equals(re)===!1\u0026\u0026(r.clearColor(ue,xe,te,ve),me.copy(re))},reset:function(){C=!1,ne=null,me.set(-1,0,0,0)}}}function s(){let C=!1,re=null,ne=null,me=null;return{setTest:function(ue){ue?pe(r.DEPTH_TEST):D(r.DEPTH_TEST)},setMask:function(ue){re!==ue\u0026\u0026!C\u0026\u0026(r.depthMask(ue),re=ue)},setFunc:function(ue){if(ne!==ue){if(ue)switch(ue){case Fh:r.depthFunc(r.NEVER);break;case Ih:r.depthFunc(r.ALWAYS);break;case Nh:r.depthFunc(r.LESS);break;case qo:r.depthFunc(r.LEQUAL);break;case Oh:r.depthFunc(r.EQUAL);break;case Uh:r.depthFunc(r.GEQUAL);break;case zh:r.depthFunc(r.GREATER);break;case Bh:r.depthFunc(r.NOTEQUAL);break;default:r.depthFunc(r.LEQUAL)}else r.depthFunc(r.LEQUAL);ne=ue}},setLocked:function(ue){C=ue},setClear:function(ue){me!==ue\u0026\u0026(r.clearDepth(ue),me=ue)},reset:function(){C=!1,re=null,ne=null,me=null}}}function o(){let C=!1,re=null,ne=null,me=null,ue=null,xe=null,te=null,ve=null,Ne=null;return{setTest:function(Oe){C||(Oe?pe(r.STENCIL_TEST):D(r.STENCIL_TEST))},setMask:function(Oe){re!==Oe\u0026\u0026!C\u0026\u0026(r.stencilMask(Oe),re=Oe)},setFunc:function(Oe,mt,ti){(ne!==Oe||me!==mt||ue!==ti)\u0026\u0026(r.stencilFunc(Oe,mt,ti),ne=Oe,me=mt,ue=ti)},setOp:function(Oe,mt,ti){(xe!==Oe||te!==mt||ve!==ti)\u0026\u0026(r.stencilOp(Oe,mt,ti),xe=Oe,te=mt,ve=ti)},setLocked:function(Oe){C=Oe},setClear:function(Oe){Ne!==Oe\u0026\u0026(r.clearStencil(Oe),Ne=Oe)},reset:function(){C=!1,re=null,ne=null,me=null,ue=null,xe=null,te=null,ve=null,Ne=null}}}const a=new n,l=new s,c=new o;let u={},h={},f=new WeakMap,m=[],_=null,d=!1,p=null,g=null,S=null,A=null,b=null,v=null,w=null,R=!1,x=null,E=null,I=null,F=null,j=null;const Z=r.getParameter(r.MAX_COMBINED_TEXTURE_IMAGE_UNITS);let P=!1,H=0;const U=r.getParameter(r.VERSION);U.indexOf(\"WebGL\")!==-1?(H=parseFloat(/^WebGL (\\d)/.exec(U)[1]),P=H\u003e=1):U.indexOf(\"OpenGL ES\")!==-1\u0026\u0026(H=parseFloat(/^OpenGL ES (\\d)/.exec(U)[1]),P=H\u003e=2);let V=null,X={};const B=r.getParameter(r.SCISSOR_BOX),q=r.getParameter(r.VIEWPORT),Q=new dt().fromArray(B),K=new dt().fromArray(q);function J(C,re,ne){const me=new Uint8Array(4),ue=r.createTexture();r.bindTexture(C,ue),r.texParameteri(C,r.TEXTURE_MIN_FILTER,r.NEAREST),r.texParameteri(C,r.TEXTURE_MAG_FILTER,r.NEAREST);for(let xe=0;xe\u003cne;xe++)r.texImage2D(re+xe,0,r.RGBA,1,1,0,r.RGBA,r.UNSIGNED_BYTE,me);return ue}const ae={};ae[r.TEXTURE_2D]=J(r.TEXTURE_2D,r.TEXTURE_2D,1),ae[r.TEXTURE_CUBE_MAP]=J(r.TEXTURE_CUBE_MAP,r.TEXTURE_CUBE_MAP_POSITIVE_X,6),a.setClear(0,0,0,1),l.setClear(1),c.setClear(0),pe(r.DEPTH_TEST),l.setFunc(qo),ut(!1),St(Za),pe(r.CULL_FACE),Ce(Vi);function pe(C){u[C]!==!0\u0026\u0026(r.enable(C),u[C]=!0)}function D(C){u[C]!==!1\u0026\u0026(r.disable(C),u[C]=!1)}function We(C,re){return h[C]!==re?(r.bindFramebuffer(C,re),h[C]=re,i\u0026\u0026(C===r.DRAW_FRAMEBUFFER\u0026\u0026(h[r.FRAMEBUFFER]=re),C===r.FRAMEBUFFER\u0026\u0026(h[r.DRAW_FRAMEBUFFER]=re)),!0):!1}function Ee(C,re){let ne=m,me=!1;if(C)if(ne=f.get(re),ne===void 0\u0026\u0026(ne=[],f.set(re,ne)),C.isWebGLMultipleRenderTargets){const ue=C.texture;if(ne.length!==ue.length||ne[0]!==r.COLOR_ATTACHMENT0){for(let xe=0,te=ue.length;xe\u003cte;xe++)ne[xe]=r.COLOR_ATTACHMENT0+xe;ne.length=ue.length,me=!0}}else ne[0]!==r.COLOR_ATTACHMENT0\u0026\u0026(ne[0]=r.COLOR_ATTACHMENT0,me=!0);else ne[0]!==r.BACK\u0026\u0026(ne[0]=r.BACK,me=!0);me\u0026\u0026(t.isWebGL2?r.drawBuffers(ne):e.get(\"WEBGL_draw_buffers\").drawBuffersWEBGL(ne))}function be(C){return _!==C?(r.useProgram(C),_=C,!0):!1}const le={[Hn]:r.FUNC_ADD,[Mh]:r.FUNC_SUBTRACT,[Eh]:r.FUNC_REVERSE_SUBTRACT};if(i)le[$a]=r.MIN,le[Qa]=r.MAX;else{const C=e.get(\"EXT_blend_minmax\");C!==null\u0026\u0026(le[$a]=C.MIN_EXT,le[Qa]=C.MAX_EXT)}const ze={[bh]:r.ZERO,[wh]:r.ONE,[Th]:r.SRC_COLOR,[Pc]:r.SRC_ALPHA,[Dh]:r.SRC_ALPHA_SATURATE,[Ph]:r.DST_COLOR,[Rh]:r.DST_ALPHA,[Ah]:r.ONE_MINUS_SRC_COLOR,[Lc]:r.ONE_MINUS_SRC_ALPHA,[Lh]:r.ONE_MINUS_DST_COLOR,[Ch]:r.ONE_MINUS_DST_ALPHA};function Ce(C,re,ne,me,ue,xe,te,ve){if(C===Vi){d===!0\u0026\u0026(D(r.BLEND),d=!1);return}if(d===!1\u0026\u0026(pe(r.BLEND),d=!0),C!==Sh){if(C!==p||ve!==R){if((g!==Hn||b!==Hn)\u0026\u0026(r.blendEquation(r.FUNC_ADD),g=Hn,b=Hn),ve)switch(C){case Jn:r.blendFuncSeparate(r.ONE,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA);break;case Ja:r.blendFunc(r.ONE,r.ONE);break;case Ka:r.blendFuncSeparate(r.ZERO,r.ONE_MINUS_SRC_COLOR,r.ZERO,r.ONE);break;case ja:r.blendFuncSeparate(r.ZERO,r.SRC_COLOR,r.ZERO,r.SRC_ALPHA);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",C);break}else switch(C){case Jn:r.blendFuncSeparate(r.SRC_ALPHA,r.ONE_MINUS_SRC_ALPHA,r.ONE,r.ONE_MINUS_SRC_ALPHA);break;case Ja:r.blendFunc(r.SRC_ALPHA,r.ONE);break;case Ka:r.blendFuncSeparate(r.ZERO,r.ONE_MINUS_SRC_COLOR,r.ZERO,r.ONE);break;case ja:r.blendFunc(r.ZERO,r.SRC_COLOR);break;default:console.error(\"THREE.WebGLState: Invalid blending: \",C);break}S=null,A=null,v=null,w=null,p=C,R=ve}return}ue=ue||re,xe=xe||ne,te=te||me,(re!==g||ue!==b)\u0026\u0026(r.blendEquationSeparate(le[re],le[ue]),g=re,b=ue),(ne!==S||me!==A||xe!==v||te!==w)\u0026\u0026(r.blendFuncSeparate(ze[ne],ze[me],ze[xe],ze[te]),S=ne,A=me,v=xe,w=te),p=C,R=null}function ye(C,re){C.side===Qn?D(r.CULL_FACE):pe(r.CULL_FACE);let ne=C.side===jt;re\u0026\u0026(ne=!ne),ut(ne),C.blending===Jn\u0026\u0026C.transparent===!1?Ce(Vi):Ce(C.blending,C.blendEquation,C.blendSrc,C.blendDst,C.blendEquationAlpha,C.blendSrcAlpha,C.blendDstAlpha,C.premultipliedAlpha),l.setFunc(C.depthFunc),l.setTest(C.depthTest),l.setMask(C.depthWrite),a.setMask(C.colorWrite);const me=C.stencilWrite;c.setTest(me),me\u0026\u0026(c.setMask(C.stencilWriteMask),c.setFunc(C.stencilFunc,C.stencilRef,C.stencilFuncMask),c.setOp(C.stencilFail,C.stencilZFail,C.stencilZPass)),ei(C.polygonOffset,C.polygonOffsetFactor,C.polygonOffsetUnits),C.alphaToCoverage===!0?pe(r.SAMPLE_ALPHA_TO_COVERAGE):D(r.SAMPLE_ALPHA_TO_COVERAGE)}function ut(C){x!==C\u0026\u0026(C?r.frontFace(r.CW):r.frontFace(r.CCW),x=C)}function St(C){C!==gh?(pe(r.CULL_FACE),C!==E\u0026\u0026(C===Za?r.cullFace(r.BACK):C===xh?r.cullFace(r.FRONT):r.cullFace(r.FRONT_AND_BACK))):D(r.CULL_FACE),E=C}function Rt(C){C!==I\u0026\u0026(P\u0026\u0026r.lineWidth(C),I=C)}function ei(C,re,ne){C?(pe(r.POLYGON_OFFSET_FILL),(F!==re||j!==ne)\u0026\u0026(r.polygonOffset(re,ne),F=re,j=ne)):D(r.POLYGON_OFFSET_FILL)}function ot(C){C?pe(r.SCISSOR_TEST):D(r.SCISSOR_TEST)}function Be(C){C===void 0\u0026\u0026(C=r.TEXTURE0+Z-1),V!==C\u0026\u0026(r.activeTexture(C),V=C)}function fi(C,re){V===null\u0026\u0026Be();let ne=X[V];ne===void 0\u0026\u0026(ne={type:void 0,texture:void 0},X[V]=ne),(ne.type!==C||ne.texture!==re)\u0026\u0026(r.bindTexture(C,re||ae[C]),ne.type=C,ne.texture=re)}function di(){const C=X[V];C!==void 0\u0026\u0026C.type!==void 0\u0026\u0026(r.bindTexture(C.type,null),C.type=void 0,C.texture=void 0)}function T(){try{r.compressedTexImage2D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function y(){try{r.texSubImage2D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function W(){try{r.texSubImage3D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function ee(){try{r.compressedTexSubImage2D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function ie(){try{r.texStorage2D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function oe(){try{r.texStorage3D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function Se(){try{r.texImage2D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function k(){try{r.texImage3D.apply(r,arguments)}catch(C){console.error(\"THREE.WebGLState:\",C)}}function de(C){Q.equals(C)===!1\u0026\u0026(r.scissor(C.x,C.y,C.z,C.w),Q.copy(C))}function he(C){K.equals(C)===!1\u0026\u0026(r.viewport(C.x,C.y,C.z,C.w),K.copy(C))}function ce(){r.disable(r.BLEND),r.disable(r.CULL_FACE),r.disable(r.DEPTH_TEST),r.disable(r.POLYGON_OFFSET_FILL),r.disable(r.SCISSOR_TEST),r.disable(r.STENCIL_TEST),r.disable(r.SAMPLE_ALPHA_TO_COVERAGE),r.blendEquation(r.FUNC_ADD),r.blendFunc(r.ONE,r.ZERO),r.blendFuncSeparate(r.ONE,r.ZERO,r.ONE,r.ZERO),r.colorMask(!0,!0,!0,!0),r.clearColor(0,0,0,0),r.depthMask(!0),r.depthFunc(r.LESS),r.clearDepth(1),r.stencilMask(4294967295),r.stencilFunc(r.ALWAYS,0,4294967295),r.stencilOp(r.KEEP,r.KEEP,r.KEEP),r.clearStencil(0),r.cullFace(r.BACK),r.frontFace(r.CCW),r.polygonOffset(0,0),r.activeTexture(r.TEXTURE0),r.bindFramebuffer(r.FRAMEBUFFER,null),i===!0\u0026\u0026(r.bindFramebuffer(r.DRAW_FRAMEBUFFER,null),r.bindFramebuffer(r.READ_FRAMEBUFFER,null)),r.useProgram(null),r.lineWidth(1),r.scissor(0,0,r.canvas.width,r.canvas.height),r.viewport(0,0,r.canvas.width,r.canvas.height),u={},V=null,X={},h={},f=new WeakMap,m=[],_=null,d=!1,p=null,g=null,S=null,A=null,b=null,v=null,w=null,R=!1,x=null,E=null,I=null,F=null,j=null,Q.set(0,0,r.canvas.width,r.canvas.height),K.set(0,0,r.canvas.width,r.canvas.height),a.reset(),l.reset(),c.reset()}return{buffers:{color:a,depth:l,stencil:c},enable:pe,disable:D,bindFramebuffer:We,drawBuffers:Ee,useProgram:be,setBlending:Ce,setMaterial:ye,setFlipSided:ut,setCullFace:St,setLineWidth:Rt,setPolygonOffset:ei,setScissorTest:ot,activeTexture:Be,bindTexture:fi,unbindTexture:di,compressedTexImage2D:T,texImage2D:Se,texImage3D:k,texStorage2D:ie,texStorage3D:oe,texSubImage2D:y,texSubImage3D:W,compressedTexSubImage2D:ee,scissor:de,viewport:he,reset:ce}}function f0(r,e,t,i,n,s,o){const a=n.isWebGL2,l=n.maxTextures,c=n.maxCubemapSize,u=n.maxTextureSize,h=n.maxSamples,f=e.has(\"WEBGL_multisampled_render_to_texture\")?e.get(\"WEBGL_multisampled_render_to_texture\"):null,m=/OculusBrowser/g.test(navigator.userAgent),_=new WeakMap;let d;const p=new WeakMap;let g=!1;try{g=typeof OffscreenCanvas!=\"undefined\"\u0026\u0026new OffscreenCanvas(1,1).getContext(\"2d\")!==null}catch{}function S(T,y){return g?new OffscreenCanvas(T,y):Us(\"canvas\")}function A(T,y,W,ee){let ie=1;if((T.width\u003eee||T.height\u003eee)\u0026\u0026(ie=ee/Math.max(T.width,T.height)),ie\u003c1||y===!0)if(typeof HTMLImageElement!=\"undefined\"\u0026\u0026T instanceof HTMLImageElement||typeof HTMLCanvasElement!=\"undefined\"\u0026\u0026T instanceof HTMLCanvasElement||typeof ImageBitmap!=\"undefined\"\u0026\u0026T instanceof ImageBitmap){const oe=y?Xo:Math.floor,Se=oe(ie*T.width),k=oe(ie*T.height);d===void 0\u0026\u0026(d=S(Se,k));const de=W?S(Se,k):d;return de.width=Se,de.height=k,de.getContext(\"2d\").drawImage(T,0,0,Se,k),console.warn(\"THREE.WebGLRenderer: Texture has been resized from (\"+T.width+\"x\"+T.height+\") to (\"+Se+\"x\"+k+\").\"),de}else return\"data\"in T\u0026\u0026console.warn(\"THREE.WebGLRenderer: Image in DataTexture is too big (\"+T.width+\"x\"+T.height+\").\"),T;return T}function b(T){return Ya(T.width)\u0026\u0026Ya(T.height)}function v(T){return a?!1:T.wrapS!==Jt||T.wrapT!==Jt||T.minFilter!==Mt\u0026\u0026T.minFilter!==Ut}function w(T,y){return T.generateMipmaps\u0026\u0026y\u0026\u0026T.minFilter!==Mt\u0026\u0026T.minFilter!==Ut}function R(T){r.generateMipmap(T)}function x(T,y,W,ee,ie=!1){if(a===!1)return y;if(T!==null){if(r[T]!==void 0)return r[T];console.warn(\"THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '\"+T+\"'\")}let oe=y;return y===r.RED\u0026\u0026(W===r.FLOAT\u0026\u0026(oe=r.R32F),W===r.HALF_FLOAT\u0026\u0026(oe=r.R16F),W===r.UNSIGNED_BYTE\u0026\u0026(oe=r.R8)),y===r.RG\u0026\u0026(W===r.FLOAT\u0026\u0026(oe=r.RG32F),W===r.HALF_FLOAT\u0026\u0026(oe=r.RG16F),W===r.UNSIGNED_BYTE\u0026\u0026(oe=r.RG8)),y===r.RGBA\u0026\u0026(W===r.FLOAT\u0026\u0026(oe=r.RGBA32F),W===r.HALF_FLOAT\u0026\u0026(oe=r.RGBA16F),W===r.UNSIGNED_BYTE\u0026\u0026(oe=ee===Xe\u0026\u0026ie===!1?r.SRGB8_ALPHA8:r.RGBA8),W===r.UNSIGNED_SHORT_4_4_4_4\u0026\u0026(oe=r.RGBA4),W===r.UNSIGNED_SHORT_5_5_5_1\u0026\u0026(oe=r.RGB5_A1)),(oe===r.R16F||oe===r.R32F||oe===r.RG16F||oe===r.RG32F||oe===r.RGBA16F||oe===r.RGBA32F)\u0026\u0026e.get(\"EXT_color_buffer_float\"),oe}function E(T,y,W){return w(T,W)===!0||T.isFramebufferTexture\u0026\u0026T.minFilter!==Mt\u0026\u0026T.minFilter!==Ut?Math.log2(Math.max(y.width,y.height))+1:T.mipmaps!==void 0\u0026\u0026T.mipmaps.length\u003e0?T.mipmaps.length:T.isCompressedTexture\u0026\u0026Array.isArray(T.image)?y.mipmaps.length:1}function I(T){return T===Mt||T===el||T===tl?r.NEAREST:r.LINEAR}function F(T){const y=T.target;y.removeEventListener(\"dispose\",F),Z(y),y.isVideoTexture\u0026\u0026_.delete(y)}function j(T){const y=T.target;y.removeEventListener(\"dispose\",j),H(y)}function Z(T){const y=i.get(T);if(y.__webglInit===void 0)return;const W=T.source,ee=p.get(W);if(ee){const ie=ee[y.__cacheKey];ie.usedTimes--,ie.usedTimes===0\u0026\u0026P(T),Object.keys(ee).length===0\u0026\u0026p.delete(W)}i.remove(T)}function P(T){const y=i.get(T);r.deleteTexture(y.__webglTexture);const W=T.source,ee=p.get(W);delete ee[y.__cacheKey],o.memory.textures--}function H(T){const y=T.texture,W=i.get(T),ee=i.get(y);if(ee.__webglTexture!==void 0\u0026\u0026(r.deleteTexture(ee.__webglTexture),o.memory.textures--),T.depthTexture\u0026\u0026T.depthTexture.dispose(),T.isWebGLCubeRenderTarget)for(let ie=0;ie\u003c6;ie++)r.deleteFramebuffer(W.__webglFramebuffer[ie]),W.__webglDepthbuffer\u0026\u0026r.deleteRenderbuffer(W.__webglDepthbuffer[ie]);else{if(r.deleteFramebuffer(W.__webglFramebuffer),W.__webglDepthbuffer\u0026\u0026r.deleteRenderbuffer(W.__webglDepthbuffer),W.__webglMultisampledFramebuffer\u0026\u0026r.deleteFramebuffer(W.__webglMultisampledFramebuffer),W.__webglColorRenderbuffer)for(let ie=0;ie\u003cW.__webglColorRenderbuffer.length;ie++)W.__webglColorRenderbuffer[ie]\u0026\u0026r.deleteRenderbuffer(W.__webglColorRenderbuffer[ie]);W.__webglDepthRenderbuffer\u0026\u0026r.deleteRenderbuffer(W.__webglDepthRenderbuffer)}if(T.isWebGLMultipleRenderTargets)for(let ie=0,oe=y.length;ie\u003coe;ie++){const Se=i.get(y[ie]);Se.__webglTexture\u0026\u0026(r.deleteTexture(Se.__webglTexture),o.memory.textures--),i.remove(y[ie])}i.remove(y),i.remove(T)}let U=0;function V(){U=0}function X(){const T=U;return T\u003e=l\u0026\u0026console.warn(\"THREE.WebGLTextures: Trying to use \"+T+\" texture units while this GPU supports only \"+l),U+=1,T}function B(T){const y=[];return y.push(T.wrapS),y.push(T.wrapT),y.push(T.magFilter),y.push(T.minFilter),y.push(T.anisotropy),y.push(T.internalFormat),y.push(T.format),y.push(T.type),y.push(T.generateMipmaps),y.push(T.premultiplyAlpha),y.push(T.flipY),y.push(T.unpackAlignment),y.push(T.encoding),y.join()}function q(T,y){const W=i.get(T);if(T.isVideoTexture\u0026\u0026fi(T),T.isRenderTargetTexture===!1\u0026\u0026T.version\u003e0\u0026\u0026W.__version!==T.version){const ee=T.image;if(ee===null)console.warn(\"THREE.WebGLRenderer: Texture marked for update but no image data found.\");else if(ee.complete===!1)console.warn(\"THREE.WebGLRenderer: Texture marked for update but image is incomplete\");else{Ee(W,T,y);return}}t.activeTexture(r.TEXTURE0+y),t.bindTexture(r.TEXTURE_2D,W.__webglTexture)}function Q(T,y){const W=i.get(T);if(T.version\u003e0\u0026\u0026W.__version!==T.version){Ee(W,T,y);return}t.activeTexture(r.TEXTURE0+y),t.bindTexture(r.TEXTURE_2D_ARRAY,W.__webglTexture)}function K(T,y){const W=i.get(T);if(T.version\u003e0\u0026\u0026W.__version!==T.version){Ee(W,T,y);return}t.activeTexture(r.TEXTURE0+y),t.bindTexture(r.TEXTURE_3D,W.__webglTexture)}function J(T,y){const W=i.get(T);if(T.version\u003e0\u0026\u0026W.__version!==T.version){be(W,T,y);return}t.activeTexture(r.TEXTURE0+y),t.bindTexture(r.TEXTURE_CUBE_MAP,W.__webglTexture)}const ae={[Jo]:r.REPEAT,[Jt]:r.CLAMP_TO_EDGE,[Ko]:r.MIRRORED_REPEAT},pe={[Mt]:r.NEAREST,[el]:r.NEAREST_MIPMAP_NEAREST,[tl]:r.NEAREST_MIPMAP_LINEAR,[Ut]:r.LINEAR,[Yh]:r.LINEAR_MIPMAP_NEAREST,[Bs]:r.LINEAR_MIPMAP_LINEAR};function D(T,y,W){if(W?(r.texParameteri(T,r.TEXTURE_WRAP_S,ae[y.wrapS]),r.texParameteri(T,r.TEXTURE_WRAP_T,ae[y.wrapT]),(T===r.TEXTURE_3D||T===r.TEXTURE_2D_ARRAY)\u0026\u0026r.texParameteri(T,r.TEXTURE_WRAP_R,ae[y.wrapR]),r.texParameteri(T,r.TEXTURE_MAG_FILTER,pe[y.magFilter]),r.texParameteri(T,r.TEXTURE_MIN_FILTER,pe[y.minFilter])):(r.texParameteri(T,r.TEXTURE_WRAP_S,r.CLAMP_TO_EDGE),r.texParameteri(T,r.TEXTURE_WRAP_T,r.CLAMP_TO_EDGE),(T===r.TEXTURE_3D||T===r.TEXTURE_2D_ARRAY)\u0026\u0026r.texParameteri(T,r.TEXTURE_WRAP_R,r.CLAMP_TO_EDGE),(y.wrapS!==Jt||y.wrapT!==Jt)\u0026\u0026console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.\"),r.texParameteri(T,r.TEXTURE_MAG_FILTER,I(y.magFilter)),r.texParameteri(T,r.TEXTURE_MIN_FILTER,I(y.minFilter)),y.minFilter!==Mt\u0026\u0026y.minFilter!==Ut\u0026\u0026console.warn(\"THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.\")),e.has(\"EXT_texture_filter_anisotropic\")===!0){const ee=e.get(\"EXT_texture_filter_anisotropic\");if(y.type===hn\u0026\u0026e.has(\"OES_texture_float_linear\")===!1||a===!1\u0026\u0026y.type===Fr\u0026\u0026e.has(\"OES_texture_half_float_linear\")===!1)return;(y.anisotropy\u003e1||i.get(y).__currentAnisotropy)\u0026\u0026(r.texParameterf(T,ee.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(y.anisotropy,n.getMaxAnisotropy())),i.get(y).__currentAnisotropy=y.anisotropy)}}function We(T,y){let W=!1;T.__webglInit===void 0\u0026\u0026(T.__webglInit=!0,y.addEventListener(\"dispose\",F));const ee=y.source;let ie=p.get(ee);ie===void 0\u0026\u0026(ie={},p.set(ee,ie));const oe=B(y);if(oe!==T.__cacheKey){ie[oe]===void 0\u0026\u0026(ie[oe]={texture:r.createTexture(),usedTimes:0},o.memory.textures++,W=!0),ie[oe].usedTimes++;const Se=ie[T.__cacheKey];Se!==void 0\u0026\u0026(ie[T.__cacheKey].usedTimes--,Se.usedTimes===0\u0026\u0026P(y)),T.__cacheKey=oe,T.__webglTexture=ie[oe].texture}return W}function Ee(T,y,W){let ee=r.TEXTURE_2D;y.isDataArrayTexture\u0026\u0026(ee=r.TEXTURE_2D_ARRAY),y.isData3DTexture\u0026\u0026(ee=r.TEXTURE_3D);const ie=We(T,y),oe=y.source;if(t.activeTexture(r.TEXTURE0+W),t.bindTexture(ee,T.__webglTexture),oe.version!==oe.__currentVersion||ie===!0){r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,y.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,y.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,r.NONE);const Se=v(y)\u0026\u0026b(y.image)===!1;let k=A(y.image,Se,!1,u);k=di(y,k);const de=b(k)||a,he=s.convert(y.format,y.encoding);let ce=s.convert(y.type),C=x(y.internalFormat,he,ce,y.encoding,y.isVideoTexture);D(ee,y,de);let re;const ne=y.mipmaps,me=a\u0026\u0026y.isVideoTexture!==!0,ue=oe.__currentVersion===void 0||ie===!0,xe=E(y,k,de);if(y.isDepthTexture)C=r.DEPTH_COMPONENT,a?y.type===hn?C=r.DEPTH_COMPONENT32F:y.type===un?C=r.DEPTH_COMPONENT24:y.type===Kn?C=r.DEPTH24_STENCIL8:C=r.DEPTH_COMPONENT16:y.type===hn\u0026\u0026console.error(\"WebGLRenderer: Floating point depth texture requires WebGL2.\"),y.format===pn\u0026\u0026C===r.DEPTH_COMPONENT\u0026\u0026y.type!==Ic\u0026\u0026y.type!==un\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.\"),y.type=un,ce=s.convert(y.type)),y.format===ir\u0026\u0026C===r.DEPTH_COMPONENT\u0026\u0026(C=r.DEPTH_STENCIL,y.type!==Kn\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.\"),y.type=Kn,ce=s.convert(y.type))),ue\u0026\u0026(me?t.texStorage2D(r.TEXTURE_2D,1,C,k.width,k.height):t.texImage2D(r.TEXTURE_2D,0,C,k.width,k.height,0,he,ce,null));else if(y.isDataTexture)if(ne.length\u003e0\u0026\u0026de){me\u0026\u0026ue\u0026\u0026t.texStorage2D(r.TEXTURE_2D,xe,C,ne[0].width,ne[0].height);for(let te=0,ve=ne.length;te\u003cve;te++)re=ne[te],me?t.texSubImage2D(r.TEXTURE_2D,te,0,0,re.width,re.height,he,ce,re.data):t.texImage2D(r.TEXTURE_2D,te,C,re.width,re.height,0,he,ce,re.data);y.generateMipmaps=!1}else me?(ue\u0026\u0026t.texStorage2D(r.TEXTURE_2D,xe,C,k.width,k.height),t.texSubImage2D(r.TEXTURE_2D,0,0,0,k.width,k.height,he,ce,k.data)):t.texImage2D(r.TEXTURE_2D,0,C,k.width,k.height,0,he,ce,k.data);else if(y.isCompressedTexture){me\u0026\u0026ue\u0026\u0026t.texStorage2D(r.TEXTURE_2D,xe,C,ne[0].width,ne[0].height);for(let te=0,ve=ne.length;te\u003cve;te++)re=ne[te],y.format!==Kt?he!==null?me?t.compressedTexSubImage2D(r.TEXTURE_2D,te,0,0,re.width,re.height,he,re.data):t.compressedTexImage2D(r.TEXTURE_2D,te,C,re.width,re.height,0,re.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()\"):me?t.texSubImage2D(r.TEXTURE_2D,te,0,0,re.width,re.height,he,ce,re.data):t.texImage2D(r.TEXTURE_2D,te,C,re.width,re.height,0,he,ce,re.data)}else if(y.isDataArrayTexture)me?(ue\u0026\u0026t.texStorage3D(r.TEXTURE_2D_ARRAY,xe,C,k.width,k.height,k.depth),t.texSubImage3D(r.TEXTURE_2D_ARRAY,0,0,0,0,k.width,k.height,k.depth,he,ce,k.data)):t.texImage3D(r.TEXTURE_2D_ARRAY,0,C,k.width,k.height,k.depth,0,he,ce,k.data);else if(y.isData3DTexture)me?(ue\u0026\u0026t.texStorage3D(r.TEXTURE_3D,xe,C,k.width,k.height,k.depth),t.texSubImage3D(r.TEXTURE_3D,0,0,0,0,k.width,k.height,k.depth,he,ce,k.data)):t.texImage3D(r.TEXTURE_3D,0,C,k.width,k.height,k.depth,0,he,ce,k.data);else if(y.isFramebufferTexture){if(ue)if(me)t.texStorage2D(r.TEXTURE_2D,xe,C,k.width,k.height);else{let te=k.width,ve=k.height;for(let Ne=0;Ne\u003cxe;Ne++)t.texImage2D(r.TEXTURE_2D,Ne,C,te,ve,0,he,ce,null),te\u003e\u003e=1,ve\u003e\u003e=1}}else if(ne.length\u003e0\u0026\u0026de){me\u0026\u0026ue\u0026\u0026t.texStorage2D(r.TEXTURE_2D,xe,C,ne[0].width,ne[0].height);for(let te=0,ve=ne.length;te\u003cve;te++)re=ne[te],me?t.texSubImage2D(r.TEXTURE_2D,te,0,0,he,ce,re):t.texImage2D(r.TEXTURE_2D,te,C,he,ce,re);y.generateMipmaps=!1}else me?(ue\u0026\u0026t.texStorage2D(r.TEXTURE_2D,xe,C,k.width,k.height),t.texSubImage2D(r.TEXTURE_2D,0,0,0,he,ce,k)):t.texImage2D(r.TEXTURE_2D,0,C,he,ce,k);w(y,de)\u0026\u0026R(ee),oe.__currentVersion=oe.version,y.onUpdate\u0026\u0026y.onUpdate(y)}T.__version=y.version}function be(T,y,W){if(y.image.length!==6)return;const ee=We(T,y),ie=y.source;if(t.activeTexture(r.TEXTURE0+W),t.bindTexture(r.TEXTURE_CUBE_MAP,T.__webglTexture),ie.version!==ie.__currentVersion||ee===!0){r.pixelStorei(r.UNPACK_FLIP_Y_WEBGL,y.flipY),r.pixelStorei(r.UNPACK_PREMULTIPLY_ALPHA_WEBGL,y.premultiplyAlpha),r.pixelStorei(r.UNPACK_ALIGNMENT,y.unpackAlignment),r.pixelStorei(r.UNPACK_COLORSPACE_CONVERSION_WEBGL,r.NONE);const oe=y.isCompressedTexture||y.image[0].isCompressedTexture,Se=y.image[0]\u0026\u0026y.image[0].isDataTexture,k=[];for(let te=0;te\u003c6;te++)!oe\u0026\u0026!Se?k[te]=A(y.image[te],!1,!0,c):k[te]=Se?y.image[te].image:y.image[te],k[te]=di(y,k[te]);const de=k[0],he=b(de)||a,ce=s.convert(y.format,y.encoding),C=s.convert(y.type),re=x(y.internalFormat,ce,C,y.encoding),ne=a\u0026\u0026y.isVideoTexture!==!0,me=ie.__currentVersion===void 0||ee===!0;let ue=E(y,de,he);D(r.TEXTURE_CUBE_MAP,y,he);let xe;if(oe){ne\u0026\u0026me\u0026\u0026t.texStorage2D(r.TEXTURE_CUBE_MAP,ue,re,de.width,de.height);for(let te=0;te\u003c6;te++){xe=k[te].mipmaps;for(let ve=0;ve\u003cxe.length;ve++){const Ne=xe[ve];y.format!==Kt?ce!==null?ne?t.compressedTexSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve,0,0,Ne.width,Ne.height,ce,Ne.data):t.compressedTexImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve,re,Ne.width,Ne.height,0,Ne.data):console.warn(\"THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()\"):ne?t.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve,0,0,Ne.width,Ne.height,ce,C,Ne.data):t.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve,re,Ne.width,Ne.height,0,ce,C,Ne.data)}}}else{xe=y.mipmaps,ne\u0026\u0026me\u0026\u0026(xe.length\u003e0\u0026\u0026ue++,t.texStorage2D(r.TEXTURE_CUBE_MAP,ue,re,k[0].width,k[0].height));for(let te=0;te\u003c6;te++)if(Se){ne?t.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,0,0,0,k[te].width,k[te].height,ce,C,k[te].data):t.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,0,re,k[te].width,k[te].height,0,ce,C,k[te].data);for(let ve=0;ve\u003cxe.length;ve++){const Oe=xe[ve].image[te].image;ne?t.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve+1,0,0,Oe.width,Oe.height,ce,C,Oe.data):t.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve+1,re,Oe.width,Oe.height,0,ce,C,Oe.data)}}else{ne?t.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,0,0,0,ce,C,k[te]):t.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,0,re,ce,C,k[te]);for(let ve=0;ve\u003cxe.length;ve++){const Ne=xe[ve];ne?t.texSubImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve+1,0,0,ce,C,Ne.image[te]):t.texImage2D(r.TEXTURE_CUBE_MAP_POSITIVE_X+te,ve+1,re,ce,C,Ne.image[te])}}}w(y,he)\u0026\u0026R(r.TEXTURE_CUBE_MAP),ie.__currentVersion=ie.version,y.onUpdate\u0026\u0026y.onUpdate(y)}T.__version=y.version}function le(T,y,W,ee,ie){const oe=s.convert(W.format,W.encoding),Se=s.convert(W.type),k=x(W.internalFormat,oe,Se,W.encoding);i.get(y).__hasExternalTextures||(ie===r.TEXTURE_3D||ie===r.TEXTURE_2D_ARRAY?t.texImage3D(ie,0,k,y.width,y.height,y.depth,0,oe,Se,null):t.texImage2D(ie,0,k,y.width,y.height,0,oe,Se,null)),t.bindFramebuffer(r.FRAMEBUFFER,T),Be(y)?f.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,ee,ie,i.get(W).__webglTexture,0,ot(y)):r.framebufferTexture2D(r.FRAMEBUFFER,ee,ie,i.get(W).__webglTexture,0),t.bindFramebuffer(r.FRAMEBUFFER,null)}function ze(T,y,W){if(r.bindRenderbuffer(r.RENDERBUFFER,T),y.depthBuffer\u0026\u0026!y.stencilBuffer){let ee=r.DEPTH_COMPONENT16;if(W||Be(y)){const ie=y.depthTexture;ie\u0026\u0026ie.isDepthTexture\u0026\u0026(ie.type===hn?ee=r.DEPTH_COMPONENT32F:ie.type===un\u0026\u0026(ee=r.DEPTH_COMPONENT24));const oe=ot(y);Be(y)?f.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,oe,ee,y.width,y.height):r.renderbufferStorageMultisample(r.RENDERBUFFER,oe,ee,y.width,y.height)}else r.renderbufferStorage(r.RENDERBUFFER,ee,y.width,y.height);r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.RENDERBUFFER,T)}else if(y.depthBuffer\u0026\u0026y.stencilBuffer){const ee=ot(y);W\u0026\u0026Be(y)===!1?r.renderbufferStorageMultisample(r.RENDERBUFFER,ee,r.DEPTH24_STENCIL8,y.width,y.height):Be(y)?f.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,ee,r.DEPTH24_STENCIL8,y.width,y.height):r.renderbufferStorage(r.RENDERBUFFER,r.DEPTH_STENCIL,y.width,y.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.RENDERBUFFER,T)}else{const ee=y.isWebGLMultipleRenderTargets===!0?y.texture:[y.texture];for(let ie=0;ie\u003cee.length;ie++){const oe=ee[ie],Se=s.convert(oe.format,oe.encoding),k=s.convert(oe.type),de=x(oe.internalFormat,Se,k,oe.encoding),he=ot(y);W\u0026\u0026Be(y)===!1?r.renderbufferStorageMultisample(r.RENDERBUFFER,he,de,y.width,y.height):Be(y)?f.renderbufferStorageMultisampleEXT(r.RENDERBUFFER,he,de,y.width,y.height):r.renderbufferStorage(r.RENDERBUFFER,de,y.width,y.height)}}r.bindRenderbuffer(r.RENDERBUFFER,null)}function Ce(T,y){if(y\u0026\u0026y.isWebGLCubeRenderTarget)throw new Error(\"Depth Texture with cube render targets is not supported\");if(t.bindFramebuffer(r.FRAMEBUFFER,T),!(y.depthTexture\u0026\u0026y.depthTexture.isDepthTexture))throw new Error(\"renderTarget.depthTexture must be an instance of THREE.DepthTexture\");(!i.get(y.depthTexture).__webglTexture||y.depthTexture.image.width!==y.width||y.depthTexture.image.height!==y.height)\u0026\u0026(y.depthTexture.image.width=y.width,y.depthTexture.image.height=y.height,y.depthTexture.needsUpdate=!0),q(y.depthTexture,0);const ee=i.get(y.depthTexture).__webglTexture,ie=ot(y);if(y.depthTexture.format===pn)Be(y)?f.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,ee,0,ie):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_ATTACHMENT,r.TEXTURE_2D,ee,0);else if(y.depthTexture.format===ir)Be(y)?f.framebufferTexture2DMultisampleEXT(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.TEXTURE_2D,ee,0,ie):r.framebufferTexture2D(r.FRAMEBUFFER,r.DEPTH_STENCIL_ATTACHMENT,r.TEXTURE_2D,ee,0);else throw new Error(\"Unknown depthTexture format\")}function ye(T){const y=i.get(T),W=T.isWebGLCubeRenderTarget===!0;if(T.depthTexture\u0026\u0026!y.__autoAllocateDepthBuffer){if(W)throw new Error(\"target.depthTexture not supported in Cube render targets\");Ce(y.__webglFramebuffer,T)}else if(W){y.__webglDepthbuffer=[];for(let ee=0;ee\u003c6;ee++)t.bindFramebuffer(r.FRAMEBUFFER,y.__webglFramebuffer[ee]),y.__webglDepthbuffer[ee]=r.createRenderbuffer(),ze(y.__webglDepthbuffer[ee],T,!1)}else t.bindFramebuffer(r.FRAMEBUFFER,y.__webglFramebuffer),y.__webglDepthbuffer=r.createRenderbuffer(),ze(y.__webglDepthbuffer,T,!1);t.bindFramebuffer(r.FRAMEBUFFER,null)}function ut(T,y,W){const ee=i.get(T);y!==void 0\u0026\u0026le(ee.__webglFramebuffer,T,T.texture,r.COLOR_ATTACHMENT0,r.TEXTURE_2D),W!==void 0\u0026\u0026ye(T)}function St(T){const y=T.texture,W=i.get(T),ee=i.get(y);T.addEventListener(\"dispose\",j),T.isWebGLMultipleRenderTargets!==!0\u0026\u0026(ee.__webglTexture===void 0\u0026\u0026(ee.__webglTexture=r.createTexture()),ee.__version=y.version,o.memory.textures++);const ie=T.isWebGLCubeRenderTarget===!0,oe=T.isWebGLMultipleRenderTargets===!0,Se=b(T)||a;if(ie){W.__webglFramebuffer=[];for(let k=0;k\u003c6;k++)W.__webglFramebuffer[k]=r.createFramebuffer()}else{if(W.__webglFramebuffer=r.createFramebuffer(),oe)if(n.drawBuffers){const k=T.texture;for(let de=0,he=k.length;de\u003che;de++){const ce=i.get(k[de]);ce.__webglTexture===void 0\u0026\u0026(ce.__webglTexture=r.createTexture(),o.memory.textures++)}}else console.warn(\"THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.\");if(a\u0026\u0026T.samples\u003e0\u0026\u0026Be(T)===!1){const k=oe?y:[y];W.__webglMultisampledFramebuffer=r.createFramebuffer(),W.__webglColorRenderbuffer=[],t.bindFramebuffer(r.FRAMEBUFFER,W.__webglMultisampledFramebuffer);for(let de=0;de\u003ck.length;de++){const he=k[de];W.__webglColorRenderbuffer[de]=r.createRenderbuffer(),r.bindRenderbuffer(r.RENDERBUFFER,W.__webglColorRenderbuffer[de]);const ce=s.convert(he.format,he.encoding),C=s.convert(he.type),re=x(he.internalFormat,ce,C,he.encoding),ne=ot(T);r.renderbufferStorageMultisample(r.RENDERBUFFER,ne,re,T.width,T.height),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+de,r.RENDERBUFFER,W.__webglColorRenderbuffer[de])}r.bindRenderbuffer(r.RENDERBUFFER,null),T.depthBuffer\u0026\u0026(W.__webglDepthRenderbuffer=r.createRenderbuffer(),ze(W.__webglDepthRenderbuffer,T,!0)),t.bindFramebuffer(r.FRAMEBUFFER,null)}}if(ie){t.bindTexture(r.TEXTURE_CUBE_MAP,ee.__webglTexture),D(r.TEXTURE_CUBE_MAP,y,Se);for(let k=0;k\u003c6;k++)le(W.__webglFramebuffer[k],T,y,r.COLOR_ATTACHMENT0,r.TEXTURE_CUBE_MAP_POSITIVE_X+k);w(y,Se)\u0026\u0026R(r.TEXTURE_CUBE_MAP),t.unbindTexture()}else if(oe){const k=T.texture;for(let de=0,he=k.length;de\u003che;de++){const ce=k[de],C=i.get(ce);t.bindTexture(r.TEXTURE_2D,C.__webglTexture),D(r.TEXTURE_2D,ce,Se),le(W.__webglFramebuffer,T,ce,r.COLOR_ATTACHMENT0+de,r.TEXTURE_2D),w(ce,Se)\u0026\u0026R(r.TEXTURE_2D)}t.unbindTexture()}else{let k=r.TEXTURE_2D;(T.isWebGL3DRenderTarget||T.isWebGLArrayRenderTarget)\u0026\u0026(a?k=T.isWebGL3DRenderTarget?r.TEXTURE_3D:r.TEXTURE_2D_ARRAY:console.error(\"THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.\")),t.bindTexture(k,ee.__webglTexture),D(k,y,Se),le(W.__webglFramebuffer,T,y,r.COLOR_ATTACHMENT0,k),w(y,Se)\u0026\u0026R(k),t.unbindTexture()}T.depthBuffer\u0026\u0026ye(T)}function Rt(T){const y=b(T)||a,W=T.isWebGLMultipleRenderTargets===!0?T.texture:[T.texture];for(let ee=0,ie=W.length;ee\u003cie;ee++){const oe=W[ee];if(w(oe,y)){const Se=T.isWebGLCubeRenderTarget?r.TEXTURE_CUBE_MAP:r.TEXTURE_2D,k=i.get(oe).__webglTexture;t.bindTexture(Se,k),R(Se),t.unbindTexture()}}}function ei(T){if(a\u0026\u0026T.samples\u003e0\u0026\u0026Be(T)===!1){const y=T.isWebGLMultipleRenderTargets?T.texture:[T.texture],W=T.width,ee=T.height;let ie=r.COLOR_BUFFER_BIT;const oe=[],Se=T.stencilBuffer?r.DEPTH_STENCIL_ATTACHMENT:r.DEPTH_ATTACHMENT,k=i.get(T),de=T.isWebGLMultipleRenderTargets===!0;if(de)for(let he=0;he\u003cy.length;he++)t.bindFramebuffer(r.FRAMEBUFFER,k.__webglMultisampledFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+he,r.RENDERBUFFER,null),t.bindFramebuffer(r.FRAMEBUFFER,k.__webglFramebuffer),r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0+he,r.TEXTURE_2D,null,0);t.bindFramebuffer(r.READ_FRAMEBUFFER,k.__webglMultisampledFramebuffer),t.bindFramebuffer(r.DRAW_FRAMEBUFFER,k.__webglFramebuffer);for(let he=0;he\u003cy.length;he++){oe.push(r.COLOR_ATTACHMENT0+he),T.depthBuffer\u0026\u0026oe.push(Se);const ce=k.__ignoreDepthValues!==void 0?k.__ignoreDepthValues:!1;if(ce===!1\u0026\u0026(T.depthBuffer\u0026\u0026(ie|=r.DEPTH_BUFFER_BIT),T.stencilBuffer\u0026\u0026(ie|=r.STENCIL_BUFFER_BIT)),de\u0026\u0026r.framebufferRenderbuffer(r.READ_FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.RENDERBUFFER,k.__webglColorRenderbuffer[he]),ce===!0\u0026\u0026(r.invalidateFramebuffer(r.READ_FRAMEBUFFER,[Se]),r.invalidateFramebuffer(r.DRAW_FRAMEBUFFER,[Se])),de){const C=i.get(y[he]).__webglTexture;r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,C,0)}r.blitFramebuffer(0,0,W,ee,0,0,W,ee,ie,r.NEAREST),m\u0026\u0026r.invalidateFramebuffer(r.READ_FRAMEBUFFER,oe)}if(t.bindFramebuffer(r.READ_FRAMEBUFFER,null),t.bindFramebuffer(r.DRAW_FRAMEBUFFER,null),de)for(let he=0;he\u003cy.length;he++){t.bindFramebuffer(r.FRAMEBUFFER,k.__webglMultisampledFramebuffer),r.framebufferRenderbuffer(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0+he,r.RENDERBUFFER,k.__webglColorRenderbuffer[he]);const ce=i.get(y[he]).__webglTexture;t.bindFramebuffer(r.FRAMEBUFFER,k.__webglFramebuffer),r.framebufferTexture2D(r.DRAW_FRAMEBUFFER,r.COLOR_ATTACHMENT0+he,r.TEXTURE_2D,ce,0)}t.bindFramebuffer(r.DRAW_FRAMEBUFFER,k.__webglMultisampledFramebuffer)}}function ot(T){return Math.min(h,T.samples)}function Be(T){const y=i.get(T);return a\u0026\u0026T.samples\u003e0\u0026\u0026e.has(\"WEBGL_multisampled_render_to_texture\")===!0\u0026\u0026y.__useRenderToTexture!==!1}function fi(T){const y=o.render.frame;_.get(T)!==y\u0026\u0026(_.set(T,y),T.update())}function di(T,y){const W=T.encoding,ee=T.format,ie=T.type;return T.isCompressedTexture===!0||T.isVideoTexture===!0||T.format===jo||W!==yn\u0026\u0026(W===Xe?a===!1?e.has(\"EXT_sRGB\")===!0\u0026\u0026ee===Kt?(T.format=jo,T.minFilter=Ut,T.generateMipmaps=!1):y=Gu.sRGBToLinear(y):(ee!==Kt||ie!==vn)\u0026\u0026console.warn(\"THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.\"):console.error(\"THREE.WebGLTextures: Unsupported texture encoding:\",W)),y}this.allocateTextureUnit=X,this.resetTextureUnits=V,this.setTexture2D=q,this.setTexture2DArray=Q,this.setTexture3D=K,this.setTextureCube=J,this.rebindTextures=ut,this.setupRenderTarget=St,this.updateRenderTargetMipmap=Rt,this.updateMultisampleRenderTarget=ei,this.setupDepthRenderbuffer=ye,this.setupFrameBufferTexture=le,this.useMultisampledRTT=Be}function d0(r,e,t){const i=t.isWebGL2;function n(s,o=null){let a;if(s===vn)return r.UNSIGNED_BYTE;if(s===jh)return r.UNSIGNED_SHORT_4_4_4_4;if(s===$h)return r.UNSIGNED_SHORT_5_5_5_1;if(s===Zh)return r.BYTE;if(s===Jh)return r.SHORT;if(s===Ic)return r.UNSIGNED_SHORT;if(s===Kh)return r.INT;if(s===un)return r.UNSIGNED_INT;if(s===hn)return r.FLOAT;if(s===Fr)return i?r.HALF_FLOAT:(a=e.get(\"OES_texture_half_float\"),a!==null?a.HALF_FLOAT_OES:null);if(s===Qh)return r.ALPHA;if(s===Kt)return r.RGBA;if(s===tf)return r.LUMINANCE;if(s===nf)return r.LUMINANCE_ALPHA;if(s===pn)return r.DEPTH_COMPONENT;if(s===ir)return r.DEPTH_STENCIL;if(s===rf)return r.RED;if(s===ef)return console.warn(\"THREE.WebGLRenderer: THREE.RGBFormat has been removed. Use THREE.RGBAFormat instead. https://github.com/mrdoob/three.js/pull/23228\"),r.RGBA;if(s===jo)return a=e.get(\"EXT_sRGB\"),a!==null?a.SRGB_ALPHA_EXT:null;if(s===sf)return r.RED_INTEGER;if(s===of)return r.RG;if(s===af)return r.RG_INTEGER;if(s===lf)return r.RGBA_INTEGER;if(s===js||s===$s||s===Qs||s===eo)if(o===Xe)if(a=e.get(\"WEBGL_compressed_texture_s3tc_srgb\"),a!==null){if(s===js)return a.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(s===$s)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(s===Qs)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(s===eo)return a.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(a=e.get(\"WEBGL_compressed_texture_s3tc\"),a!==null){if(s===js)return a.COMPRESSED_RGB_S3TC_DXT1_EXT;if(s===$s)return a.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(s===Qs)return a.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(s===eo)return a.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(s===il||s===nl||s===rl||s===sl)if(a=e.get(\"WEBGL_compressed_texture_pvrtc\"),a!==null){if(s===il)return a.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(s===nl)return a.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(s===rl)return a.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(s===sl)return a.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(s===cf)return a=e.get(\"WEBGL_compressed_texture_etc1\"),a!==null?a.COMPRESSED_RGB_ETC1_WEBGL:null;if(s===ol||s===al)if(a=e.get(\"WEBGL_compressed_texture_etc\"),a!==null){if(s===ol)return o===Xe?a.COMPRESSED_SRGB8_ETC2:a.COMPRESSED_RGB8_ETC2;if(s===al)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:a.COMPRESSED_RGBA8_ETC2_EAC}else return null;if(s===ll||s===cl||s===ul||s===hl||s===fl||s===dl||s===pl||s===ml||s===_l||s===gl||s===xl||s===vl||s===yl||s===Sl)if(a=e.get(\"WEBGL_compressed_texture_astc\"),a!==null){if(s===ll)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:a.COMPRESSED_RGBA_ASTC_4x4_KHR;if(s===cl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:a.COMPRESSED_RGBA_ASTC_5x4_KHR;if(s===ul)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:a.COMPRESSED_RGBA_ASTC_5x5_KHR;if(s===hl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:a.COMPRESSED_RGBA_ASTC_6x5_KHR;if(s===fl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:a.COMPRESSED_RGBA_ASTC_6x6_KHR;if(s===dl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:a.COMPRESSED_RGBA_ASTC_8x5_KHR;if(s===pl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:a.COMPRESSED_RGBA_ASTC_8x6_KHR;if(s===ml)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:a.COMPRESSED_RGBA_ASTC_8x8_KHR;if(s===_l)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:a.COMPRESSED_RGBA_ASTC_10x5_KHR;if(s===gl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:a.COMPRESSED_RGBA_ASTC_10x6_KHR;if(s===xl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:a.COMPRESSED_RGBA_ASTC_10x8_KHR;if(s===vl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:a.COMPRESSED_RGBA_ASTC_10x10_KHR;if(s===yl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:a.COMPRESSED_RGBA_ASTC_12x10_KHR;if(s===Sl)return o===Xe?a.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:a.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(s===Ml)if(a=e.get(\"EXT_texture_compression_bptc\"),a!==null){if(s===Ml)return o===Xe?a.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:a.COMPRESSED_RGBA_BPTC_UNORM_EXT}else return null;return s===Kn?i?r.UNSIGNED_INT_24_8:(a=e.get(\"WEBGL_depth_texture\"),a!==null?a.UNSIGNED_INT_24_8_WEBGL:null):r[s]!==void 0?r[s]:null}return{convert:n}}class p0 extends zt{constructor(e=[]){super();this.isArrayCamera=!0,this.cameras=e}}class xs extends tt{constructor(){super();this.isGroup=!0,this.type=\"Group\"}}const m0={type:\"move\"};class Go{constructor(){this._targetRay=null,this._grip=null,this._hand=null}getHandSpace(){return this._hand===null\u0026\u0026(this._hand=new xs,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints={},this._hand.inputState={pinching:!1}),this._hand}getTargetRaySpace(){return this._targetRay===null\u0026\u0026(this._targetRay=new xs,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1,this._targetRay.hasLinearVelocity=!1,this._targetRay.linearVelocity=new L,this._targetRay.hasAngularVelocity=!1,this._targetRay.angularVelocity=new L),this._targetRay}getGripSpace(){return this._grip===null\u0026\u0026(this._grip=new xs,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1,this._grip.hasLinearVelocity=!1,this._grip.linearVelocity=new L,this._grip.hasAngularVelocity=!1,this._grip.angularVelocity=new L),this._grip}dispatchEvent(e){return this._targetRay!==null\u0026\u0026this._targetRay.dispatchEvent(e),this._grip!==null\u0026\u0026this._grip.dispatchEvent(e),this._hand!==null\u0026\u0026this._hand.dispatchEvent(e),this}disconnect(e){return this.dispatchEvent({type:\"disconnected\",data:e}),this._targetRay!==null\u0026\u0026(this._targetRay.visible=!1),this._grip!==null\u0026\u0026(this._grip.visible=!1),this._hand!==null\u0026\u0026(this._hand.visible=!1),this}update(e,t,i){let n=null,s=null,o=null;const a=this._targetRay,l=this._grip,c=this._hand;if(e\u0026\u0026t.session.visibilityState!==\"visible-blurred\")if(a!==null\u0026\u0026(n=t.getPose(e.targetRaySpace,i),n!==null\u0026\u0026(a.matrix.fromArray(n.transform.matrix),a.matrix.decompose(a.position,a.rotation,a.scale),n.linearVelocity?(a.hasLinearVelocity=!0,a.linearVelocity.copy(n.linearVelocity)):a.hasLinearVelocity=!1,n.angularVelocity?(a.hasAngularVelocity=!0,a.angularVelocity.copy(n.angularVelocity)):a.hasAngularVelocity=!1,this.dispatchEvent(m0))),c\u0026\u0026e.hand){o=!0;for(const d of e.hand.values()){const p=t.getJointPose(d,i);if(c.joints[d.jointName]===void 0){const S=new xs;S.matrixAutoUpdate=!1,S.visible=!1,c.joints[d.jointName]=S,c.add(S)}const g=c.joints[d.jointName];p!==null\u0026\u0026(g.matrix.fromArray(p.transform.matrix),g.matrix.decompose(g.position,g.rotation,g.scale),g.jointRadius=p.radius),g.visible=p!==null}const u=c.joints[\"index-finger-tip\"],h=c.joints[\"thumb-tip\"],f=u.position.distanceTo(h.position),m=.02,_=.005;c.inputState.pinching\u0026\u0026f\u003em+_?(c.inputState.pinching=!1,this.dispatchEvent({type:\"pinchend\",handedness:e.handedness,target:this})):!c.inputState.pinching\u0026\u0026f\u003c=m-_\u0026\u0026(c.inputState.pinching=!0,this.dispatchEvent({type:\"pinchstart\",handedness:e.handedness,target:this}))}else l!==null\u0026\u0026e.gripSpace\u0026\u0026(s=t.getPose(e.gripSpace,i),s!==null\u0026\u0026(l.matrix.fromArray(s.transform.matrix),l.matrix.decompose(l.position,l.rotation,l.scale),s.linearVelocity?(l.hasLinearVelocity=!0,l.linearVelocity.copy(s.linearVelocity)):l.hasLinearVelocity=!1,s.angularVelocity?(l.hasAngularVelocity=!0,l.angularVelocity.copy(s.angularVelocity)):l.hasAngularVelocity=!1));return a!==null\u0026\u0026(a.visible=n!==null),l!==null\u0026\u0026(l.visible=s!==null),c!==null\u0026\u0026(c.visible=o!==null),this}}class _0 extends Qt{constructor(e,t,i,n,s,o,a,l,c,u){if(u=u!==void 0?u:pn,u!==pn\u0026\u0026u!==ir)throw new Error(\"DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat\");i===void 0\u0026\u0026u===pn\u0026\u0026(i=un),i===void 0\u0026\u0026u===ir\u0026\u0026(i=Kn);super(null,n,s,o,a,l,u,i,c);this.isDepthTexture=!0,this.image={width:e,height:t},this.magFilter=a!==void 0?a:Mt,this.minFilter=l!==void 0?l:Mt,this.flipY=!1,this.generateMipmaps=!1}}class g0 extends fr{constructor(e,t){super();const i=this;let n=null,s=1,o=null,a=\"local-floor\",l=null,c=null,u=null,h=null,f=null,m=null;const _=t.getContextAttributes();let d=null,p=null;const g=[],S=new Map,A=new zt;A.layers.enable(1),A.viewport=new dt;const b=new zt;b.layers.enable(2),b.viewport=new dt;const v=[A,b],w=new p0;w.layers.enable(1),w.layers.enable(2);let R=null,x=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(B){let q=g[B];return q===void 0\u0026\u0026(q=new Go,g[B]=q),q.getTargetRaySpace()},this.getControllerGrip=function(B){let q=g[B];return q===void 0\u0026\u0026(q=new Go,g[B]=q),q.getGripSpace()},this.getHand=function(B){let q=g[B];return q===void 0\u0026\u0026(q=new Go,g[B]=q),q.getHandSpace()};function E(B){const q=S.get(B.inputSource);q!==void 0\u0026\u0026q.dispatchEvent({type:B.type,data:B.inputSource})}function I(){n.removeEventListener(\"select\",E),n.removeEventListener(\"selectstart\",E),n.removeEventListener(\"selectend\",E),n.removeEventListener(\"squeeze\",E),n.removeEventListener(\"squeezestart\",E),n.removeEventListener(\"squeezeend\",E),n.removeEventListener(\"end\",I),n.removeEventListener(\"inputsourceschange\",F),S.forEach(function(B,q){B!==void 0\u0026\u0026B.disconnect(q)}),S.clear(),R=null,x=null,e.setRenderTarget(d),f=null,h=null,u=null,n=null,p=null,X.stop(),i.isPresenting=!1,i.dispatchEvent({type:\"sessionend\"})}this.setFramebufferScaleFactor=function(B){s=B,i.isPresenting===!0\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change framebuffer scale while presenting.\")},this.setReferenceSpaceType=function(B){a=B,i.isPresenting===!0\u0026\u0026console.warn(\"THREE.WebXRManager: Cannot change reference space type while presenting.\")},this.getReferenceSpace=function(){return l||o},this.setReferenceSpace=function(B){l=B},this.getBaseLayer=function(){return h!==null?h:f},this.getBinding=function(){return u},this.getFrame=function(){return m},this.getSession=function(){return n},this.setSession=async function(B){if(n=B,n!==null){if(d=e.getRenderTarget(),n.addEventListener(\"select\",E),n.addEventListener(\"selectstart\",E),n.addEventListener(\"selectend\",E),n.addEventListener(\"squeeze\",E),n.addEventListener(\"squeezestart\",E),n.addEventListener(\"squeezeend\",E),n.addEventListener(\"end\",I),n.addEventListener(\"inputsourceschange\",F),_.xrCompatible!==!0\u0026\u0026await t.makeXRCompatible(),n.renderState.layers===void 0||e.capabilities.isWebGL2===!1){const q={antialias:n.renderState.layers===void 0?_.antialias:!0,alpha:_.alpha,depth:_.depth,stencil:_.stencil,framebufferScaleFactor:s};f=new XRWebGLLayer(n,t,q),n.updateRenderState({baseLayer:f}),p=new qi(f.framebufferWidth,f.framebufferHeight,{format:Kt,type:vn,encoding:e.outputEncoding})}else{let q=null,Q=null,K=null;_.depth\u0026\u0026(K=_.stencil?t.DEPTH24_STENCIL8:t.DEPTH_COMPONENT24,q=_.stencil?ir:pn,Q=_.stencil?Kn:un);const J={colorFormat:e.outputEncoding===Xe?t.SRGB8_ALPHA8:t.RGBA8,depthFormat:K,scaleFactor:s};u=new XRWebGLBinding(n,t),h=u.createProjectionLayer(J),n.updateRenderState({layers:[h]}),p=new qi(h.textureWidth,h.textureHeight,{format:Kt,type:vn,depthTexture:new _0(h.textureWidth,h.textureHeight,Q,void 0,void 0,void 0,void 0,void 0,void 0,q),stencilBuffer:_.stencil,encoding:e.outputEncoding,samples:_.antialias?4:0});const ae=e.properties.get(p);ae.__ignoreDepthValues=h.ignoreDepthValues}p.isXRRenderTarget=!0,this.setFoveation(1),l=null,o=await n.requestReferenceSpace(a),X.setContext(n),X.start(),i.isPresenting=!0,i.dispatchEvent({type:\"sessionstart\"})}};function F(B){const q=n.inputSources;for(let Q=0;Q\u003cq.length;Q++){const K=q[Q].handedness===\"right\"?1:0;S.set(q[Q],g[K])}for(let Q=0;Q\u003cB.removed.length;Q++){const K=B.removed[Q],J=S.get(K);J\u0026\u0026(J.dispatchEvent({type:\"disconnected\",data:K}),S.delete(K))}for(let Q=0;Q\u003cB.added.length;Q++){const K=B.added[Q],J=S.get(K);J\u0026\u0026J.dispatchEvent({type:\"connected\",data:K})}}const j=new L,Z=new L;function P(B,q,Q){j.setFromMatrixPosition(q.matrixWorld),Z.setFromMatrixPosition(Q.matrixWorld);const K=j.distanceTo(Z),J=q.projectionMatrix.elements,ae=Q.projectionMatrix.elements,pe=J[14]/(J[10]-1),D=J[14]/(J[10]+1),We=(J[9]+1)/J[5],Ee=(J[9]-1)/J[5],be=(J[8]-1)/J[0],le=(ae[8]+1)/ae[0],ze=pe*be,Ce=pe*le,ye=K/(-be+le),ut=ye*-be;q.matrixWorld.decompose(B.position,B.quaternion,B.scale),B.translateX(ut),B.translateZ(ye),B.matrixWorld.compose(B.position,B.quaternion,B.scale),B.matrixWorldInverse.copy(B.matrixWorld).invert();const St=pe+ye,Rt=D+ye,ei=ze-ut,ot=Ce+(K-ut),Be=We*D/Rt*St,fi=Ee*D/Rt*St;B.projectionMatrix.makePerspective(ei,ot,Be,fi,St,Rt)}function H(B,q){q===null?B.matrixWorld.copy(B.matrix):B.matrixWorld.multiplyMatrices(q.matrixWorld,B.matrix),B.matrixWorldInverse.copy(B.matrixWorld).invert()}this.updateCamera=function(B){if(n===null)return;w.near=b.near=A.near=B.near,w.far=b.far=A.far=B.far,(R!==w.near||x!==w.far)\u0026\u0026(n.updateRenderState({depthNear:w.near,depthFar:w.far}),R=w.near,x=w.far);const q=B.parent,Q=w.cameras;H(w,q);for(let J=0;J\u003cQ.length;J++)H(Q[J],q);w.matrixWorld.decompose(w.position,w.quaternion,w.scale),B.position.copy(w.position),B.quaternion.copy(w.quaternion),B.scale.copy(w.scale),B.matrix.copy(w.matrix),B.matrixWorld.copy(w.matrixWorld);const K=B.children;for(let J=0,ae=K.length;J\u003cae;J++)K[J].updateMatrixWorld(!0);Q.length===2?P(w,A,b):w.projectionMatrix.copy(A.projectionMatrix)},this.getCamera=function(){return w},this.getFoveation=function(){if(h!==null)return h.fixedFoveation;if(f!==null)return f.fixedFoveation},this.setFoveation=function(B){h!==null\u0026\u0026(h.fixedFoveation=B),f!==null\u0026\u0026f.fixedFoveation!==void 0\u0026\u0026(f.fixedFoveation=B)};let U=null;function V(B,q){if(c=q.getViewerPose(l||o),m=q,c!==null){const K=c.views;f!==null\u0026\u0026(e.setRenderTargetFramebuffer(p,f.framebuffer),e.setRenderTarget(p));let J=!1;K.length!==w.cameras.length\u0026\u0026(w.cameras.length=0,J=!0);for(let ae=0;ae\u003cK.length;ae++){const pe=K[ae];let D=null;if(f!==null)D=f.getViewport(pe);else{const Ee=u.getViewSubImage(h,pe);D=Ee.viewport,ae===0\u0026\u0026(e.setRenderTargetTextures(p,Ee.colorTexture,h.ignoreDepthValues?void 0:Ee.depthStencilTexture),e.setRenderTarget(p))}let We=v[ae];We===void 0\u0026\u0026(We=new zt,We.layers.enable(ae),We.viewport=new dt,v[ae]=We),We.matrix.fromArray(pe.transform.matrix),We.projectionMatrix.fromArray(pe.projectionMatrix),We.viewport.set(D.x,D.y,D.width,D.height),ae===0\u0026\u0026w.matrix.copy(We.matrix),J===!0\u0026\u0026w.cameras.push(We)}}const Q=n.inputSources;for(let K=0;K\u003cg.length;K++){const J=Q[K],ae=S.get(J);ae!==void 0\u0026\u0026ae.update(J,q,l||o)}U\u0026\u0026U(B,q),m=null}const X=new Nu;X.setAnimationLoop(V),this.setAnimationLoop=function(B){U=B},this.dispose=function(){}}}function x0(r,e){function t(d,p){d.fogColor.value.copy(p.color),p.isFog?(d.fogNear.value=p.near,d.fogFar.value=p.far):p.isFogExp2\u0026\u0026(d.fogDensity.value=p.density)}function i(d,p,g,S,A){p.isMeshBasicMaterial||p.isMeshLambertMaterial?n(d,p):p.isMeshToonMaterial?(n(d,p),u(d,p)):p.isMeshPhongMaterial?(n(d,p),c(d,p)):p.isMeshStandardMaterial?(n(d,p),h(d,p),p.isMeshPhysicalMaterial\u0026\u0026f(d,p,A)):p.isMeshMatcapMaterial?(n(d,p),m(d,p)):p.isMeshDepthMaterial?n(d,p):p.isMeshDistanceMaterial?(n(d,p),_(d,p)):p.isMeshNormalMaterial?n(d,p):p.isLineBasicMaterial?(s(d,p),p.isLineDashedMaterial\u0026\u0026o(d,p)):p.isPointsMaterial?a(d,p,g,S):p.isSpriteMaterial?l(d,p):p.isShadowMaterial?(d.color.value.copy(p.color),d.opacity.value=p.opacity):p.isShaderMaterial\u0026\u0026(p.uniformsNeedUpdate=!1)}function n(d,p){d.opacity.value=p.opacity,p.color\u0026\u0026d.diffuse.value.copy(p.color),p.emissive\u0026\u0026d.emissive.value.copy(p.emissive).multiplyScalar(p.emissiveIntensity),p.map\u0026\u0026(d.map.value=p.map),p.alphaMap\u0026\u0026(d.alphaMap.value=p.alphaMap),p.bumpMap\u0026\u0026(d.bumpMap.value=p.bumpMap,d.bumpScale.value=p.bumpScale,p.side===jt\u0026\u0026(d.bumpScale.value*=-1)),p.displacementMap\u0026\u0026(d.displacementMap.value=p.displacementMap,d.displacementScale.value=p.displacementScale,d.displacementBias.value=p.displacementBias),p.emissiveMap\u0026\u0026(d.emissiveMap.value=p.emissiveMap),p.normalMap\u0026\u0026(d.normalMap.value=p.normalMap,d.normalScale.value.copy(p.normalScale),p.side===jt\u0026\u0026d.normalScale.value.negate()),p.specularMap\u0026\u0026(d.specularMap.value=p.specularMap),p.alphaTest\u003e0\u0026\u0026(d.alphaTest.value=p.alphaTest);const g=e.get(p).envMap;if(g\u0026\u0026(d.envMap.value=g,d.flipEnvMap.value=g.isCubeTexture\u0026\u0026g.isRenderTargetTexture===!1?-1:1,d.reflectivity.value=p.reflectivity,d.ior.value=p.ior,d.refractionRatio.value=p.refractionRatio),p.lightMap){d.lightMap.value=p.lightMap;const b=r.physicallyCorrectLights!==!0?Math.PI:1;d.lightMapIntensity.value=p.lightMapIntensity*b}p.aoMap\u0026\u0026(d.aoMap.value=p.aoMap,d.aoMapIntensity.value=p.aoMapIntensity);let S;p.map?S=p.map:p.specularMap?S=p.specularMap:p.displacementMap?S=p.displacementMap:p.normalMap?S=p.normalMap:p.bumpMap?S=p.bumpMap:p.roughnessMap?S=p.roughnessMap:p.metalnessMap?S=p.metalnessMap:p.alphaMap?S=p.alphaMap:p.emissiveMap?S=p.emissiveMap:p.clearcoatMap?S=p.clearcoatMap:p.clearcoatNormalMap?S=p.clearcoatNormalMap:p.clearcoatRoughnessMap?S=p.clearcoatRoughnessMap:p.iridescenceMap?S=p.iridescenceMap:p.iridescenceThicknessMap?S=p.iridescenceThicknessMap:p.specularIntensityMap?S=p.specularIntensityMap:p.specularColorMap?S=p.specularColorMap:p.transmissionMap?S=p.transmissionMap:p.thicknessMap?S=p.thicknessMap:p.sheenColorMap?S=p.sheenColorMap:p.sheenRoughnessMap\u0026\u0026(S=p.sheenRoughnessMap),S!==void 0\u0026\u0026(S.isWebGLRenderTarget\u0026\u0026(S=S.texture),S.matrixAutoUpdate===!0\u0026\u0026S.updateMatrix(),d.uvTransform.value.copy(S.matrix));let A;p.aoMap?A=p.aoMap:p.lightMap\u0026\u0026(A=p.lightMap),A!==void 0\u0026\u0026(A.isWebGLRenderTarget\u0026\u0026(A=A.texture),A.matrixAutoUpdate===!0\u0026\u0026A.updateMatrix(),d.uv2Transform.value.copy(A.matrix))}function s(d,p){d.diffuse.value.copy(p.color),d.opacity.value=p.opacity}function o(d,p){d.dashSize.value=p.dashSize,d.totalSize.value=p.dashSize+p.gapSize,d.scale.value=p.scale}function a(d,p,g,S){d.diffuse.value.copy(p.color),d.opacity.value=p.opacity,d.size.value=p.size*g,d.scale.value=S*.5,p.map\u0026\u0026(d.map.value=p.map),p.alphaMap\u0026\u0026(d.alphaMap.value=p.alphaMap),p.alphaTest\u003e0\u0026\u0026(d.alphaTest.value=p.alphaTest);let A;p.map?A=p.map:p.alphaMap\u0026\u0026(A=p.alphaMap),A!==void 0\u0026\u0026(A.matrixAutoUpdate===!0\u0026\u0026A.updateMatrix(),d.uvTransform.value.copy(A.matrix))}function l(d,p){d.diffuse.value.copy(p.color),d.opacity.value=p.opacity,d.rotation.value=p.rotation,p.map\u0026\u0026(d.map.value=p.map),p.alphaMap\u0026\u0026(d.alphaMap.value=p.alphaMap),p.alphaTest\u003e0\u0026\u0026(d.alphaTest.value=p.alphaTest);let g;p.map?g=p.map:p.alphaMap\u0026\u0026(g=p.alphaMap),g!==void 0\u0026\u0026(g.matrixAutoUpdate===!0\u0026\u0026g.updateMatrix(),d.uvTransform.value.copy(g.matrix))}function c(d,p){d.specular.value.copy(p.specular),d.shininess.value=Math.max(p.shininess,1e-4)}function u(d,p){p.gradientMap\u0026\u0026(d.gradientMap.value=p.gradientMap)}function h(d,p){d.roughness.value=p.roughness,d.metalness.value=p.metalness,p.roughnessMap\u0026\u0026(d.roughnessMap.value=p.roughnessMap),p.metalnessMap\u0026\u0026(d.metalnessMap.value=p.metalnessMap),e.get(p).envMap\u0026\u0026(d.envMapIntensity.value=p.envMapIntensity)}function f(d,p,g){d.ior.value=p.ior,p.sheen\u003e0\u0026\u0026(d.sheenColor.value.copy(p.sheenColor).multiplyScalar(p.sheen),d.sheenRoughness.value=p.sheenRoughness,p.sheenColorMap\u0026\u0026(d.sheenColorMap.value=p.sheenColorMap),p.sheenRoughnessMap\u0026\u0026(d.sheenRoughnessMap.value=p.sheenRoughnessMap)),p.clearcoat\u003e0\u0026\u0026(d.clearcoat.value=p.clearcoat,d.clearcoatRoughness.value=p.clearcoatRoughness,p.clearcoatMap\u0026\u0026(d.clearcoatMap.value=p.clearcoatMap),p.clearcoatRoughnessMap\u0026\u0026(d.clearcoatRoughnessMap.value=p.clearcoatRoughnessMap),p.clearcoatNormalMap\u0026\u0026(d.clearcoatNormalScale.value.copy(p.clearcoatNormalScale),d.clearcoatNormalMap.value=p.clearcoatNormalMap,p.side===jt\u0026\u0026d.clearcoatNormalScale.value.negate())),p.iridescence\u003e0\u0026\u0026(d.iridescence.value=p.iridescence,d.iridescenceIOR.value=p.iridescenceIOR,d.iridescenceThicknessMinimum.value=p.iridescenceThicknessRange[0],d.iridescenceThicknessMaximum.value=p.iridescenceThicknessRange[1],p.iridescenceMap\u0026\u0026(d.iridescenceMap.value=p.iridescenceMap),p.iridescenceThicknessMap\u0026\u0026(d.iridescenceThicknessMap.value=p.iridescenceThicknessMap)),p.transmission\u003e0\u0026\u0026(d.transmission.value=p.transmission,d.transmissionSamplerMap.value=g.texture,d.transmissionSamplerSize.value.set(g.width,g.height),p.transmissionMap\u0026\u0026(d.transmissionMap.value=p.transmissionMap),d.thickness.value=p.thickness,p.thicknessMap\u0026\u0026(d.thicknessMap.value=p.thicknessMap),d.attenuationDistance.value=p.attenuationDistance,d.attenuationColor.value.copy(p.attenuationColor)),d.specularIntensity.value=p.specularIntensity,d.specularColor.value.copy(p.specularColor),p.specularIntensityMap\u0026\u0026(d.specularIntensityMap.value=p.specularIntensityMap),p.specularColorMap\u0026\u0026(d.specularColorMap.value=p.specularColorMap)}function m(d,p){p.matcap\u0026\u0026(d.matcap.value=p.matcap)}function _(d,p){d.referencePosition.value.copy(p.referencePosition),d.nearDistance.value=p.nearDistance,d.farDistance.value=p.farDistance}return{refreshFogUniforms:t,refreshMaterialUniforms:i}}function v0(){const r=Us(\"canvas\");return r.style.display=\"block\",r}function y0(r={}){this.isWebGLRenderer=!0;const e=r.canvas!==void 0?r.canvas:v0(),t=r.context!==void 0?r.context:null,i=r.depth!==void 0?r.depth:!0,n=r.stencil!==void 0?r.stencil:!0,s=r.antialias!==void 0?r.antialias:!1,o=r.premultipliedAlpha!==void 0?r.premultipliedAlpha:!0,a=r.preserveDrawingBuffer!==void 0?r.preserveDrawingBuffer:!1,l=r.powerPreference!==void 0?r.powerPreference:\"default\",c=r.failIfMajorPerformanceCaveat!==void 0?r.failIfMajorPerformanceCaveat:!1;let u;t!==null?u=t.getContextAttributes().alpha:u=r.alpha!==void 0?r.alpha:!1;let h=null,f=null;const m=[],_=[];this.domElement=e,this.debug={checkShaderErrors:!0},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.outputEncoding=yn,this.physicallyCorrectLights=!1,this.toneMapping=Mi,this.toneMappingExposure=1,Object.defineProperties(this,{gammaFactor:{get:function(){return console.warn(\"THREE.WebGLRenderer: .gammaFactor has been removed.\"),2},set:function(){console.warn(\"THREE.WebGLRenderer: .gammaFactor has been removed.\")}}});const d=this;let p=!1,g=0,S=0,A=null,b=-1,v=null;const w=new dt,R=new dt;let x=null,E=e.width,I=e.height,F=1,j=null,Z=null;const P=new dt(0,0,E,I),H=new dt(0,0,E,I);let U=!1;const V=new Iu;let X=!1,B=!1,q=null;const Q=new ct,K=new fe,J=new L,ae={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0};function pe(){return A===null?F:1}let D=t;function We(M,N){for(let G=0;G\u003cM.length;G++){const z=M[G],Y=e.getContext(z,N);if(Y!==null)return Y}return null}try{const M={alpha:!0,depth:i,stencil:n,antialias:s,premultipliedAlpha:o,preserveDrawingBuffer:a,powerPreference:l,failIfMajorPerformanceCaveat:c};if(\"setAttribute\"in e\u0026\u0026e.setAttribute(\"data-engine\",`three.js r${_h}`),e.addEventListener(\"webglcontextlost\",C,!1),e.addEventListener(\"webglcontextrestored\",re,!1),e.addEventListener(\"webglcontextcreationerror\",ne,!1),D===null){const N=[\"webgl2\",\"webgl\",\"experimental-webgl\"];if(d.isWebGL1Renderer===!0\u0026\u0026N.shift(),D=We(N,M),D===null)throw We(N)?new Error(\"Error creating WebGL context with your selected attributes.\"):new Error(\"Error creating WebGL context.\")}D.getShaderPrecisionFormat===void 0\u0026\u0026(D.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(M){throw console.error(\"THREE.WebGLRenderer: \"+M.message),M}let Ee,be,le,ze,Ce,ye,ut,St,Rt,ei,ot,Be,fi,di,T,y,W,ee,ie,oe,Se,k,de;function he(){Ee=new C_(D),be=new y_(D,Ee,r),Ee.init(be),k=new d0(D,Ee,be),le=new h0(D,Ee,be),ze=new D_(D),Ce=new jg,ye=new f0(D,Ee,le,Ce,be,k,ze),ut=new w_(d),St=new R_(d),Rt=new Pd(D,be),de=new x_(D,Ee,Rt,be),ei=new P_(D,Rt,ze,de),ot=new O_(D,ei,Rt,ze),ie=new N_(D,be,ye),y=new S_(Ce),Be=new Kg(d,ut,St,Ee,be,de,y),fi=new x0(d,Ce),di=new Qg,T=new s0(Ee,be),ee=new g_(d,ut,le,ot,u,o),W=new u0(d,ot,be),oe=new v_(D,Ee,ze,be),Se=new L_(D,Ee,ze,be),ze.programs=Be.programs,d.capabilities=be,d.extensions=Ee,d.properties=Ce,d.renderLists=di,d.shadowMap=W,d.state=le,d.info=ze}he();const ce=new g0(d,D);this.xr=ce,this.getContext=function(){return D},this.getContextAttributes=function(){return D.getContextAttributes()},this.forceContextLoss=function(){const M=Ee.get(\"WEBGL_lose_context\");M\u0026\u0026M.loseContext()},this.forceContextRestore=function(){const M=Ee.get(\"WEBGL_lose_context\");M\u0026\u0026M.restoreContext()},this.getPixelRatio=function(){return F},this.setPixelRatio=function(M){M!==void 0\u0026\u0026(F=M,this.setSize(E,I,!1))},this.getSize=function(M){return M.set(E,I)},this.setSize=function(M,N,G){if(ce.isPresenting){console.warn(\"THREE.WebGLRenderer: Can't change size while VR device is presenting.\");return}E=M,I=N,e.width=Math.floor(M*F),e.height=Math.floor(N*F),G!==!1\u0026\u0026(e.style.width=M+\"px\",e.style.height=N+\"px\"),this.setViewport(0,0,M,N)},this.getDrawingBufferSize=function(M){return M.set(E*F,I*F).floor()},this.setDrawingBufferSize=function(M,N,G){E=M,I=N,F=G,e.width=Math.floor(M*G),e.height=Math.floor(N*G),this.setViewport(0,0,M,N)},this.getCurrentViewport=function(M){return M.copy(w)},this.getViewport=function(M){return M.copy(P)},this.setViewport=function(M,N,G,z){M.isVector4?P.set(M.x,M.y,M.z,M.w):P.set(M,N,G,z),le.viewport(w.copy(P).multiplyScalar(F).floor())},this.getScissor=function(M){return M.copy(H)},this.setScissor=function(M,N,G,z){M.isVector4?H.set(M.x,M.y,M.z,M.w):H.set(M,N,G,z),le.scissor(R.copy(H).multiplyScalar(F).floor())},this.getScissorTest=function(){return U},this.setScissorTest=function(M){le.setScissorTest(U=M)},this.setOpaqueSort=function(M){j=M},this.setTransparentSort=function(M){Z=M},this.getClearColor=function(M){return M.copy(ee.getClearColor())},this.setClearColor=function(){ee.setClearColor.apply(ee,arguments)},this.getClearAlpha=function(){return ee.getClearAlpha()},this.setClearAlpha=function(){ee.setClearAlpha.apply(ee,arguments)},this.clear=function(M=!0,N=!0,G=!0){let z=0;M\u0026\u0026(z|=D.COLOR_BUFFER_BIT),N\u0026\u0026(z|=D.DEPTH_BUFFER_BIT),G\u0026\u0026(z|=D.STENCIL_BUFFER_BIT),D.clear(z)},this.clearColor=function(){this.clear(!0,!1,!1)},this.clearDepth=function(){this.clear(!1,!0,!1)},this.clearStencil=function(){this.clear(!1,!1,!0)},this.dispose=function(){e.removeEventListener(\"webglcontextlost\",C,!1),e.removeEventListener(\"webglcontextrestored\",re,!1),e.removeEventListener(\"webglcontextcreationerror\",ne,!1),di.dispose(),T.dispose(),Ce.dispose(),ut.dispose(),St.dispose(),ot.dispose(),de.dispose(),Be.dispose(),ce.dispose(),ce.removeEventListener(\"sessionstart\",Ne),ce.removeEventListener(\"sessionend\",Oe),q\u0026\u0026(q.dispose(),q=null),mt.stop()};function C(M){M.preventDefault(),console.log(\"THREE.WebGLRenderer: Context Lost.\"),p=!0}function re(){console.log(\"THREE.WebGLRenderer: Context Restored.\"),p=!1;const M=ze.autoReset,N=W.enabled,G=W.autoUpdate,z=W.needsUpdate,Y=W.type;he(),ze.autoReset=M,W.enabled=N,W.autoUpdate=G,W.needsUpdate=z,W.type=Y}function ne(M){console.error(\"THREE.WebGLRenderer: A WebGL context could not be created. Reason: \",M.statusMessage)}function me(M){const N=M.target;N.removeEventListener(\"dispose\",me),ue(N)}function ue(M){xe(M),Ce.remove(M)}function xe(M){const N=Ce.get(M).programs;N!==void 0\u0026\u0026(N.forEach(function(G){Be.releaseProgram(G)}),M.isShaderMaterial\u0026\u0026Be.releaseShaderCache(M))}this.renderBufferDirect=function(M,N,G,z,Y,ge){N===null\u0026\u0026(N=ae);const Me=Y.isMesh\u0026\u0026Y.matrixWorld.determinant()\u003c0,Ae=oh(M,N,G,z,Y);le.setMaterial(z,Me);let we=G.index;const Ue=G.attributes.position;if(we===null){if(Ue===void 0||Ue.count===0)return}else if(we.count===0)return;let De=1;z.wireframe===!0\u0026\u0026(we=ei.getWireframeAttribute(G),De=2),de.setup(Y,z,Ae,G,we);let Fe,Ze=oe;we!==null\u0026\u0026(Fe=Rt.get(we),Ze=Se,Ze.setIndex(Fe));const $i=we!==null?we.count:Ue.count,bn=G.drawRange.start*De,wn=G.drawRange.count*De,ii=ge!==null?ge.start*De:0,Ie=ge!==null?ge.count*De:1/0,Tn=Math.max(bn,ii),Ke=Math.min($i,bn+wn,ii+Ie)-1,ni=Math.max(0,Ke-Tn+1);if(ni!==0){if(Y.isMesh)z.wireframe===!0?(le.setLineWidth(z.wireframeLinewidth*pe()),Ze.setMode(D.LINES)):Ze.setMode(D.TRIANGLES);else if(Y.isLine){let Pi=z.linewidth;Pi===void 0\u0026\u0026(Pi=1),le.setLineWidth(Pi*pe()),Y.isLineSegments?Ze.setMode(D.LINES):Y.isLineLoop?Ze.setMode(D.LINE_LOOP):Ze.setMode(D.LINE_STRIP)}else Y.isPoints?Ze.setMode(D.POINTS):Y.isSprite\u0026\u0026Ze.setMode(D.TRIANGLES);if(Y.isInstancedMesh)Ze.renderInstances(Tn,ni,Y.count);else if(G.isInstancedBufferGeometry){const Pi=Math.min(G.instanceCount,G._maxInstanceCount);Ze.renderInstances(Tn,ni,Pi)}else Ze.render(Tn,ni)}},this.compile=function(M,N){f=T.get(M),f.init(),_.push(f),M.traverseVisible(function(G){G.isLight\u0026\u0026G.layers.test(N.layers)\u0026\u0026(f.pushLight(G),G.castShadow\u0026\u0026f.pushShadow(G))}),f.setupLights(d.physicallyCorrectLights),M.traverse(function(G){const z=G.material;if(z)if(Array.isArray(z))for(let Y=0;Y\u003cz.length;Y++){const ge=z[Y];qs(ge,M,G)}else qs(z,M,G)}),_.pop(),f=null};let te=null;function ve(M){te\u0026\u0026te(M)}function Ne(){mt.stop()}function Oe(){mt.start()}const mt=new Nu;mt.setAnimationLoop(ve),typeof self!=\"undefined\"\u0026\u0026mt.setContext(self),this.setAnimationLoop=function(M){te=M,ce.setAnimationLoop(M),M===null?mt.stop():mt.start()},ce.addEventListener(\"sessionstart\",Ne),ce.addEventListener(\"sessionend\",Oe),this.render=function(M,N){if(N!==void 0\u0026\u0026N.isCamera!==!0){console.error(\"THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.\");return}if(p===!0)return;M.autoUpdate===!0\u0026\u0026M.updateMatrixWorld(),N.parent===null\u0026\u0026N.updateMatrixWorld(),ce.enabled===!0\u0026\u0026ce.isPresenting===!0\u0026\u0026(ce.cameraAutoUpdate===!0\u0026\u0026ce.updateCamera(N),N=ce.getCamera()),M.isScene===!0\u0026\u0026M.onBeforeRender(d,M,N,A),f=T.get(M,_.length),f.init(),_.push(f),Q.multiplyMatrices(N.projectionMatrix,N.matrixWorldInverse),V.setFromProjectionMatrix(Q),B=this.localClippingEnabled,X=y.init(this.clippingPlanes,B,N),h=di.get(M,m.length),h.init(),m.push(h),ti(M,N,0,d.sortObjects),h.finish(),d.sortObjects===!0\u0026\u0026h.sort(j,Z),X===!0\u0026\u0026y.beginShadows();const G=f.state.shadowsArray;if(W.render(G,M,N),X===!0\u0026\u0026y.endShadows(),this.info.autoReset===!0\u0026\u0026this.info.reset(),ee.render(h,M),f.setupLights(d.physicallyCorrectLights),N.isArrayCamera){const z=N.cameras;for(let Y=0,ge=z.length;Y\u003cge;Y++){const Me=z[Y];ka(h,M,Me,Me.viewport)}}else ka(h,M,N);A!==null\u0026\u0026(ye.updateMultisampleRenderTarget(A),ye.updateRenderTargetMipmap(A)),M.isScene===!0\u0026\u0026M.onAfterRender(d,M,N),de.resetDefaultState(),b=-1,v=null,_.pop(),_.length\u003e0?f=_[_.length-1]:f=null,m.pop(),m.length\u003e0?h=m[m.length-1]:h=null};function ti(M,N,G,z){if(M.visible===!1)return;if(M.layers.test(N.layers)){if(M.isGroup)G=M.renderOrder;else if(M.isLOD)M.autoUpdate===!0\u0026\u0026M.update(N);else if(M.isLight)f.pushLight(M),M.castShadow\u0026\u0026f.pushShadow(M);else if(M.isSprite){if(!M.frustumCulled||V.intersectsSprite(M)){z\u0026\u0026J.setFromMatrixPosition(M.matrixWorld).applyMatrix4(Q);const Me=ot.update(M),Ae=M.material;Ae.visible\u0026\u0026h.push(M,Me,Ae,G,J.z,null)}}else if((M.isMesh||M.isLine||M.isPoints)\u0026\u0026(M.isSkinnedMesh\u0026\u0026M.skeleton.frame!==ze.render.frame\u0026\u0026(M.skeleton.update(),M.skeleton.frame=ze.render.frame),!M.frustumCulled||V.intersectsObject(M))){z\u0026\u0026J.setFromMatrixPosition(M.matrixWorld).applyMatrix4(Q);const Me=ot.update(M),Ae=M.material;if(Array.isArray(Ae)){const we=Me.groups;for(let Ue=0,De=we.length;Ue\u003cDe;Ue++){const Fe=we[Ue],Ze=Ae[Fe.materialIndex];Ze\u0026\u0026Ze.visible\u0026\u0026h.push(M,Me,Ze,G,J.z,Fe)}}else Ae.visible\u0026\u0026h.push(M,Me,Ae,G,J.z,null)}}const ge=M.children;for(let Me=0,Ae=ge.length;Me\u003cAe;Me++)ti(ge[Me],N,G,z)}function ka(M,N,G,z){const Y=M.opaque,ge=M.transmissive,Me=M.transparent;f.setupLightsView(G),ge.length\u003e0\u0026\u0026rh(Y,N,G),z\u0026\u0026le.viewport(w.copy(z)),Y.length\u003e0\u0026\u0026Kr(Y,N,G),ge.length\u003e0\u0026\u0026Kr(ge,N,G),Me.length\u003e0\u0026\u0026Kr(Me,N,G),le.buffers.depth.setTest(!0),le.buffers.depth.setMask(!0),le.buffers.color.setMask(!0),le.setPolygonOffset(!1)}function rh(M,N,G){const z=be.isWebGL2;q===null\u0026\u0026(q=new qi(1,1,{generateMipmaps:!0,type:Ee.has(\"EXT_color_buffer_half_float\")?Fr:vn,minFilter:Bs,samples:z\u0026\u0026s===!0?4:0})),d.getDrawingBufferSize(K),z?q.setSize(K.x,K.y):q.setSize(Xo(K.x),Xo(K.y));const Y=d.getRenderTarget();d.setRenderTarget(q),d.clear();const ge=d.toneMapping;d.toneMapping=Mi,Kr(M,N,G),d.toneMapping=ge,ye.updateMultisampleRenderTarget(q),ye.updateRenderTargetMipmap(q),d.setRenderTarget(Y)}function Kr(M,N,G){const z=N.isScene===!0?N.overrideMaterial:null;for(let Y=0,ge=M.length;Y\u003cge;Y++){const Me=M[Y],Ae=Me.object,we=Me.geometry,Ue=z===null?Me.material:z,De=Me.group;Ae.layers.test(G.layers)\u0026\u0026sh(Ae,N,G,we,Ue,De)}}function sh(M,N,G,z,Y,ge){M.onBeforeRender(d,N,G,z,Y,ge),M.modelViewMatrix.multiplyMatrices(G.matrixWorldInverse,M.matrixWorld),M.normalMatrix.getNormalMatrix(M.modelViewMatrix),Y.onBeforeRender(d,N,G,z,M,ge),Y.transparent===!0\u0026\u0026Y.side===Qn?(Y.side=jt,Y.needsUpdate=!0,d.renderBufferDirect(G,N,z,Y,M,ge),Y.side=Dr,Y.needsUpdate=!0,d.renderBufferDirect(G,N,z,Y,M,ge),Y.side=Qn):d.renderBufferDirect(G,N,z,Y,M,ge),M.onAfterRender(d,N,G,z,Y,ge)}function qs(M,N,G){N.isScene!==!0\u0026\u0026(N=ae);const z=Ce.get(M),Y=f.state.lights,ge=f.state.shadowsArray,Me=Y.state.version,Ae=Be.getParameters(M,Y.state,ge,N,G),we=Be.getProgramCacheKey(Ae);let Ue=z.programs;z.environment=M.isMeshStandardMaterial?N.environment:null,z.fog=N.fog,z.envMap=(M.isMeshStandardMaterial?St:ut).get(M.envMap||z.environment),Ue===void 0\u0026\u0026(M.addEventListener(\"dispose\",me),Ue=new Map,z.programs=Ue);let De=Ue.get(we);if(De!==void 0){if(z.currentProgram===De\u0026\u0026z.lightsStateVersion===Me)return Ha(M,Ae),De}else Ae.uniforms=Be.getUniforms(M),M.onBuild(G,Ae,d),M.onBeforeCompile(Ae,d),De=Be.acquireProgram(Ae,we),Ue.set(we,De),z.uniforms=Ae.uniforms;const Fe=z.uniforms;(!M.isShaderMaterial\u0026\u0026!M.isRawShaderMaterial||M.clipping===!0)\u0026\u0026(Fe.clippingPlanes=y.uniform),Ha(M,Ae),z.needsLights=lh(M),z.lightsStateVersion=Me,z.needsLights\u0026\u0026(Fe.ambientLightColor.value=Y.state.ambient,Fe.lightProbe.value=Y.state.probe,Fe.directionalLights.value=Y.state.directional,Fe.directionalLightShadows.value=Y.state.directionalShadow,Fe.spotLights.value=Y.state.spot,Fe.spotLightShadows.value=Y.state.spotShadow,Fe.rectAreaLights.value=Y.state.rectArea,Fe.ltc_1.value=Y.state.rectAreaLTC1,Fe.ltc_2.value=Y.state.rectAreaLTC2,Fe.pointLights.value=Y.state.point,Fe.pointLightShadows.value=Y.state.pointShadow,Fe.hemisphereLights.value=Y.state.hemi,Fe.directionalShadowMap.value=Y.state.directionalShadowMap,Fe.directionalShadowMatrix.value=Y.state.directionalShadowMatrix,Fe.spotShadowMap.value=Y.state.spotShadowMap,Fe.spotShadowMatrix.value=Y.state.spotShadowMatrix,Fe.pointShadowMap.value=Y.state.pointShadowMap,Fe.pointShadowMatrix.value=Y.state.pointShadowMatrix);const Ze=De.getUniforms(),$i=Ts.seqWithValue(Ze.seq,Fe);return z.currentProgram=De,z.uniformsList=$i,De}function Ha(M,N){const G=Ce.get(M);G.outputEncoding=N.outputEncoding,G.instancing=N.instancing,G.skinning=N.skinning,G.morphTargets=N.morphTargets,G.morphNormals=N.morphNormals,G.morphColors=N.morphColors,G.morphTargetsCount=N.morphTargetsCount,G.numClippingPlanes=N.numClippingPlanes,G.numIntersection=N.numClipIntersection,G.vertexAlphas=N.vertexAlphas,G.vertexTangents=N.vertexTangents,G.toneMapping=N.toneMapping}function oh(M,N,G,z,Y){N.isScene!==!0\u0026\u0026(N=ae),ye.resetTextureUnits();const ge=N.fog,Me=z.isMeshStandardMaterial?N.environment:null,Ae=A===null?d.outputEncoding:A.isXRRenderTarget===!0?A.texture.encoding:yn,we=(z.isMeshStandardMaterial?St:ut).get(z.envMap||Me),Ue=z.vertexColors===!0\u0026\u0026!!G.attributes.color\u0026\u0026G.attributes.color.itemSize===4,De=!!z.normalMap\u0026\u0026!!G.attributes.tangent,Fe=!!G.morphAttributes.position,Ze=!!G.morphAttributes.normal,$i=!!G.morphAttributes.color,bn=z.toneMapped?d.toneMapping:Mi,wn=G.morphAttributes.position||G.morphAttributes.normal||G.morphAttributes.color,ii=wn!==void 0?wn.length:0,Ie=Ce.get(z),Tn=f.state.lights;if(X===!0\u0026\u0026(B===!0||M!==v)){const ri=M===v\u0026\u0026z.id===b;y.setState(z,M,ri)}let Ke=!1;z.version===Ie.__version?(Ie.needsLights\u0026\u0026Ie.lightsStateVersion!==Tn.state.version||Ie.outputEncoding!==Ae||Y.isInstancedMesh\u0026\u0026Ie.instancing===!1||!Y.isInstancedMesh\u0026\u0026Ie.instancing===!0||Y.isSkinnedMesh\u0026\u0026Ie.skinning===!1||!Y.isSkinnedMesh\u0026\u0026Ie.skinning===!0||Ie.envMap!==we||z.fog===!0\u0026\u0026Ie.fog!==ge||Ie.numClippingPlanes!==void 0\u0026\u0026(Ie.numClippingPlanes!==y.numPlanes||Ie.numIntersection!==y.numIntersection)||Ie.vertexAlphas!==Ue||Ie.vertexTangents!==De||Ie.morphTargets!==Fe||Ie.morphNormals!==Ze||Ie.morphColors!==$i||Ie.toneMapping!==bn||be.isWebGL2===!0\u0026\u0026Ie.morphTargetsCount!==ii)\u0026\u0026(Ke=!0):(Ke=!0,Ie.__version=z.version);let ni=Ie.currentProgram;Ke===!0\u0026\u0026(ni=qs(z,N,Y));let Pi=!1,pr=!1,Ys=!1;const _t=ni.getUniforms(),mr=Ie.uniforms;if(le.useProgram(ni.program)\u0026\u0026(Pi=!0,pr=!0,Ys=!0),z.id!==b\u0026\u0026(b=z.id,pr=!0),Pi||v!==M){if(_t.setValue(D,\"projectionMatrix\",M.projectionMatrix),be.logarithmicDepthBuffer\u0026\u0026_t.setValue(D,\"logDepthBufFC\",2/(Math.log(M.far+1)/Math.LN2)),v!==M\u0026\u0026(v=M,pr=!0,Ys=!0),z.isShaderMaterial||z.isMeshPhongMaterial||z.isMeshToonMaterial||z.isMeshStandardMaterial||z.envMap){const ri=_t.map.cameraPosition;ri!==void 0\u0026\u0026ri.setValue(D,J.setFromMatrixPosition(M.matrixWorld))}(z.isMeshPhongMaterial||z.isMeshToonMaterial||z.isMeshLambertMaterial||z.isMeshBasicMaterial||z.isMeshStandardMaterial||z.isShaderMaterial)\u0026\u0026_t.setValue(D,\"isOrthographic\",M.isOrthographicCamera===!0),(z.isMeshPhongMaterial||z.isMeshToonMaterial||z.isMeshLambertMaterial||z.isMeshBasicMaterial||z.isMeshStandardMaterial||z.isShaderMaterial||z.isShadowMaterial||Y.isSkinnedMesh)\u0026\u0026_t.setValue(D,\"viewMatrix\",M.matrixWorldInverse)}if(Y.isSkinnedMesh){_t.setOptional(D,Y,\"bindMatrix\"),_t.setOptional(D,Y,\"bindMatrixInverse\");const ri=Y.skeleton;ri\u0026\u0026(be.floatVertexTextures?(ri.boneTexture===null\u0026\u0026ri.computeBoneTexture(),_t.setValue(D,\"boneTexture\",ri.boneTexture,ye),_t.setValue(D,\"boneTextureSize\",ri.boneTextureSize)):console.warn(\"THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.\"))}const Zs=G.morphAttributes;return(Zs.position!==void 0||Zs.normal!==void 0||Zs.color!==void 0\u0026\u0026be.isWebGL2===!0)\u0026\u0026ie.update(Y,G,z,ni),(pr||Ie.receiveShadow!==Y.receiveShadow)\u0026\u0026(Ie.receiveShadow=Y.receiveShadow,_t.setValue(D,\"receiveShadow\",Y.receiveShadow)),pr\u0026\u0026(_t.setValue(D,\"toneMappingExposure\",d.toneMappingExposure),Ie.needsLights\u0026\u0026ah(mr,Ys),ge\u0026\u0026z.fog===!0\u0026\u0026fi.refreshFogUniforms(mr,ge),fi.refreshMaterialUniforms(mr,z,F,I,q),Ts.upload(D,Ie.uniformsList,mr,ye)),z.isShaderMaterial\u0026\u0026z.uniformsNeedUpdate===!0\u0026\u0026(Ts.upload(D,Ie.uniformsList,mr,ye),z.uniformsNeedUpdate=!1),z.isSpriteMaterial\u0026\u0026_t.setValue(D,\"center\",Y.center),_t.setValue(D,\"modelViewMatrix\",Y.modelViewMatrix),_t.setValue(D,\"normalMatrix\",Y.normalMatrix),_t.setValue(D,\"modelMatrix\",Y.matrixWorld),ni}function ah(M,N){M.ambientLightColor.needsUpdate=N,M.lightProbe.needsUpdate=N,M.directionalLights.needsUpdate=N,M.directionalLightShadows.needsUpdate=N,M.pointLights.needsUpdate=N,M.pointLightShadows.needsUpdate=N,M.spotLights.needsUpdate=N,M.spotLightShadows.needsUpdate=N,M.rectAreaLights.needsUpdate=N,M.hemisphereLights.needsUpdate=N}function lh(M){return M.isMeshLambertMaterial||M.isMeshToonMaterial||M.isMeshPhongMaterial||M.isMeshStandardMaterial||M.isShadowMaterial||M.isShaderMaterial\u0026\u0026M.lights===!0}this.getActiveCubeFace=function(){return g},this.getActiveMipmapLevel=function(){return S},this.getRenderTarget=function(){return A},this.setRenderTargetTextures=function(M,N,G){Ce.get(M.texture).__webglTexture=N,Ce.get(M.depthTexture).__webglTexture=G;const z=Ce.get(M);z.__hasExternalTextures=!0,z.__hasExternalTextures\u0026\u0026(z.__autoAllocateDepthBuffer=G===void 0,z.__autoAllocateDepthBuffer||Ee.has(\"WEBGL_multisampled_render_to_texture\")===!0\u0026\u0026(console.warn(\"THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided\"),z.__useRenderToTexture=!1))},this.setRenderTargetFramebuffer=function(M,N){const G=Ce.get(M);G.__webglFramebuffer=N,G.__useDefaultFramebuffer=N===void 0},this.setRenderTarget=function(M,N=0,G=0){A=M,g=N,S=G;let z=!0;if(M){const we=Ce.get(M);we.__useDefaultFramebuffer!==void 0?(le.bindFramebuffer(D.FRAMEBUFFER,null),z=!1):we.__webglFramebuffer===void 0?ye.setupRenderTarget(M):we.__hasExternalTextures\u0026\u0026ye.rebindTextures(M,Ce.get(M.texture).__webglTexture,Ce.get(M.depthTexture).__webglTexture)}let Y=null,ge=!1,Me=!1;if(M){const we=M.texture;(we.isData3DTexture||we.isDataArrayTexture)\u0026\u0026(Me=!0);const Ue=Ce.get(M).__webglFramebuffer;M.isWebGLCubeRenderTarget?(Y=Ue[N],ge=!0):be.isWebGL2\u0026\u0026M.samples\u003e0\u0026\u0026ye.useMultisampledRTT(M)===!1?Y=Ce.get(M).__webglMultisampledFramebuffer:Y=Ue,w.copy(M.viewport),R.copy(M.scissor),x=M.scissorTest}else w.copy(P).multiplyScalar(F).floor(),R.copy(H).multiplyScalar(F).floor(),x=U;if(le.bindFramebuffer(D.FRAMEBUFFER,Y)\u0026\u0026be.drawBuffers\u0026\u0026z\u0026\u0026le.drawBuffers(M,Y),le.viewport(w),le.scissor(R),le.setScissorTest(x),ge){const we=Ce.get(M.texture);D.framebufferTexture2D(D.FRAMEBUFFER,D.COLOR_ATTACHMENT0,D.TEXTURE_CUBE_MAP_POSITIVE_X+N,we.__webglTexture,G)}else if(Me){const we=Ce.get(M.texture),Ue=N||0;D.framebufferTextureLayer(D.FRAMEBUFFER,D.COLOR_ATTACHMENT0,we.__webglTexture,G||0,Ue)}b=-1},this.readRenderTargetPixels=function(M,N,G,z,Y,ge,Me){if(!(M\u0026\u0026M.isWebGLRenderTarget)){console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.\");return}let Ae=Ce.get(M).__webglFramebuffer;if(M.isWebGLCubeRenderTarget\u0026\u0026Me!==void 0\u0026\u0026(Ae=Ae[Me]),Ae){le.bindFramebuffer(D.FRAMEBUFFER,Ae);try{const we=M.texture,Ue=we.format,De=we.type;if(Ue!==Kt\u0026\u0026k.convert(Ue)!==D.getParameter(D.IMPLEMENTATION_COLOR_READ_FORMAT)){console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.\");return}const Fe=De===Fr\u0026\u0026(Ee.has(\"EXT_color_buffer_half_float\")||be.isWebGL2\u0026\u0026Ee.has(\"EXT_color_buffer_float\"));if(De!==vn\u0026\u0026k.convert(De)!==D.getParameter(D.IMPLEMENTATION_COLOR_READ_TYPE)\u0026\u0026!(De===hn\u0026\u0026(be.isWebGL2||Ee.has(\"OES_texture_float\")||Ee.has(\"WEBGL_color_buffer_float\")))\u0026\u0026!Fe){console.error(\"THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.\");return}N\u003e=0\u0026\u0026N\u003c=M.width-z\u0026\u0026G\u003e=0\u0026\u0026G\u003c=M.height-Y\u0026\u0026D.readPixels(N,G,z,Y,k.convert(Ue),k.convert(De),ge)}finally{const we=A!==null?Ce.get(A).__webglFramebuffer:null;le.bindFramebuffer(D.FRAMEBUFFER,we)}}},this.copyFramebufferToTexture=function(M,N,G=0){const z=Math.pow(2,-G),Y=Math.floor(N.image.width*z),ge=Math.floor(N.image.height*z);ye.setTexture2D(N,0),D.copyTexSubImage2D(D.TEXTURE_2D,G,0,0,M.x,M.y,Y,ge),le.unbindTexture()},this.copyTextureToTexture=function(M,N,G,z=0){const Y=N.image.width,ge=N.image.height,Me=k.convert(G.format),Ae=k.convert(G.type);ye.setTexture2D(G,0),D.pixelStorei(D.UNPACK_FLIP_Y_WEBGL,G.flipY),D.pixelStorei(D.UNPACK_PREMULTIPLY_ALPHA_WEBGL,G.premultiplyAlpha),D.pixelStorei(D.UNPACK_ALIGNMENT,G.unpackAlignment),N.isDataTexture?D.texSubImage2D(D.TEXTURE_2D,z,M.x,M.y,Y,ge,Me,Ae,N.image.data):N.isCompressedTexture?D.compressedTexSubImage2D(D.TEXTURE_2D,z,M.x,M.y,N.mipmaps[0].width,N.mipmaps[0].height,Me,N.mipmaps[0].data):D.texSubImage2D(D.TEXTURE_2D,z,M.x,M.y,Me,Ae,N.image),z===0\u0026\u0026G.generateMipmaps\u0026\u0026D.generateMipmap(D.TEXTURE_2D),le.unbindTexture()},this.copyTextureToTexture3D=function(M,N,G,z,Y=0){if(d.isWebGL1Renderer){console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.\");return}const ge=M.max.x-M.min.x+1,Me=M.max.y-M.min.y+1,Ae=M.max.z-M.min.z+1,we=k.convert(z.format),Ue=k.convert(z.type);let De;if(z.isData3DTexture)ye.setTexture3D(z,0),De=D.TEXTURE_3D;else if(z.isDataArrayTexture)ye.setTexture2DArray(z,0),De=D.TEXTURE_2D_ARRAY;else{console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.\");return}D.pixelStorei(D.UNPACK_FLIP_Y_WEBGL,z.flipY),D.pixelStorei(D.UNPACK_PREMULTIPLY_ALPHA_WEBGL,z.premultiplyAlpha),D.pixelStorei(D.UNPACK_ALIGNMENT,z.unpackAlignment);const Fe=D.getParameter(D.UNPACK_ROW_LENGTH),Ze=D.getParameter(D.UNPACK_IMAGE_HEIGHT),$i=D.getParameter(D.UNPACK_SKIP_PIXELS),bn=D.getParameter(D.UNPACK_SKIP_ROWS),wn=D.getParameter(D.UNPACK_SKIP_IMAGES),ii=G.isCompressedTexture?G.mipmaps[0]:G.image;D.pixelStorei(D.UNPACK_ROW_LENGTH,ii.width),D.pixelStorei(D.UNPACK_IMAGE_HEIGHT,ii.height),D.pixelStorei(D.UNPACK_SKIP_PIXELS,M.min.x),D.pixelStorei(D.UNPACK_SKIP_ROWS,M.min.y),D.pixelStorei(D.UNPACK_SKIP_IMAGES,M.min.z),G.isDataTexture||G.isData3DTexture?D.texSubImage3D(De,Y,N.x,N.y,N.z,ge,Me,Ae,we,Ue,ii.data):G.isCompressedTexture?(console.warn(\"THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.\"),D.compressedTexSubImage3D(De,Y,N.x,N.y,N.z,ge,Me,Ae,we,ii.data)):D.texSubImage3D(De,Y,N.x,N.y,N.z,ge,Me,Ae,we,Ue,ii),D.pixelStorei(D.UNPACK_ROW_LENGTH,Fe),D.pixelStorei(D.UNPACK_IMAGE_HEIGHT,Ze),D.pixelStorei(D.UNPACK_SKIP_PIXELS,$i),D.pixelStorei(D.UNPACK_SKIP_ROWS,bn),D.pixelStorei(D.UNPACK_SKIP_IMAGES,wn),Y===0\u0026\u0026z.generateMipmaps\u0026\u0026D.generateMipmap(De),le.unbindTexture()},this.initTexture=function(M){ye.setTexture2D(M,0),le.unbindTexture()},this.resetState=function(){g=0,S=0,A=null,le.reset(),de.reset()},typeof __THREE_DEVTOOLS__!=\"undefined\"\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}class S0 extends tt{constructor(){super();this.isScene=!0,this.type=\"Scene\",this.background=null,this.environment=null,this.fog=null,this.overrideMaterial=null,this.autoUpdate=!0,typeof __THREE_DEVTOOLS__!=\"undefined\"\u0026\u0026__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(\"observe\",{detail:this}))}copy(e,t){return super.copy(e,t),e.background!==null\u0026\u0026(this.background=e.background.clone()),e.environment!==null\u0026\u0026(this.environment=e.environment.clone()),e.fog!==null\u0026\u0026(this.fog=e.fog.clone()),e.overrideMaterial!==null\u0026\u0026(this.overrideMaterial=e.overrideMaterial.clone()),this.autoUpdate=e.autoUpdate,this.matrixAutoUpdate=e.matrixAutoUpdate,this}toJSON(e){const t=super.toJSON(e);return this.fog!==null\u0026\u0026(t.object.fog=this.fog.toJSON()),t}}class M0 extends Oc{constructor(e={}){super(e);O(this,\"cameraPers\");O(this,\"cameraOrth\");O(this,\"renderer\");O(this,\"mainScene\");O(this,\"isRender\",!0);O(this,\"renderSize\",new $o);e.transparent==null\u0026\u0026(e.transparent=!1);let t={canvas:this.el,antialias:!1,preserveDrawingBuffer:!0,powerPreference:\"low-power\"};e.transparent\u0026\u0026(t.premultipliedAlpha=!0,t.alpha=!0),this.renderer=new y0(t),this.renderer.autoClear=!0,this.renderer.setClearColor(16777215,1),this.mainScene=new S0,this.cameraPers=this._makePersCamera(),this._updatePersCamera(this.cameraPers,10,10),this.cameraOrth=this._makeOrthCamera(),this._updateOrthCamera(this.cameraOrth,10,10)}init(){super.init()}_makePersCamera(){return new zt(60,1,1e-7,5e4)}_makeOrthCamera(){return new Wu(1,1,1,1)}_updatePersCamera(e,t=10,i=10){e.aspect=t/i,e.updateProjectionMatrix(),e.position.z=i/Math.tan(e.fov*Math.PI/360)/2}_updateOrthCamera(e,t=10,i=10){e.left=-t*.5,e.right=t*.5,e.top=i*.5,e.bottom=-i*.5,e.near=-1e4,e.far=1e4,e.updateProjectionMatrix(),e.position.set(0,0,1e3)}_update(){super._update()}_setUni(e,t,i){const n=this._getUni(e);n[t].value=i}_getUni(e){return e.material.uniforms}}class En extends tt{constructor(){super();O(this,\"_updateHandler\");O(this,\"_layoutHandler\");O(this,\"_c\",0);this._updateHandler=this._update.bind(this),$t.instance.add(this._updateHandler),this._layoutHandler=this._resize.bind(this),nr.instance.add(this._layoutHandler)}init(){}dispose(){$t.instance.remove(this._updateHandler),this._updateHandler=null,nr.instance.remove(this._layoutHandler),this._layoutHandler=null}_update(){this._c++}_resize(){}_getUni(e){return e.material.uniforms}_setUni(e,t,i){const n=this._getUni(e);n[t].value=i}_call(e){e!=null\u0026\u0026e()}}class Ca{constructor(){O(this,\"h\",0);O(this,\"s\",0);O(this,\"l\",0)}}class As{constructor(){}}O(As,\"HIGH\",0),O(As,\"MIDDLE\",1),O(As,\"LOW\",2);const Ba=class{constructor(){O(this,\"fps\",As.MIDDLE);O(this,\"debug\",document.querySelector(\".l-debug\"));O(this,\"colorA\",new Le);O(this,\"colorB\",new Le);O(this,\"bgColor\",new Le);O(this,\"eye\",0);O(this,\"eyeParam\",new L(1,1,1));O(this,\"_dat\");O(this,\"_stats\");O(this,\"main\",{bg:{value:0,type:\"color\"}});Ei.instance.FLG_PARAM\u0026\u0026this.makeParamGUI(),$t.instance.add(()=\u003e{this._update()})}_update(){this._stats!=null\u0026\u0026this._stats.update()}static get instance(){return this._instance||(this._instance=new Ba),this._instance}makeParamGUI(){this._dat==null}};let Te=Ba;O(Te,\"_instance\");class E0 extends En{constructor(e){super();O(this,\"_id\");O(this,\"_item\",[]);O(this,\"_speed\",2);this._id=e.id,this._c=this._id*1;const t=1;for(let i=0;i\u003ct;i++){const n=new Le(1,1,1);let s=new xt(e.geoShape,new Ci({color:n}));this.add(s),this._item.push({color:n,mesh:s})}}updateItem(e){const t=e.radius*1;this._item.forEach((s,o)=\u003e{const a=s.mesh;let l=_e.instance.map(o,t,t*.5,0,this._item.length-1);if(this._id%20!=0\u0026\u0026(l*=_e.instance.mix(.1,1,Te.instance.eyeParam.x)),l*=_e.instance.mix(.25,1,Te.instance.eyeParam.y),this._id==Ei.instance.NUM-1)l*=_e.instance.mix(1.5,1,Te.instance.eyeParam.z),a.material.color=Te.instance.bgColor;else{const c=Te.instance.colorB.clone(),u=new Ca;c.getHSL(u),u.l*=_e.instance.map(this._id,.5,1.2,0,Ei.instance.NUM-1),c.setHSL(u.h,u.s,u.l),s.color.r+=(c.r-s.color.r)*.1,s.color.g+=(c.g-s.color.g)*.1,s.color.b+=(c.b-s.color.b)*.1,a.material.color=s.color}a.scale.set(l,l,1)});const i=_e.instance.radian(this._c),n=_e.instance.mix(.1,1,Te.instance.eyeParam.x);this.position.x=e.center.x+Ve.instance.sin2(i)*e.moveRadius*.75*n,this.position.y=e.center.y-e.moveRadius*.65*_e.instance.mix(.1,1,Te.instance.eyeParam.z)+Ve.instance.sin1(i*-.87)*e.moveRadius*.5*n*_e.instance.mix(.1,1,Te.instance.eyeParam.z)}_update(){this._c+=this._speed*_e.instance.mix(10,1,Te.instance.eyeParam.x)}_resize(){super._resize()}}const Ga=class{constructor(){O(this,\"x\",window.innerWidth*.5);O(this,\"y\",window.innerHeight*.5);O(this,\"old\",new zi);O(this,\"normal\",new zi);O(this,\"easeNormal\",new zi);O(this,\"start\",new zi);O(this,\"moveDist\",new zi);O(this,\"dist\",0);O(this,\"isDown\",!1);O(this,\"usePreventDefault\",!0);O(this,\"onSwipe\");O(this,\"_updateHandler\");if(_e.instance.isTouchDevice()){const e=document.querySelector(\".matter\")||window;e.addEventListener(\"touchstart\",(t={})=\u003e{this._eTouchStart(t)},{passive:!1}),e.addEventListener(\"touchend\",()=\u003e{this._eTouchEnd()},{passive:!1}),e.addEventListener(\"touchmove\",(t={})=\u003e{this._eTouchMove(t)},{passive:!1})}else window.addEventListener(\"mousedown\",(e={})=\u003e{this._eDown(e)}),window.addEventListener(\"mouseup\",()=\u003e{this._eUp()}),window.addEventListener(\"mousemove\",(e={})=\u003e{this._eMove(e)});this._updateHandler=this._update.bind(this),$t.instance.add(this._updateHandler)}static get instance(){return this._instance||(this._instance=new Ga),this._instance}_eTouchStart(e={}){this.isDown=!0,this._eTouchMove(e);const t=this._getTouchPoint(e);this.start.x=t.x,this.start.y=t.y}_eTouchEnd(){this.isDown=!1;const e=this.old.x-this.x,t=this.old.y-this.y;(Math.abs(t)\u003e0||Math.abs(e)\u003e0)\u0026\u0026this.onSwipe!=null\u0026\u0026this.onSwipe({move:t}),this.dist=0}_eTouchMove(e={}){const t=this._getTouchPoint(e);this.old.x=this.x,this.old.y=this.y,this.x=t.x,this.y=t.y;const i=this.old.x-this.x,n=this.old.y-this.y;this.dist=Math.sqrt(i*i+n*n),this.usePreventDefault\u0026\u0026e.preventDefault()}_eDown(e={}){this.isDown=!0,this._eMove(e),this.start.x=this.x,this.start.y=this.y}_eUp(){this.isDown=!1}_eMove(e={}){this.old.x=this.x,this.old.y=this.y,this.x=e.clientX,this.y=e.clientY;const t=this.old.x-this.x,i=this.old.y-this.y;this.dist=Math.sqrt(t*t+i*i)}_getTouchPoint(e){const t=new zi,i=e.touches;return i!=null\u0026\u0026i.length\u003e0\u0026\u0026(t.x=i[0].pageX,t.y=i[0].pageY),t}_update(){this.isDown?(this.moveDist.x=this.start.x-this.x,this.moveDist.y=this.start.y-this.y):(this.moveDist.x+=(0-this.moveDist.x)*.25,this.moveDist.y+=(0-this.moveDist.y)*.25),this.normal.x=_e.instance.map(this.x,-1,1,0,window.innerWidth),this.normal.y=_e.instance.map(this.y,-1,1,0,window.innerHeight);const e=_e.instance.radian($t.instance.cnt*2);this.easeNormal.x=Ve.instance.sin1(e*.88)*.25,this.easeNormal.y=Ve.instance.sin2(e*-.79)*.25}};let Wt=Ga;O(Wt,\"_instance\");class Ar extends Ri{constructor(e=1,t=8,i=0,n=Math.PI*2){super();this.type=\"CircleGeometry\",this.parameters={radius:e,segments:t,thetaStart:i,thetaLength:n},t=Math.max(3,t);const s=[],o=[],a=[],l=[],c=new L,u=new fe;o.push(0,0,0),a.push(0,0,1),l.push(.5,.5);for(let h=0,f=3;h\u003c=t;h++,f+=3){const m=i+h/t*n;c.x=e*Math.cos(m),c.y=e*Math.sin(m),o.push(c.x,c.y,c.z),a.push(0,0,1),u.x=(o[f]/e+1)/2,u.y=(o[f+1]/e+1)/2,l.push(u.x,u.y)}for(let h=1;h\u003c=t;h++)s.push(h,h+1,0);this.setIndex(s),this.setAttribute(\"position\",new Ft(o,3)),this.setAttribute(\"normal\",new Ft(a,3)),this.setAttribute(\"uv\",new Ft(l,2))}static fromJSON(e){return new Ar(e.radius,e.segments,e.thetaStart,e.thetaLength)}}class hi{constructor(){this.type=\"Curve\",this.arcLengthDivisions=200}getPoint(){return console.warn(\"THREE.Curve: .getPoint() not implemented.\"),null}getPointAt(e,t){const i=this.getUtoTmapping(e);return this.getPoint(i,t)}getPoints(e=5){const t=[];for(let i=0;i\u003c=e;i++)t.push(this.getPoint(i/e));return t}getSpacedPoints(e=5){const t=[];for(let i=0;i\u003c=e;i++)t.push(this.getPointAt(i/e));return t}getLength(){const e=this.getLengths();return e[e.length-1]}getLengths(e=this.arcLengthDivisions){if(this.cacheArcLengths\u0026\u0026this.cacheArcLengths.length===e+1\u0026\u0026!this.needsUpdate)return this.cacheArcLengths;this.needsUpdate=!1;const t=[];let i,n=this.getPoint(0),s=0;t.push(0);for(let o=1;o\u003c=e;o++)i=this.getPoint(o/e),s+=i.distanceTo(n),t.push(s),n=i;return this.cacheArcLengths=t,t}updateArcLengths(){this.needsUpdate=!0,this.getLengths()}getUtoTmapping(e,t){const i=this.getLengths();let n=0;const s=i.length;let o;t?o=t:o=e*i[s-1];let a=0,l=s-1,c;for(;a\u003c=l;)if(n=Math.floor(a+(l-a)/2),c=i[n]-o,c\u003c0)a=n+1;else if(c\u003e0)l=n-1;else{l=n;break}if(n=l,i[n]===o)return n/(s-1);const u=i[n],f=i[n+1]-u,m=(o-u)/f;return(n+m)/(s-1)}getTangent(e,t){let n=e-1e-4,s=e+1e-4;n\u003c0\u0026\u0026(n=0),s\u003e1\u0026\u0026(s=1);const o=this.getPoint(n),a=this.getPoint(s),l=t||(o.isVector2?new fe:new L);return l.copy(a).sub(o).normalize(),l}getTangentAt(e,t){const i=this.getUtoTmapping(e);return this.getTangent(i,t)}computeFrenetFrames(e,t){const i=new L,n=[],s=[],o=[],a=new L,l=new ct;for(let m=0;m\u003c=e;m++){const _=m/e;n[m]=this.getTangentAt(_,new L)}s[0]=new L,o[0]=new L;let c=Number.MAX_VALUE;const u=Math.abs(n[0].x),h=Math.abs(n[0].y),f=Math.abs(n[0].z);u\u003c=c\u0026\u0026(c=u,i.set(1,0,0)),h\u003c=c\u0026\u0026(c=h,i.set(0,1,0)),f\u003c=c\u0026\u0026i.set(0,0,1),a.crossVectors(n[0],i).normalize(),s[0].crossVectors(n[0],a),o[0].crossVectors(n[0],s[0]);for(let m=1;m\u003c=e;m++){if(s[m]=s[m-1].clone(),o[m]=o[m-1].clone(),a.crossVectors(n[m-1],n[m]),a.length()\u003eNumber.EPSILON){a.normalize();const _=Math.acos(gt(n[m-1].dot(n[m]),-1,1));s[m].applyMatrix4(l.makeRotationAxis(a,_))}o[m].crossVectors(n[m],s[m])}if(t===!0){let m=Math.acos(gt(s[0].dot(s[e]),-1,1));m/=e,n[0].dot(a.crossVectors(s[0],s[e]))\u003e0\u0026\u0026(m=-m);for(let _=1;_\u003c=e;_++)s[_].applyMatrix4(l.makeRotationAxis(n[_],m*_)),o[_].crossVectors(n[_],s[_])}return{tangents:n,normals:s,binormals:o}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){const e={metadata:{version:4.5,type:\"Curve\",generator:\"Curve.toJSON\"}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}}class Pa extends hi{constructor(e=0,t=0,i=1,n=1,s=0,o=Math.PI*2,a=!1,l=0){super();this.isEllipseCurve=!0,this.type=\"EllipseCurve\",this.aX=e,this.aY=t,this.xRadius=i,this.yRadius=n,this.aStartAngle=s,this.aEndAngle=o,this.aClockwise=a,this.aRotation=l}getPoint(e,t){const i=t||new fe,n=Math.PI*2;let s=this.aEndAngle-this.aStartAngle;const o=Math.abs(s)\u003cNumber.EPSILON;for(;s\u003c0;)s+=n;for(;s\u003en;)s-=n;s\u003cNumber.EPSILON\u0026\u0026(o?s=0:s=n),this.aClockwise===!0\u0026\u0026!o\u0026\u0026(s===n?s=-n:s=s-n);const a=this.aStartAngle+e*s;let l=this.aX+this.xRadius*Math.cos(a),c=this.aY+this.yRadius*Math.sin(a);if(this.aRotation!==0){const u=Math.cos(this.aRotation),h=Math.sin(this.aRotation),f=l-this.aX,m=c-this.aY;l=f*u-m*h+this.aX,c=f*h+m*u+this.aY}return i.set(l,c)}copy(e){return super.copy(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}toJSON(){const e=super.toJSON();return e.aX=this.aX,e.aY=this.aY,e.xRadius=this.xRadius,e.yRadius=this.yRadius,e.aStartAngle=this.aStartAngle,e.aEndAngle=this.aEndAngle,e.aClockwise=this.aClockwise,e.aRotation=this.aRotation,e}fromJSON(e){return super.fromJSON(e),this.aX=e.aX,this.aY=e.aY,this.xRadius=e.xRadius,this.yRadius=e.yRadius,this.aStartAngle=e.aStartAngle,this.aEndAngle=e.aEndAngle,this.aClockwise=e.aClockwise,this.aRotation=e.aRotation,this}}class b0 extends Pa{constructor(e,t,i,n,s,o){super(e,t,i,i,n,s,o);this.isArcCurve=!0,this.type=\"ArcCurve\"}}function La(){let r=0,e=0,t=0,i=0;function n(s,o,a,l){r=s,e=a,t=-3*s+3*o-2*a-l,i=2*s-2*o+a+l}return{initCatmullRom:function(s,o,a,l,c){n(o,a,c*(a-s),c*(l-o))},initNonuniformCatmullRom:function(s,o,a,l,c,u,h){let f=(o-s)/c-(a-s)/(c+u)+(a-o)/u,m=(a-o)/u-(l-o)/(u+h)+(l-a)/h;f*=u,m*=u,n(o,a,f,m)},calc:function(s){const o=s*s,a=o*s;return r+e*s+t*o+i*a}}}const vs=new L,ko=new La,Ho=new La,Vo=new La;class ju extends hi{constructor(e=[],t=!1,i=\"centripetal\",n=.5){super();this.isCatmullRomCurve3=!0,this.type=\"CatmullRomCurve3\",this.points=e,this.closed=t,this.curveType=i,this.tension=n}getPoint(e,t=new L){const i=t,n=this.points,s=n.length,o=(s-(this.closed?0:1))*e;let a=Math.floor(o),l=o-a;this.closed?a+=a\u003e0?0:(Math.floor(Math.abs(a)/s)+1)*s:l===0\u0026\u0026a===s-1\u0026\u0026(a=s-2,l=1);let c,u;this.closed||a\u003e0?c=n[(a-1)%s]:(vs.subVectors(n[0],n[1]).add(n[0]),c=vs);const h=n[a%s],f=n[(a+1)%s];if(this.closed||a+2\u003cs?u=n[(a+2)%s]:(vs.subVectors(n[s-1],n[s-2]).add(n[s-1]),u=vs),this.curveType===\"centripetal\"||this.curveType===\"chordal\"){const m=this.curveType===\"chordal\"?.5:.25;let _=Math.pow(c.distanceToSquared(h),m),d=Math.pow(h.distanceToSquared(f),m),p=Math.pow(f.distanceToSquared(u),m);d\u003c1e-4\u0026\u0026(d=1),_\u003c1e-4\u0026\u0026(_=d),p\u003c1e-4\u0026\u0026(p=d),ko.initNonuniformCatmullRom(c.x,h.x,f.x,u.x,_,d,p),Ho.initNonuniformCatmullRom(c.y,h.y,f.y,u.y,_,d,p),Vo.initNonuniformCatmullRom(c.z,h.z,f.z,u.z,_,d,p)}else this.curveType===\"catmullrom\"\u0026\u0026(ko.initCatmullRom(c.x,h.x,f.x,u.x,this.tension),Ho.initCatmullRom(c.y,h.y,f.y,u.y,this.tension),Vo.initCatmullRom(c.z,h.z,f.z,u.z,this.tension));return i.set(ko.calc(l),Ho.calc(l),Vo.calc(l)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t\u003ci;t++){const n=e.points[t];this.points.push(n.clone())}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}toJSON(){const e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t\u003ci;t++){const n=this.points[t];e.points.push(n.toArray())}return e.closed=this.closed,e.curveType=this.curveType,e.tension=this.tension,e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t\u003ci;t++){const n=e.points[t];this.points.push(new L().fromArray(n))}return this.closed=e.closed,this.curveType=e.curveType,this.tension=e.tension,this}}function Sc(r,e,t,i,n){const s=(i-e)*.5,o=(n-t)*.5,a=r*r,l=r*a;return(2*t-2*i+s+o)*l+(-3*t+3*i-2*s-o)*a+s*r+t}function w0(r,e){const t=1-r;return t*t*e}function T0(r,e){return 2*(1-r)*r*e}function A0(r,e){return r*r*e}function Rr(r,e,t,i){return w0(r,e)+T0(r,t)+A0(r,i)}function R0(r,e){const t=1-r;return t*t*t*e}function C0(r,e){const t=1-r;return 3*t*t*r*e}function P0(r,e){return 3*(1-r)*r*r*e}function L0(r,e){return r*r*r*e}function Cr(r,e,t,i,n){return R0(r,e)+C0(r,t)+P0(r,i)+L0(r,n)}class $u extends hi{constructor(e=new fe,t=new fe,i=new fe,n=new fe){super();this.isCubicBezierCurve=!0,this.type=\"CubicBezierCurve\",this.v0=e,this.v1=t,this.v2=i,this.v3=n}getPoint(e,t=new fe){const i=t,n=this.v0,s=this.v1,o=this.v2,a=this.v3;return i.set(Cr(e,n.x,s.x,o.x,a.x),Cr(e,n.y,s.y,o.y,a.y)),i}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){const e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}}class D0 extends hi{constructor(e=new L,t=new L,i=new L,n=new L){super();this.isCubicBezierCurve3=!0,this.type=\"CubicBezierCurve3\",this.v0=e,this.v1=t,this.v2=i,this.v3=n}getPoint(e,t=new L){const i=t,n=this.v0,s=this.v1,o=this.v2,a=this.v3;return i.set(Cr(e,n.x,s.x,o.x,a.x),Cr(e,n.y,s.y,o.y,a.y),Cr(e,n.z,s.z,o.z,a.z)),i}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this.v3.copy(e.v3),this}toJSON(){const e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e.v3=this.v3.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this.v3.fromArray(e.v3),this}}class Da extends hi{constructor(e=new fe,t=new fe){super();this.isLineCurve=!0,this.type=\"LineCurve\",this.v1=e,this.v2=t}getPoint(e,t=new fe){const i=t;return e===1?i.copy(this.v2):(i.copy(this.v2).sub(this.v1),i.multiplyScalar(e).add(this.v1)),i}getPointAt(e,t){return this.getPoint(e,t)}getTangent(e,t){const i=t||new fe;return i.copy(this.v2).sub(this.v1).normalize(),i}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){const e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class F0 extends hi{constructor(e=new L,t=new L){super();this.isLineCurve3=!0,this.type=\"LineCurve3\",this.v1=e,this.v2=t}getPoint(e,t=new L){const i=t;return e===1?i.copy(this.v2):(i.copy(this.v2).sub(this.v1),i.multiplyScalar(e).add(this.v1)),i}getPointAt(e,t){return this.getPoint(e,t)}copy(e){return super.copy(e),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){const e=super.toJSON();return e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class Qu extends hi{constructor(e=new fe,t=new fe,i=new fe){super();this.isQuadraticBezierCurve=!0,this.type=\"QuadraticBezierCurve\",this.v0=e,this.v1=t,this.v2=i}getPoint(e,t=new fe){const i=t,n=this.v0,s=this.v1,o=this.v2;return i.set(Rr(e,n.x,s.x,o.x),Rr(e,n.y,s.y,o.y)),i}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){const e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class I0 extends hi{constructor(e=new L,t=new L,i=new L){super();this.isQuadraticBezierCurve3=!0,this.type=\"QuadraticBezierCurve3\",this.v0=e,this.v1=t,this.v2=i}getPoint(e,t=new L){const i=t,n=this.v0,s=this.v1,o=this.v2;return i.set(Rr(e,n.x,s.x,o.x),Rr(e,n.y,s.y,o.y),Rr(e,n.z,s.z,o.z)),i}copy(e){return super.copy(e),this.v0.copy(e.v0),this.v1.copy(e.v1),this.v2.copy(e.v2),this}toJSON(){const e=super.toJSON();return e.v0=this.v0.toArray(),e.v1=this.v1.toArray(),e.v2=this.v2.toArray(),e}fromJSON(e){return super.fromJSON(e),this.v0.fromArray(e.v0),this.v1.fromArray(e.v1),this.v2.fromArray(e.v2),this}}class eh extends hi{constructor(e=[]){super();this.isSplineCurve=!0,this.type=\"SplineCurve\",this.points=e}getPoint(e,t=new fe){const i=t,n=this.points,s=(n.length-1)*e,o=Math.floor(s),a=s-o,l=n[o===0?o:o-1],c=n[o],u=n[o\u003en.length-2?n.length-1:o+1],h=n[o\u003en.length-3?n.length-1:o+2];return i.set(Sc(a,l.x,c.x,u.x,h.x),Sc(a,l.y,c.y,u.y,h.y)),i}copy(e){super.copy(e),this.points=[];for(let t=0,i=e.points.length;t\u003ci;t++){const n=e.points[t];this.points.push(n.clone())}return this}toJSON(){const e=super.toJSON();e.points=[];for(let t=0,i=this.points.length;t\u003ci;t++){const n=this.points[t];e.points.push(n.toArray())}return e}fromJSON(e){super.fromJSON(e),this.points=[];for(let t=0,i=e.points.length;t\u003ci;t++){const n=e.points[t];this.points.push(new fe().fromArray(n))}return this}}var N0=Object.freeze({__proto__:null,[Symbol.toStringTag]:\"Module\",ArcCurve:b0,CatmullRomCurve3:ju,CubicBezierCurve:$u,CubicBezierCurve3:D0,EllipseCurve:Pa,LineCurve:Da,LineCurve3:F0,QuadraticBezierCurve:Qu,QuadraticBezierCurve3:I0,SplineCurve:eh});class O0 extends hi{constructor(){super();this.type=\"CurvePath\",this.curves=[],this.autoClose=!1}add(e){this.curves.push(e)}closePath(){const e=this.curves[0].getPoint(0),t=this.curves[this.curves.length-1].getPoint(1);e.equals(t)||this.curves.push(new Da(t,e))}getPoint(e,t){const i=e*this.getLength(),n=this.getCurveLengths();let s=0;for(;s\u003cn.length;){if(n[s]\u003e=i){const o=n[s]-i,a=this.curves[s],l=a.getLength(),c=l===0?0:1-o/l;return a.getPointAt(c,t)}s++}return null}getLength(){const e=this.getCurveLengths();return e[e.length-1]}updateArcLengths(){this.needsUpdate=!0,this.cacheLengths=null,this.getCurveLengths()}getCurveLengths(){if(this.cacheLengths\u0026\u0026this.cacheLengths.length===this.curves.length)return this.cacheLengths;const e=[];let t=0;for(let i=0,n=this.curves.length;i\u003cn;i++)t+=this.curves[i].getLength(),e.push(t);return this.cacheLengths=e,e}getSpacedPoints(e=40){const t=[];for(let i=0;i\u003c=e;i++)t.push(this.getPoint(i/e));return this.autoClose\u0026\u0026t.push(t[0]),t}getPoints(e=12){const t=[];let i;for(let n=0,s=this.curves;n\u003cs.length;n++){const o=s[n],a=o.isEllipseCurve?e*2:o.isLineCurve||o.isLineCurve3?1:o.isSplineCurve?e*o.points.length:e,l=o.getPoints(a);for(let c=0;c\u003cl.length;c++){const u=l[c];i\u0026\u0026i.equals(u)||(t.push(u),i=u)}}return this.autoClose\u0026\u0026t.length\u003e1\u0026\u0026!t[t.length-1].equals(t[0])\u0026\u0026t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,i=e.curves.length;t\u003ci;t++){const n=e.curves[t];this.curves.push(n.clone())}return this.autoClose=e.autoClose,this}toJSON(){const e=super.toJSON();e.autoClose=this.autoClose,e.curves=[];for(let t=0,i=this.curves.length;t\u003ci;t++){const n=this.curves[t];e.curves.push(n.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.autoClose=e.autoClose,this.curves=[];for(let t=0,i=e.curves.length;t\u003ci;t++){const n=e.curves[t];this.curves.push(new N0[n.type]().fromJSON(n))}return this}}class Mc extends O0{constructor(e){super();this.type=\"Path\",this.currentPoint=new fe,e\u0026\u0026this.setFromPoints(e)}setFromPoints(e){this.moveTo(e[0].x,e[0].y);for(let t=1,i=e.length;t\u003ci;t++)this.lineTo(e[t].x,e[t].y);return this}moveTo(e,t){return this.currentPoint.set(e,t),this}lineTo(e,t){const i=new Da(this.currentPoint.clone(),new fe(e,t));return this.curves.push(i),this.currentPoint.set(e,t),this}quadraticCurveTo(e,t,i,n){const s=new Qu(this.currentPoint.clone(),new fe(e,t),new fe(i,n));return this.curves.push(s),this.currentPoint.set(i,n),this}bezierCurveTo(e,t,i,n,s,o){const a=new $u(this.currentPoint.clone(),new fe(e,t),new fe(i,n),new fe(s,o));return this.curves.push(a),this.currentPoint.set(s,o),this}splineThru(e){const t=[this.currentPoint.clone()].concat(e),i=new eh(t);return this.curves.push(i),this.currentPoint.copy(e[e.length-1]),this}arc(e,t,i,n,s,o){const a=this.currentPoint.x,l=this.currentPoint.y;return this.absarc(e+a,t+l,i,n,s,o),this}absarc(e,t,i,n,s,o){return this.absellipse(e,t,i,i,n,s,o),this}ellipse(e,t,i,n,s,o,a,l){const c=this.currentPoint.x,u=this.currentPoint.y;return this.absellipse(e+c,t+u,i,n,s,o,a,l),this}absellipse(e,t,i,n,s,o,a,l){const c=new Pa(e,t,i,n,s,o,a,l);if(this.curves.length\u003e0){const h=c.getPoint(0);h.equals(this.currentPoint)||this.lineTo(h.x,h.y)}this.curves.push(c);const u=c.getPoint(1);return this.currentPoint.copy(u),this}copy(e){return super.copy(e),this.currentPoint.copy(e.currentPoint),this}toJSON(){const e=super.toJSON();return e.currentPoint=this.currentPoint.toArray(),e}fromJSON(e){return super.fromJSON(e),this.currentPoint.fromArray(e.currentPoint),this}}class Ws extends Mc{constructor(e){super(e);this.uuid=hr(),this.type=\"Shape\",this.holes=[]}getPointsHoles(e){const t=[];for(let i=0,n=this.holes.length;i\u003cn;i++)t[i]=this.holes[i].getPoints(e);return t}extractPoints(e){return{shape:this.getPoints(e),holes:this.getPointsHoles(e)}}copy(e){super.copy(e),this.holes=[];for(let t=0,i=e.holes.length;t\u003ci;t++){const n=e.holes[t];this.holes.push(n.clone())}return this}toJSON(){const e=super.toJSON();e.uuid=this.uuid,e.holes=[];for(let t=0,i=this.holes.length;t\u003ci;t++){const n=this.holes[t];e.holes.push(n.toJSON())}return e}fromJSON(e){super.fromJSON(e),this.uuid=e.uuid,this.holes=[];for(let t=0,i=e.holes.length;t\u003ci;t++){const n=e.holes[t];this.holes.push(new Mc().fromJSON(n))}return this}}const U0={triangulate:function(r,e,t=2){const i=e\u0026\u0026e.length,n=i?e[0]*t:r.length;let s=th(r,0,n,t,!0);const o=[];if(!s||s.next===s.prev)return o;let a,l,c,u,h,f,m;if(i\u0026\u0026(s=H0(r,e,s,t)),r.length\u003e80*t){a=c=r[0],l=u=r[1];for(let _=t;_\u003cn;_+=t)h=r[_],f=r[_+1],h\u003ca\u0026\u0026(a=h),f\u003cl\u0026\u0026(l=f),h\u003ec\u0026\u0026(c=h),f\u003eu\u0026\u0026(u=f);m=Math.max(c-a,u-l),m=m!==0?1/m:0}return Gr(s,o,t,a,l,m),o}};function th(r,e,t,i,n){let s,o;if(n===Q0(r,e,t,i)\u003e0)for(s=e;s\u003ct;s+=i)o=Ec(s,r[s],r[s+1],o);else for(s=t-i;s\u003e=e;s-=i)o=Ec(s,r[s],r[s+1],o);return o\u0026\u0026Xs(o,o.next)\u0026\u0026(Hr(o),o=o.next),o}function Ki(r,e){if(!r)return r;e||(e=r);let t=r,i;do if(i=!1,!t.steiner\u0026\u0026(Xs(t,t.next)||Ye(t.prev,t,t.next)===0)){if(Hr(t),t=e=t.prev,t===t.next)break;i=!0}else t=t.next;while(i||t!==e);return e}function Gr(r,e,t,i,n,s,o){if(!r)return;!o\u0026\u0026s\u0026\u0026Y0(r,i,n,s);let a=r,l,c;for(;r.prev!==r.next;){if(l=r.prev,c=r.next,s?B0(r,i,n,s):z0(r)){e.push(l.i/t),e.push(r.i/t),e.push(c.i/t),Hr(r),r=c.next,a=c.next;continue}if(r=c,r===a){o?o===1?(r=G0(Ki(r),e,t),Gr(r,e,t,i,n,s,2)):o===2\u0026\u0026k0(r,e,t,i,n,s):Gr(Ki(r),e,t,i,n,s,1);break}}}function z0(r){const e=r.prev,t=r,i=r.next;if(Ye(e,t,i)\u003e=0)return!1;let n=r.next.next;for(;n!==r.prev;){if(Zn(e.x,e.y,t.x,t.y,i.x,i.y,n.x,n.y)\u0026\u0026Ye(n.prev,n,n.next)\u003e=0)return!1;n=n.next}return!0}function B0(r,e,t,i){const n=r.prev,s=r,o=r.next;if(Ye(n,s,o)\u003e=0)return!1;const a=n.x\u003cs.x?n.x\u003co.x?n.x:o.x:s.x\u003co.x?s.x:o.x,l=n.y\u003cs.y?n.y\u003co.y?n.y:o.y:s.y\u003co.y?s.y:o.y,c=n.x\u003es.x?n.x\u003eo.x?n.x:o.x:s.x\u003eo.x?s.x:o.x,u=n.y\u003es.y?n.y\u003eo.y?n.y:o.y:s.y\u003eo.y?s.y:o.y,h=ua(a,l,e,t,i),f=ua(c,u,e,t,i);let m=r.prevZ,_=r.nextZ;for(;m\u0026\u0026m.z\u003e=h\u0026\u0026_\u0026\u0026_.z\u003c=f;){if(m!==r.prev\u0026\u0026m!==r.next\u0026\u0026Zn(n.x,n.y,s.x,s.y,o.x,o.y,m.x,m.y)\u0026\u0026Ye(m.prev,m,m.next)\u003e=0||(m=m.prevZ,_!==r.prev\u0026\u0026_!==r.next\u0026\u0026Zn(n.x,n.y,s.x,s.y,o.x,o.y,_.x,_.y)\u0026\u0026Ye(_.prev,_,_.next)\u003e=0))return!1;_=_.nextZ}for(;m\u0026\u0026m.z\u003e=h;){if(m!==r.prev\u0026\u0026m!==r.next\u0026\u0026Zn(n.x,n.y,s.x,s.y,o.x,o.y,m.x,m.y)\u0026\u0026Ye(m.prev,m,m.next)\u003e=0)return!1;m=m.prevZ}for(;_\u0026\u0026_.z\u003c=f;){if(_!==r.prev\u0026\u0026_!==r.next\u0026\u0026Zn(n.x,n.y,s.x,s.y,o.x,o.y,_.x,_.y)\u0026\u0026Ye(_.prev,_,_.next)\u003e=0)return!1;_=_.nextZ}return!0}function G0(r,e,t){let i=r;do{const n=i.prev,s=i.next.next;!Xs(n,s)\u0026\u0026ih(n,i,i.next,s)\u0026\u0026kr(n,s)\u0026\u0026kr(s,n)\u0026\u0026(e.push(n.i/t),e.push(i.i/t),e.push(s.i/t),Hr(i),Hr(i.next),i=r=s),i=i.next}while(i!==r);return Ki(i)}function k0(r,e,t,i,n,s){let o=r;do{let a=o.next.next;for(;a!==o.prev;){if(o.i!==a.i\u0026\u0026K0(o,a)){let l=nh(o,a);o=Ki(o,o.next),l=Ki(l,l.next),Gr(o,e,t,i,n,s),Gr(l,e,t,i,n,s);return}a=a.next}o=o.next}while(o!==r)}function H0(r,e,t,i){const n=[];let s,o,a,l,c;for(s=0,o=e.length;s\u003co;s++)a=e[s]*i,l=s\u003co-1?e[s+1]*i:r.length,c=th(r,a,l,i,!1),c===c.next\u0026\u0026(c.steiner=!0),n.push(J0(c));for(n.sort(V0),s=0;s\u003cn.length;s++)W0(n[s],t),t=Ki(t,t.next);return t}function V0(r,e){return r.x-e.x}function W0(r,e){if(e=X0(r,e),e){const t=nh(e,r);Ki(e,e.next),Ki(t,t.next)}}function X0(r,e){let t=e;const i=r.x,n=r.y;let s=-1/0,o;do{if(n\u003c=t.y\u0026\u0026n\u003e=t.next.y\u0026\u0026t.next.y!==t.y){const f=t.x+(n-t.y)*(t.next.x-t.x)/(t.next.y-t.y);if(f\u003c=i\u0026\u0026f\u003es){if(s=f,f===i){if(n===t.y)return t;if(n===t.next.y)return t.next}o=t.x\u003ct.next.x?t:t.next}}t=t.next}while(t!==e);if(!o)return null;if(i===s)return o;const a=o,l=o.x,c=o.y;let u=1/0,h;t=o;do i\u003e=t.x\u0026\u0026t.x\u003e=l\u0026\u0026i!==t.x\u0026\u0026Zn(n\u003cc?i:s,n,l,c,n\u003cc?s:i,n,t.x,t.y)\u0026\u0026(h=Math.abs(n-t.y)/(i-t.x),kr(t,r)\u0026\u0026(h\u003cu||h===u\u0026\u0026(t.x\u003eo.x||t.x===o.x\u0026\u0026q0(o,t)))\u0026\u0026(o=t,u=h)),t=t.next;while(t!==a);return o}function q0(r,e){return Ye(r.prev,r,e.prev)\u003c0\u0026\u0026Ye(e.next,r,r.next)\u003c0}function Y0(r,e,t,i){let n=r;do n.z===null\u0026\u0026(n.z=ua(n.x,n.y,e,t,i)),n.prevZ=n.prev,n.nextZ=n.next,n=n.next;while(n!==r);n.prevZ.nextZ=null,n.prevZ=null,Z0(n)}function Z0(r){let e,t,i,n,s,o,a,l,c=1;do{for(t=r,r=null,s=null,o=0;t;){for(o++,i=t,a=0,e=0;e\u003cc\u0026\u0026(a++,i=i.nextZ,!!i);e++);for(l=c;a\u003e0||l\u003e0\u0026\u0026i;)a!==0\u0026\u0026(l===0||!i||t.z\u003c=i.z)?(n=t,t=t.nextZ,a--):(n=i,i=i.nextZ,l--),s?s.nextZ=n:r=n,n.prevZ=s,s=n;t=i}s.nextZ=null,c*=2}while(o\u003e1);return r}function ua(r,e,t,i,n){return r=32767*(r-t)*n,e=32767*(e-i)*n,r=(r|r\u003c\u003c8)\u002616711935,r=(r|r\u003c\u003c4)\u0026252645135,r=(r|r\u003c\u003c2)\u0026858993459,r=(r|r\u003c\u003c1)\u00261431655765,e=(e|e\u003c\u003c8)\u002616711935,e=(e|e\u003c\u003c4)\u0026252645135,e=(e|e\u003c\u003c2)\u0026858993459,e=(e|e\u003c\u003c1)\u00261431655765,r|e\u003c\u003c1}function J0(r){let e=r,t=r;do(e.x\u003ct.x||e.x===t.x\u0026\u0026e.y\u003ct.y)\u0026\u0026(t=e),e=e.next;while(e!==r);return t}function Zn(r,e,t,i,n,s,o,a){return(n-o)*(e-a)-(r-o)*(s-a)\u003e=0\u0026\u0026(r-o)*(i-a)-(t-o)*(e-a)\u003e=0\u0026\u0026(t-o)*(s-a)-(n-o)*(i-a)\u003e=0}function K0(r,e){return r.next.i!==e.i\u0026\u0026r.prev.i!==e.i\u0026\u0026!j0(r,e)\u0026\u0026(kr(r,e)\u0026\u0026kr(e,r)\u0026\u0026$0(r,e)\u0026\u0026(Ye(r.prev,r,e.prev)||Ye(r,e.prev,e))||Xs(r,e)\u0026\u0026Ye(r.prev,r,r.next)\u003e0\u0026\u0026Ye(e.prev,e,e.next)\u003e0)}function Ye(r,e,t){return(e.y-r.y)*(t.x-e.x)-(e.x-r.x)*(t.y-e.y)}function Xs(r,e){return r.x===e.x\u0026\u0026r.y===e.y}function ih(r,e,t,i){const n=Ss(Ye(r,e,t)),s=Ss(Ye(r,e,i)),o=Ss(Ye(t,i,r)),a=Ss(Ye(t,i,e));return!!(n!==s\u0026\u0026o!==a||n===0\u0026\u0026ys(r,t,e)||s===0\u0026\u0026ys(r,i,e)||o===0\u0026\u0026ys(t,r,i)||a===0\u0026\u0026ys(t,e,i))}function ys(r,e,t){return e.x\u003c=Math.max(r.x,t.x)\u0026\u0026e.x\u003e=Math.min(r.x,t.x)\u0026\u0026e.y\u003c=Math.max(r.y,t.y)\u0026\u0026e.y\u003e=Math.min(r.y,t.y)}function Ss(r){return r\u003e0?1:r\u003c0?-1:0}function j0(r,e){let t=r;do{if(t.i!==r.i\u0026\u0026t.next.i!==r.i\u0026\u0026t.i!==e.i\u0026\u0026t.next.i!==e.i\u0026\u0026ih(t,t.next,r,e))return!0;t=t.next}while(t!==r);return!1}function kr(r,e){return Ye(r.prev,r,r.next)\u003c0?Ye(r,e,r.next)\u003e=0\u0026\u0026Ye(r,r.prev,e)\u003e=0:Ye(r,e,r.prev)\u003c0||Ye(r,r.next,e)\u003c0}function $0(r,e){let t=r,i=!1;const n=(r.x+e.x)/2,s=(r.y+e.y)/2;do t.y\u003es!=t.next.y\u003es\u0026\u0026t.next.y!==t.y\u0026\u0026n\u003c(t.next.x-t.x)*(s-t.y)/(t.next.y-t.y)+t.x\u0026\u0026(i=!i),t=t.next;while(t!==r);return i}function nh(r,e){const t=new ha(r.i,r.x,r.y),i=new ha(e.i,e.x,e.y),n=r.next,s=e.prev;return r.next=e,e.prev=r,t.next=n,n.prev=t,i.next=t,t.prev=i,s.next=i,i.prev=s,i}function Ec(r,e,t,i){const n=new ha(r,e,t);return i?(n.next=i.next,n.prev=i,i.next.prev=n,i.next=n):(n.prev=n,n.next=n),n}function Hr(r){r.next.prev=r.prev,r.prev.next=r.next,r.prevZ\u0026\u0026(r.prevZ.nextZ=r.nextZ),r.nextZ\u0026\u0026(r.nextZ.prevZ=r.prevZ)}function ha(r,e,t){this.i=r,this.x=e,this.y=t,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function Q0(r,e,t,i){let n=0;for(let s=e,o=t-i;s\u003ct;s+=i)n+=(r[o]-r[s])*(r[s+1]+r[o+1]),o=s;return n}class Pr{static area(e){const t=e.length;let i=0;for(let n=t-1,s=0;s\u003ct;n=s++)i+=e[n].x*e[s].y-e[s].x*e[n].y;return i*.5}static isClockWise(e){return Pr.area(e)\u003c0}static triangulateShape(e,t){const i=[],n=[],s=[];bc(e),wc(i,e);let o=e.length;t.forEach(bc);for(let l=0;l\u003ct.length;l++)n.push(o),o+=t[l].length,wc(i,t[l]);const a=U0.triangulate(i,n);for(let l=0;l\u003ca.length;l+=3)s.push(a.slice(l,l+3));return s}}function bc(r){const e=r.length;e\u003e2\u0026\u0026r[e-1].equals(r[0])\u0026\u0026r.pop()}function wc(r,e){for(let t=0;t\u003ce.length;t++)r.push(e[t].x),r.push(e[t].y)}class Jr extends Ri{constructor(e=new Ws([new fe(0,.5),new fe(-.5,-.5),new fe(.5,-.5)]),t=12){super();this.type=\"ShapeGeometry\",this.parameters={shapes:e,curveSegments:t};const i=[],n=[],s=[],o=[];let a=0,l=0;if(Array.isArray(e)===!1)c(e);else for(let u=0;u\u003ce.length;u++)c(e[u]),this.addGroup(a,l,u),a+=l,l=0;this.setIndex(i),this.setAttribute(\"position\",new Ft(n,3)),this.setAttribute(\"normal\",new Ft(s,3)),this.setAttribute(\"uv\",new Ft(o,2));function c(u){const h=n.length/3,f=u.extractPoints(t);let m=f.shape;const _=f.holes;Pr.isClockWise(m)===!1\u0026\u0026(m=m.reverse());for(let p=0,g=_.length;p\u003cg;p++){const S=_[p];Pr.isClockWise(S)===!0\u0026\u0026(_[p]=S.reverse())}const d=Pr.triangulateShape(m,_);for(let p=0,g=_.length;p\u003cg;p++){const S=_[p];m=m.concat(S)}for(let p=0,g=m.length;p\u003cg;p++){const S=m[p];n.push(S.x,S.y,0),s.push(0,0,1),o.push(S.x,S.y)}for(let p=0,g=d.length;p\u003cg;p++){const S=d[p],A=S[0]+h,b=S[1]+h,v=S[2]+h;i.push(A,b,v),l+=3}}}toJSON(){const e=super.toJSON(),t=this.parameters.shapes;return ex(t,e)}static fromJSON(e,t){const i=[];for(let n=0,s=e.shapes.length;n\u003cs;n++){const o=t[e.shapes[n]];i.push(o)}return new Jr(i,e.curveSegments)}}function ex(r,e){if(e.shapes=[],Array.isArray(r))for(let t=0,i=r.length;t\u003ci;t++){const n=r[t];e.shapes.push(n.uuid)}else e.shapes.push(r.uuid);return e}class tx extends En{constructor(){super();O(this,\"_con\");O(this,\"_item\",[]);O(this,\"_speed\",1);this._c=0,this._con=new tt,this.add(this._con);const e=this._makeGgeo(),t=3;for(let i=0;i\u003ct;i++){let n=new xt(e,new Ci({color:[0,16777215,0][i]}));this._con.add(n),this._item.push(n),i==0\u0026\u0026(n.visible=!1)}}_makeGgeo(){const e=new Ws;let t=.65,i=0;for(;i\u003c=180;){const n=_e.instance.radian(90+i),s=Math.sin(n)*t,o=Math.cos(n)*t;i==0?e.moveTo(s,o):e.lineTo(s,o),i+=10}return e.lineTo(e.getPointAt(0).x,e.getPointAt(0).y),new Jr(e)}_update(){this._c+=this._speed;const e=Ve.instance.sh(),t=Ve.instance.sh(),i=Wt.instance.easeNormal.x;this._item.forEach((o,a)=\u003e{let l=Math.max(e,t)*.1;a==2\u0026\u0026(l*=.5),o.scale.set(l,l,1);const c=_e.instance.radian(this._c),u=l*.15;a==2\u0026\u0026(o.position.x=Math.sin(c)*u+i*l*1),a==0\u0026\u0026(o.position.x=0,o.position.y=-l*.05)});const n=_e.instance.radian(this._c*-1.2),s=e*.025;this._con.position.x=Math.sin(n)*s,this._con.position.y=Math.cos(n)*s}_resize(){super._resize()}}class ix extends En{constructor(){super();O(this,\"_con\");O(this,\"_item\",[]);O(this,\"_speed\",1);this._c=0,this._con=new tt,this.add(this._con);const e=this._makeGgeo(),t=3;for(let i=0;i\u003ct;i++){let n=new xt(e,new Ci({color:[0,16711680,0][i]}));this._con.add(n),this._item.push(n),i==0\u0026\u0026(n.visible=!1)}}_makeGgeo(){const e=new Ws;let t=.65,i=0;for(;i\u003c=180;){const n=_e.instance.radian(90+i),s=Math.sin(n)*t,o=Math.cos(n)*t;i==0?e.moveTo(s,o):e.lineTo(s,o),i+=10}return e.lineTo(e.getPointAt(0).x,e.getPointAt(0).y),new Jr(e)}_update(){this._c+=this._speed;const e=Ve.instance.sh(),t=Ve.instance.sh(),i=Wt.instance.easeNormal.x;this._item.forEach((o,a)=\u003e{let l=Math.max(e,t)*.1;if(a==2\u0026\u0026(l*=.35),o.scale.set(l,l,1),a==1){const h=Te.instance.colorA.clone(),f=new Ca;h.getHSL(f),f.h=0,f.s*=2,h.setHSL(f.h,f.s,f.l);const m=o.material.color;m.r+=(h.r-m.r)*.1,m.g+=(h.g-m.g)*.1,m.b+=(h.b-m.b)*.1}const c=_e.instance.radian(this._c),u=l*.15;a==2\u0026\u0026(o.position.x=Math.sin(c)*u+i*l*1),a==0\u0026\u0026(o.position.x=0,o.position.y=-l*.05,o.visible=!1)});const n=_e.instance.radian(this._c*-100.2),s=e*.025*.1;this._con.position.x=Math.sin(n)*s,this._con.position.y=Math.cos(n)*s}_resize(){super._resize()}}class nx extends En{constructor(e){super();O(this,\"_con\");O(this,\"_item\",[]);O(this,\"_speed\",1);this._c=0,this._con=new tt,this.add(this._con);const t=2;for(let i=0;i\u003ct;i++){let n=new xt(e.geoShape,new Ci({color:i==0?16777215:0}));this._con.add(n),this._item.push(n)}}_update(){this._c+=this._speed;const e=Ve.instance.sh(),t=Ve.instance.sh(),i=Wt.instance.easeNormal.x,n=Wt.instance.easeNormal.y*-1;this._item.forEach((a,l)=\u003e{let c=Math.max(e,t)*.1;if(l==1\u0026\u0026(c*=.25),a.scale.set(c,c,1),l==1){const u=_e.instance.radian(this._c),h=c*.15;a.position.x=Math.sin(u)*h+i*c*.5,a.position.y=Math.cos(u)*h+n*c*.5}});const s=_e.instance.radian(this._c*-1.2),o=e*.025;this._con.position.x=Math.sin(s)*o,this._con.position.y=Math.cos(s)*o}_resize(){super._resize()}}class rx extends En{constructor(e){super();O(this,\"_con\");O(this,\"_item\",[]);O(this,\"_speed\",1);this._c=0,this._con=new tt,this.add(this._con);const t=2;for(let i=0;i\u003ct;i++){let n=new xt(e.geoShape,new Ci({color:i==0?16777215:0}));this._con.add(n),this._item.push(n)}}_update(){this._c+=this._speed;const e=Ve.instance.sh(),t=Ve.instance.sh(),i=Wt.instance.easeNormal.x,n=Wt.instance.easeNormal.y*-1;this._item.forEach((a,l)=\u003e{let c=Math.max(e,t)*.075;if(l==1\u0026\u0026(c*=.3),a.scale.set(c,c,1),l==1){const u=_e.instance.radian(this._c*10),h=c*1;a.position.x=Math.sin(u)*h+i*c*.5,a.position.y=Math.cos(u)*h+n*c*.5}});const s=_e.instance.radian(this._c*-1.2),o=e*.025;this._con.position.x=Math.sin(s)*o,this._con.position.y=Math.cos(s)*o}_resize(){super._resize()}}class sx extends En{constructor(){super();O(this,\"_con\");O(this,\"_speed\",1);this._c=0,this._con=new tt,this.add(this._con);for(let e=0;e\u003c3;e++){const t=new xt(this._makeGeo(),new Ci({color:[16777215,0,16777215][e],transparent:!0,depthTest:!1}));this._con.add(t)}}_makeGeo(e=10){const t=[];let n=0;for(;n\u003ce;){let l=_e.instance.radian(360/e*n),c=Ve.instance.sin2(this._c*.05+n*20)*.05,u=Math.sin(l)*(.5+c),h=Math.cos(l)*(.5+c);t.push(new L(u,h,0)),n++}const o=new ju(t,!0).getPoints(128),a=new Ws;return o.forEach((l,c)=\u003e{c==0?a.moveTo(l.x,l.y):a.lineTo(l.x,l.y)}),new Jr(a)}_update(){this._c+=this._speed;const e=Ve.instance.sh(),t=Ve.instance.sh(),i=Wt.instance.easeNormal.x,n=Wt.instance.easeNormal.y*-1;this._con.children.forEach((a,l)=\u003e{const c=a;c.geometry.dispose(),c.geometry=this._makeGeo([40,10,5][l]);let u=Math.max(e,t)*.1;if(u*=[1,.35,.05][l],a.scale.set(u,u,1),l\u003e=1){const h=Math.max(e,t)*.1*.15;a.position.x=i*h*1,a.position.y=_e.instance.map(n,0,h,-1,1)}l==2\u0026\u0026(a.position.x+=-u,a.position.y+=u)});const s=_e.instance.radian(this._c*-1.2),o=e*.025;this._con.position.x=Math.sin(s)*o,this._con.position.y=Math.cos(s)*o}_resize(){super._resize()}}class ox extends En{constructor(){super();O(this,\"_con\");O(this,\"_speed\",1);this._c=0,this._con=new tt,this.add(this._con);for(let e=0;e\u003c1;e++){const t=new xt(new Hs(1,1),new Ci({color:0,transparent:!0,depthTest:!1}));this._con.add(t)}}_update(){this._c+=this._speed;const e=Ve.instance.sh(),t=Ve.instance.sh();this._con.children.forEach(s=\u003e{let o=Math.max(e,t)*.15;s.scale.set(o,o*.001,1)});const i=_e.instance.radian(this._c*-1.2),n=e*.025;this._con.position.x=Math.sin(i)*n,this._con.position.y=Math.cos(i)*n}_resize(){super._resize()}}class Tc{constructor(e=0){O(this,\"val\",0);this.val=e}}class ax extends M0{constructor(e){super(e);O(this,\"_con\");O(this,\"_item\",[]);O(this,\"_eyeA\",[]);O(this,\"_eyeB\",[]);O(this,\"_eyeC\",[]);O(this,\"_eyeE\",[]);O(this,\"_eyeD\",[]);O(this,\"_eyeF\",[]);O(this,\"_nowEye\",0);O(this,\"_changeRate\",new Tc(1));O(this,\"_changeRate2\",new Tc(1));O(this,\"_bgColor\",new Le);O(this,\"_eyeVal\",new L(1,1,1));O(this,\"pos\",new zi);He.instance.set(this.getEl(),{willChange:\"transform\"}),this._con=new tt,this.mainScene.add(this._con);const t=new Ar(.5,64),i=new Ar(.5,16),n=new Ar(.5,16);for(let s=0;s\u003cEi.instance.NUM;s++){const o=new E0({id:s,geoShape:s%2==0?i:n});s==0?this._con.add(o):this._item[s-1].add(o),this._item.push(o)}for(let s=0;s\u003c2;s++){const o=new tx,a=new ix,l=new nx({id:s,geoShape:t}),c=new ox,u=new sx,h=new rx({id:s,geoShape:t});this._con.add(o),this._con.add(a),this._con.add(l),this._con.add(c),this._con.add(u),this._con.add(h),this._eyeA.push(o),this._eyeB.push(a),this._eyeC.push(l),this._eyeD.push(c),this._eyeE.push(u),this._eyeF.push(h),o.visible=!1,a.visible=!1,l.visible=!1,c.visible=!1,u.visible=!1,h.visible=!1}this._changeEye(),this._bgColor.copy(Te.instance.colorA),this._resize()}_closeEye(){this._eyeA.forEach((e,t)=\u003e{e.visible=!1,this._eyeB[t].visible=!1,this._eyeC[t].visible=!1,this._eyeE[t].visible=!1,this._eyeF[t].visible=!1,this._eyeD[t].visible=!0})}_changeEye(){this._eyeA.forEach((e,t)=\u003e{e.visible=this._nowEye==0,this._eyeB[t].visible=this._nowEye==1,this._eyeC[t].visible=this._nowEye==2,this._eyeE[t].visible=this._nowEye==3,this._eyeF[t].visible=this._nowEye==4,this._eyeD[t].visible=!1}),He.instance.a(this._changeRate2,{val:[0,1]},.2,0,He.Power3EaseOut)}change(e){this._nowEye=e,He.instance.a(this._changeRate2,{val:[1,0]},.2,0,He.Power3EaseOut,null,null,()=\u003e{He.instance.a(this._changeRate,{val:[0,1]},.2,0,He.EaseNone,()=\u003e{this._closeEye()},null,()=\u003e{this._changeEye()})})}_update(){super._update();const e=Ve.instance.sh(),t=Ve.instance.sh(),i=.0025*1,n=Wt.instance.easeNormal.x*e*i*0,s=Wt.instance.easeNormal.y*t*i*-1;let o=Math.min(e,t)*.65,a=0,l=new L(n,s,0);Te.instance.eye==1?Te.instance.eyeParam.x+=(0-Te.instance.eyeParam.x)*.1:Te.instance.eyeParam.x+=(1-Te.instance.eyeParam.x)*.1,Te.instance.eye==4?Te.instance.eyeParam.y+=(0-Te.instance.eyeParam.y)*.1:Te.instance.eyeParam.y+=(1-Te.instance.eyeParam.y)*.1,Te.instance.eye==3?Te.instance.eyeParam.z+=(0-Te.instance.eyeParam.z)*.1:Te.instance.eyeParam.z+=(1-Te.instance.eyeParam.z)*.1;let c=.99,u=1;Te.instance.eye==1\u0026\u0026(u=1),this._eyeVal.x+=(u-this._eyeVal.x)*.1,c*=this._eyeVal.x;let h=1;(Te.instance.eye==3||Te.instance.eye==4)\u0026\u0026(h=.75),this._eyeVal.y+=(h-this._eyeVal.y)*.1,o*=this._eyeVal.y,this._item.forEach(_=\u003e{_.updateItem({radius:o,moveRadius:a*1,center:l.clone()}),a=o-o*c,o*=c});const f=2,m=Math.sin(this._c*.025)*e*.05;this._eyeA.forEach((_,d)=\u003e{_.position.x=e*.2+m,_.position.y=s*30+t*.2,d==1\u0026\u0026(_.position.x*=-1),_.position.x+=n*30,_.scale.set(1*f,_e.instance.mix(1e-6,1,this._changeRate2.val)*f,1*f),this._eyeB[d].position.copy(_.position),this._eyeB[d].scale.copy(_.scale),this._eyeB[d].rotation.z=_e.instance.mix(0,_e.instance.radian(20)*(d==0?1:-1),this._changeRate2.val),this._eyeC[d].position.copy(_.position),this._eyeC[d].scale.copy(_.scale),this._eyeF[d].position.copy(_.position),this._eyeF[d].scale.copy(_.scale),this._eyeE[d].position.copy(_.position),this._eyeE[d].scale.copy(_.scale),this._eyeD[d].position.copy(_.position)}),this.isNowRenderFrame()\u0026\u0026this._render()}_render(){this.renderer.setClearColor(0,0),this.renderer.render(this.mainScene,this.cameraOrth)}isNowRenderFrame(){return this.isRender\u0026\u0026$t.instance.cnt%2==0}_resize(){super._resize();const e=Ve.instance.sh(),t=Ve.instance.sh();this.renderSize.width=e,this.renderSize.height=t,this._updateOrthCamera(this.cameraOrth,e,t),this._updatePersCamera(this.cameraPers,e,t);let i=window.devicePixelRatio||1;this.renderer.setPixelRatio(i),this.renderer.setSize(e,t)}}class lx extends Oc{constructor(e){super(e);O(this,\"_bodyEl\");O(this,\"_v\",[]);O(this,\"_bgColor\",new Le);this._bodyEl=document.body,document.querySelectorAll(\".l-canvas\").forEach(t=\u003e{this._v.push(new ax({el:t,transparent:!0}))}),this._changeEye(),this._resize()}_changeEye(){const e=_e.instance.randomInt(0,4);Te.instance.eye=e,this._v.forEach(n=\u003e{n.change(e)});const t=new Le,i=new Ca;t.getHSL(i),i.h=_e.instance.random(0,1),i.s=_e.instance.random(.5,.9),i.l=_e.instance.random(.5,.9),t.setHSL(i.h,i.s,i.l),Te.instance.colorA=t.clone(),Te.instance.colorB=new Le(1-t.r,1-t.g,1-t.b)}_update(){super._update(),this._bgColor.r+=(Te.instance.colorA.r-this._bgColor.r)*.1,this._bgColor.g+=(Te.instance.colorA.g-this._bgColor.g)*.1,this._bgColor.b+=(Te.instance.colorA.b-this._bgColor.b)*.1,Te.instance.bgColor=this._bgColor.clone(),He.instance.set(this._bodyEl,{backgroundColor:Te.instance.bgColor.getStyle()}),$t.instance.cnt%120==0\u0026\u0026this._changeEye();const e=Ve.instance.sw(),t=Ve.instance.sh(),i=e*2,n=e\u003e2e3?15:3,s=e/n/60;this._v.forEach(o=\u003e{o.pos.x+=s,o.pos.x+t\u003ei\u0026\u0026(o.pos.x-=i),He.instance.set(o.getEl(),{x:o.pos.x}),o.pos.x\u003c-(t+10)||o.pos.x\u003ee+10?o.isRender=!1:o.isRender=!0})}_resize(){super._resize();const t=Ve.instance.sw();this._v.forEach((i,n)=\u003e{i.pos.x=t*n})}}new lx({el:document.body});\n","artId":"ce4mi6kn70rlpj69cnrg","libraries":[]}],"like":0,"thumbFileName":"ce4mi6kn70rlpj69cnrg.png","selectedThumbFileName":"ce4mi6kn70rlpj69cnrg.png","thumbnailFileUrl":"","resourceFileName":"ce4mi6kn70rlpj69cnrg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZoFheaPR5pMAAGY8GfhSVpDJiSaJNxN7W8cHVRpYdRQM","resourceType":1,"metadataUrl":"","tags":[{"id":"bmk0qi43p9f7m1g01q1g","name":"WebGL"},{"id":"bpcq6043p9f4nmb8bb60","name":"threejs"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce3qrikn70rlpj69cefg","title":"can't fit in","description":"入りきらない本は埃まみれ、蜘蛛の巣まみれ。","createdAt":1669836240,"updatedAt":1669836240,"user":{"id":"NwNkAukzMeZFVOOXNiYOhdlPXPC2","customId":"NwNkAukzMeZFVOOXNiYOhdlPXPC2","name":"メリー","biography":"https://twitter.com/mary_s_ann","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/NwNkAukzMeZFVOOXNiYOhdlPXPC2.png","createdAt":1630313265040,"updatedAt":1735288967993},"codes":[],"like":0,"thumbFileName":"ce3qrikn70rlpj69cefg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce3qrikn70rlpj69ceg0.png","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYUVp6mQFKusCoqRJPGJs2pXLrWTEZ4c2XumhUFrD1BD4","resourceType":4,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"bnfgqds3p9f5erb52nc0","name":"processing"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"rgba(55, 65, 82, 1)","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce3knv4n70rlpj69cbb0","title":"OCCUPY","description":"","createdAt":1669811203,"updatedAt":1669811203,"user":{"id":"i29YtpFCfyMF9EwbjVcp4EFVSGu1","customId":"i29YtpFCfyMF9EwbjVcp4EFVSGu1","name":"Okazz","biography":"https://twitter.com/okazz_","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/i29YtpFCfyMF9EwbjVcp4EFVSGu1.png","createdAt":1550934600000,"updatedAt":1709822849400},"codes":[{"id":"ce3ko0sn70rlpj69cbc0","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js\"\u003e\u003c/script\u003e","artId":"ce3knv4n70rlpj69cbb0","libraries":[]},{"id":"ce3ko0sn70rlpj69cbcg","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"ce3knv4n70rlpj69cbb0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce3ko0sn70rlpj69cbd0","type":2,"text":"let forms = [];\nlet bgCol, pbgCol;\nlet colors = [\"#ed3441\", \"#36acf5\", \"#ffd630\", '#ffffff', '#000000'];\n\nfunction setup() {\n\tcreateCanvas(windowWidth, windowHeight);\n\trectMode(CENTER);\n\tpbgCol = random(colors);\n\tINIT();\n}\n\nfunction draw() {\n\tbackground(pbgCol);\n\tfor (let i of forms) {\n\t\ti.run();\n\t}\n\tif(frameCount % 100 == 0){\n\t\tpbgCol = bgCol;\n\t\tINIT();\n\t}\n}\n\nfunction INIT(){\n\tforms = [];\n\tbgCol = random(colors);\n\twhile(pbgCol == bgCol){\n\t\tbgCol = random(colors);\n\t}\n\tdivideRect(0, 0, width, height, max(width, height) / 40);\n}\n\nfunction divideRect(x, y, w, h, min) {\n\tlet rnd = int(random(2));\n\tlet p = map(max(w, h),0 ,max(width, height), 0.8, 1.2);\n if (w \u003e min \u0026\u0026 h \u003e min \u0026\u0026 random() \u003c p) {\n\t\t\tif (w \u003e= h) {\n let rndw = random(0.1, 0.9) * w;\n divideRect(x, y, rndw, h, min);\n divideRect(x + rndw, y, w - rndw, h, min);\n }\n else {\n let rndh = random(0.1, 0.9) * h;\n divideRect(x, y, w, rndh, min);\n divideRect(x, y + rndh, w, h - rndh, min);\n }\n } else {\n forms.push(new Form(x + w / 2, y + h / 2, w, h, bgCol));\n }\n}\n\nfunction windowResized() {\n\tresizeCanvas(windowWidth, windowHeight);\n\tminSize = min(width, height);\n\tbackground(0);\n\tINIT();\n}\n\nfunction easeOutQuint(x) {\n\treturn 1 - Math.pow(1 - x, 4);\n}\n\nclass Form {\n\tconstructor(x, y, w, h, col) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.w = 0;\n\t\tthis.h = 0;\n\t\tthis.w1 = w;\n\t\tthis.h1 = h;\n\t\tthis.t = -int(random(50));\n\t\tthis.t1 = 50;\n\t\tthis.col = col;\n\t}\n\n\tshow() {\n\t\tstroke(this.col);\n\t\tfill(this.col);\n\t\tif(max(this.w, this.h) \u003e 1){\n\t\t\trect(this.x, this.y, this.w, this.h, min(this.w1 - this.w, this.h1 - this.h));\n\t\t}\n\t}\n\n\tmove() {\n\t\tif(0 \u003c this.t \u0026\u0026 this.t \u003c this.t1){\n\t\t\tlet n = norm(this.t, 0 ,this.t1-1);\n\t\t\tthis.w = lerp(0, this.w1, easeOutQuint(n)); \n\t\t\tthis.h = lerp(0, this.h1, easeOutQuint(n)); \n\t\t}\n\t\tthis.t ++ ;\n\t}\n\n\trun() {\n\t\tthis.show();\n\t\tthis.move();\n\t}\n}","artId":"ce3knv4n70rlpj69cbb0","libraries":[]}],"like":3,"thumbFileName":"ce3knv4n70rlpj69cbb0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce3knv4n70rlpj69cbb0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmTZX8yAJwE7jUv1JB9vk2pEDWCqvgCHTVQLfQzPKqiSY8","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce1p63sn70rs76qrbq9g","title":"leadership","description":"","createdAt":1669642108,"updatedAt":1678027539,"user":{"id":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","customId":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","name":"暁の流星","biography":"https://twitter.com/teruru33550336","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kxRaHBGSlVbGNFln0YnNYdFUNIC3.png","createdAt":1568178895000,"updatedAt":1734018546583},"codes":[{"id":"ce1p644n70rs76qrbqag","type":3,"text":"attribute vec4 position;\nvoid main() {\n gl_Position = position;\n}","artId":"ce1p63sn70rs76qrbq9g","libraries":[]},{"id":"ce1p644n70rs76qrbqb0","type":4,"text":"precision highp float;\n\nconst float PI = 3.1415926;\n\nuniform vec2 resolution;\nuniform float time;\nuniform vec2 mouse;\nuniform sampler2D backbuffer;\n\nfloat eoq(float x){\n return 1. - pow(1. - x, 5.);\n}\n\nmat2 rotate2d(float _angle){\n return mat2(cos(_angle),-sin(_angle),sin(_angle),cos(_angle));\n}\n\nfloat random(vec2 st){\n return fract(sin(dot(st.xy, vec2(12.9898,78.233)))* 43758.5453123);\n}\n\nfloat randV(vec2 st){\n\tfloat r = random(vec2(time/100.,ceil((st.y)/5.)));\n float ran = r;\n\n if(ran \u003e 0.06) {\n ran = 0.0;\n }\n float rr = smoothstep(0.0, 0.06, ran);\n if(rr != 0.0) {\n rr -= 0.5;\n rr += r;\n }\n \n return rr;\n}\n\nfloat circle(vec2 p,float size){\n\treturn max(ceil(size - length(p)),0.);\n}\n\nfloat box(vec2 p,float size){\n\tfloat len=max(abs(p).x,abs(p).y);\n\treturn step(len,size);\n}\n\nvec2 gst = vec2(0.);\n\nfloat obj(vec2 p,float s,float size){\n float r = 0.;\n \n\tp = mod(p,s)-s/2.;\n p = rotate2d(eoq(mod(time,1.))*PI) * p;\n \n float y = gst.y - mod(time,5.)/5. * (resolution.y+400.) + 200.;\n float x = mod(gst.x,resolution.y)-resolution.y/2.;\n vec2 po = vec2(x,y);\n if (circle(po,200.) \u003e 1.) {\n \tr=circle(p,25.);\n }else{\n r=box(p,25.);\n }\n \n return r;\n}\n\nvoid main(void){\n\tvec2 uv = gl_FragCoord.xy;\n vec2 st = uv;\n gst = uv;\n\n uv -= mod(resolution.y,100.)/2.;\n \n uv += vec2(\n \teoq(clamp(mod(time,2.),0.,1.))*100.*(step(mod((uv.y+100.)/100.,2.),1.)*2.-1.),\n \teoq(clamp(mod(time,2.)-1.,0.,1.))*100.*(step(mod((uv.x+100.)/100.,2.),1.)*2.-1.)\n \t );\n \n uv.x += randV(uv)*20.;\n \n float boxV = obj(uv,100.,25.);\n vec2 uv2 = uv + vec2(12.5);\n float boxV2 = obj(uv2,100.,25.);\n vec2 uv3 = uv - vec2(12.5);\n float boxV3 = obj(uv3,100.,25.);\n \n vec3 c = vec3(boxV,boxV2,boxV3);\n \n gl_FragColor = vec4(c, 1.0);\n}","artId":"ce1p63sn70rs76qrbq9g","libraries":[]}],"like":1,"thumbFileName":"ce1p63sn70rs76qrbq9g.png","selectedThumbFileName":"ce1p63sn70rs76qrbq9g.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmZJhczwFt47mSE1SvRj9fTXdybNj3UG21iN5j6jAU58LL","resourceFileName":"ce1p63sn70rs76qrbq9g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmam1V4nmHYxpFUus9avXSogD5kct1ezu8A86Hdso5JA4q","resourceType":3,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmX3N6njiWtbGzfdCFLSciXWYSMkbNemrYgGknrjkex9HY","tags":[{"id":"bmj9c1c3p9fdr6916krg","name":"GLSL"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.01,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ce1nfh4n70rs76qrbpt0","title":"The circle of transmigration","description":"Death and life connected to each other.","createdAt":1669560267,"updatedAt":1669560267,"user":{"id":"IWD3ncMyhLhqMb7dInMwosr9Yw92","customId":"IWD3ncMyhLhqMb7dInMwosr9Yw92","name":"ayametakuya","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/IWD3ncMyhLhqMb7dInMwosr9Yw92.jpg","createdAt":1638366088154,"updatedAt":1718276802080},"codes":[{"id":"ce1nfisn70rs76qrbpu0","type":0,"text":"","artId":"ce1nfh4n70rs76qrbpt0","libraries":[]},{"id":"ce1nfisn70rs76qrbpug","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce1nfh4n70rs76qrbpt0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce1nfisn70rs76qrbpv0","type":2,"text":"let noiseStep = 0.0001;\nlet timeStep = 0.0003;\nlet angleStep = 0.001;\nlet angleStep2 = 600;\nlet points = [];\nlet grid;\n\nfunction setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n grid = width /100\n\n background(0);\n noStroke();\n colorMode(HSB, 360, 100, 100, 100);\n\n for (let y = 0; y \u003c= height + grid; y += grid) {\n for (let x = 0; x \u003c= width + grid; x += grid) {\n let p = createVector(x, y);\n points.push(p);\n }\n }\n}\n\nfunction draw() {\n for (let i = 0; i \u003c points.length; i++) {\n let pointAngle = map(\n noise(points[i].x * angleStep, points[i].y * angleStep),\n 0,\n 1,\n 0,\n angleStep2\n );\n points[i].add(createVector(sin(pointAngle), cos(pointAngle)));\n if (points[i].x \u003e width) points[i].x = random(width);\n if (points[i].x \u003c 0) points[i].x = width;\n if (points[i].y \u003c 0) points[i].y = height;\n if (points[i].y \u003e height) points[i].y = random(height);\n\n let colorAngle = map(\n noise(\n points[i].x * noiseStep,\n points[i].y * noiseStep,\n frameCount * timeStep\n ),\n 0,\n 1,\n 0,\n 360\n );\n let h = map(sin(colorAngle), -1, 1, 10, 360);\n let s = map(cos(colorAngle), -1, 1, 10, 100);\n let b = map(tan(colorAngle), -1, 1, 10, 100);\n let r = map(sin(colorAngle), -1, 1, grid * 0.1, grid * 1);\n fill(h, s, b, 10);\n ellipse(points[i].x, points[i].y, r, r);\n }\n}\n\n","artId":"ce1nfh4n70rs76qrbpt0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":0,"thumbFileName":"ce1nfh4n70rs76qrbpt0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce1nfh4n70rs76qrbpt0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYAdzRhmQu61XNJBLeq9oNTPnY3xu5jPbyQQWPVLmd3zG","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdqc8ccn70rqdtr2jdf0","title":"GOODBYE WORLD","description":"This is an artwork using the deprecated `marquee` tag. It is a farewell message by the departing code, as opposed to the sample string `Hello World` that is often included when beginning programming. This work is related to `marquee shelter` by 0xhaiku ( https://slbls.art/marquee ).\n\nこれは廃止された`marquee`タグを使用したアートです。プログラミングをはじめる際によく記載されるサンプル文字列`Hello World`とは反対に、去りゆくコードによる別れのメッセージとしました。0xhaikuによる`marquee shelter`( https://slbls.art/marquee )の関連作品です。","createdAt":1669538860,"updatedAt":1704085747,"user":{"id":"Mxzxgc9ocVQJCcOWfMR2eGsdQN53","customId":"0xhaiku","name":"0xhaiku","biography":"artist. creator of poetic things.","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/Mxzxgc9ocVQJCcOWfMR2eGsdQN53.jpg","createdAt":1657640528608,"updatedAt":1704085555883},"codes":[{"id":"cdqc8dkn70rqdtr2jdg0","type":0,"text":"\u003chtml\u003e\n\u003cstyle\u003ehtml,body{width:100%;height:100%}\n@font-face {\n font-family: \"MQR\";\n font-display: fallback;\n src: url(data:application/font-woff2;charset=utf-8;base64,d09GMgABAAAAABP4AAoAAAAAJtgAABOqAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAABmAANAq8YK5qATYCJAODBAuDCAAEIAWHEAcgG6sdIxH1i9TCk/0lpnDtQBpnJxwtsc1gB3ajs6txeBgeLgIAQHG93iN+AADYpSgAsMA2wIJpAYChlP73+7HOu/9+RURkOlSSqEbNeKTRGJLYbqNtMhmetvlvQ1SMRhCVqFBA4Lgg76hWJ+XQXmT+yvZXF7Hwrh4AhprN/3f6ep/trHe/T1AHLaGFpWU5kuWROQj5ohbNGoNm446DdYZcV/LDmnU4W8sZu5O6B0B3d0+2ACDRiCr3gK4EuJA0ramn/36Zs/tCK8UFo5By/9u9zfz7vKslrdQlKucuKHClqqr2aKWpwyWWYTzC0jXCVK0CQgK5La8efedUIshH3zXeFHyXQk606VW2+kS/uApwNCYWIQNUUyMASvbvW/RCGxcAUdZZZiIGMKQ6acHD0WWZYN/5HPbvmbkcIQAQa+8M9J2WgCf4BSQSCzAFIxCAsq8vQOi//f//ORAZ/z//s4NWia4ruGk6A/pvANNVKlnWGARo55cgpx0gKIFAREji1e5UOfWqgy+V0YmiDbs3UV+bpNOSqVLCpi7rygKNwqZV2RRuM7cwNX3ArY4Gintkc4u3d0cD63CfR7IuRmVWvUwd5hZsbVA8TZpMDW8MrC3q3e2721sM7pvuMFRar6WphWJorKls5m7GMGW6tvVpfT4djKYW21zdkNl3tfebnYQRyqC1CU2ZBo95nnX70qStEmKoZG7qAf1IoYd1y9dcyXw6lXE046Cj1fHq4WsdehWRG9TlU0r0rLqEeBG62SUDH0LAYBzq3kKfnBrldbcOi090TnF8oH7aQYH97kyGPfodqzew7RLNNVHX7i/sPf8tLdJ0gHwnPqKjh8SdxrP7L3DGQgr8p5SX61ChI2LgibQp/uEM10SfWYb6X6GnybHMZC5TbUbTpzV2SFQoBKGwazWM+TK/V5uTFAPxMXmAOeZK0+X5ZNeYzYPKoGR1Q3WWPbdcpi8N1R+Tiao4WlCcaQ707Khs15FsYNiggXTKy4P9zPM0yVSOzF/plwOxX098IQ0vh5O2SUPGGBGKQYo3tY1T5zObCrTkOIfQzypFw+ydpdFyJWd5/tGM3cbcYu7j0jqU7slgIQvoCfSNixeaakgKl/sVDl9yPar7ASXK7GTv/WP7K3Pu7r2n4CSw7cdE3URkp6bA1Azq/MRZ/al8yeKz9AL0xe3n831xOd766XObbtH30XzzGXTZflSSop+cw8nQoAzA+fKu8PSAFd5sFsMDf2fv7y0DteKab0lxPsC5Ue88uvwx9BhhM72CxRTK6OAnBjqQwb31aVNu1umh6O/VUR97tJxVqo75c8um3DlatgQ31I6bL8HiVa+QTKMq/GuLUFgQzJnDBlrlzmtQ0FoSqHLClhQNkKSzPhqiPDcyW5lasY2KCiNFlxylMRONGxHFtWSSwiQWtqauYlxl7gpjRg0hYh3tkxXzQkuDS3PSTDoLVqIOr1brODXXUmdkO5SROsFFAzPWnjqpCzpeaN9r1e39JwOH0hQiwUOiPt4XNBrIXJHJYW7/1mxUfkbsiXrGUifU5onsfYwL3I6+XGfGHz0fkuyzgkoKTeKH7pfgB4V/JPy9LFzx27k05vwVu69tK6g098Krwj+k5LecjtbbenbOqS2lvJ9X13KyW8tFo2rRaaluy1mVLMIZytP4HIooY+0yUtg2QhMindSJqVYVewJVRc7SkE5M7S4qbxEubG/snYWuRE65ft4AqpnuP54jVEfM8+fY8/utJNRoC9HUbDwKpDZdN8aes97haWuOYhs6MNb1womzQhGFSUNj5yeOKnr/zQsEaPwVL1/APcyt0jSvMc5YxU0tvqul4AGIztLmMZks0anHCwbL1krTMWk671cNDZdEDoXO3m+eU9wvcGBDvEVk0buQKEPcXh/kjj3BYgr1K8AB72hqETrGOuloCs0MpggrGKPuDy6FRxRmd3PTKTydxur0106Qseck63kri5TAtDMN2mQmV7jofCbiXb+1j0zL26WzLsig6ibMM71YwuC0WjgwQBmtWobElCkRYPWZr2b+aWEzGwB2zhHG2DjqG33w2vvpFv0/S3hsBvNfch/iZvMwY4c5HVupTDN/oXDuE3BQRwqrA99F0vfE/U8RurnGRV6xojfcY0SojGOWtma2vPQ0zVZpvg2Ay0yLsdbZM7N2TLHITNa45XX1BJbMWl7uHDjJ2GiRhmMOvJIo/sXk7Wt/KlaE68s6ND/tePl5Kf/sGGhja9/6yS7SCM/vSR3gTO7uW8LZ9C55/RW+tM5qydw7o1CfxA/uolAGOa9trwWLm9PE4d3+zMfGqGlUIr4nE6dVCpBv2/+f8sUI/xgjfKGNwbAJ+SOg9kT3skKIH/5OBoqCF9ZAO1kXbHEdEL2MIW2UYKM1rp3MC7ZBh8UvoBGfG4Qv6Lo3MC/YAOq9OtId/8U8srQX3rwlpBS7dVq5JyRd8DiwDrzHzvD8A1u73vgpFix1GZGJbKZp1DFy3WquuI/9+tkjiuVXooy+nrM8ILLiqUAYixptRDIU8icgG5G4BoGkw8KlDg13cbXTw0MCeoDxcMH7+nBYJY0aLPIo6jo4s+V8ET/BYnmEjIZHyMQlK/tWZqVQv1/swgkEqafi0Cpw2C57fHtQorY4dQIHNyPGGIFI5Exh1ZL2uFIC0B6RiwLp83wJ5L1165GPfOkInEM+XLP474Q7B/55iva92BggzsbP8iiruy7qafVeJW29EW++8WplW+jC7upOoPU9ehd612PYY3egdzwKXpq5pjvfmYFXbqhRHXQXw/kuOPUpISeAjNI6qWs7n4o77oCUEqkmNJcuLKoursTj0cmY5pLFBGOPOZ/R3Dx1Ce1NnfP8r8KBgycLnM2Iw2SEbOzN4weQU8D5vgHgGCD/sXNuWCqEHp/wLMVPW09ReuBSrADx33d3BxzlhxQO2GxUhQXWwSucApyqdOQVurjDKBzFspwzT9aNE6BOl63ouC12W7FXlcA9VuXlOH3IS3j1MNsr1H5u00W5Lz+Tm5LCcFahDOrVfMQle4K02icTYjqrKbdgAJULjV7Bx6UPK4E3VOq/ef/m/ua+DlDXfclRAD2i0N0VoyZ6VdEc4tVKXH6OfuCPXfcw8AmC1vWs+1Gas6qyj3oQa2nRDHQUS0Y4EuSuIQKME+iabUi5B/oFl1+lYTm5IUAr9dU/+bqzVzqxamHSa15ZtqBeZ8if9GIBVI2JNnEYjxyO8MH1Xet2ER+gbduBPwUuKkzRIZ0Ic+rnftrOccnMFl9BYDbn6s3wmV3+8Nm3oUYJqjFZYhU1jKFet4HPccuwuWv/Euogpz/PjPzI1Ti1ZpNToxVo5sAbOu0XEk6+jO5OyfVBetGYsZ87nvnilMdcqVgwU1rgILibksb2WXEZC82qKDGVhy91ShnS6E0SCMfDIa8HyM8aAJIiWsW45KKjQRMhEPSXS/l3oRw+F745eMlXWgCfJp4hnr7vty9IPfqAP30W0h5O0/ZxBHKH2a4P07ezvNvyAxA0KtUHjCoaVF+rVe4YpASlC8WAhpIT+3LItYtZ4Vn+mTmbN7Q65rxgRtmSYKBLHG7MufyVeanNWY66JBN+s4EPt4malhqojfpQa1e4Mao7MH065a8k9OdOjhuOrPSHtBGqyqkJUZMkwWCU5KrfcOJUG2em0yNx9oGez58pfPFM9vz/Zc2rId3VJ4be30L6P4h/3IeDwtKD01uCowiE30Xe7eKJILPTmC2q0fZA3IlaRE+6mdYFMB/w/TE07NbEJj4ANUp1R852aS0m2h0ozGg9+jQ1wsE+CHYKdEGBHuufhJPSLRnIyw22zcQ2Y60AWbqucAD3n72wNnjRiVC1MbB17ZEDBePa0hDmUeo+yqWE910TYfrXW/kD/zx6JYhQxnYQzvMX18JX7k1O6EJUiOU9AnXLsFG3alueEG5OYwH2n/xXthNv5oOjVA25aQVdkZ7aAXoATNuPtOi9mn2j/ViL/jbs4G+KMNZ+b6wa6hGLz2dBlk/TP2IRxbxe5Ga3Npl8T3eUv3P9vrv8rIfIfgsWltJrjBGgXdq2+mISt7B9Kbajp6GRRjN01u24L7Lz/jqmTiRtonTvEI2fNaQwSc7vIjPXJ5amOqbq+lETbeAwCKZABb1tdGB3eFp/2Ww2BRV0trHBXZHI4B7b6KjegVsRN3Nrei96RsqKuVlb0+myo27nv1E8s3VVbWJYXZ11jBW706PDwUGhQ+8N2iKT/eDOW8rPDTuPdPx4leIh8orotNyUgMw8/4O5+20T1/Bm+Z65YZj5jxz1D8WxJkCnWCZ7/o8MVRkmnbufJuHegfD/Po4rtD673RgpylBjoVc94GVFuiSixzokvKd/oO6Jq9WoXc30fJxhgP/X/xL/EffrgYQSnnDIVxPPpJ8w02PPGS0PUeOGx9PPeWWri27w/6cv+f3PH/ziFZSEPvrVoV3PFD58ClTxpyLG+mBDcMWvUUmG65ARbtty9vG7nkQMn8dNX6beuH0re3krU0qCyV6hMpgLBJUR9KmxIDp1NExb3uA8Ou1DAe+92eeTY2d2nN1ReC717kzuatFVIrDM/t1bVlxeuaIyeu+iFxRQq14S3I2atRYCfL9X+RA78MYBDHywLXjKL98MZk3Tq49ov34keFvpohI4m0gSwJtrPb2/4VBT9bJ66KMW8CsFHw3gQyZ/TRhYNr+8F0P1NlmAymNC4Wy/rVhLj5Yxiqcu4/6Jhil8bIVLpy4s/7HMWclRngkKKcOEcrq+AcL+SFwOkGV1OK6yqXGuGWaW3amRBQlyHZgHqk6Mx38FL+ytjBWRSRCiBOfM1rWjZdeG1Ua/yt/VycB+uJ9n88t5STcqSPhFZnmg6xn83UQ76KRoCI4FZlbRlHZ90e4X7Nh+ez1FOtD6auoPr47WfX7ppTQMdY/Heob7srfpEH955QpkBSAo8Q0jrvWp5MjGOZcfmbAZZ3HJrmWwOhTlmuUx2iXEy5lO1M9kuS6RQWGiyQ1+fHbLfn2LzaHGEswhubN5TbfbcOeg/hy7Zsm39Czo/sU02rOVWF3pVWTQqLe7hdxbd6eXaZhcdXT7jsVTJaOH+yS52YkJ/brSSt2IjuP2d7vVVA837ZQo/PDk+ARWAcQf6YduCSBD8gs/UsqW82m/xwZZ5E4FL27vBYT1/rbt17fYKc/e3Gb9Yi0DZ3GCDEaQw8LBA7+wvJTTOHXvZT2K2n7FTxyP1J+bXEGCphkjbLaynxFkc/Kg+ke6h9otoC0XiwV3PlN75bOP1JXb/07UXlHv7Efaxu+bTL/uun8K0NLtS+Sld2VUyeO3kepEUgmlJ+bOE7h0stBHH+hMQC0ELjv7cB/jh5akvQUQdKwlSP7PH+oSh8bTY6V03D1tC7vK+W4gp+hTHBfMr6A5+7opK4LMWB3rCwi/7HAnOQZMD2k42REHJ+1W64P+WmGEm3VrAP59o7cJq/vz9BaxpqdIg68io984aneJHrvll3quuOfTg0ofVKqWXeMBjyuf6ilYp8H1Ta3N/W2kkFdlVRNcC8waXHLdwjCM89TDXlWorgXFGlMHlQiSyfaM2WvEgHs0xax7GtitF7dtP95if7t5rO5Wl9HE9aVowT/u7ZM5DYKU8eFzQjGoeinadGd7RBVlDLsqIqo0YzB6RKtl6rYsyyHH2y9iwLOuZo79CLf30IGPYY8gqtSp3QUeOEaxpAb1Pkh63H6svfMAduRF34t94hVmCeOuKLbqLMB6IZ3PF9MJh97pNP/HSNh70mGMU5Ss6H4f/PyYNTtju4EOP0F6goGcX7Pln6CBUowWFTZGPT46iX1tG3JId+sKza2H2t3PdJFEQ6m4pDGcoNVU95xJDa0hrekNXam+B4QtdT5ILh55Mn+8KD5EXuosnvnKWa+APb/0RF+CbyJ1sHZ8+dAA9sFAcsvQc3TfcVLlh+8XKpbsBzmePIjIQNo2dEoGH0TVOy1+8PTeg0mOCjGc0H017LnwS+1JgwZOcYewju4rOEd12Wr9Or/uhOZsB2j48oXnC3DgqWc//h6m/N6Tz/Np0xuLrs3UgXNLVsnTpx7m0Y74OaVNtMEnvQDBn8HPCgQrwV1y/FJ8bdUGQa7I5zc6OtpTvyLxB8DzNiO5P//N7zDwn9pI/4AC4lb/71c5Iyn/1x6Til33kUlqpPPvCFwIPUTcgwj+gSfhakon8DKd5oe1YIUxQMBLWh6yJuTe03dylOajNKF2nVAgF50KCSmuYZomElqonxCWvrDXx/ipj4zgYUo/2Et75AHQfbxEyJLJVnKd9YQvVIXmn960JzsLzOSzgToSUvgpHXQJDUqcBNIhh9YliCzZoHYP13YlgGd20yhiKGDJ+UpNVxBUxIA0Ipnz54j0FTLMkM0VjKjgKqAmKGBSNyWAoHEgaBoIWgKC1oCgLSDoAIjJJ6QmiQ6g3fVYIaCJ6QqCudjKhDXxBvCIYJmwc7SQCWtSClCH1Zqt4E4rEHQNBN0AQXdA0AMQ9AEQ9AsMjyGinN7ZdfPVcmWRHa3WGNjozEy5VmSX+iGlp7NWY1c/vsIFdnVxoTi/ujihrIaIaLhYXlUbmz8xcvx4cX6hOjPNjlaq1cYHv6LKRwAgM2atM6+qrGIRm5aahgEbamaXuKymiM2fGKLE5lRLYQtLiIUrf9EC8c9b/XekCUphEEKUeuCyVWrGzFPUvYjzV1xQNWNaN1eWm1Yzcv1BLXWSUOX8L4uehq0BAAAA) format(\"woff2\");\n }\n * {\n font-weight:900;\n font-family: \"MQR\", monospace;\n }\n\n.w{height:10%;width:100%;}*{padding:0;margin:0;font-size:10vh;box-sizing: border-box}\u003c/style\u003e\n\u003cbody\u003e\n\u003cdiv style=\"width:21.9%;height:100%;float:left\"\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"width:28.1%;height:100%;float:left\"\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"width:21.9%;height:100%;float:left\"\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003cdiv style=\"width:28.1%;height:100%;float:left\"\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003cdiv class=\"w\"\u003e\u003cmarquee scrollamount=\"2\" direction=\"right\" behavior=\"alternate\"\u003eGOODBYE WORLD\u003c/marquee\u003e\u003c/div\u003e\n\u003c/div\u003e\n\u003c/body\u003e\n\u003c/html\u003e","artId":"cdqc8ccn70rqdtr2jdf0","libraries":[]},{"id":"cdqc8dkn70rqdtr2jdgg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"cdqc8ccn70rqdtr2jdf0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cdqc8dkn70rqdtr2jdh0","type":2,"text":"var elements = document.getElementsByTagName(\"marquee\");\nfor(var i = 0; i \u003c elements.length; i++) {\n elements[i].innerText = 'GOODBYE WORLD';\n elements[i].scrollAmount = Math.floor(1+Math.random()*9);\n elements[i].direction = Math.random() \u003e= 0.5 ? 'right' : 'left';\n elements[i].behavior = Math.random() \u003e= 0.8 ? 'alternate' : 'scroll';\n elements[i].style.backgroundColor = \"hsl(\"+ Math.floor(Math.random()*360)+\", 100%, 60%)\";\n elements[i].style.color = \"hsl(\"+ Math.floor(Math.random()*360)+\", 100%, 40%)\";\n}","artId":"cdqc8ccn70rqdtr2jdf0","libraries":[]}],"like":0,"thumbFileName":"cdqc8ccn70rqdtr2jdf0.png","selectedThumbFileName":"cdqc8ccn70rqdtr2jdf0.png","thumbnailFileUrl":"","resourceFileName":"cdqc8ccn70rqdtr2jdf0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYK9c9g819s4UeJ3YDL2KqXM61TjRfdKBbbqNM6DewdX2","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce146scn70rs76qrbk80","title":"eyes","description":"おめめがいっぱい","createdAt":1669481334,"updatedAt":1678027563,"user":{"id":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","customId":"kxRaHBGSlVbGNFln0YnNYdFUNIC3","name":"暁の流星","biography":"https://twitter.com/teruru33550336","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kxRaHBGSlVbGNFln0YnNYdFUNIC3.png","createdAt":1568178895000,"updatedAt":1734018546583},"codes":[{"id":"ce146tkn70rs76qrbk90","type":0,"text":"\u003c!DOCTYPE html\u003e\r\n\u003chtml lang=\"en\"\u003e\r\n \u003chead\u003e\r\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js\"\u003e\u003c/script\u003e\r\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\r\n \u003cmeta charset=\"utf-8\" /\u003e\r\n\r\n \u003c/head\u003e\r\n \u003cbody\u003e\r\n \u003cmain\u003e\r\n \u003c/main\u003e\r\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\r\n \u003c/body\u003e\r\n\u003c/html\u003e\r\n","artId":"ce146scn70rs76qrbk80","libraries":[]},{"id":"ce146tkn70rs76qrbk9g","type":1,"text":"* {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"ce146scn70rs76qrbk80","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce146tkn70rs76qrbka0","type":2,"text":"// const w = window.innerWidth\r\n// const h = window.innerHeight\r\n\r\nconst w = 11012\r\nconst h = 1080\r\n\r\nfunction setup(){\r\n createCanvas(w,h)\r\n}\r\n\r\nlet t=0\r\nfunction draw(){\r\n background(0)\r\n\tnoStroke()\r\n const tt=(t%360)/360\r\n const ttt=(t/360)|0\r\n for(let p=0;p\u003ch/250+2;p++){\r\n a=w/450+2\r\n for(let l=0;l\u003ca;l++){\r\n push()\r\n k=p%2?450/2:0\r\n translate(l*450-k-tt*450/2,p*250-tt*500/2-250)\r\n ww=400\r\n z=ww/2\r\n fill(255)\r\n beginShape()\r\n for(i=z;i\u003e-z;i--){\r\n vertex(abs(i)*2,100*sin(i*TAU/ww)+z)\r\n }\r\n endShape()\r\n fill(0)\r\n r=p%2?0:0\r\n r=-((p+1)/2|0)\r\n ellipse(z+noise(t/100+(p+ttt)*a+noise(l+r))*200-100, z+noise(t/100+(p+ttt)*a+l+r)*200-100, 120)\r\n pop()\r\n }\r\n }\r\n t++\r\n}","artId":"ce146scn70rs76qrbk80","libraries":[]}],"like":0,"thumbFileName":"ce146scn70rs76qrbk80.png","selectedThumbFileName":"ce146scn70rs76qrbk80.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmcNdaTf3xt4AyS8xc453YnVVqiByKPJ5NuiEqF46Kwnoe","resourceFileName":"ce146scn70rs76qrbk80.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmULrHCWH8ZUieGHmcJQnV9XDDZ2MRfabVCP1kwZEpyUJx","resourceType":1,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmeFV3XEmhq1yaxmD8LGh87HF1hcxhEXrTWzAFmF5erMks","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.01,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ce0vt2kn70rs76qrbgug","title":"Overlapping lines (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221126/","createdAt":1669463720,"updatedAt":1669463720,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce0vt2kn70rs76qrbgug.png","thumbnailFileUrl":"","resourceFileName":"ce0vt2kn70rs76qrbgug.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPa7kQT1BotnopUr944x48vgfaHZZBr1un3HqsvsWDNt7","resourceType":2,"metadataUrl":"","tags":[{"id":"ce0vta4n70rs76qrbh00","name":"CURATION_FREE "},{"id":"ce0vta4n70rs76qrbh0g","name":"day7"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"ce9fl7kn70rvflp1dnh0.png","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1670580015,"updatedAt":1670580015},{"id":"ce9fk64n70rvflp1dnf0","title":"CURATION FREE Day 6","description":"Artworks displayed at open exhibition \"CURATION FREE\" at NEORT++.\nCheck the page below for the detail.\nhttps://neort.io/challenge/cdq4oe4n70rqdtr2jaf0","user":{"id":"FEBFBVGRlZMDfXhIymp2NcAIyM22","customId":"","name":"NEORT","biography":"Thank you for using NEORT.\nThis is NEORT staff account.","image":"https://pbs.twimg.com/profile_images/1095209921816158208/Yznn0ohE_normal.jpg","createdAt":1551604907000,"updatedAt":1670997369315},"arts":[{"id":"ce69814n70rh3gnts0ng","title":"Form of sleepiness","description":"This is a long horizontal generative art created for CURATION_FREE.","createdAt":1670157319,"updatedAt":1670157319,"user":{"id":"frbTvj363JQYvSV4nuD9dxGVPq33","customId":"frbTvj363JQYvSV4nuD9dxGVPq33","name":"Lisa Sekaida 世界田りさ","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/frbTvj363JQYvSV4nuD9dxGVPq33.jpg","createdAt":1643083264007,"updatedAt":1716332663248},"codes":[{"id":"ce6981sn70rh3gnts0og","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n\t\u003cmeta charset=\"utf-8\" /\u003e\n\t\u003c!-- keep the line below for OpenProcessing compatibility --\u003e\n\t\u003cscript src=\"https://openprocessing.org/openprocessing_sketch.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"mySketch.js\"\u003e\u003c/script\u003e\n\t\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e \n\u003c/body\u003e\n\n\u003c/html\u003e","artId":"ce69814n70rh3gnts0ng","libraries":[]},{"id":"ce6981sn70rh3gnts0p0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce69814n70rh3gnts0ng","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce6981sn70rh3gnts0pg","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n colorMode(HSB, s = 11012, 100, 100, 100)\n background(0);\n frameRate(2);\n noFill();\n}\n\nfunction draw() {\n\tvar r = random;\n\tfor (let y = 0; y \u003c 1080; y += 100) {\n\t\tfor (let x = 0; x \u003c 11012; x += 100) {\n\t\t\trotate(PI);\n\t\t\tstrokeWeight(2);\n\t\t\tstroke(x + r(s * 0.2), r(100), r(100));\n\t\t\tellipseMode(CENTER);\n\t\t\tellipse(x, y, y / r(100));\n\t\t}\n\t}\n}","artId":"ce69814n70rh3gnts0ng","libraries":[]}],"like":0,"thumbFileName":"ce69814n70rh3gnts0ng.jpg","selectedThumbFileName":"ce69814n70rh3gnts0ng.jpg","thumbnailFileUrl":"","resourceFileName":"ce69814n70rh3gnts0ng.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVS4VphMkg93WLx8oLjbQbRMAa1rrGaQhjrnDn6noWUji","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce659rsn70rlpj69dg4g","title":"apex predator","description":"we are the apex predator on earth.\nBut are we truly satisfied with each life?\n\n人として生まれたことは素晴らしいが、\n幸せな時間とは限らない。\n\n","createdAt":1670141219,"updatedAt":1670141219,"user":{"id":"kHSkdKRwmGRoXW2eAM8iM1p9anl2","customId":"kHSkdKRwmGRoXW2eAM8iM1p9anl2","name":"UZU","biography":"craft abstract visual and sound since 2019.\nMainly used touchdesigner,After Effects,and Logic Pro.","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kHSkdKRwmGRoXW2eAM8iM1p9anl2.jpg","createdAt":1669823792273,"updatedAt":1671194749566},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce659rsn70rlpj69dg4g.jpg","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmZx2sh9CeVD8HuRtHCCjBap8ZT7h915CWwT84ntQij1BH","resourceFileName":"ce659rsn70rlpj69dg4g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmfVbN4P4EK2xYCCFAYhwG7toUuC4AXybA4vZqCbrwZGUq","resourceType":2,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmczgpVAEYJ2xT8JYqPaeBmGuuPWprxjKkLcentRwgCQ7g","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.6,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ce649c4n70rlpj69df0g","title":"Airhythm","description":"Common sense has been turned upside down especially these years. We breath the air for granted but its can't be visualized so i do.\n\n常識が変容しやすい昨今の背景から着想したものであり 本映像は当たり前にある空気を可視化しようと試みたものである。","createdAt":1670137024,"updatedAt":1670137024,"user":{"id":"kHSkdKRwmGRoXW2eAM8iM1p9anl2","customId":"kHSkdKRwmGRoXW2eAM8iM1p9anl2","name":"UZU","biography":"craft abstract visual and sound since 2019.\nMainly used touchdesigner,After Effects,and Logic Pro.","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kHSkdKRwmGRoXW2eAM8iM1p9anl2.jpg","createdAt":1669823792273,"updatedAt":1671194749566},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce649c4n70rlpj69df0g.jpg","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmSuuGJv151ioxPndVzK6UNkZKFdvJZmgjcvb1Hb5Dw2YF","resourceFileName":"ce649c4n70rlpj69df0g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qma9HYbDPYafTZ51S9DAj6Gh1dWGhcuy4LqGtkajYFwnkp","resourceType":2,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmPUXmnWJkmjkKmyrRvNkLGxfP7PQFw9huA4bytFVcfCnG","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.6,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ce62c84n70rlpj69dcs0","title":"Ri-Dou","description":"写真とリズムの世界、3Dレンズで撮影した映像を分解し再編集。\n映像とリズムを体感する作品。","createdAt":1670129229,"updatedAt":1670129229,"user":{"id":"gXbwFayTrhMG4JqrQQUlsN8C3zx1","customId":"","name":"立川清志楼 【第一次三ヶ年計画推進中】","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/gXbwFayTrhMG4JqrQQUlsN8C3zx1.jpg","createdAt":1670126867902,"updatedAt":1670902693262},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce62c84n70rlpj69dcs0.jpg","thumbnailFileUrl":"","resourceFileName":"ce62c84n70rlpj69dcs0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXvxqAw4PbHWkDCYMX7KNAfAMqudawZJSfD1cx4WhrySW","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce61kvkn70rlpj69db2g","title":"Distance","description":"高次元での距離を捉えてみたいのでSliced Wasserstein DistanceをWebGL2の実装。\n11012×1080での表示は検証できないので、何あか不具合の場合なら気軽く連絡ください。","createdAt":1670126207,"updatedAt":1670126207,"user":{"id":"dqHEyrxfvOWWAI2ZCccK1CiXCdC3","customId":"dqHEyrxfvOWWAI2ZCccK1CiXCdC3","name":"Zihou Ng","biography":"https://stwind.github.io/","image":"https://pbs.twimg.com/profile_images/1114317997630341120/M2NaMRdQ_normal.png","createdAt":1557395347000,"updatedAt":1734917417772},"codes":[{"id":"ce61kvsn70rlpj69db3g","type":0,"text":"\u003cscript src=\"https://stat.neort.io/externalResource/ce619n4n70rlpj69datg.js\"\u003e\u003c/script\u003e","artId":"ce61kvkn70rlpj69db2g","libraries":[]},{"id":"ce61kvsn70rlpj69db40","type":1,"text":"*,\n*::before,\n*::after {\n box-sizing: border-box;\n}\n\n* {\n margin: 0;\n}\n\nhtml,\nbody {\n height: 100%;\n overflow: hidden;\n}\n\nbody {\n line-height: 1.5;\n -webkit-font-smoothing: antialiased;\n\n font-family: \"Helvetica Neue\", Arial, \"Hiragino Kaku Gothic ProN\",\n \"Hiragino Sans\", Meiryo, sans-serif;\n}\n\ninput,\nbutton,\ntextarea,\nselect {\n font: inherit;\n}\n\n/*\n 9. Create a root stacking context\n */\n#root,\n#__next {\n isolation: isolate;\n}\n\n#app {\n position: relative;\n}\n\n/* styles */\n.canvas {\n width: 100vw;\n height: 100vh;\n touch-action: none;\n overscroll-behavior: contain;\n}\n\n.stats {\n position: absolute;\n top: 0.5rem;\n left: 0.5rem;\n}\n","artId":"ce61kvkn70rlpj69db2g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce61kvsn70rlpj69db4g","type":2,"text":"","artId":"ce61kvkn70rlpj69db2g","libraries":[]}],"like":0,"thumbFileName":"ce61kvkn70rlpj69db2g.jpg","selectedThumbFileName":"ce61kvkn70rlpj69db2g.jpg","thumbnailFileUrl":"","resourceFileName":"ce61kvkn70rlpj69db2g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmb5xTbwZ5UaVVYUcMtmx6nAwQVcJjU8DgT7JSDNfRhvHJ","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5vcokn70rlpj69d970","title":"【Red】01","description":"","createdAt":1670116974,"updatedAt":1670116974,"user":{"id":"zOfh6S3LsEemJ6IENAnf3aQ7Twx1","customId":"zOfh6S3LsEemJ6IENAnf3aQ7Twx1","name":"shion oka","biography":"TouchDesigner - Unity\n\nhttps://twitter.com/oka_shion","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/zOfh6S3LsEemJ6IENAnf3aQ7Twx1.jpg","createdAt":1635212204282,"updatedAt":1710822531713},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce5vcokn70rlpj69d970.png","thumbnailFileUrl":"","resourceFileName":"ce5vcokn70rlpj69d970.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPyycW9fqmB57P6LUzciA86q8nWsKevPASw54U7PAizuu","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5v7ssn70rlpj69d92g","title":"POOL","description":"","createdAt":1670116368,"updatedAt":1670116368,"user":{"id":"zOfh6S3LsEemJ6IENAnf3aQ7Twx1","customId":"zOfh6S3LsEemJ6IENAnf3aQ7Twx1","name":"shion oka","biography":"TouchDesigner - Unity\n\nhttps://twitter.com/oka_shion","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/zOfh6S3LsEemJ6IENAnf3aQ7Twx1.jpg","createdAt":1635212204282,"updatedAt":1710822531713},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce5v7ssn70rlpj69d92g.png","thumbnailFileUrl":"","resourceFileName":"ce5v7ssn70rlpj69d92g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmSuM91VGcZHt7GGn7L1AofZYjXVwRMwedpCq1xtipHEYv","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5luckn70rlpj69d6pg","title":"TUNA","description":"The art work shows the small flower (Chrysanthemum) we often see on a tuna (raw fish) plate as decoration in Japan. \n\u003cimg src=\"https://d32h66pp7fue57.cloudfront.net/attachment/ce5ltasn70rlpj69d6og.gif\" width=\"480\" alt=\"ce5ltasn70rlpj69d6og.gif\"/\u003e","createdAt":1670078264,"updatedAt":1670078264,"user":{"id":"NnIbXwslIRQWzE6DDLM232CLpDl1","customId":"NnIbXwslIRQWzE6DDLM232CLpDl1","name":"Sari Dote","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/NnIbXwslIRQWzE6DDLM232CLpDl1.jpg","createdAt":1670075705738,"updatedAt":1671205542029},"codes":[],"like":0,"thumbFileName":"ce5luckn70rlpj69d6pg.jpg","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce5luckn70rlpj69d6q0.gif","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQPazbJRkmsQBF1B5QjwtyY3r5iB1inaAffJzkyZWwuUj","resourceType":4,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"#000","layoutType":1,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4uv24n70rlpj69cr8g","title":"Spinning in circles (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221202","createdAt":1669984181,"updatedAt":1669984499,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":2,"thumbFileName":"","selectedThumbFileName":"ce4uv24n70rlpj69cr8g.png","thumbnailFileUrl":"","resourceFileName":"ce4uv24n70rlpj69cr8g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmdHRCjsGCWCz5FvT8YUa1XmWacsFw4jXyWikGcLrGBtzm","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4qapcn70rlpj69cpjg","title":"Signifié on the Web -laugh-","description":"特定の単語をグーグル画像検索し、検索結果の大量の画像を深層学習し、生成したイメージ。\nAn image generated by a Google image search for a selected word and deep learning of a large number of images in the search results.","createdAt":1669965171,"updatedAt":1669971572,"user":{"id":"MMDC1lDO0OgxRHUq8BZhIUoAIcv2","customId":"gengoraw","name":"GengoRaw","biography":"https://gengoraw.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/MMDC1lDO0OgxRHUq8BZhIUoAIcv2.png","createdAt":1668904722357,"updatedAt":1669971490216},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce4qapcn70rlpj69cpjg.png","thumbnailFileUrl":"","resourceFileName":"ce4qapcn70rlpj69cpjg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPHwTtx8UKBYXygzxHnPiudRrS3Bz6eNs2usMr7vLVLXy","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4kt8sn70rlpj69cnbg","title":"Patty and Albi ~Audio Reactive Story~","description":"This is the story of Patty who is a cheerful cat and Albi who is a white crow with audio reactive. Each two have a differenct personality but they help each other. Don't judge a book by its cover.","createdAt":1669942958,"updatedAt":1669942958,"user":{"id":"2MoGDPZDZOhT7hzlPRl2Ca9pgXy1","customId":"2MoGDPZDZOhT7hzlPRl2Ca9pgXy1","name":"miwa maroon","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/2MoGDPZDZOhT7hzlPRl2Ca9pgXy1.jpg","createdAt":1669811744435,"updatedAt":1669942663668},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce4kt8sn70rlpj69cnbg.jpg","thumbnailFileUrl":"","resourceFileName":"ce4kt8sn70rlpj69cnbg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmcJGtsJvhr7J72vquD4KQWXe7gRsafK8TFRdft233tnAJ","resourceType":2,"metadataUrl":"","tags":[{"id":"bmj9a6k3p9fdr6916kp0","name":"TouchDesigner"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"},{"id":"ce4ktbkn70rlpj69cncg","name":"UnrealEngine"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce45jksn70rlpj69chug","title":"石AI","description":"愛石文化の根付く埼玉県寄居町の荒川の河原で収集した石を撮影、深層学習して生成したイメージ","createdAt":1669880299,"updatedAt":1669880299,"user":{"id":"MMDC1lDO0OgxRHUq8BZhIUoAIcv2","customId":"gengoraw","name":"GengoRaw","biography":"https://gengoraw.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/MMDC1lDO0OgxRHUq8BZhIUoAIcv2.png","createdAt":1668904722357,"updatedAt":1669971490216},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce45jksn70rlpj69chug.png","thumbnailFileUrl":"","resourceFileName":"ce45jksn70rlpj69chug.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmcQXopuDNVXBqvaVTEoaryFU9j1i4FDgerbryJdtdQKm2","resourceType":2,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce3qphcn70rlpj69cedg","title":"Something horrible is out there.","description":"バラバラボロノイ。","createdAt":1669835979,"updatedAt":1669835979,"user":{"id":"NwNkAukzMeZFVOOXNiYOhdlPXPC2","customId":"NwNkAukzMeZFVOOXNiYOhdlPXPC2","name":"メリー","biography":"https://twitter.com/mary_s_ann","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/NwNkAukzMeZFVOOXNiYOhdlPXPC2.png","createdAt":1630313265040,"updatedAt":1735288967993},"codes":[],"like":0,"thumbFileName":"ce3qphcn70rlpj69cedg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce3qphcn70rlpj69cee0.png","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmegJyZrFYLjRKMD4cHreuLZGZbsBQU5mU6xi937Mq8vad","resourceType":4,"metadataUrl":"","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"rgba(41, 44, 62, 1)","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce3lvgkn70rlpj69ccc0","title":"Multiple Dimension","description":"Is it true that we are in 3 dimension?\nWhich dimension we are in depends on our position. \nWe say the universe is four-dimensional, \nbut what if ants perceive the earth as an endless, never-ending space? \nWhat if the dream world is the real world and the real world is the dream world? \nMaybe common sense is not common sense.","createdAt":1669816285,"updatedAt":1669816285,"user":{"id":"2MoGDPZDZOhT7hzlPRl2Ca9pgXy1","customId":"2MoGDPZDZOhT7hzlPRl2Ca9pgXy1","name":"miwa maroon","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/2MoGDPZDZOhT7hzlPRl2Ca9pgXy1.jpg","createdAt":1669811744435,"updatedAt":1669942663668},"codes":[],"like":4,"thumbFileName":"","selectedThumbFileName":"ce3lvgkn70rlpj69ccc0.jpg","thumbnailFileUrl":"","resourceFileName":"ce3lvgkn70rlpj69ccc0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmc7Cvic25huvUaLyBkJE1aYXfwbc97Y3FsaVJoeW6FF82","resourceType":2,"metadataUrl":"","tags":[{"id":"bmj9a6k3p9fdr6916kp0","name":"TouchDesigner"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"},{"id":"ce3lvncn70rlpj69ccd0","name":"UnrealEngine5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce2g7kcn70rs76qrbvq0","title":"Wind Direction","description":"# wind Direction\n\nEntry for #CURATION_FREE #day6\n\n### memo\nThe 2D graphics for generative walls. The Scape generating by time of the day, where wind, earth position, weather and so on. A random parameters to change the color scheme. This is an sketch that I feel like to expression to \"direction of wind is very important to us.\"","createdAt":1669661661,"updatedAt":1669976304,"user":{"id":"nsWiH7awloPo3THWjO0Pc6cdhND3","customId":"taito_otani","name":"Taito Otani ","biography":"Audio \u0026 Visuals","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/nsWiH7awloPo3THWjO0Pc6cdhND3.jpg","createdAt":1568337758000,"updatedAt":1713681611594},"codes":[{"id":"ce2g7n4n70rs76qrbvr0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/0.10.2/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"ce2g7kcn70rs76qrbvq0","libraries":[]},{"id":"ce2g7n4n70rs76qrbvrg","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background: black;\n}\ncanvas {\n display: block;\n \n}\n","artId":"ce2g7kcn70rs76qrbvq0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce2g7n4n70rs76qrbvs0","type":2,"text":"// #CURATION_FREE\n// { Title: \"Nuclear Winds\", Author: \"Taito Otani\"}\n// Full screen representation(11012px × 1080px)\n// https://www.taito-otani.com/\n// Twitter https://twitter.com/home?lang=ja\n//------------------------------------------\n\nlet c_setup1 = \"a7cecb-8ba6a9-75704e-cacc90-f4ebbe\"\n .split(\"-\")\n .map((c) =\u003e \"#\" + c);\nlet c_setup2 = \"dfd9e2-c3acce-89909f-538083-2a7f62\"\n .split(\"-\")\n .map((c) =\u003e \"#\" + c);\n\nlet c_setup3 = \"c9daea-03f7eb-00b295-191516-ab2346\"\n .split(\"-\")\n .map((c) =\u003e \"#\" + c);\nlet c_setup4 = \"233d4d-fe7f2d-fcca46-a1c181-619b8a\"\n .split(\"-\")\n .map((c) =\u003e \"#\" + c);\n\nlet c_setup5 = \"222e50-007991-439a86-bcd8c1-e9d985\"\n .split(\"-\")\n .map((c) =\u003e \"#\" + c);\nlet c_setup6 = \"090909-4b5043-9bc4bc-d3ffe9-8ddbe0\"\n .split(\"-\")\n .map((c) =\u003e \"#\" + c);\n\nlet colors = [c_setup1, c_setup2, c_setup3, c_setup4, c_setup5];\nlet c;\n\nlet player;\nlet angle = 0;\nlet down = 1;\nlet cw = 11012 / down;\nlet ch = 1080 / down;\nlet date = new Date();\nlet winds = 1;\nlet hour = 12;\nlet min = 0.1;\nlet rain = 0;\nlet season = 0;\nlet skyColor;\n\n// texture for the particle\n\nlet drop = [];\nlet ps = null;\nlet cnv;\nfunction setup() {\n c = colors[int(random(colors.length))];\n winds = random(-1, 1);\n rain = random(0, 1);\n cw = windowWidth; \n ch = windowWidth*1080/11012;\n cnv = createCanvas(cw, ch, WEBGL);\n cnv.id(\"p5cnv\");\n\n let mCnv = document.getElementById(\"p5cnv\");\n if(windowHeight\u003c1060){\n mCnv.style.marginTop = \"15%\";\n }else{\n mCnv.style.marginTop = \"0%\";\n ch = windowHeight;\n }\n\n\n\n\n \n frameRate(24);\n noStroke();\n\n pTex = createGraphics(height * 0.05, height * 0.05);\n pTex.background(\"#fff\");\n ps = new ParticleSystem(0, createVector(width * 0.5, height * 0.5), pTex);\n\n for (var i = 0; i \u003c 200; i++) {\n drop[i] = new Drop();\n }\n\n date = new Date();\n hour = date.getHours();\n min = date.getMinutes();\n\n if (hour \u003e= 6 \u0026\u0026 hour \u003c 17) {\n skyColor = color(\"#829CBCB599\");\n } else if (hour \u003e= 17 \u0026\u0026 hour \u003c 19) {\n skyColor = color(\"#D66853AA\");\n } else if (hour \u003e= 5 \u0026\u0026 hour \u003c 6) {\n skyColor = color(\"#D66853A3\");\n } else if (hour \u003e= 19 \u0026\u0026 hour \u003c 23) {\n skyColor = color(\"#2A2E45A0\");\n } else if (hour \u003e= 0 \u0026\u0026 hour \u003c 6) {\n skyColor = color(\"#2A2E459B\");\n }\n}\n\nfunction draw() {\n translate(-width*0.5, -height*0.5);\n date = new Date();\n hour = date.getHours();\n min = date.getMinutes();\n \n if (hour \u003e= 6 \u0026\u0026 hour \u003c 17) {\n skyColor = color(\"#829cbc\");\n } else if (hour \u003e= 17 \u0026\u0026 hour \u003c 19) {\n skyColor = color(\"#D66853\");\n } else if (hour \u003e= 5 \u0026\u0026 hour \u003c 6) {\n skyColor = color(\"#D66853\");\n } else if (hour \u003e= 19 \u0026\u0026 hour \u003c 23) {\n skyColor = color(\"#2a2e45\");\n } else if (hour \u003e= 0 \u0026\u0026 hour \u003c 6) {\n skyColor = color(\"#2a2e45\");\n }\n background(skyColor);\n\n sun();\n fusha(width * 0.08, height * 0.5, winds);\n fusha(width * 0.2, height * 0.5, winds);\n mountain();\n buildings();\n powerPlant();\n trees();\n\n //rain\n if (rain \u003e= 0.7) {\n for (let i = 0; i \u003c 200; i++) {\n drop[i].show();\n drop[i].update();\n }\n }\n\n //winds\n push();\n let wind = createVector(winds * height*0.01, 0);\n ps.applyForce(wind);\n ps.run();\n for (let i = 0; i \u003c 2; i++) {\n ps.addParticle();\n }\n pop();\n}\n\nfunction sun(_hour) {\n let t = map(hour, 0, 23, 0, 360) + 90;\n push();\n fill(\"#FFFCFC\");\n translate(width * 0.5, height);\n let posX = width * 0.16 * cos(t);\n let posY = height * 0.85 * sin(t);\n let sun_color = map(posY, -height * 0.9, height * 0.9, 0, 255);\n drawingContext.shadowColor = color(sun_color, 175, 0);\n drawingContext.shadowBlur = width * 0.03;\n circle(posX, posY, width * 0.025);\n posX = width * 0.16 * cos(t);\n posY = height * 0.85 * sin(t);\n fill(\"#F3D55D\");\n circle(-posX, -posY, width * 0.025);\n pop();\n}\n\nfunction trees() {\n push();\n\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.01, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.05, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.01, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.03, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.021, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.15, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.01, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n translate(width * 0.03, 0);\n fill(c[0]);\n rect(width * 0.3075, height * 0.95, width * 0.005, height * 0.05);\n fill(c[1]);\n triangle(\n width * 0.3,\n height * 0.95,\n width * 0.31,\n height * 0.7,\n width * 0.32,\n height * 0.95\n );\n\n pop();\n}\n\nfunction buildings() {\n fill(c[2]);\n rect(width * 0.83, height * 0.5, width * 0.04, height * 0.5);\n rect(width * 0.68, height * 0.4, width * 0.04, height * 0.6);\n rect(width * 0.78, height * 0.55, width * 0.04, height * 0.45);\n\n fill(c[3]);\n rect(width * 0.7, height * 0.6, width * 0.04, height * 0.4);\n rect(width * 0.75, height * 0.3, width * 0.04, height * 0.7);\n rect(width * 0.8, height * 0.7, width * 0.04, height * 0.4);\n rect(width * 0.85, height * 0.6, width * 0.04, height * 0.4);\n rect(width * 0.9, height * 0.3, width * 0.03, height * 0.7);\n rect(width * 0.95, height * 0.5, width * 0.03, height * 0.5);\n}\n\nfunction powerPlant() {\n fill(c[4]);\n rect(width * 0.45, height * 0.7, width * 0.1, height * 0.3);\n rect(width * 0.488, height * 0.5, width * 0.02, height * 0.2);\n}\n\nfunction mountain() {\n fill(c[1]);\n triangle(\n width * 0.08,\n height,\n width * 0.14,\n height * 0.8,\n width * 0.18,\n height\n );\n triangle(\n width * 0.02,\n height,\n width * 0.07,\n height * 0.8,\n width * 0.13,\n height\n );\n\n triangle(\n width * 0.15,\n height,\n width * 0.2,\n height * 0.8,\n width * 0.25,\n height\n );\n}\n\nfunction fusha(_x, _y, _winds) {\n let heightOffset;\n let maxWidth = width * 0.01;\n let turbineWidth = width * 0.01;\n let heliceHeight = height * 0.22;\n let heliceWidth = width * 0.01;\n let speed = _winds * 3;\n push();\n translate(_x, _y);\n //base\n fill(c[3]);\n rect(maxWidth / -2, 0, maxWidth, height / 2);\n //center turbine\n fill(c[4]);\n circle(0, 0, turbineWidth);\n push();\n angleMode(DEGREES);\n rotate(angle);\n let spaceFromCenter = turbineWidth / 5;\n let x = cos(-90) * turbineWidth - heliceWidth / 2;\n let y = (sin(-90) * turbineWidth) / 2 + spaceFromCenter;\n fill(\"#B6BEC79B\");\n //one\n rect(x, y, heliceWidth, -heliceHeight);\n\n //two\n rotate(360 / 3);\n rect(x, y, heliceWidth, -heliceHeight);\n\n //three\n rotate(360 / 3);\n rect(x, y, heliceWidth, -heliceHeight);\n pop();\n angle += speed;\n pop();\n}\n/**\n * This function draws an arrow showing the direction our \"wind\" is blowing.\n */\n\nconst guides = () =\u003e {\n line(0, -height, 0, height);\n rotate(360 / 3);\n line(0, -height, 0, 0);\n rotate(360 / 3);\n line(0, -height, 0, 0);\n};\n\nfunction drawVector(v, loc, scale) {\n push();\n let arrowsize = 4;\n translate(loc.x, loc.y);\n stroke(255);\n rotate(v.heading());\n\n let len = v.mag() * scale;\n line(0, 0, len, 0);\n line(len, 0, len - arrowsize, +arrowsize / 2);\n line(len, 0, len - arrowsize, -arrowsize / 2);\n pop();\n}\n//========= PARTICLE SYSTEM ===========\n\n/**\n * A basic particle system class\n * @param num the number of particles\n * @param v the origin of the particle system\n * @param img_ a texture for each particle in the system\n * @constructor\n */\nlet ParticleSystem = function (num, v, img_) {\n this.particles = [];\n this.origin = v.copy();\n this.img = img_;\n this.img.width = height * 0.2;\n this.img.height = height * 0.2;\n for (let i = 0; i \u003c num; ++i) {\n this.particles.push(new Particle(this.origin, this.img));\n }\n};\n\nParticleSystem.prototype.run = function () {\n let len = this.particles.length;\n\n for (let i = len - 1; i \u003e= 0; i--) {\n let particle = this.particles[i];\n particle.run();\n\n if (particle.isDead()) {\n this.particles.splice(i, 1);\n }\n }\n};\n\nfunction windowResized() {\n\n let mCnv = document.getElementById(\"p5cnv\");\n if(windowHeight\u003c1060){\n ch = windowWidth*1080/11012;\n \n mCnv.style.marginTop = \"15%\";\n }else{\n mCnv.style.marginTop = \"0%\";\n ch = windowHeight;\n }\n resizeCanvas(windowWidth, ch);\n}\nParticleSystem.prototype.applyForce = function (dir) {\n let len = this.particles.length;\n for (let i = 0; i \u003c len; ++i) {\n this.particles[i].applyForce(dir);\n }\n};\n\nParticleSystem.prototype.addParticle = function () {\n this.particles.push(new Particle(this.origin, this.img));\n};\n\n//========= PARTICLE ===========\nlet Particle = function (pos, img_) {\n this.loc = pos.copy();\n\n let vx = randomGaussian() * 0.3;\n let vy = randomGaussian() * 0.3 - 1.0;\n\n this.vel = createVector(vx, vy);\n this.acc = createVector();\n this.lifespan = 100.0;\n this.texture = img_;\n};\n\nParticle.prototype.run = function () {\n this.update();\n this.render();\n};\n\nParticle.prototype.render = function () {\n imageMode(CENTER);\n tint(255, this.lifespan);\n image(\n this.texture,\n this.loc.x,\n this.loc.y,\n this.texture.width,\n this.texture.height\n );\n};\n\nParticle.prototype.applyForce = function (f) {\n this.acc.add(f);\n};\n\nParticle.prototype.isDead = function () {\n if (this.lifespan \u003c= 0.0) {\n return true;\n } else {\n return false;\n }\n};\n\nParticle.prototype.update = function () {\n this.vel.add(this.acc);\n this.loc.add(this.vel);\n this.lifespan -= 2.5;\n this.acc.mult(0);\n};\n\nfunction Drop() {\n this.x = random(-width, width * 2);\n this.y = random(0, -height);\n\n this.show = function () {\n noStroke();\n fill(255);\n ellipse(this.x, this.y, random(0, 1), random(1, 5));\n };\n\n this.update = function () {\n this.speed = random(0.1, 1);\n this.gravity = 1.05;\n this.y = this.y + this.speed * this.gravity;\n this.x = this.x + winds * 8;\n\n if (this.y \u003e height) {\n this.y = random(0, -height);\n this.gravity = 0;\n }\n\n if (this.x \u003c 0 || this.x \u003e width) {\n this.x = random(-width, width * 2);\n }\n };\n}\n","artId":"ce2g7kcn70rs76qrbvq0","libraries":[]}],"like":0,"thumbFileName":"ce2g7kcn70rs76qrbvq0.png","selectedThumbFileName":"ce2g7kcn70rs76qrbvq0.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmVeQesm1feHoUU2sojxtff4dJQEoy9ZiSNsjXQyaQxU1A","resourceFileName":"ce2g7kcn70rs76qrbvq0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPHWjoDYSsKhcsah8YUiyu5zWGHinT3YBMCBM9BRUfDBx","resourceType":1,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmQ5hcas6aVYtWZapJBoLHuoTQArsaeA5BZ2jneKGZjCfo","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce1omqkn70rs76qrbq40","title":"Axiom","description":"Description.","createdAt":1669565298,"updatedAt":1669565298,"user":{"id":"IWD3ncMyhLhqMb7dInMwosr9Yw92","customId":"IWD3ncMyhLhqMb7dInMwosr9Yw92","name":"ayametakuya","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/IWD3ncMyhLhqMb7dInMwosr9Yw92.jpg","createdAt":1638366088154,"updatedAt":1718276802080},"codes":[{"id":"ce1omskn70rs76qrbq50","type":0,"text":"","artId":"ce1omqkn70rs76qrbq40","libraries":[]},{"id":"ce1omskn70rs76qrbq5g","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce1omqkn70rs76qrbq40","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce1omskn70rs76qrbq60","type":2,"text":"let radius;\n\nfunction setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n angleMode(DEGREES);\n\n stroke(255)\n noFill();\n radius = width;\n}\n\nfunction draw() {\n background(0);\n translate(width/2, height/2);\n\n for(let j = 1; j \u003c 30; j++) {\n beginShape();\n for(let i = 0; i \u003c 360; i++){\n let xoff = map(cos(i), -1, 1, 0, 1)\n let yoff = map(sin(i), -1, 1, 0, 0.1)\n let r = map(noise(xoff, yoff, frameCount*0.0001), 0, 1, -radius, radius + j*40)\n let x = r * cos(r)\n let y = r * sin(r)\n let a = 0.00001\n let b = 0.1\n let c = 0.001\n\n let newX = y - 1 - ((x - 1) * sqrt(abs(b * x - 1 - c)) / abs(x - 1))\n let newY = a - x - 1\n vertex(newX, newY)\n }\n endShape(CLOSE)\n }\n}","artId":"ce1omqkn70rs76qrbq40","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":0,"thumbFileName":"ce1omqkn70rs76qrbq40.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce1omqkn70rs76qrbq40.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZ1smkBmm94obamna9e6ZgRaQkDokkeom84H3sbkWepvG","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce1b84sn70rs76qrbl2g","title":"HANGERS","description":"","createdAt":1669510169,"updatedAt":1670311752,"user":{"id":"jpe3kEu3j3R7kPPVLmQx5L1cLuD2","customId":"ech","name":"えいいち(E.C.H) ","biography":"たぶんアーティスト。美術と音楽と映画と、写真、お酒が好きです。作品制作してます。クリエイティブコーディング #CreativeCoding #Processing #p5js #openFrameworks #SonicPi #PureData #TouchDesigner","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/jpe3kEu3j3R7kPPVLmQx5L1cLuD2.png","createdAt":1573355006000,"updatedAt":1733824346259},"codes":[{"id":"ce1b86cn70rs76qrbl3g","type":0,"text":"","artId":"ce1b84sn70rs76qrbl2g","libraries":[]},{"id":"ce1b86cn70rs76qrbl40","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #FFFFFF; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"ce1b84sn70rs76qrbl2g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce1b86cn70rs76qrbl4g","type":2,"text":"/**********************************\r\n * NEORT- CURATION FREE\r\n * HANGERS\r\n * by E.C.H (Eiichi Ishii)\r\n **********************************/\r\n\r\nlet WW = 11012;\r\nlet WH = 1080;\r\nlet num = 2600;\r\n\r\nlet cp = [\"#EAC435\", \"#345995\", \"#03CEA4\", \"#FB4D3D\", \"#CA1551\"];\r\nlet w;\r\n\r\nfunction setup() {\r\n w = min(WW, WH);\r\n createCanvas(WW, WH);\r\n pixelDensity(1);\r\n frameRate(30);\r\n angleMode(DEGREES);\r\n rectMode(CENTER);\r\n background(255);\r\n drawWork();\r\n}\r\n\r\nfunction draw() {\r\n if(frameCount%300==0){\r\n background(255);\r\n drawWork();\r\n }\r\n}\r\n\r\nfunction drawWork(){\r\n strokeCap(ROUND);\r\n\r\n for (let i = 0; i \u003c num; i++) {\r\n push();\r\n translate(random(-WW / 8, WW + WW / 8), random(-WH / 8, WH + WH / 8));\r\n rotate(random(360));\r\n scale(random([-1, 1]), 1);\r\n\r\n let nr = random(w / 3, w / 1.5);\r\n let lr = nr / 50;\r\n let c = random([0, 255, random(cp)]);\r\n let lc;\r\n if (c == 0) {\r\n lc = 255;\r\n } else {\r\n lc = 0;\r\n }\r\n\r\n stroke(lc);\r\n strokeWeight(lr);\r\n drawHanger(0, 0, nr, c, lc);\r\n\r\n stroke(c);\r\n strokeWeight(lr / 3);\r\n drawHanger(0, 0, nr, c, lc);\r\n\r\n push();\r\n translate(random(-nr / 2, nr / 2), random(-nr / 2, nr / 2));\r\n let blr = random(1, nr / 30);\r\n stroke(random(cp));\r\n strokeWeight(blr);\r\n\r\n drawingContext.setLineDash([blr * 4, blr * 2, 1, blr * 2]);\r\n\r\n noFill();\r\n bezier(\r\n random(-nr, nr),\r\n random(-nr, nr),\r\n random(-nr, nr),\r\n random(-nr, nr),\r\n random(-nr, nr),\r\n random(-nr, nr),\r\n random(-nr, nr),\r\n random(-nr, nr)\r\n );\r\n pop();\r\n pop();\r\n }\r\n\r\n let mlr = w / 40;\r\n strokeWeight(mlr);\r\n noFill();\r\n\r\n strokeCap(SQUARE);\r\n\r\n stroke(random(cp));\r\n beginShape();\r\n vertex(WW / 2, mlr / 2);\r\n vertex(mlr / 2, mlr / 2);\r\n vertex(mlr / 2, WH / 2);\r\n endShape();\r\n\r\n stroke(random(cp));\r\n beginShape();\r\n vertex(WW / 2, WH - mlr / 2);\r\n vertex(mlr / 2, WH - mlr / 2);\r\n vertex(mlr / 2, WH / 2);\r\n endShape();\r\n\r\n stroke(random(cp));\r\n beginShape();\r\n vertex(WW / 2, mlr / 2);\r\n vertex(WW - mlr / 2, mlr / 2);\r\n vertex(WW - mlr / 2, WH / 2);\r\n endShape();\r\n\r\n stroke(random(cp));\r\n beginShape();\r\n vertex(WW / 2, WH - mlr / 2);\r\n vertex(WW - mlr / 2, WH - mlr / 2);\r\n vertex(WW - mlr / 2, WH / 2);\r\n endShape();\r\n\r\n let rw = WH/20; \r\n rakkan(rw/2.5, WH-rw/1.25, rw);\r\n}\r\n\r\nfunction drawHanger(posx, posy, r, nc, nlc) {\r\n push();\r\n translate(posx, posy);\r\n\r\n noFill();\r\n\r\n push();\r\n translate(0, -r / 4);\r\n rotate(180);\r\n let fr = r / 8;\r\n beginShape();\r\n for (let a = -20; a \u003c= 270; a++) {\r\n vertex((fr / 2) * cos(a), (fr / 2) * sin(a));\r\n }\r\n vertex(0, -fr / 1.2);\r\n endShape();\r\n pop();\r\n\r\n line(-r / 3.5, r / 20, r / 3.5, r / 20);\r\n\r\n push();\r\n translate(0, -r / 10);\r\n fill(nc);\r\n stroke(nlc);\r\n strokeWeight(r / 250);\r\n\r\n let br = r / 6;\r\n let z = r / 20;\r\n beginShape();\r\n for (let b = 270; b \u003c= 360; b++) {\r\n vertex((br / 2) * cos(b), (br / 3) * sin(b));\r\n }\r\n bezierVertex(\r\n (br / 2) * cos(360),\r\n (br / 3) * sin(360),\r\n r / 10,\r\n r / 30,\r\n r / 3,\r\n r / 8\r\n );\r\n vertex(r / 3, r / 8);\r\n bezierVertex(r / 3, r / 8, r / 3 + z, r / 8 + z * 1.5, r / 3 - z, r / 8 + z);\r\n vertex(r / 3 - z, r / 8 + z);\r\n vertex(r / 3 - z * 2, r / 8);\r\n vertex(0, z / 2);\r\n vertex(-r / 3 + z * 2, r / 8);\r\n vertex(-r / 3 + z, r / 8 + z);\r\n bezierVertex(\r\n -r / 3 + z,\r\n r / 8 + z,\r\n -r / 3 - z,\r\n r / 8 + z * 1.5,\r\n -r / 3,\r\n r / 8\r\n );\r\n vertex(-r / 3, r / 8);\r\n for (let c = 180; c \u003c= 270; c++) {\r\n vertex((br / 2) * cos(c), (br / 3) * sin(c));\r\n }\r\n endShape();\r\n pop();\r\n pop();\r\n}\r\n\r\nfunction rakkan(posx, posy, r) {\r\n push();\r\n translate(posx, posy);\r\n let nr = r / 2.5;\r\n let lr = r / 20;\r\n\r\n fill(\"#e2041b\");\r\n noStroke();\r\n\trectMode(CENTER);\r\n rect(0, 0, r / 1.4, r * 1.5, r / 5);\r\n\r\n stroke(255);\r\n strokeWeight(lr / 1.5);\r\n noFill();\r\n\r\n push();\r\n translate(0, -nr);\r\n beginShape();\r\n vertex(nr / 2, -nr / 2);\r\n vertex(0, -nr / 2);\r\n vertex(-nr / 2, 0);\r\n vertex(0, nr / 2);\r\n vertex(nr / 2, nr / 2);\r\n endShape();\r\n\r\n line(-nr / 2, 0, nr / 2, 0);\r\n pop();\r\n\r\n push();\r\n translate(0, 0);\r\n beginShape();\r\n vertex(nr / 2, -nr / 2);\r\n vertex(0, -nr / 2);\r\n vertex(-nr / 2, 0);\r\n vertex(0, nr / 2);\r\n vertex(nr / 2, nr / 2);\r\n endShape();\r\n\r\n strokeWeight(lr / 3);\r\n line(nr / 2, -nr / 2, -nr / 2, nr / 2);\r\n pop();\r\n\r\n push();\r\n translate(0, nr);\r\n line(-nr / 2, -nr / 2, -nr / 2, nr / 2);\r\n line(nr / 2, -nr / 2, nr / 2, nr / 2);\r\n line(-nr / 2, 0, nr / 2, 0);\r\n\r\n strokeWeight(lr / 3);\r\n line(nr / 2, -nr / 2, -nr / 2, nr / 2);\r\n pop();\r\n pop();\r\n}\r\n\r\nfunction windowResized(){\r\n resizeCanvas(WW, WH);\r\n background(255);\r\n drawWork();\r\n}","artId":"ce1b84sn70rs76qrbl2g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":1,"thumbFileName":"ce1b84sn70rs76qrbl2g.png","selectedThumbFileName":"ce1b84sn70rs76qrbl2g.png","thumbnailFileUrl":"","resourceFileName":"ce1b84sn70rs76qrbl2g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPyBcuPtYjU6AVbpaex6CySy9a3pe8NtufYt2thsVJBVk","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce0am24n70rqdtr2l5ig","title":"Switching spheres (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221125/","createdAt":1669376801,"updatedAt":1669376801,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce0am24n70rqdtr2l5ig.png","thumbnailFileUrl":"","resourceFileName":"ce0am24n70rqdtr2l5ig.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPiqcNupwiXJqCDzWEjL4QDYUkKTonCnEymNmVQWxh5LZ","resourceType":2,"metadataUrl":"","tags":[{"id":"bmjc0643p9f7m1g01ebg","name":"openFrameworks"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdupvj4n70rqdtr2kod0","title":"CyberGenesis","description":"#つぶやきProcessing で作成した作品を CURATION_FREE 用に調整。\n元ネタ:https://twitter.com/Hau_kun/status/1595075588297232384","createdAt":1669177300,"updatedAt":1669182337,"user":{"id":"kfIYAXYNGFP8IZM5AlL302SQBXo1","customId":"","name":"はぅ君","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/kfIYAXYNGFP8IZM5AlL302SQBXo1.png","createdAt":1579099628000,"updatedAt":1735793667172},"codes":[{"id":"cdupvl4n70rqdtr2koe0","type":0,"text":"\u003cscript src=\"https://cdn.jsdelivr.net/npm/p5@1.1.9/lib/p5.min.js\"\u003e\u003c/script\u003e","artId":"cdupvj4n70rqdtr2kod0","libraries":[]},{"id":"cdupvl4n70rqdtr2koeg","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n overflow: hidden;\n background-color: #fff; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"cdupvj4n70rqdtr2kod0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cdupvl4n70rqdtr2kof0","type":2,"text":"//--------------------------------------------------\r\n// Cyber Genesis\r\n//\r\n// author: Haukun\r\n// ref: https://twitter.com/Hau_kun/status/1595075588297232384\r\n//--------------------------------------------------\r\nt=0\r\nH=W=0\r\nsetup=_=\u003e{\r\ncreateCanvas(11012,1080)\r\n rectMode(CENTER)\r\n noStroke()\r\n colorMode(HSB)\r\n H=height/4\r\n W=width/4\r\n background(0)\r\n}\r\ndraw=_=\u003e{\r\n t++\r\n// translate(-1000,0)\r\n scale(4,4)\r\n blendMode(BLEND)\r\n background(0,.05)\r\n blendMode(ADD)\r\n F=4.5\r\n C=int(t/32)*32\r\n D=t%32\r\n for(y=0;y\u003c=H+32;y+=16){\r\n F=-F\r\n for(x=F;x\u003c=W;x+=18){\r\n fill(noise(x,y+C)*720%360,30/(T=tan(noise((noise(x/360)*sin(x/W*TAU)+1)*2,(y+C)/720)*15+t/99)),100,T/4)\r\n square(x,y+2/T-D,T\u003e.4?12/(T**.5):6/T)\r\n }\r\n }\r\n}","artId":"cdupvj4n70rqdtr2kod0","libraries":[]}],"like":0,"thumbFileName":"cdupvj4n70rqdtr2kod0.png","selectedThumbFileName":"cdupvj4n70rqdtr2kod0.png","thumbnailFileUrl":"","resourceFileName":"cdupvj4n70rqdtr2kod0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVKHALy9skB57SrmXrG7NWMDL5GmXGx2zRkJydnY6VJV1","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"bmm83343p9f7m1g01vs0","name":"Generative Art"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"c15ms443p9f8fetmsv5g","title":"Information Society","description":"電子メディアを覗けば、文字と画像が氾濫するこの時代に、我々の社会はいったいどこへ向かうのだろうか。\n\nIn this age where we are inundated with text and images through electronic media, where is our society going?\n\n#p5.js\n\n\n\nGiphy API : https://www.youtube.com/watch?v=mj8_w11MvH8\u0026t=754s\n\nNew York Times API : https://www.youtube.com/watch?v=IMne3LY4bks","createdAt":1615556113,"updatedAt":1670749759,"user":{"id":"krziztg8vBRxTsBU9PkmcngzxIq2","customId":"doshin","name":"Do-Shin","biography":"童心、同心、Do心、Do新\nScrapbox’s page as my portfolio :\nhttps://scrapbox.io/convivialist/Takahiro_Fujii\nGenerative art’s account of Instagram :\nhttps://instagram.com/the_fish_who_discovered_water?igshid=YmMyMTA2M2Y=","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/krziztg8vBRxTsBU9PkmcngzxIq2.jpg","createdAt":1588570720000,"updatedAt":1732245368234},"codes":[],"like":4,"thumbFileName":"","selectedThumbFileName":"c15ms443p9f8fetmsv5g.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmeEWXrhcWjMHMi8a2TSYaiorsEibFHnjgSXksM4gUpcuW","resourceFileName":"c15ms443p9f8fetmsv5g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmdtmz9ZPWdYVQx1kZM6PPJn4P7fctKeRKDtoNoAoMuvcA","resourceType":2,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmYp1NvFB6FfJN6RomDNowrFJn3VSNduPE7VJdCFY2TSYX","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"c8o0ee43p9f0i94dgcd0","name":"New York Times API"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdss5s4n70rqdtr2k570","name":"day6"},{"id":"ce1b0nkn70rs76qrbl0g","name":"Giphy API"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"ce9fk64n70rvflp1dnf0.png","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1670579392,"updatedAt":1670579392},{"id":"ce9fj8kn70rvflp1dnd0","title":"CURATION FREE Day 5","description":"Artworks displayed at open exhibition \"CURATION FREE\" at NEORT++.\nCheck the page below for the detail.\nhttps://neort.io/challenge/cdq4oe4n70rqdtr2jaf0","user":{"id":"FEBFBVGRlZMDfXhIymp2NcAIyM22","customId":"","name":"NEORT","biography":"Thank you for using NEORT.\nThis is NEORT staff account.","image":"https://pbs.twimg.com/profile_images/1095209921816158208/Yznn0ohE_normal.jpg","createdAt":1551604907000,"updatedAt":1670997369315},"arts":[{"id":"ce6b8jcn70rh3gntsblg","title":"The Model Girl 03","description":"She’s the model girl who was created only for a garment illustration. But now she exists all by herself. The artist hopes to bring each model girl another life by enlarging and representing her identity in NFT conversion.\n\nEach individual is the best evidence of their time.\n\nYou are iconic.\n\nHand Drawing + Adobe Illustrator\n\nhttps://foundation.app/@QiuChenFan/themodelgirl/3","createdAt":1670165585,"updatedAt":1670352005,"user":{"id":"TObRaoiDL6NY8EC7vcNBANEuvO92","customId":"TObRaoiDL6NY8EC7vcNBANEuvO92","name":"QiuChen Fan","biography":"drawing✍️ + painting👩🏻‍🎨🫧 traditional/digital\n\nhttps://bio.site/QiuchenFan","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/TObRaoiDL6NY8EC7vcNBANEuvO92.jpg","createdAt":1670163905247,"updatedAt":1728324112953},"codes":[],"like":0,"thumbFileName":"ce6b8jcn70rh3gntsblg.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce6b8jcn70rh3gntsbm0.jpg","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmb3fFpaXe2GhGnW5RJjKbddnKhZAKNsTVjezxABXwtNiV","resourceType":4,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"rgba(255, 255, 255, 1)","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce68s5kn70rh3gntrso0","title":"Square gem","description":"This is a long horizontal generative art created for CURATION_FREE. ","createdAt":1670155801,"updatedAt":1670155801,"user":{"id":"frbTvj363JQYvSV4nuD9dxGVPq33","customId":"frbTvj363JQYvSV4nuD9dxGVPq33","name":"Lisa Sekaida 世界田りさ","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/frbTvj363JQYvSV4nuD9dxGVPq33.jpg","createdAt":1643083264007,"updatedAt":1716332663248},"codes":[{"id":"ce68s6cn70rh3gntrsp0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n\t\u003cmeta charset=\"utf-8\" /\u003e\n\t\u003c!-- keep the line below for OpenProcessing compatibility --\u003e\n\t\u003cscript src=\"https://openprocessing.org/openprocessing_sketch.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"mySketch.js\"\u003e\u003c/script\u003e\n\t\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e \n\u003c/body\u003e\n\n\u003c/html\u003e","artId":"ce68s5kn70rh3gntrso0","libraries":[]},{"id":"ce68s6cn70rh3gntrspg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce68s5kn70rh3gntrso0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce68s6cn70rh3gntrsq0","type":2,"text":"function setup() {\n createCanvas(11012, 1080, WEBGL);\n pixelDensity(1);\n noStroke();\n}\n\nfunction draw() {\n background('navy');\n for (let i = 0; i \u003c 16; i ++) {\n ambientLight(127, 127, 255);\n pointLight(0, 255, 255, 2000, 50, 10);\n specularMaterial(50);\n shininess(2);\n\n rotateX(frameCount * 0.0002);\n rotateY(frameCount * 0.0002);\n rotateZ(frameCount * 0.0002);\n\n fill(0, 127, 255, 127)\n box(10000, 200);\n\t}\n}","artId":"ce68s5kn70rh3gntrso0","libraries":[]}],"like":0,"thumbFileName":"ce68s5kn70rh3gntrso0.png","selectedThumbFileName":"ce68s5kn70rh3gntrso0.png","thumbnailFileUrl":"","resourceFileName":"ce68s5kn70rh3gntrso0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qma9Z3mNZ5cTwuKERxbRZTehRyc1qyvMQyDmPnxiyBCQR7","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce67oskn70rlpj69doug","title":"Noisy wall (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221204","createdAt":1670151326,"updatedAt":1670151326,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce67oskn70rlpj69doug.png","thumbnailFileUrl":"","resourceFileName":"ce67oskn70rlpj69doug.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXqSn9SAmHSh2mNraeh3ecTPPr7u9BKhe7Esnt9Cz9xbb","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce628tsn70rlpj69dco0","title":"Kyou-Zou","description":"中心から鏡面化したフレーム、固定カメラで撮影した画像を分割し鏡面化させる。\n変容する視覚変化を体感する作品","createdAt":1670128804,"updatedAt":1670128804,"user":{"id":"gXbwFayTrhMG4JqrQQUlsN8C3zx1","customId":"","name":"立川清志楼 【第一次三ヶ年計画推進中】","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/gXbwFayTrhMG4JqrQQUlsN8C3zx1.jpg","createdAt":1670126867902,"updatedAt":1670902693262},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce628tsn70rlpj69dco0.jpg","thumbnailFileUrl":"","resourceFileName":"ce628tsn70rlpj69dco0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmSE9rD229C35wm19FW9BKSbVQhxSab335rVRbQXdYKa6t","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5lc6sn70rlpj69d6f0","title":"akml1541_441@","description":"","createdAt":1670075936,"updatedAt":1670075936,"user":{"id":"nNwJl7dQctPL66scxBsl8tJtQHt2","customId":"hasaqui","name":"hasaqui","biography":"ハサクィ。New Media/NFT Artist \"Towards a Newest Laocoon\"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/nNwJl7dQctPL66scxBsl8tJtQHt2.jpg","createdAt":1639549769621,"updatedAt":1676877097922},"codes":[{"id":"ce5lc84n70rlpj69d6g0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"ja\"\u003e\n\u003chead\u003e\n \u003cmeta charset=\"UTF-8\"\u003e\n \u003cmeta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\"\u003e\n \u003ctitle\u003eHello p5\u003c/title\u003e\n \u003clink rel=\"stylesheet\" href=\"main.css\"\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.0/p5.js\"\u003e\u003c/script\u003e\n\n\u003c/head\u003e\n\u003cbody\u003e\n \u003cscript src=\"main.js\"\u003e\u003c/script\u003e\n\u003c/body\u003e\n\u003c/html\u003e","artId":"ce5lc6sn70rlpj69d6f0","libraries":[]},{"id":"ce5lc84n70rlpj69d6gg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce5lc6sn70rlpj69d6f0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce5lc84n70rlpj69d6h0","type":2,"text":"let palette = [\"#CABAC8\", \"#FF101F\", \"#B2DDF7\", \"#81D6E3\", \"#4CB5AE\", \"#bf98b2\", \"#cca1b6\", \"#e2b2b6\", \"#ebc5bc\"];\nlet palette2 = [\"#FF1E00\", \"#E8F9FD\", \"#59CE8F\", \"#000000\", \"#FA2FB5\", \"#31087B\", \"#FFC23C\"];\nlet mouseX = 40;\nlet lastx;\nlet lasty;\nlet lastlx;\nlet lastly;\nlet count;\nlet interval = 2; // 間隔(フレーム数)\nlet counter = 0; // カウンター\n\nfunction setup() {\n//\tcolorMode(HSB, random(300,400),200,200,200);\n\tlastx = 0;\n\tlasty = 0;\n\tlastlx = 0;\n\tlastly = 0;\n\tted = new Turtle();\n\n\t//\tcreateCanvas(1600, 2843);\n\t//createCanvas(1600, 1600);\n//\tcreateCanvas(800, 800);\n //createCanvas(1066, 600);\n//\tcreateCanvas(1920, 1080);\n\tcreateCanvas(5506,2160);\n\t//createCanvas(3098,1080);\n\tangleMode(DEGREES);\n\tbackground(\"#fff\")\n\trectMode(CENTER);\n\tnoStroke();\n\t//noLoop();\n //blendMode( random([BURN, MULTIPLY, SOFT_LIGHT, HARD_LIGHT]) );\n\t//make noise\n\tgraphics = createGraphics(width, height);\n\tgraphics.stroke(255, 10 / 100 * 255);\n /**\n\tfor (i = 0; i \u003c graphics.width * graphics.height * 20; i++) {\n\t\tgraphics.point(\n\t\t\trandom(graphics.width),\n\t\t\trandom(graphics.height)\n\t\t);\n\t}\n\t*/\n\tlet couleurs = random(palette);\n\t//background(couleurs);\n\tbackground(210);\n\n\tdrawvera_bk();\n\n\t//image(graphics, 0, 0);\n\tdrawvera_flw();\n\t//\tdrawvera2_2();\n\timage(graphics, 0, 0);\n\tcount = 0;\n\tfill(250, 250, 250)\n\t//rect(0, 0, 5506,2160)\n}\n\n\nfunction draw() {\n\trand1 =random(10000);\n\tif(rand1\u003e9800){\n\tdrawvera_flw();\n\t}\n//\tblendMode( random([BURN, MULTIPLY, SOFT_LIGHT, HARD_LIGHT]) );\n\tscale(1.05);\n\t//translate(1500)\n\tframeRate(20);\n\n\t//getPixel();\n\t// 間隔ごとに実行する\n\tif (counter % interval === 0) {\n\t// 100個の矩形の範囲をランダムにコピーする\n\tfor (let i = 0; i \u003c 100; i++) {\n\t\t// ランダムな座標を設定する\n\t\tlet x = parseInt(random(width));\n\t\tlet y = parseInt(random(height));\n\t\tlet w = parseInt(random(2, 120)); // 矩形の幅を20-40pxのランダムな値にする\n\t\tlet h = parseInt(random(2, 20)); // 矩形の高さを20-40pxのランダムな値にする\n\t\tlet x2 = parseInt(random(width));\n\t\tlet y2 = parseInt(random(height));\n\t\tlet w2 = parseInt(random(2, 4)); // 矩形の幅を20-40pxのランダムな値にする\n\t\tlet h2 = parseInt(random(2, 4)); // 矩形の高さを20-40pxのランダムな値にする\n\t\t// 矩形の範囲をコピーする\n\t\tlet img = get(x, y, w, h);\n\t\n \n\n\t\t// 10回繰り返してコピーした範囲を画面に反映させる\n\t\tfor (let j = 0; j \u003c 200; j++) {\n\t\t\trand = random(100);\n\t\t\tset(x + 2 * random(3), y + 2 * j/4, img);\n\t\t\tif(rand%2==0){\n\t\t\t set(x + 2 * random(3), -(y + 2 * j/20), img);\n\t\t\t}else if(rand%14==0){\n\t\t\t\tset(x + 2 * random(3), y + 2 * j, img);\n\t\t\t}\n\t\t\t//image(img, x + 20 * j, y + 20 * j);\n\t\t}\n\t}\n\t}\n\t\n\t\tcounter++;\n\t\n}\n\nfunction getPixel() {\n\t//\tscale(1.2)\n\t//\ttranslate(10,-10)\n\trotate(random(-0.2,0.2))\n//\ttranslate(5,0)\n\tfor (let x = 0; x \u003c= width; x += 10) {\n\t\tfor (let y = height; y \u003e= 0; y -= 10) {\n\t\t\tconst index = Math.round(random());\n\t\t\tconst color = get(x, y);\n\t\t\tconst r = color[0];\n\t\t\tconst g = color[1];\n\t\t\tconst b = color[2];\n\t\t\t//\t\tif (0 \u003c r \u0026\u0026 r\u003crandom(250) \u0026\u0026 0 \u003c g \u0026\u0026 g \u003c random(250) \u0026\u0026 150 \u003c b \u003c random(250)) {\n\t\t\tif (0 \u003c r \u0026\u0026 0 \u003c g \u003c random(250) \u0026\u0026 150 \u003c b \u003c random(250)) {\n\t\t\t\tif (index === 1) drawLine(x, y, r, g, b);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction drawLine(x, y, r, g, b) {\n\n\t//\tr=255-r;\n\t//\tg=255-g;\n\t//\tb=255-b;\n\tlet length = random(230);\n\t// blendMode(DODGE);\n\t//\tstroke(random(255),random(255),random(255));\n\tfill(r, g, b);\n\t//stroke(`rgba(${r}, ${g}, ${b}, 4.1)`);\n\t//\tstroke(0,0,0,0);\n\tstrokeWeight(0.5);\n\t// noFill();\n\t// line(lastlx, lastly, x, y);\n\tif (count \u003c= 500) {\n\t\t//\tstroke(`rgba(${r}, ${g}, ${b}),4.0`);\n\t\t//\tstroke(random(255),random(255),random(255));\n\t\t//\tfill(`rgba(${r}, ${g}, ${b}, 0.1)`);\n\t\trect(x + 4, y, 1);\n\t}\n\n\tif (count \u003e 500) {\n\t\t//\t\tstroke(`rgba(${random(g)}, ${b}, ${r}, 4.4)`);\n\t\trand = random(1000);\n\t\tif (rand \u003e 905) {\n\t\t\trect(x, y, 1, 1);\n\t\t\tpush();\n\t\t\t// rotate(random(30))\n\t\t\trect(x, y, 1, random(3));\n\t\t\tpop();\n\t\t}\n\t\t//rect(x, y, 1,4);\n\t}\n\n\ttextSize(10);\n\n\t// var str = '■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●●□○●◉▲△□○●◉▲△□○●◉▲△□○●◉▲△□○●◉▲△□○●◉▲△□○●◉▲△□○●◉▲△□○●◉▲△□○●◉▲△×abcdefghijklmnopqrstuvwxyz無'+ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'+ '';\n\t// var str = '_______|||||||||||===========////////';\n\tvar str = '_______|||||||||||===========////////................';\n\tstr = str.split('');\n\tvar rand_str = '';\n\t// rotate(1001)\n\t//translate(-30,0)\n\t// for(var t = 0; t \u003c 12; t++) {\n\n\t//\tfill(random(0,255),random(0,255),random(0,255));\n\t// fill(random(palette2));\n\tfill(b, r, g);\n\t//fill(10,10,10, 255);\n\trand_str += str[Math.floor(Math.random() * str.length)];\n\t//for(var t = -20; t \u003c 50; t++) {\n\trand = random(1000);\n\tif (rand \u003e 905) {\n\t\tfor (let i = 0; i \u003c 3; i++) {\n\t\t\t// text(rand_str,x+i*5,y);\n\t\t}\n\t}\n\tif (rand \u003e 405) {\n\t\t//fill(random(palette2))\n\t\ttext(rand_str, x, y);\n\t}\n\n\n\n\tconst color = get(random(width), random(height));\n\tconst ra = color[0];\n\tconst ga = color[1];\n\tconst ba = color[2];\n\tfill(ra, ga, ba);\n\tpush();\n\t//\trotate(random(30))\n\t//\trect(x,y,30,1);\n\tpop();\n\n\n\n\t/**\n\trand = random(10000);\n\tif(rand\u003e0){\n\t\n\t\tlet st = 200;\n\tfor (let i = 0; i \u003c 3; i++) {\n\t\trand = random(100);\n\t\tif (rand \u003c 85) { //bezier stroke on/off \n\t\t\tstroke(0, 0, 0, 0);\n\t\t}\n\t\tfill(0, 255, 0, 0);\n\t\tbezier(\n\t\t\trandom(mouseX - i / 2.0),\n\t\t\trandom(st + i),\n\t\t\trandom(st - 100, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\n\t\t\trandom(11 + i / 2)\n\t\t);\n\t}\n\n\tst = 20;\n\tfor (let i = 0; i \u003c 3; i++) {\n\t\t//\tstroke(0,0,0,0);\n\t\tfill(255, 0, 0, 0);\n\t\tbezier(\n\t\t\trandom(mouseX - i / 2.0),\n\t\t\trandom(st + i),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\n\t\t\trandom(11 + i / 2)\n\t\t);\n\t}*/\n\t//\t}\n\n\t//\tfill(`rgba(${r}, ${g}, ${b}, 4.1)`);\n\t//rect(x,y,10);\n\t//\t\n\t//rect(x-5,y,5);\n\t//\tfill(255,255,0,120);\n\t//\tcircle(x, y, 5);\n\t//\trect(x+5,y,5);\n\t//\tfill(255);\n\t//\trect(x+5,y,4);\n\t//\tfill(215);\n\t//\trect(x+5,y,2);\n\t//line(x+1, y+1, x+30+1, y + length+1);\n\tlastx = x;\n\tlasty = y;\n\tlastlx = lastx;\n\tlastly = lasty;\n\tcount++;\n\tif (count \u003e 1000) {\n\t\tcount = 0;\n\t}\n\n}\n\nfunction drawvera_bk() {\n\n\t// background(255);\n\n\tconst side = -1000;\n\tconst gX = 4; // num of rows\n\tconst gY = 15; // num of cols\n\tconst cellSizeX = (width - (side * 2)) / gX; // size of row\n\tconst cellSizeY = (height - (side * 2)) / gY; // size of col\n\tconst scaleX = 0.65; // scale width of trapezium\n\tconst scaleY = 0.65; // scale height\n\n\tpush();\n\n\tstroke(0);\n\tstrokeWeight(3);\n\n\ttranslate(side, side);\n\n\tfor (let i = 0; i \u003c 4; i++) {\n\t\tfor (let j = 0; j \u003c 12; j++) {\n\t\t\tpush();\n\t\t\tconst x = i * cellSizeX;\n\t\t\tconst y = j * cellSizeY;\n\t\t\ttranslate(x + cellSizeX / 2, y);\n\n\t\t\tdrawBezierShape_bk();\n\n\t\t\tpop();\n\t\t}\n\t}\n\tpop();\n}\n\nfunction drawvera_flw() {\n\n\tconst side = 600;\n\t//\tconst side = -1200; \n\t//\tconst side = -2200; \n\t//\tconst side = 400; \n\t//\tconst gX = 12; \n\t//\tconst gY = 12;\n\tconst gX = 6;\n\tconst gY = 9;\n\tconst cellSizeX = (width - (side * 2)) / gX;\n\tconst cellSizeY = (height - (side * 2)) / gY;\n\tconst scaleX = 0.75;\n\tconst scaleY = 0.65;\n\n\tpush();\n\n\tstroke(0);\n\tstrokeWeight(3);\n\n\ttranslate(side, side);\n\n\tfor (let i = 0; i \u003c gX; i++) {\n\t\tfor (let j = 0; j \u003c gY; j++) {\n\t\t\tpush();\n\n\t\t\tconst x = i * cellSizeX + random(-1000, 1000);\n\t\t\t//const x = i * cellSizeX\n\t\t\tconst y = j * cellSizeY + random(-1000, 1000);\n\n\n\t\t\ttranslate(x + cellSizeX / 2, y);\n\n\t\t\tdrawBezierShape_flw();\n\n\t\t\tpop();\n\t\t}\n\t}\n\tpop();\n\n}\n\n\nfunction drawBezierShape_bk(x, y, r) {\n\n\trand = random(10);\n\n\tstrokeWeight(0.05);\n\tpush();\n\ttranslate(0, 0);\n\tr = 300;\n\trotate(random(360));\n\tlet angleStep = 360 / int(random(5000, 8000));\n\tlet noiseScale = int(random(1, 8)) * 10;\n\n\tbeginShape();\n\tfor (let angle = 0; angle \u003c 1060; angle += 4) {\n\t\tlet r1 = map(noise(angle / noiseScale), 0, 1, r / 2, r);\n\t\tlet x1 = cos(angle) * r1;\n\t\tlet y1 = sin(angle) * r1;\n\t\tvertex(x1, y1);\n\t\t// let pRatio = 400;\n\t\tlet px1 = x1 + cos(angle + 90) * r1 / 400;\n\t\tlet py1 = y1 + sin(angle + 90) * r1 / 400;\n\t\tlet angle2 = angle + angleStep;\n\t\tlet r2 = map(noise(angle2 % 360 / noiseScale), 0, 1, r / 2, r);\n\t\tlet x2 = cos(angle2) * r2;\n\t\tlet y2 = sin(angle2) * r2;\n\t\t// pRatio = random(2,40);\n\t\tlet px2 = x2 + cos(angle2 - 90) * r2 / 40;\n\t\tlet py2 = y2 + sin(angle2 - 90) * r2 / 40;\n\n\n\t\t//color setting\n\t\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\t\twidth * 0.1,\n\t\t\theight * 0.1,\n\t\t\twidth * 1.2,\n\t\t\theight * 1.2\n\t\t);\n\t\ttemperature = 25;\n\t\tgradientStroke.addColorStop(0, color(0, 200, 250));\n\t\tgradientStroke.addColorStop(0.5, color(255, 200, 0));\n\t\tgradientStroke.addColorStop(1, color(255, 200, 255));\n\n\t\tdrawingContext.strokeStyle = gradientStroke;\n\n\n\t\tlet gradientFill = drawingContext.createRadialGradient(\n\t\t\twidth / 3,\n\t\t\theight / 3,\n\t\t\twidth * 0.5,\n\t\t\twidth / 2,\n\t\t\theight / 2,\n\t\t\twidth * 1.5\n\t\t);\n\n\t\tgradientFill.addColorStop(0, color(210, 210, 210, 120));\n\t\tgradientFill.addColorStop(0.2, color(210, 240, 210, 120));\n\t\tgradientFill.addColorStop(0.5, color(random(255) + angle / 20, random(255) + angle / 20, random(255) + angle / 20, 120));\n\n\t\tdrawingContext.fillStyle = gradientFill;\n\n\t\t//\n\t\tbezierVertex(px1 * angle * random(3), py1 * angle * random(3), px2, py2, x2 + angle * random(3), y2 + angle);\n\n\n\t}\n\tendShape();\n\n\tpop();\n\n}\n\n\nfunction drawBezierShape_flw(x, y, r) {\n\n\trand = random(10);\n\n\tstrokeWeight(0.05);\n\tpush();\n\ttranslate(0, 0);\n\tr = 300;\n\trotate(random(360));\n\tlet angleStep = 360 / int(random(5000, 8000));\n\tlet noiseScale = int(random(1, 8)) * 10;\n\n\tbeginShape();\n\tfor (let angle = 0; angle \u003c 2000; angle += 200) {\n\n\t\tlet r1 = map(noise(angle / noiseScale), 0, 1, r / 2, r);\n\t\tlet x1 = cos(angle) * r1;\n\t\tlet y1 = sin(angle) * r1;\n\t\tvertex(x1, y1);\n\t\tlet pRatio = 400;\n\t\tlet px1 = x1 + cos(angle + 90) * r1 / pRatio;\n\t\tlet py1 = y1 + sin(angle + 90) * r1 / pRatio;\n\t\tlet angle2 = angle + angleStep;\n\t\tlet r2 = map(noise(angle2 % 360 / noiseScale), 0, 1, r / 2, r);\n\t\tlet x2 = cos(angle2) * r2;\n\t\tlet y2 = sin(angle2) * r2;\n\t\tpRatio = random(2, 40);\n\t\tlet px2 = x2 + cos(angle2 - 90) * r2 / pRatio;\n\t\tlet py2 = y2 + sin(angle2 - 90) * r2 / pRatio;\n\n\n\t\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\t\twidth * 0.1,\n\t\t\theight * 0.1,\n\t\t\twidth * 1.2,\n\t\t\theight * 1.2\n\t\t);\n\t\ttemperature = 25;\n\t\t/**\n\t\t\t\tgradientStroke.addColorStop(0, color(0, 200,250));\n\t\t\t\tgradientStroke.addColorStop(0.5, color(255, 200, 0));\n\t\t\t\tgradientStroke.addColorStop(1, color(255, 200, 255));*/\n\n\t\tdrawingContext.strokeStyle = gradientStroke;\n\t\trand = random(1000);\n\t\tif (rand \u003e 998) {\n\t\t\t// drawbe6();\n\t\t} else if (rand \u003e 920) {\n\t\t\tdrawbe7();\n\t\t} else {\n\t\t\t// drawbe();\n\n\t\t\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\t\t\twidth * 0.1,\n\t\t\t\theight * 0.1,\n\t\t\t\twidth * 1.2,\n\t\t\t\theight * 0.2\n\t\t\t);\n\t\t\ttemperature = 25;\n\t\t\t/**\n\t\t\t\t\t\tgradientStroke.addColorStop(0, color(0, 200,250));\n\t\t\t\t\t\tgradientStroke.addColorStop(0.1, color(255, 200, 0));\n\t\t\t\t\t\tgradientStroke.addColorStop(0.2, color(255, 200, 255));\n\n\t\t\t\t\t\tdrawingContext.strokeStyle = gradientStroke;\n\t\t\t\t\t\t\tlet gradientFill = drawingContext.createRadialGradient(\n\t\t\t\t\t\t\t\twidth / 3,\n\t\t\t\t\t\t\t\theight / 3,\n\t\t\t\t\t\t\t\twidth * 0.5,\n\t\t\t\t\t\t\t\twidth / 4,\n\t\t\t\t\t\t\t\theight / 2,\n\t\t\t\t\t\t\t\twidth * 1.2\n\t\t\t\t\t\t\t);\n\t\t\t*/\n\t\t\t/**\n\t\t\tgradientFill.addColorStop(0, color(240, 240, 240,random(20,140)));\n\t\t\tgradientFill.addColorStop(0.16, color(random(210,255), random(180,200), random(180,200),random(20,140)));\n\t\t\tgradientFill.addColorStop(0.2, color(random(240,255), random(50,150), random(50,150),random(20,140)));\n\t\t\t*/\n\n\t\t\t/**\n\t\t\tgradientFill.addColorStop(0, color(0, 210, 210,random(20,240)));\n\t\t\tgradientFill.addColorStop(0.1, color(random(150,255), 210,120,random(20,240)));\n\t\t\tgradientFill.addColorStop(0.2, color(random(150), random(150), random(100,255),random(20,240)));\n\t\t\t*/\n\t\t\t/**\n\t\t\t\tgradientFill.addColorStop(0, color(210, 210, 210,random(20,240)));\n\t\t\t\tgradientFill.addColorStop(0.1, color(random(150,255), 210,120,random(20,240)));\n\t\t\t\tgradientFill.addColorStop(0.2, color(random(255), random(255), random(255),random(20,240)));\n\t\t\t\t*/\n\n\t\t\t//\tdrawingContext.fillStyle = gradientFill;\n\n\n\t\t\t// bezier(px2, px1, x1, x2, x1*random(3), x2*random(3), random(800), random(800));\n\t\t\t// drawbe();\n\n\t\t\tdrawbe();\n\t\t}\n\n\t}\n\tendShape();\n\n\tpop();\n\n\n}\n\nvar drawMode = 1;\n\nfunction ovly() {\n\toverlay();\n\n\t// second shape (dynamically translated/rotated and scaled)\n\tvar x = map(mouseX, 0, width, -50, 50);\n\tvar a = map(mouseX, 0, width, -0.5, 0.5);\n\tvar s = map(mouseY, 0, height, 0.7, 1);\n\n\tif (drawMode == 1) rotate(a);\n\tif (drawMode == 2) translate(x, 0);\n\tscale(s);\n\n\tstrokeWeight(2);\n\toverlay();\n}\n\nfunction overlay() {\n\tvar w = width - random(random(random(1300)));\n\tvar h = height - random(random(random(1000)));\n\tstroke(random(255), random(255), random(255), 80);\n\n\tif (drawMode == 1) {\n\t\tfor (var i = -w / 2; i \u003c w / 2; i += 5) {\n\t\t\tline(i, -h / 2, i, h / 2);\n\t\t}\n\t} else if (drawMode == 2) {\n\t\tfor (var i = 0; i \u003c w; i += 10) {\n\t\t\tellipse(0, 0, i);\n\t\t}\n\t}\n}\n\n\n\nfunction drawbe() {\n\tstrokeWeight(5);\n\tfill(0, 0, 0, 0);\n\tstroke(240, 240, 0);\n\n\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\twidth * 0.1,\n\t\theight * 0.1,\n\t\twidth * 1.2,\n\t\theight * 0.2\n\t);\n\ttemperature = 25;\n\n\tlet strkey = parseInt(random(2, 2));\n\tswitch (strkey) {\n\t\tcase 1:\n\t\t\tgradientStroke.addColorStop(0, color(0, 200, 250));\n\t\t\tgradientStroke.addColorStop(0.1, color(255, 200, 0));\n\t\t\tgradientStroke.addColorStop(0.2, color(255, 200, 255));\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tgradientStroke.addColorStop(0, color(255, 255, 255));\n\t\t\tgradientStroke.addColorStop(0.1, color(255, 200, 0));\n\t\t\tgradientStroke.addColorStop(0.2, color(255, 200, 255));\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tgradientStroke.addColorStop(0, color(255, 255, 120));\n\t\t\tgradientStroke.addColorStop(0.1, color(255, 200, 0));\n\t\t\tgradientStroke.addColorStop(0.2, color(255, 200, 255));\n\t\t\tbreak;\n\t}\n\n\n\tdrawingContext.strokeStyle = gradientStroke;\n\n\t//color setting\n\tlet gradientFill = drawingContext.createRadialGradient(\n\t\twidth / 3,\n\t\theight / 3,\n\t\twidth * 0.5,\n\t\twidth / 4,\n\t\theight / 2,\n\t\twidth * 1.5\n\t);\n\tlet flwkey = parseInt(random(8));\n\tswitch (flwkey) {\n\t\tcase 1:\n\t\t\tgradientFill.addColorStop(0, color(240, 240, 240, random(20, 140)));\n\t\t\tgradientFill.addColorStop(0.16, color(random(210, 255), random(180, 200), random(180, 200), random(20, 140)));\n\t\t\tgradientFill.addColorStop(0.2, color(random(240, 255), random(50, 150), random(50, 150), random(20, 140)));\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\tgradientFill.addColorStop(0, color(0, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(random(150, 255), 210, 120, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.2, color(random(150), random(150), random(100, 255), random(20, 240)));\n\t\t\tbreak;\n\t\tcase 3:\n\t\t\tgradientFill.addColorStop(0, color(210, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(random(150, 255), 210, 120, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.2, color(random(100, 250), random(150, 200), random(10, 205), random(20, 240)));\n\t\t\tbreak;\n\t\tcase 4:\n\t\t\tgradientFill.addColorStop(0, color(210, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(210, 110, 220, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.5, color(0, random(150, 200), random(10, 105), random(20, 240)));\n\t\t\tbreak;\n\t\tcase 5:\n\t\t\tgradientFill.addColorStop(0, color(210, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(110, 110, 120, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.5, color(0, random(150, 200), random(10, 105), random(20, 240)));\n\t\t\tbreak;\n\t\tcase 6:\n\t\t\tgradientFill.addColorStop(0, color(210, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(110, 110, 220, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.5, color(110, 210, 220, random(20, 240)));\n\t\t\tbreak;\n\t\tcase 7:\n\t\t\tgradientFill.addColorStop(0, color(210, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(random(240), random(240), 220, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.5, color(random(240), random(240), 220, random(20, 240)));\n\t\t\tbreak;\n\t\tcase 8:\n\t\t\tgradientFill.addColorStop(0, color(210, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(random(240), random(240), 120, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.5, color(random(240), random(240), random(240), random(20, 240)));\n\t\t\tbreak;\n\t\tcase 9:\n\t\t\tgradientFill.addColorStop(0, color(210, 210, 210, random(20, 240)));\n\t\t\tgradientFill.addColorStop(0.1, color(random(100, 140), random(10, 240), random(230, 240), random(120, 240)));\n\t\t\tgradientFill.addColorStop(0.5, color(random(230, 240), random(230, 240), random(230, 240), random(20, 240)));\n\t\t\tbreak;\n\t\tdefault:\n\t\t\t//console.log('住所はその他です');\n\t}\n\t/**\n gradientFill.addColorStop(0, color(240, 240, 240,random(20,140)));\n gradientFill.addColorStop(0.16, color(random(210,255), random(180,200), random(180,200),random(20,140)));\n gradientFill.addColorStop(0.2, color(random(240,255), random(50,150), random(50,150),random(20,140)));\n\t*/\n\n\t/**\n\tgradientFill.addColorStop(0, color(0, 210, 210,random(20,240)));\n gradientFill.addColorStop(0.1, color(random(150,255), 210,120,random(20,240)));\n gradientFill.addColorStop(0.2, color(random(150), random(150), random(100,255),random(20,240)));\n\t*/\n\t/**\n\tgradientFill.addColorStop(0, color(210, 210, 210,random(20,240)));\n gradientFill.addColorStop(0.1, color(random(150,255), 210,120,random(20,240)));\n gradientFill.addColorStop(0.2, color(random(100,250), random(150,200), random(10,105),random(20,240)));*/\n\n\n\tdrawingContext.fillStyle = gradientFill;\n\n\n\n\tlet st = 200;\n\tfor (let i = 0; i \u003c 3; i++) {\n\t\trand = random(100);\n\t\tif (rand \u003c 85) { //bezier stroke on/off \n\t\t\tstroke(0, 0, 0, 0);\n\t\t}\n\t\tfill(0, 0, 0, 0);\n\t\tbezier(\n\t\t\trandom(mouseX - i / 2.0),\n\t\t\trandom(st + i),\n\t\t\trandom(st - 100, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\n\t\t\trandom(11 + i / 2)\n\t\t);\n\t}\n\n\tst = 20;\n\tfor (let i = 0; i \u003c 3; i++) {\n\t\t//\tstroke(0,0,0,0);\n\t\tfill(0, 0, 0, 0);\n\t\tbezier(\n\t\t\trandom(mouseX - i / 2.0),\n\t\t\trandom(st + i),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\trandom(st - random(30), st + random(30)),\n\t\t\t/**\n\t\t\trandom(40,20),\n\t\t\trandom(-300,40),\n\t\t\trandom(-100,40),\n\t\t\trandom(-300,50) - i / 2,\n\t\t\t*/\n\t\t\trandom(11 + i / 2)\n\t\t);\n\t}\n}\n\nfunction drawbe2() {\n\t//\tbackground(0);\n\t//fill(210);\n\tstrokeWeight(1);\n\n\t//fill(random(200,250),0,0,120);\n\tfill(0, 0, 0, 0);\n\t//stroke(0,120,random(120,210));\n\tstroke(0, 0, 0);\n\n\n\n\tfor (let i = 0; i \u003c 2; i++) {\n\t\tbezier(\n\t\t\t-400 - i / 2.0,\n\t\t\t-200 + i,\n\t\t\trandom(-10, 200),\n\t\t\trandom(-400, 200),\n\t\t\trandom(-200, 200),\n\t\t\trandom(-200, random(1300)),\n\t\t\trandom(400, 150),\n\n\t\t\t//random(40,20),\n\t\t\t//random(-300,40),\n\t\t\t//\trandom(-100,40),\n\t\t\t//\trandom(-30,50) - i / 2,\n\n\n\t\t\t1100 + i / 2\n\t\t);\n\t}\n}\n\n\nfunction drawbe3() {\n\t//\tbackground(0);\n\t//fill(210);\n\tstrokeWeight(1);\n\tfill(0, 0, 0, 0);\n\t//stroke(0,120,random(120,210));\n\tstroke(0, 0, 0);\n\n\n\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\twidth * 0.1,\n\t\theight * 0.1,\n\t\twidth * 1.2,\n\t\theight * 0.4\n\t);\n\ttemperature = 25;\n\tgradientStroke.addColorStop(0, color(0, 200, 250));\n\tgradientStroke.addColorStop(0.5, color(255, 200, 0));\n\tgradientStroke.addColorStop(1, color(255, 200, 255));\n\n\tdrawingContext.strokeStyle = gradientStroke;\n\n\n\tlet gradientFill = drawingContext.createRadialGradient(\n\t\twidth / 3,\n\t\theight / 3,\n\t\twidth * 0.5,\n\t\twidth / 2,\n\t\theight / 2,\n\t\twidth * 0.8\n\t);\n\n\tgradientFill.addColorStop(0, color(210, 210, 210));\n\tgradientFill.addColorStop(0.01, color(0, 210, 210));\n\tgradientFill.addColorStop(0.02, color(random(200, 255), random(200, 255), random(255)));\n\n\tdrawingContext.fillStyle = gradientFill;\n\n\tlet st = 0;\n\tfor (let i = 0; i \u003c 8; i++) {\n\t\tbezier(\n\t\t\tmouseX - 100 - i / 2.0,\n\t\t\tst + i,\n\t\t\trandom(st - 100, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\trandom(st - 300, st + 100),\n\t\t\t/**\n\t\t\trandom(40,20),\n\t\t\trandom(-300,40),\n\t\t\trandom(-100,40),\n\t\t\trandom(-300,50) - i / 2,\n\t\t\t*/\n\t\t\t11 - 100 + i / 2\n\t\t);\n\t\t/**\n\t\tbezier(\n\t\t\tmouseX - i / 2.0,\n\t\t\t300 + i,\n\t\t\t0,\n\t\t\trandom(40,200),\n\t\t\trandom(-300,400),\n\t\t\trandom(-100,400),\n\t\t\trandom(-300,50) - i / 2,\n\t\t\t101 + i / 2\n\t\t);\n\t\t*/\n\n\n\t}\n}\n\nfunction drawbe5() {\n\t//\tbackground(0);\n\t//fill(210);\n\tstrokeWeight(5);\n\t/**\n\tfor (let i = 0; i \u003c 1; i ++) {\n\t\t//fill(random(255),random(255),random(255));\n\t\tstroke(40,150,random(210,255),random(120,200));\n\t\t//stroke(210,random(210,255),0,random(120,200));\n\t\tstrokeWeight(12);\n\t\t//fill(random(185,240));\n\t\tfill(210);\n\t\tbezier(\n\t\t\tmouseX - i,\n\t\t\t0 + i,\n\t\t\t0,\n\t\t\t200,\n\t\t\trandom(-300,400),\n\t\t\t400,\n\t\t\trandom(500) - i / 2,\n\t\t\t101 + i / 2\n\t\t);\n\t\t\n\t\t\n\t}\n\t*/\n\tfill(0, 0, 0, 0);\n\t//stroke(0,120,random(120,210));\n\tstroke(0, 0, 0);\n\n\n\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\twidth * 0.1,\n\t\theight * 0.1,\n\t\twidth * 1.2,\n\t\theight * 1.2\n\t);\n\ttemperature = 25;\n\tgradientStroke.addColorStop(0, color(0, 200, 250));\n\tgradientStroke.addColorStop(0.5, color(255, 200, 0));\n\tgradientStroke.addColorStop(1, color(255, 200, 255));\n\n\tdrawingContext.strokeStyle = gradientStroke;\n\n\n\tlet gradientFill = drawingContext.createRadialGradient(\n\t\twidth / 3,\n\t\theight / 3,\n\t\twidth * 0.5,\n\t\twidth / 2,\n\t\theight / 2,\n\t\twidth * 1.5\n\t);\n\n\tgradientFill.addColorStop(0, color(210, 210, 210));\n\tgradientFill.addColorStop(0.5, color(random(255), 210, 210));\n\tgradientFill.addColorStop(1, color(random(255), random(255), random(255)));\n\n\tdrawingContext.fillStyle = gradientFill;\n\tfor (let i = 0; i \u003c 2; i++) {\n\t\tbezier(\n\t\t\t400 - i / 2.0,\n\t\t\t200 + i,\n\t\t\trandom(-10, 200),\n\t\t\trandom(100, 400),\n\t\t\trandom(200, 200),\n\t\t\trandom(200, 400),\n\t\t\trandom(400, 150),\n\n\t\t\t//random(40,20),\n\t\t\t//random(-300,40),\n\t\t\trandom(-100, 40),\n\t\t\trandom(-30, 50) - i / 2,\n\n\n\t\t\t1100 + i / 2\n\t\t);\n\t\t/**\n\t\tbezier(\n\t\t\tmouseX - i / 2.0,\n\t\t\t300 + i,\n\t\t\t0,\n\t\t\trandom(40,200),\n\t\t\trandom(-300,400),\n\t\t\trandom(-100,400),\n\t\t\trandom(-300,50) - i / 2,\n\t\t\t101 + i / 2\n\t\t);\n\t\t*/\n\n\n\t}\n}\n\nfunction drawbe6() {\n\t//\tbackground(0);\n\tfill(0, 0, 0, 0);\n\t//stroke(0,120,random(120,210));\n\tstroke(0, 0, 0);\n\n\n\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\twidth * 0.1,\n\t\theight * 0.1,\n\t\twidth * 1.2,\n\t\theight * 1.2\n\t);\n\ttemperature = 25;\n\tgradientStroke.addColorStop(0, color(0, 200, 250));\n\tgradientStroke.addColorStop(0.5, color(255, 200, 0));\n\tgradientStroke.addColorStop(1, color(255, 200, 255));\n\n\tdrawingContext.strokeStyle = gradientStroke;\n\n\n\tlet gradientFill = drawingContext.createRadialGradient(\n\t\twidth / 3,\n\t\theight / 3,\n\t\twidth * 0.5,\n\t\twidth / 2,\n\t\theight / 2,\n\t\twidth * 0.2\n\t);\n\trand = random(10);\n\tif (rand \u003e 5) {\n\t\tgradientFill.addColorStop(0, color(210, 210, 210));\n\t\tgradientFill.addColorStop(0.5, color(random(255), random(210), 210));\n\t\tgradientFill.addColorStop(1, color(random(255), random(255), random(255)));\n\t} else {\n\t\tgradientFill.addColorStop(0, color(210, 210, 210, 200));\n\t\tgradientFill.addColorStop(0.5, color(180, 180, 180, 200));\n\t\tgradientFill.addColorStop(1, color(180, 180, random(255), 200));\n\t}\n\n\tdrawingContext.fillStyle = gradientFill;\n\n\n\tfor (let i = 0; i \u003c 1000; i++) {\n\t\trand = random(10);\n\t\tif (rand \u003e 5) {\n\t\t\t// noStroke();\n\t\t\t// fill(210,210,210,255);\n\t\t\tcircle(random(-1600, 1600), random(-1600, 2600), random(random(10)));\n\t\t} else {\n\t\t\t// noStroke();\n\t\t\tcircle(random(-1600, 1600), random(-1600, 2600), random(random(10)));\n\t\t}\n\t\t/**\n\t\tstrokeWeight(40);\n\t\tfill(0,0,0,0);\n\t\tbezier(\n\t\t\trandom(120) - i / 2.0,\n\t\t\t400 + i,\n\t\t\t200,\n\t\t\trandom(-540,200),\n\t\t\trandom(-300,300),\n\t\t\trandom(-100,30),\n\t\t\trandom(-1300,500) - i / 2,\n\t\t\t11 + i / 2\n\t\t);\n\t\t*/\n\t}\n\tovly();\n\n}\n\nfunction drawbe7() {\n\t//\tbackground(0);\n\t//fill(0,0,0,0);\n\t//stroke(0,120,random(120,210));\n\t//stroke(0,0,0);\n\n\n\tlet gradientStroke = drawingContext.createLinearGradient(\n\t\twidth * 0.1,\n\t\theight * 0.1,\n\t\twidth * 1.2,\n\t\theight * 1.2\n\t);\n\ttemperature = 25;\n\t/**\n gradientStroke.addColorStop(0, color(210, 210,210,180));\n gradientStroke.addColorStop(0.2, color(0, 10, 250,180));\n gradientStroke.addColorStop(1, color(255, 200, 255,100));\n\t*/\n\t/**\n\t\tgradientStroke.addColorStop(0, color(210, 210,0,180));\n\t gradientStroke.addColorStop(0.2, color(0, 10, 250,180));\n\t gradientStroke.addColorStop(1, color(255, 200, 255,100));\n\t\t*/\n\t//gradientStroke.addColorStop(0, color(240, 240,0,180));\n\tgradientStroke.addColorStop(0, color(250, 250, 250, 280));\n\tgradientStroke.addColorStop(0.4, color(220, 100, 150, 180));\n\tgradientStroke.addColorStop(1, color(255, 200, 255, 100));\n\n\tdrawingContext.strokeStyle = gradientStroke;\n\n\n\tlet gradientFill = drawingContext.createRadialGradient(\n\t\twidth / 3,\n\t\theight / 3,\n\t\twidth * 0.5,\n\t\twidth / 2,\n\t\theight / 2,\n\t\twidth * 1.5\n\t);\n\n\tgradientFill.addColorStop(0, color(210, 210, 210, 0));\n\tgradientFill.addColorStop(0.1, color(random(255), 10, 10, 0));\n\tgradientFill.addColorStop(0.2, color(random(255), random(255), random(255), 0));\n\n\tdrawingContext.fillStyle = gradientFill;\n\n\tfor (let i = 0; i \u003c 1; i++) {\n\n\t\tstrokeWeight(random(random(40)));\n\t\tfill(0, 0, 0, 0);\n\t\tbezier(\n\t\t\trandom(120) - i / 2.0,\n\t\t\t400 + i,\n\t\t\t200,\n\t\t\trandom(-540, 2000),\n\t\t\trandom(-300, 300),\n\t\t\trandom(-100, 30),\n\t\t\trandom(-1300, 500) - i / 2,\n\t\t\t11 + i / 2\n\t\t)\n\t\t/**\n\t\tbezier(\n\t\t\trandom(1200) - i / 2.0,\n\t\t\t400 + i,\n\t\t\t200,\n\t\t\trandom(-540,200),\n\t\t\trandom(-300,300),\n\t\t\trandom(-100,30),\n\t\t\trandom(-1300,500) - i / 2,\n\t\t\t11 + i / 2\n\t\t);\n\t\t*/\n\t}\n}\n\n\nvar coords = [40, 40, 80, 60, 100, 100, 60, 120, 50, 150];\n\n\nfunction drawcurv() {\n\tbackground(255);\n\tnoFill();\n\tstroke(0);\n\tbeginShape();\n\tcurveVertex(40, 40);\n\tcurveVertex(40, 40);\n\tcurveVertex(80, 60);\n\tcurveVertex(100, 100);\n\tcurveVertex(60, 120);\n\tcurveVertex(50, 150);\n\tcurveVertex(50, 150);\n\tendShape();\n\n\tfor (var i = 0; i \u003c coords.length; i += 2) {\n\t\tellipse(coords[i], coords[i + 1], 10, 10);\n\t}\n}\n\n\n\nfunction drawvera() {\n\n\t// background(180); // clear the screen to grey\n\n\tlet gap = -2; // unlike in w2_03 sketch, gap is always same size here.\n\n\t// calculate the size of each square for the given number of squares and gap between them\n\t// this will always be the same number. I could have just given it a specific number, but left the calculation just to try different gap sizes.\n\tlet cellsize = (width - (5 + 1) * gap) / 80; // if you do the math, this equals to 108.\n\n\tlet redCount = 0; // i want no more than 5 red squares. this declares the variable which will keep track of how many red squares there have been randomly generated so far.\n\n\tfor (i = 0; i \u003c 5; i++) { // col\n\t\tfor (j = 0; j \u003c 5; j++) { // row\n\n\t\t\t// To create the red squares, it starts by gnerating a random number between 0 and 5 which will be used to determine whether the square being created should be red or not.\n\t\t\tlet red = random(0, 5);\n\n\t\t\t// Only when the random number \"red\" happens to be 0, the square will be red. And this will happen only if there are less than 5 red squares so far.\n\t\t\tif (red == 0 \u0026\u0026 redCount \u003c 5) {\n\t\t\t\tfill(couleurs); // red color\n\t\t\t\tredCount++; // after each time that a red square is created (determined by the random number being 0), the counter which keeps track of how many red squares have been created so far, is increased by 1.\n\t\t\t} else {\n\t\t\t\tfill(57, 150, random(210, 240), 200); // if the randomly generated number is not 0, or if there are 5 red squares already, then the next square to be generated will be brown.\n\t\t\t}\n\n\t\t\trect(gap * (i + 1) + cellsize * i + random(-12, 12), // X position. the random number is what makes the squares keep moving slightly left to right.\n\t\t\t\tgap * (j + 1) + cellsize * j + random(-12, 12), // Y position. the random number is what makes the squares keep moving slightly up and down.\n\t\t\t\tcellsize,\n\t\t\t\tcellsize);\n\t\t}\n\t}\n} //end of draw\n\n\nfunction mousePressed() {\n\t//redraw();\n}\n\n/**\nfunction setup() {\n createCanvas(800, 1200);\n angleMode(DEGREES);\n background(220);\n ted = new Turtle();\n textSize(30);\n fill(128);\n textAlign(CENTER, CENTER);\n //text('tap to start', width / 2, height / 2);\n\t//mousePressed_3();\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n//\tmousePressed_3();\n//\tmousePressed_2();\n//\tmousePressed_3();\n//\tmousePressed_2();\n\tmousePressed_2();\n}\n*/\nfunction drawMAN(x, y, noiseFactor) {\n\tstroke(color(0, 0, 250, random(100, 240)));\n\tstrokeWeight(50);\n\tlet s = 500;\n\tline(s, 1000, s + 50, random(700, 1600));\n\tline(s + 50, 700, s + 50, 1600);\n\tline(s + 50, 700, s + 300, 600);\n\tline(s + 50, 700, s + 300, random(600, 1600));\n\tline(s + 300, 600, s + 300, 1600);\n\tline(s + 300, 600, s + 400, 800);\n\n\tline(s + 300, 600, s + 400, random(800, 1600));\n\n\tline(s + 400, 800, s + 400, 1600);\n\tline(s + 400, 800, s + 700, 600);\n\tline(s + 400, 800, s + 700, random(600, 1600));\n\tline(s + 700, 600, s + 700, 1600);\n\tline(s + 700, 600, s + 800, 600);\n\tline(s + 700, 600, s + 800, random(600, 1600));\n\tline(s + 800, 600, s + 800, 1600);\n\tline(s + 800, 600, s + 900, random(700, 1700));\n\tline(s + 900, 700, s + 900, random(700, 1700));\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n\t/**\n\tstroke(color(240,240,240,random(200,240)));\n\tstrokeWeight(2);\n\t\n\ts = random(1500); \n\tline(s, 1000, s +50, random(700,1600));\n\tline(s+ 50, 0, s+50, 1600);\n\tline(s+ 50, 0, s+300, 600);\n\tline(s+ 50, 0, s+300, random(600,1600));\n\tline(s+ 300, 300, s+300, 1600);\n\tline(s+300, 300, s+400, 800);\n\t*/\n}\n\nfunction drawMAN_2(x, y, noiseFactor) {\n\tstroke(color(240, 240, 240, random(200, 240)));\n\tstrokeWeight(2);\n\tlet s = random(1500);\n\tline(s, 1000, s + 50, random(700, 1600));\n\tline(s + 50, 0, s + 50, 1600);\n\tline(s + 50, 0, s + 300, 600);\n\tline(s + 50, 0, s + 300, random(600, 1600));\n\tline(s + 300, 300, s + 300, 1600);\n\tline(s + 300, 300, s + 400, 800);\n\n\tline(s + 300, 300, s + 400, random(800, 1600));\n\n\tline(s + 400, 400, s + 400, 1600);\n\tline(s + 400, 400, s + 700, 600);\n\tline(s + 400, 400, s + 700, random(600, 1600));\n\tline(s + 700, 400, s + 700, 1600);\n\tline(s + 700, 200, s + 800, 600);\n\tline(s + 700, 200, s + 800, random(600, 1600));\n\tline(s + 800, 200, s + 800, 1600);\n\tline(s + 800, 200, s + 900, random(700, 1700));\n\tline(s + 900, 400, s + 900, random(700, 1700));\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n}\n\nfunction drawMAN_20(x, y, noiseFactor) {\n\tstroke(color(120, 120, 120, random(200, 240)));\n\tstrokeWeight(2);\n\tlet s = random(1500);\n\tline(s, 1000, s + 50, random(700, 1600));\n\tline(s + 50, 0, s + 50, 1600);\n\tline(s + 50, 0, s + 300, 600);\n\tline(s + 50, 0, s + 300, random(600, 1600));\n\tline(s + 300, 300, s + 300, 1600);\n\tline(s + 300, 300, s + 400, 800);\n\n\tline(s + 300, 300, s + 400, random(800, 1600));\n\n\tline(s + 400, 400, s + 400, 1600);\n\tline(s + 400, 400, s + 700, 600);\n\tline(s + 400, 400, s + 700, random(600, 1600));\n\tline(s + 700, 400, s + 700, 1600);\n\tline(s + 700, 200, s + 800, 600);\n\tline(s + 700, 200, s + 800, random(600, 1600));\n\tline(s + 800, 200, s + 800, 1600);\n\tline(s + 800, 200, s + 900, random(700, 1700));\n\tline(s + 900, 400, s + 900, random(700, 1700));\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n}\n\nfunction drawMAN_3(x, y, noiseFactor) {\n\tstroke(color(20, 20, 20, random(200, 240)));\n\tstrokeWeight(50);\n\tlet s = random(500);\n\tline(s, 1000, s + 50, random(700, 1600));\n\tline(s + 50, 0, s + 50, 1600);\n\n\tline(s + 700, s, s + 700, s * 2);\n\tline(s + 700, s, s + 800, s * 2);\n\tline(s + 700, s, s + 800, random(s, 1600));\n\tline(s + 800, s, s + s, 1600);\n\tline(s + 800, s, s + 900, random(700, 1700));\n\tline(s + 900, 400, s + 900, random(700, 1700));\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n}\n\nfunction drawMAN_4(x, y, noiseFactor) {\n\tstroke(color(210, random(210), 0, random(100, 240)));\n\tstrokeWeight(5);\n\tlet s = 0;\n\tlet t = 600;\n\tline(s, 1000, s + 50, random(t + 200, 1600));\n\tline(s + 50, t + 200, s + 50, 1600);\n\tline(s + 50, t + 200, s + 300, t + 200);\n\tline(s + 50, t + 200, s + 300, random(t + 100, 1600));\n\tline(s + 300, t + 100, s + 300, 1600);\n\tline(s + 300, t + 100, s + 400, t + 300);\n\n\tline(s + 300, t + 100, s + 400, random(t + 300, 1600));\n\n\tline(s + 400, t + 300, s + 400, 1600);\n\tline(s + 400, t + 300, s + 700, t + 100);\n\tline(s + 400, t + 300, s + 700, random(t + 100, 1600));\n\tline(s + 700, t + 100, s + 700, 1600);\n\tline(s + 700, t + 100, s + 800, t + 100);\n\tline(s + 700, t + 100, s + 800, random(t + 100, 1600));\n\tline(s + 800, t + 100, s + 800, 1600);\n\tline(s + 800, t + 100, s + 900, random(t + 200, 1700));\n\tline(s + 900, t + 200, s + 900, random(t + 200, 1700));\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n\t/**\n\tstroke(color(240,240,240,random(200,240)));\n\tstrokeWeight(2);\n\t\n\ts = random(1500); \n\tline(s, 1000, s +50, random(700,1600));\n\tline(s+ 50, 0, s+50, 1600);\n\tline(s+ 50, 0, s+300, 600);\n\tline(s+ 50, 0, s+300, random(600,1600));\n\tline(s+ 300, 300, s+300, 1600);\n\tline(s+300, 300, s+400, 800);\n\t*/\n}\n\nfunction drawMAN_5(x, y, noiseFactor) {\n\tstroke(color(random(210), random(210), 0, random(100, 240)));\n\tstrokeWeight(random(20));\n\tlet s = 20;\n\tlet t = random(580, 640);\n\tline(s, 1000, s + 50, random(t + 200, 1600));\n\tline(s + 50, t + 200, s + 50, 1600);\n\tline(s + 50, t + 200, s + 300, t + 200);\n\tline(s + 50, t + 200, s + 300, random(t + 100, 1600));\n\tline(s + 300, t + 100, s + 300, 1600);\n\tline(s + 300, t + 100, s + 400, t + 300);\n\n\tline(s + 300, t + 100, s + 400, random(t + 300, 1600));\n\n\tline(s + 400, t + 300, s + 400, 1600);\n\tline(s + 400, t + 300, s + 700, t + 100);\n\tline(s + 400, t + 300, s + 700, random(t + 100, 1600));\n\tline(s + 700, t + 100, s + 700, 1600);\n\tline(s + 700, t + 100, s + 800, t + 100);\n\tline(s + 700, t + 100, s + 800, random(t + 100, 1600));\n\tline(s + 800, t + 100, s + 800, 1600);\n\tline(s + 800, t + 100, s + 900, random(t + 200, 1700));\n\tline(s + 900, t + 200, s + 900, random(t + 200, 1700));\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n\t/**\n\tstroke(color(240,240,240,random(200,240)));\n\tstrokeWeight(2);\n\t\n\ts = random(1500); \n\tline(s, 1000, s +50, random(700,1600));\n\tline(s+ 50, 0, s+50, 1600);\n\tline(s+ 50, 0, s+300, 600);\n\tline(s+ 50, 0, s+300, random(600,1600));\n\tline(s+ 300, 300, s+300, 1600);\n\tline(s+300, 300, s+400, 800);\n\t*/\n}\n\nfunction drawMAN_6(x, y, noiseFactor) {\n\tstroke(color(random(250), random(210), random(210), random(100, 240)));\n\tstrokeWeight(random(3));\n\tlet s = 20;\n\tlet t = random(400, 640);\n\tline(s, 1000, s + 50, random(t + 200, 1600));\n\tline(s + 50, t + 200, s + 50, 1600);\n\tline(s + 50, t + 200, s + 300, t + 200);\n\tline(s + 50, t + 200, s + 300, random(t + 100, 1600));\n\tline(s + 300, t + 100, s + 300, 1600);\n\tline(s + 300, t + 100, s + 400, t + 300);\n\n\tline(s + 300, t + 100, s + 400, random(t + 300, 1600));\n\n\tline(s + 400, t + 300, s + 400, 1600);\n\tline(s + 400, t + 300, s + 700, t + 100);\n\tline(s + 400, t + 300, s + 700, random(t + 100, 1600));\n\tline(s + 700, t + 100, s + 700, 1600);\n\tline(s + 700, t + 100, s + 800, t + 100);\n\tline(s + 700, t + 100, s + 800, random(t + 100, 1600));\n\tline(s + 800, t + 100, s + 800, 1600);\n\tline(s + 800, t + 100, s + 900, random(t + 200, 1700));\n\tline(s + 900, t + 200, s + 900, random(t + 200, 1700));\n\t//mousePressed();\n\t//mousePressed();\n\t//mousePressed();\n\t/**\n\tstroke(color(240,240,240,random(200,240)));\n\tstrokeWeight(2);\n\t\n\ts = random(1500); \n\tline(s, 1000, s +50, random(700,1600));\n\tline(s+ 50, 0, s+50, 1600);\n\tline(s+ 50, 0, s+300, 600);\n\tline(s+ 50, 0, s+300, random(600,1600));\n\tline(s+ 300, 300, s+300, 1600);\n\tline(s+300, 300, s+400, 800);\n\t*/\n}\n\nfunction mousePressed_3() {\n\tlogo(ted, random(400000));\n\tlogo2(ted, random(400000));\n\t//logo3(ted, random(400000));\n}\n\nfunction mousePressed_2() {\n\tlogo3(ted, random(400000));\n\t//logo2(ted, random(400000));\n}\n\nfunction touchStarted() {\n\t// logo(ted, random(2));\n}\n\nfunction logo(t, angle) {\n\tt.clearscreen();\n\ttextSize(30);\n\tfill(128);\n\ttextAlign(LEFT, TOP);\n\t//text(floor(angle * 10) / 10, 20, 20);\n\tvar i = 0;\n\twhile (t.x \u003e 0 \u0026\u0026 t.x \u003c width \u0026\u0026 t.y \u003e 0 \u0026\u0026 t.y \u003c height) {\n\t\tt.forward(i);\n\t\t//t.forward_2(i);\n\t\t//t.forward_(i);\n\t\tt.right(random(120, 500));\n\t\t//t.left(random(10,200));\n\t\t// t.forward(i);\n\t\ti++;\n\t}\n}\n\nfunction logo2(t, angle) {\n\tt.clearscreen();\n\ttextSize(30);\n\tfill(128);\n\ttextAlign(LEFT, TOP);\n\t//text(floor(angle * 10) / 10, 20, 20);\n\tvar i = 0;\n\twhile (t.x \u003e 0 \u0026\u0026 t.x \u003c width \u0026\u0026 t.y \u003e 0 \u0026\u0026 t.y \u003c height) {\n\t\tt.forward_8(i);\n\t\tt.forward_6(i);\n\t\tt.forward_7(i);\n\t\tt.right(random(120, 500));\n\t\t//t.left(random(10,200));\n\t\t// t.forward(i);\n\t\ti++;\n\t}\n}\n\nfunction logo3(t, angle) {\n\tt.clearscreen();\n\ttextSize(30);\n\tfill(128);\n\ttextAlign(LEFT, TOP);\n\t//text(floor(angle * 10) / 10, 20, 20);\n\tvar i = 0;\n\twhile (t.x \u003e 0 \u0026\u0026 t.x \u003c width \u0026\u0026 t.y \u003e 0 \u0026\u0026 t.y \u003c height) {\n\t\tt.forward_9(i);\n\t\t// t.forward_8(i);\n\t\tt.forward_(i);\n\t\tt.right(random(120, 500));\n\t\t//t.left(random(10,200));\n\t\t// t.forward(i);\n\t\ti++;\n\t}\n}\n\nfunction logo4(t, angle) {\n\tt.clearscreen();\n\ttextSize(30);\n\tfill(128);\n\ttextAlign(LEFT, TOP);\n\t//text(floor(angle * 10) / 10, 20, 20);\n\tvar i = 0;\n\twhile (t.x \u003e 0 \u0026\u0026 t.x \u003c width \u0026\u0026 t.y \u003e 0 \u0026\u0026 t.y \u003c height) {\n\t\tt.forward_10(i);\n\t\t//t.forward_10(i);\n\t\t//\tt.forward_10(i);\n\t\t//t.forward_2(i);\n\t\t//t.forward_(i);\n\t\tt.right(random(120, 500));\n\t\t//t.left(random(10,200));\n\t\t// t.forward(i);\n\t\ti++;\n\t}\n}\n\n\n\nclass Turtle {\n\tconstructor(x_ = width / 2, y_ = height / 2, direction_ = -90, penDown_ = true, penColor_ = color(0, 25, 255, random(200, 240))) {\n\t\tthis.x = x_ + random(-300, 300);\n\t\tthis.y = y_ + random(-300, 300);\n\t\tthis.direction = direction_;\n\t\tthis.penDown = penDown_;\n\t\tthis.penColor = penColor_;\n\t}\n\n\tforward_(d) {\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(this.penColor);\n\t\t\tline(oldX, oldY, this.x, this.y);\n\t\t}\n\t}\n\n\tforward(d) {\n\t\td = random(100);\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(color(random(200, 250), random(200, 250), random(200, 250)));\n\t\t\tstrokeWeight(random(1500));\n\n\t\t\tline(oldX, oldY, this.x, this.y);\n\t\t\t//line(oldX - 5, oldY - 5, this.x - 5, this.y- 5);\n\t\t}\n\t\t//drawMAN();\n\t\t//drawMAN_6();\n\t\t//drawMAN_2();\n\t\t//drawMAN_3();\n\t\t//drawMAN_4();\n\t\t//drawMAN_5();\n\t\tdrawMAN_20();\n\n\t}\n\tforward_2(d) {\n\t\td = random(10, 90);\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(color(10, 0, 0, random(200, 240)));\n\t\t\tstrokeWeight(random(400));\n\n\t\t\tline(oldX, oldY, this.x, this.y);\n\t\t}\n\t}\n\tforward_6(d) {\n\t\td = random(10, 90);\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(color(random(200), random(200), random(200), random(200, 240)));\n\t\t\tstrokeWeight(random(5));\n\n\t\t\tline(oldX, oldY, this.x, this.y);\n\t\t}\n\t}\n\tforward_7(d) {\n\t\td = random(10, 90);\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(color(random(4), random(4), random(4), random(200, 240)));\n\t\t\tstrokeWeight(random(4));\n\n\t\t\tline(oldX, oldY, this.x, this.y);\n\t\t}\n\t}\n\tforward_8(d) {\n\t\td = random(-120);\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(color(random(5), random(5), random(5), random(200, 240)));\n\t\t\tstrokeWeight(random(2));\n\n\t\t\tline(oldX, oldY, this.x, this.y);\n\t\t}\n\t}\n\tforward_9(d) {\n\t\td = random(420);\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(color(120, 120, 120, random(200, 240)));\n\t\t\tstrokeWeight(random(4));\n\n\t\t\t// line(oldX, oldY-100, this.x, this.y-100);\n\t\t\t//line(oldX - random(1400), oldY-100, this.x, this.y-100);\n\t\t\t//line(oldX , oldY-100- random(800), this.x, this.y-100);\n\t\t\tline(oldX, oldY - 100 - random(300), this.x, this.y - random(300));\n\t\t\tstrokeWeight(random(1));\n\t\t\tline(oldX - random(300), oldY - 100 - random(700), this.x - random(300), this.y - random(700));\n\t\t\tfill(122);\n\t\t\t//circle(oldX +random(400), oldY + random(800), random(300));\n\t\t\ttranslate(width / 2, height / 2);\n\t\t\trotate(PI / 3.0);\n\t\t\trect(random(300), random(300), random(300), random(300));\n\t\t}\n\t}\n\tforward_10(d) {\n\t\td = random(-120);\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x += d * cos(this.direction);\n\t\tthis.y += d * sin(this.direction);\n\t\tif (this.penDown) {\n\t\t\tstroke(color(240, 120, 120, random(200, 240)));\n\t\t\tstrokeWeight(random(2));\n\n\t\t\tline(oldX, oldY - 200, this.x, this.y - 200);\n\t\t\tfill(222);\n\t\t\t//\tcircle(random(100), random(800), random(300));\n\t\t}\n\t\tcircle(random(100), random(800), random(300));\n\t}\n\tbackward(d) {\n\t\tthis.forward(-d);\n\t}\n\n\tright(a) {\n\t\tthis.direction += a;\n\t}\n\n\tleft(a) {\n\t\tthis.direction -= a;\n\t}\n\n\tsetpos(newx, newy) {\n\t\tlet oldX = this.x;\n\t\tlet oldY = this.y;\n\t\tthis.x = newx\n\t\tthis.y = newy\n\t\tif (this.penDown) {\n\t\t\tstroke(this.penColor);\n\t\t\tline(oldX, oldY, this.x, this.y);\n\t\t}\n\t}\n\n\thome() {\n\t\tthis.x = width / 2;\n\t\tthis.y = height / 2;\n\t\tthis.direction = -90;\n\t}\n\n\tsetheading(a) {\n\t\tthis.direction = a;\n\t}\n\n\tpendown() {\n\t\tthis.penDown = True;\n\t}\n\n\tpenup() {\n\t\tthis.penDown = False;\n\t}\n\n\tpencolor(c) {\n\t\tthis.penColor = c;\n\t}\n\n\tclean() {\n\t\tbackground(220);\n\t}\n\n\tclearscreen() {\n\t\tthis.home();\n\t\t// this.clean();\n\t}\n}\n","artId":"ce5lc6sn70rlpj69d6f0","libraries":[]}],"like":0,"thumbFileName":"ce5lc6sn70rlpj69d6f0.png","selectedThumbFileName":"ce5lc6sn70rlpj69d6f0.png","thumbnailFileUrl":"","resourceFileName":"ce5lc6sn70rlpj69d6f0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmTdahqcUPp793f1adUNDTEiM6xWUpT9Ctn3rk51jYoFuC","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5jppcn70rlpj69d5hg","title":"寒さをもとめる","description":"","createdAt":1670069516,"updatedAt":1670069516,"user":{"id":"mVtG1qOodRhIUBHusFtC6Mcsx9t1","customId":"mVtG1qOodRhIUBHusFtC6Mcsx9t1","name":"ねじおさん nejio","biography":"twitter @shirasu_nejio","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/mVtG1qOodRhIUBHusFtC6Mcsx9t1.jpg","createdAt":1583119706000,"updatedAt":1698557580014},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce5jppcn70rlpj69d5hg.png","thumbnailFileUrl":"","resourceFileName":"ce5jppcn70rlpj69d5hg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVy77shHB5bahpULA4XAgoXMEynqw6MUbxGuuwoCi41iV","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce59gvsn70rlpj69cvs0","title":"confirm","description":"Society → Self","createdAt":1670027397,"updatedAt":1670027397,"user":{"id":"IWD3ncMyhLhqMb7dInMwosr9Yw92","customId":"IWD3ncMyhLhqMb7dInMwosr9Yw92","name":"ayametakuya","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/IWD3ncMyhLhqMb7dInMwosr9Yw92.jpg","createdAt":1638366088154,"updatedAt":1718276802080},"codes":[{"id":"ce59h1cn70rlpj69cvt0","type":0,"text":"","artId":"ce59gvsn70rlpj69cvs0","libraries":[]},{"id":"ce59h1cn70rlpj69cvtg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce59gvsn70rlpj69cvs0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce59h1cn70rlpj69cvu0","type":2,"text":"let points = [];\nlet grid;\n\nfunction setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n noFill();\n background(0);\n\n grid = width / 50;\n for(let y = 0; y \u003c height + grid; y += grid) {\n for(let x = 0; x \u003c width + grid; x += grid) {\n let p = createVector(x, y);\n points.push(p)\n }\n }\n}\n\nfunction draw() {\n background(0, 10)\n for(let i = 0; i \u003c points.length; i++) {\n push();\n translate(points[i].x, points[i].y);\n let angle = map(noise(points[i].x, points[i].y, frameCount*0.01), 0, 1, 0, 360);\n let x = map(sin(angle),-1, 1, -grid*0.1, grid*0.1);\n let y = map(cos(angle),-1, 1, -grid*0.1, grid*0.1);\n noFill();\n stroke(255);\n circle(x, y, grid*0.7)\n fill(angle, 0, 0);\n noStroke();\n circle(0, 0, grid*0.1)\n pop();\n }\n}","artId":"ce59gvsn70rlpj69cvs0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":1,"thumbFileName":"ce59gvsn70rlpj69cvs0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce59gvsn70rlpj69cvs0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmWdPHijbtVo5pvTwVWxVbypqHGuVwcTTbhvCMGiawravz","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce498lsn70rlpj69cjl0","title":"Well behaved random walk (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221201","createdAt":1669895271,"updatedAt":1669895271,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce498lsn70rlpj69cjl0.png","thumbnailFileUrl":"","resourceFileName":"ce498lsn70rlpj69cjl0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYFBc1yB8HAzPXi3B95rhFoL4o3Ax7sWzDAPtZzYQeEKd","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce44374n70rlpj69cgq0","title":"Henoheno Samurai 10000","description":"10,000 Henoheno Samurais!\n\nOriginal GenArt is here👉\nhttps://www.fxhash.xyz/generative/14176\n\n*To fit the exhibit, the images of the left side (for short walls) are slightly stretched vertically, while the images of the right side(for long walls) are stretched horizontally a bit more from the original aspect ratio(1:1).","createdAt":1669879261,"updatedAt":1670019483,"user":{"id":"Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2","customId":"Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2","name":"katoten","biography":"drawinghell.com/cartoontengoku\nAlias:neort.io/@Kiz7VIowEkUqUJNuzjLKUPpLxqs1","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2.jpg","createdAt":1668691428920,"updatedAt":1715773742788},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce44374n70rlpj69cgq0.png","thumbnailFileUrl":"","resourceFileName":"ce44374n70rlpj69cgq0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmVdmzkfx9fJyYSj6nNLFSAtD8ye9PUwbkgy9XLvkk6CvU","resourceType":2,"metadataUrl":"","tags":[{"id":"cbh5udc3p9f2v73usc6g","name":"PFP"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce45bikn70rlpj69chh0","title":"50 * 9 bars wind","description":"振り子曲線に魅了されて作りました。","createdAt":1669879245,"updatedAt":1669879245,"user":{"id":"ljQb3AP7kOe1ObdkI98qtXIc3rB3","customId":"ljQb3AP7kOe1ObdkI98qtXIc3rB3","name":"Asahamiz","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ljQb3AP7kOe1ObdkI98qtXIc3rB3.jpg","createdAt":1664807381914,"updatedAt":1701411160943},"codes":[{"id":"ce45bjcn70rlpj69chi0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"ce45bikn70rlpj69chh0","libraries":[]},{"id":"ce45bjcn70rlpj69chig","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"ce45bikn70rlpj69chh0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce45bjcn70rlpj69chj0","type":2,"text":"\nlet col = [];\nlet plte;\nlet flower = [];\nlet cnt = 50;\n\nlet alp = 200;\n\nlet bg_ptn = [];\nlet bg, bgc;\n\nfunction setup() {\n createCanvas(11012, 1080);\n pixelDensity(1)\n rectMode(CENTER);\n\n for (let i = 0; i \u003c cnt; i++) {\n let ofx = width / cnt;\n let ofy = random(height);\n flower.push(new Flower(ofx * i, ofy));\n }\n bg_ptn = [255, 0];\n bg = random(bg_ptn);\n bgc = color(bg);\n}\n\nfunction draw() {\n background(bgc);\n bgc.setAlpha(alp);\n if(frameCount \u003e 300){ alp--; }\n \nfor (let i = 0; i \u003c flower.length; i++) {\n flower[i].draw();\n }\n}\n\nclass Flower {\n constructor(_xp, _yp) {\n this.count = 15;\n this.angle = 0;\n this.angle_step = random(0.0015, 0.009);\n this.r = 1000;\n\n //color\n this.c = [];\n for (let i = 0; i \u003c this.count; i++) {\n this.c.push(color(col[int(random(col.length))][int(random(5))]));\n }\n //angle pattern\n this.lr = [-5,-4,-3,-2, -1.5, -1, 1, 1.5, 2,3,4,5,];\n this.ang = [];\n for (let i = 0; i \u003c this.count; i++) {\n this.ang[i] = random(this.lr);\n }\n //bar_length\n this.len = [];\n for (let i = 0; i \u003c this.count; i++) {\n this.len[i] = random(250, 130);\n }\n\n this.xpos = _xp;\n this.ypos = _yp;\n this.x = [];\n this.y = [];\n\n let clip = [50, 60, 70, 80, 120];\n this.clip = random(clip);\n noStroke();\n this.c[0].setAlpha(100);\n \n let p = [-2, -1.5, -1, 1, 1.5, 2];\n this.xmov = random(p);\n this.ymov = random(p);\n }\n\n draw() {\n push();\n\n noFill();\n stroke(255, 1); //背景色と同じにする\n translate(this.xpos, this.ypos);\n this.x[0] = sin(this.angle) * this.r;\n this.y[0] = cos(this.angle) * this.r;\n translate(this.x[0], this.y[0]);\n\n rect(0,0,this.clip,this.clip, random(120), random(120), random(120), random(120)\n );\n if (random() \u003e 0.4) { circle(0, 0, this.clip * 5); }\n \n drawingContext.clip();\n\n \n for (let i = 0; i \u003c this.count; i++) {\n stroke(this.c[i]);\n strokeWeight(1);\n this.x[i] = sin(this.ang[i] * this.angle) * this.len[i];\n this.y[i] = cos(this.ang[i] * this.angle) * this.len[i];\n line(0, 0, this.x[i], this.y[i]);\n translate(this.x[i], this.y[i]);\n push();\n pop();\n }\n\n this.angle += this.angle_step * 0.7 ;\n\n circle(this.xpos,this.ypos,10)\n \n resetMatrix();\n\n pop();\n\n this.ypos += this.ymov*0.1;\n this.xpos += this.xmov * 0.1;\n }\n\n}\n\ncol = [\n [\"#faf9e9\", \"#160d0e\", \"#e72a3d\", \"#93704d\", \"#935634\"],\n [\"#d4b49d\", \"#f1e7c0\", \"#6f162a\", \"#7c573a\", \"#f1dca4\"],\n [\"#3f2822\", \"#967e6f\", \"#de7a1b\", \"#825c51\", \"#e86143\"],\n [\"#301e1b\", \"#fac25c\", \"#d8ad82\", \"#bb8d4c\", \"#444454\"],\n [\"#7e432f\", \"#bccc80\", \"#342c24\", \"#44343c\", \"#743c14\"],\n\n [\"#ddfff7\", \"#ffd2fc\", \"#e980fc\", \"#b96ac9\", \"#231b1b\"],\n [\"#102542\", \"#f87060\", \"#cdd7d6\", \"#b3a394\", \"#ffffff\"],\n [\"#14342b\", \"#60935d\", \"#bab700\", \"#bbdfc5\", \"#ff579f\"],\n [\"#8b1e3f\", \"#3c153b\", \"#89bd9e\", \"#f0c987\", \"#db4c40\"],\n [\"#fefeff\", \"#d6efff\", \"#fed18c\", \"#fed99b\", \"#fe654f\"],\n \n [\"#040f0f\", \"#248232\", \"#2ba84a\", \"#2d3a3a\", \"#fcfffc\"],\n [\"#4c5b5c\", \"#ff715b\", \"#f9cb40\", \"#bced09\", \"#2f52e0\"],\n [\"#8e3b46\", \"#e1dd8f\", \"#e0777d\", \"#4c86a8\", \"#477890\"],\n [\"#f991cc\", \"#e2afde\", \"#d3c2ce\", \"#d3d2c7\", \"#e2e1b9\"],\n [\"#bac1b8\", \"#58a4b0\", \"#0c7c59\", \"#2b303a\", \"#d64933\"],\n \n [\"#050505\", \"#1b9aaa\", \"#dddbcb\", \"#f5f1e3\", \"#ffffff\"],\n [\"#0a210f\", \"#14591d\", \"#99aa38\", \"#e1e289\", \"#acd2ed\"],\n\n [\"#5f634f\",\"#9bc4cb\",\"#cfebdf\",\"#e2fadb\",\"#dbefbc\"],\n [\"#ee8434\",\"#c95d63\",\"#ae8799\",\"#717ec3\",\"#496ddb\"],\n [\"#333232\",\"#f7b2ad\",\"#ceb7b3\",\"#b7b7b7\",\"#9abca7\"],\n [\"#a8e0ff\",\"#8ee3f5\",\"#70cad1\",\"#3e517a\",\"#b08ea2\"],\n [\"#084b83\",\"#42bfdd\",\"#bbe6e4\",\"#f0f6f6\",\"#ff66b3\"],\n [\"#fff07c\",\"#80ff72\",\"#7ee8fa\",\"#eec0c6\",\"#e58c8a\"],\n];\n\n\n\n","artId":"ce45bikn70rlpj69chh0","libraries":[]}],"like":0,"thumbFileName":"ce45bikn70rlpj69chh0.png","selectedThumbFileName":"ce45bikn70rlpj69chh0.png","thumbnailFileUrl":"","resourceFileName":"ce45bikn70rlpj69chh0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmY73iVtuLMxCCKjmTNyeTZkXT8CR81D96C48KQTXKXAL8","resourceType":1,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce0s51kn70rs76qrbelg","title":"Neon, Neon, Neon!","description":"ネオンがすきだ〜","createdAt":1669448332,"updatedAt":1669448374,"user":{"id":"EDAeR4N1gzNvQX1xAKDAHgFopeG3","customId":"EDAeR4N1gzNvQX1xAKDAHgFopeG3","name":"reona396 / レオナ","biography":"Processingとp5.jsが大好き!\nhttps://reona396.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/EDAeR4N1gzNvQX1xAKDAHgFopeG3.png","createdAt":1551929258000,"updatedAt":1735658766923},"codes":[{"id":"ce0s534n70rs76qrbemg","type":0,"text":"\u003chtml\u003e\n\n\u003chead\u003e\n \u003ctitle\u003emy sketch\u003c/title\u003e\n\n \u003cscript src=\"https://cdn.jsdelivr.net/npm/p5@1.4.2/lib/p5.js\"\u003e\u003c/script\u003e\n \u003clink href=\"https://fonts.googleapis.com/icon?family=Material+Icons\" rel=\"stylesheet\"\u003e\n \u003cscript\u003e\n const txt = \"譛€霑代ラ繝ウ繝悶Λ繧カ繝シ繧コ隕九※縺ヲ繧�▲縺ア繧頑枚蟄怜喧縺代▲縺ヲ縺九▲縺薙>縺�↑繝シ縺ィ諤昴>縺セ縺励◆縲ゅ%縺ョ譁�ォ�繧偵o縺悶o縺門セゥ蜈�@縺ヲ縺�k縺昴%縺ョ繧ュ繝滂シ∽サ頑律縺ョ驕句兇縺ッ螟ァ蜷峨□縺橸シ�\";\n\t\tconst codes = [\"e951\",\"e952\",\"e953\",\"eb8d\",\"e954\",\"e955\",\"e956\",\"e957\",\"e958\",\"e959\",\"f8fd\",\"e95a\",\"e95b\",\"e95c\",\"e95d\",\"efcd\",\"e95e\",\"e95f\",\"e960\",\"e961\",\"e962\",\"e963\",\"e964\",\"e965\",\"efce\",\"efcf\",\"e577\",\"e84d\",\"efd0\",\"e966\",\"e967\",\"e968\",\"efd1\",\"efd2\",\"efd3\",\"e072\",\"e969\",\"e96a\",\"ef38\",\"e96b\",\"e96c\",\"e96d\",\"efd4\",\"efd5\",\"f21e\",\"e96e\",\"e96f\",\"e970\",\"e971\",\"e972\",\"e973\",\"e974\",\"e975\",\"e976\",\"e977\",\"e978\",\"e979\",\"eb94\",\"eb3b\",\"e190\",\"e191\",\"e192\",\"efd6\",\"e84e\",\"e92c\",\"e914\",\"e934\",\"e84f\",\"e850\",\"e851\",\"e853\",\"e97a\",\"ef39\",\"e60e\",\"e145\",\"e439\",\"e193\",\"e003\",\"e146\",\"e729\",\"e0e8\",\"eb86\",\"e97b\",\"e147\",\"e148\",\"e266\",\"e97c\",\"e178\",\"e567\",\"ef3a\",\"e97d\",\"e43e\",\"e1d3\",\"ef3b\",\"e854\",\"f23a\",\"e65c\",\"e1fe\",\"e39d\",\"e05c\",\"ef3c\",\"eada\",\"e39e\",\"ef3d\",\"ea96\",\"e762\",\"ea79\",\"efd8\",\"e630\",\"e631\",\"e632\",\"e633\",\"e634\",\"e635\",\"e636\",\"e637\",\"e7d0\",\"e7ca\",\"efd9\",\"e195\",\"e194\",\"e194\",\"e195\",\"e055\",\"eb3c\",\"e855\",\"e856\",\"e857\",\"e858\",\"e019\",\"e00f\",\"e00d\",\"e010\",\"e015\",\"e011\",\"e00c\",\"e97f\",\"eb3d\",\"e90b\",\"f184\",\"e0e6\",\"ea13\",\"ef3e\",\"f1cd\",\"e859\",\"e71c\",\"e85a\",\"efda\",\"ea40\",\"f1b7\",\"ef3f\",\"ef40\",\"ef41\",\"eae4\",\"ea80\",\"e982\",\"e5c3\",\"e7cc\",\"ea3b\",\"e149\",\"e770\",\"e5c4\",\"e5e0\",\"e2ea\",\"f181\",\"eaa7\",\"eaaa\",\"f182\",\"e5db\",\"e5c5\",\"e5c6\",\"e5c7\",\"e5c8\",\"e5e1\",\"e5de\",\"e5df\",\"e941\",\"e5d8\",\"e060\",\"ef42\",\"e85b\",\"e85c\",\"e85d\",\"e85e\",\"e85f\",\"e860\",\"e861\",\"e862\",\"e39f\",\"e988\",\"e989\",\"e3a0\",\"eb6f\",\"e573\",\"ea5e\",\"e226\",\"e227\",\"e2bc\",\"ea52\",\"efdb\",\"eb82\",\"e3a1\",\"e65f\",\"e660\",\"e661\",\"ea4c\",\"e663\",\"e664\",\"e665\",\"e4fb\",\"ec20\",\"e666\",\"efdc\",\"e863\",\"e01b\",\"f19b\",\"e764\",\"f19c\",\"e14a\",\"e864\",\"ef43\",\"ea67\",\"ea53\",\"eaf6\",\"e58f\",\"e172\",\"e26b\",\"f0f5\",\"efdd\",\"ea41\",\"ebdc\",\"ebd9\",\"ebe0\",\"ebdd\",\"ebe2\",\"ebd4\",\"ebd2\",\"e19c\",\"e1a3\",\"e1a4\",\"efde\",\"e1a5\",\"e1a6\",\"eb3e\",\"efdf\",\"efe0\",\"efe1\",\"efe2\",\"ef44\",\"eb76\",\"e52d\",\"f1f4\",\"ef45\",\"ea3a\",\"efe3\",\"e286\",\"ec1f\",\"e14b\",\"ef46\",\"efe4\",\"e1a7\",\"e60f\",\"e1a8\",\"e1a9\",\"efe5\",\"e1aa\",\"e3a2\",\"e3a3\",\"e3a4\",\"e3a5\",\"ea0b\",\"e865\",\"f217\",\"e866\",\"e598\",\"e599\",\"e867\",\"e867\",\"e59a\",\"e98b\",\"e228\",\"e229\",\"e22a\",\"e22b\",\"e22c\",\"e22d\",\"e22e\",\"e22f\",\"e230\",\"e231\",\"e232\",\"e233\",\"eb67\",\"e06b\",\"ea54\",\"e3a6\",\"e3a7\",\"e3a8\",\"e3a9\",\"e3aa\",\"e3ab\",\"e3ac\",\"e1ab\",\"e1ac\",\"e1ad\",\"e1ae\",\"f8f8\",\"f8f9\",\"e3ad\",\"ebd1\",\"ef47\",\"e7cf\",\"ea73\",\"e3ae\",\"e6dd\",\"e868\",\"e869\",\"ef48\",\"e591\",\"e43c\",\"e98f\",\"e0af\",\"eb3f\",\"e589\",\"efe6\",\"e86a\",\"e7e9\",\"ea5f\",\"ebcc\",\"e935\",\"e936\",\"efe7\",\"efe8\",\"e0b0\",\"e0b1\",\"e0b2\",\"e0b3\",\"e0b4\",\"e0e4\",\"e0b5\",\"e0b6\",\"e06c\",\"e3af\",\"e3b0\",\"e8fc\",\"e3b1\",\"efe9\",\"efea\",\"e3b2\",\"e3b3\",\"efeb\",\"ef49\",\"e5c9\",\"e0e9\",\"ea39\",\"ead4\",\"ebf2\",\"ea55\",\"ea56\",\"e8f6\",\"e8f7\",\"e8f8\",\"f1f8\",\"e992\",\"eb40\",\"e307\",\"e308\",\"efec\",\"eab1\",\"e508\",\"e574\",\"ea65\",\"ebba\",\"e0ec\",\"e3b4\",\"e3b5\",\"efed\",\"efee\",\"e585\",\"e2e7\",\"e86b\",\"f19d\",\"e0b7\",\"e0ca\",\"e0cb\",\"e5ca\",\"e834\",\"e835\",\"e86c\",\"e92d\",\"e6b1\",\"e6b3\",\"f19e\",\"e5cb\",\"e5cc\",\"eb41\",\"eb42\",\"e86d\",\"eaae\",\"ef4a\",\"e994\",\"e86e\",\"f21f\",\"f0ff\",\"e14c\",\"e0b8\",\"e5cd\",\"f1cf\",\"e01c\",\"f1dc\",\"e996\",\"e2bd\",\"e2be\",\"e2bf\",\"e2c0\",\"e2c1\",\"e2c2\",\"eb5a\",\"e2c3\",\"e810\",\"e7b0\",\"eaf0\",\"e86f\",\"e4f3\",\"efef\",\"eff0\",\"e3b6\",\"e431\",\"e3b7\",\"e3b8\",\"e0b9\",\"ea4e\",\"e7a2\",\"eaf5\",\"e940\",\"e3b9\",\"e915\",\"e57c\",\"e761\",\"e94d\",\"e30a\",\"e638\",\"e638\",\"f223\",\"e998\",\"e7c9\",\"ea3c\",\"e0d0\",\"f22e\",\"e0cf\",\"e94c\",\"ea71\",\"e0ba\",\"e14d\",\"e14e\",\"e14f\",\"ea8e\",\"e4f8\",\"ea9b\",\"eb37\",\"e074\",\"e3ba\",\"e3bb\",\"eaac\",\"e2ec\",\"e90c\",\"f221\",\"f1d0\",\"e587\",\"f1f7\",\"e150\",\"e2cc\",\"e870\",\"e4f4\",\"eff1\",\"e588\",\"ebe9\",\"e3be\",\"e3bc\",\"e3bd\",\"e3bf\",\"e3c0\",\"e3c1\",\"e3c2\",\"e3c3\",\"e3c4\",\"e3c5\",\"e437\",\"e3c6\",\"e799\",\"eb93\",\"ebc5\",\"eb70\",\"eafa\",\"eaef\",\"eaf1\",\"eaec\",\"eaf7\",\"eafb\",\"eaf9\",\"ec1e\",\"ec1d\",\"ebd5\",\"e99a\",\"e51c\",\"e871\",\"e99b\",\"ead1\",\"e76f\",\"ead3\",\"eff2\",\"eff3\",\"eb9f\",\"e1af\",\"e916\",\"eb77\",\"ea42\",\"e3c7\",\"e872\",\"e92b\",\"e92e\",\"e16c\",\"ea72\",\"eba9\",\"eb9e\",\"eba8\",\"e576\",\"e873\",\"ebb6\",\"f10a\",\"f8f4\",\"e99d\",\"e30b\",\"e30c\",\"e3c8\",\"e30d\",\"e4ff\",\"e1b0\",\"e335\",\"e1ff\",\"e339\",\"e1b1\",\"ebde\",\"e337\",\"e0bb\",\"e0bc\",\"ead5\",\"eb7d\",\"eff4\",\"ea57\",\"e52e\",\"e52f\",\"e532\",\"eff5\",\"e530\",\"eff6\",\"e531\",\"eff7\",\"e532\",\"f10f\",\"e534\",\"eff8\",\"e566\",\"e533\",\"eff9\",\"e534\",\"e535\",\"effa\",\"e536\",\"ef4b\",\"f230\",\"e76e\",\"e610\",\"ea6c\",\"ebc9\",\"eb97\",\"e611\",\"e875\",\"f08c\",\"f08d\",\"f08e\",\"f08f\",\"e612\",\"e611\",\"e643\",\"e644\",\"effb\",\"f19f\",\"f1b0\",\"e30e\",\"e5fa\",\"e7ee\",\"eb62\",\"e0ef\",\"ef4c\",\"e876\",\"e877\",\"e92f\",\"e917\",\"e918\",\"effc\",\"effd\",\"effe\",\"efff\",\"ea50\",\"e509\",\"f090\",\"f091\",\"f000\",\"f001\",\"e151\",\"e25d\",\"e945\",\"e746\",\"e613\",\"e675\",\"e9a1\",\"e76d\",\"e9a2\",\"e9a3\",\"f1b3\",\"ea58\",\"e9a5\",\"e1b2\",\"ea14\",\"f1bf\",\"f002\",\"f003\",\"f004\",\"f1df\",\"ea35\",\"f005\",\"f006\",\"e3c9\",\"e578\",\"e742\",\"e568\",\"e1c5\",\"e745\",\"e525\",\"e950\",\"ef4d\",\"eacc\",\"eac8\",\"e8fb\",\"f21a\",\"eb69\",\"eb1b\",\"ec1c\",\"eb1c\",\"ec1b\",\"eb1d\",\"eb1e\",\"eb1f\",\"f102\",\"f1a0\",\"e0be\",\"e1eb\",\"ebf4\",\"ebf6\",\"ea22\",\"ea23\",\"ea1a\",\"ea1b\",\"ea1c\",\"ea24\",\"ea1d\",\"ea1e\",\"ea1f\",\"ec1a\",\"ea3d\",\"e8fc\",\"e63f\",\"e01d\",\"e000\",\"e001\",\"f1a1\",\"f1ac\",\"ea15\",\"e926\",\"e56d\",\"e878\",\"e614\",\"e615\",\"e616\",\"eb7b\",\"e903\",\"e879\",\"e94f\",\"e7cd\",\"e5ce\",\"e5cf\",\"e01e\",\"e87a\",\"e9a8\",\"e3ca\",\"e3cb\",\"e3cc\",\"e3cb\",\"e3cc\",\"e3cd\",\"e3ce\",\"e3cf\",\"e87b\",\"e4f5\",\"e87c\",\"ef4e\",\"f007\",\"f234\",\"f0c5\",\"ebbc\",\"f1a2\",\"e01f\",\"e020\",\"e57a\",\"e87d\",\"e87e\",\"e87e\",\"ead8\",\"e06d\",\"e06e\",\"f009\",\"e87f\",\"e590\",\"f1f6\",\"ea68\",\"e05d\",\"e061\",\"e05e\",\"e06a\",\"e062\",\"e173\",\"e2c4\",\"e9aa\",\"e4fe\",\"eaf3\",\"ea0e\",\"e2c6\",\"e3d3\",\"e3d0\",\"e3d1\",\"e3d2\",\"e3d4\",\"e3d5\",\"e3d6\",\"e3d7\",\"e3d8\",\"e3d9\",\"e3da\",\"ef4f\",\"eb32\",\"e3db\",\"e3dc\",\"e3dd\",\"e3de\",\"e3df\",\"e152\",\"e94e\",\"eb57\",\"e3e0\",\"e3e2\",\"e3e3\",\"e880\",\"e881\",\"e90d\",\"f1d8\",\"f1a3\",\"ea43\",\"e5dc\",\"ea10\",\"e82b\",\"eb43\",\"e153\",\"eaf8\",\"ef50\",\"e3e4\",\"e3e5\",\"e3e6\",\"e3e7\",\"f00a\",\"f00b\",\"f00c\",\"e539\",\"e7cb\",\"e904\",\"e905\",\"e3e8\",\"ea37\",\"ea38\",\"e882\",\"e883\",\"ebe6\",\"f00d\",\"e00b\",\"f00e\",\"f00f\",\"e818\",\"e2c7\",\"ebbd\",\"eb34\",\"eb83\",\"e2c8\",\"e2c9\",\"e617\",\"eb2c\",\"f222\",\"e167\",\"e4f9\",\"f1f2\",\"ea99\",\"eba0\",\"ebac\",\"e234\",\"e235\",\"e236\",\"e237\",\"e238\",\"e239\",\"e23a\",\"e23b\",\"e23c\",\"e23d\",\"e23e\",\"e23f\",\"e240\",\"e241\",\"e242\",\"e267\",\"eb65\",\"e243\",\"e244\",\"e25e\",\"e245\",\"e246\",\"e247\",\"e248\",\"e249\",\"e249\",\"eaad\",\"e0bf\",\"e154\",\"e056\",\"e057\",\"e058\",\"f187\",\"f200\",\"eb44\",\"e748\",\"e769\",\"e5d0\",\"e5d1\",\"e24a\",\"f010\",\"e927\",\"e30f\",\"e021\",\"f011\",\"ec19\",\"e90e\",\"e749\",\"e155\",\"e884\",\"e908\",\"e7a3\",\"eb68\",\"e58b\",\"10fffd\",\"eb45\",\"f012\",\"f013\",\"f014\",\"e1b3\",\"e1b4\",\"e1b5\",\"e885\",\"e3e9\",\"ea4f\",\"e3ea\",\"e1b8\",\"f205\",\"f015\",\"f016\",\"f017\",\"e3eb\",\"e3ec\",\"e9b0\",\"e7ef\",\"e7f0\",\"e747\",\"e7ad\",\"e886\",\"f233\",\"f018\",\"f019\",\"e9b1\",\"ebcb\",\"f10b\",\"ea59\",\"e052\",\"f01a\",\"f01b\",\"ef51\",\"e3ed\",\"f01c\",\"e3ee\",\"f01d\",\"f01e\",\"e3f1\",\"e3f2\",\"f01f\",\"f020\",\"e310\",\"e311\",\"e33a\",\"e3f3\",\"e1d5\",\"e023\",\"f104\",\"eac2\",\"ec18\",\"ea16\",\"e887\",\"f1c0\",\"e8fd\",\"f021\",\"eb39\",\"f022\",\"f023\",\"e024\",\"e25f\",\"ef52\",\"e888\",\"e888\",\"e50a\",\"e889\",\"ea3e\",\"f17d\",\"eaa6\",\"eb8a\",\"eb8c\",\"e58a\",\"e88a\",\"e9b2\",\"f024\",\"f025\",\"f100\",\"ea09\",\"e014\",\"f108\",\"e947\",\"eb46\",\"e53a\",\"e743\",\"ea5c\",\"ef53\",\"e88b\",\"e88c\",\"ea5b\",\"ea44\",\"f202\",\"e584\",\"e174\",\"e175\",\"eb7e\",\"e902\",\"e88d\",\"e9f4\",\"f10e\",\"e50b\",\"ea69\",\"e3f4\",\"e3f5\",\"f116\",\"e43f\",\"e9b4\",\"e0e0\",\"e0c3\",\"e912\",\"e156\",\"e79b\",\"e909\",\"e88e\",\"e88f\",\"e890\",\"e24b\",\"e26a\",\"e24c\",\"e24d\",\"e24e\",\"e24f\",\"e250\",\"eaca\",\"e251\",\"f092\",\"eb71\",\"eb72\",\"ef54\",\"e7c8\",\"e83b\",\"e179\",\"e1a1\",\"e891\",\"e0c4\",\"e891\",\"e6b8\",\"e583\",\"e3f6\",\"eb7c\",\"eaeb\",\"eaf4\",\"eaf2\",\"eaea\",\"e50c\",\"e842\",\"e73c\",\"eb84\",\"e312\",\"f028\",\"e313\",\"e314\",\"e315\",\"e316\",\"e317\",\"e318\",\"eae0\",\"eae7\",\"e5d3\",\"eae6\",\"ead0\",\"eac3\",\"eac9\",\"eacf\",\"e31a\",\"eadf\",\"eae8\",\"e31b\",\"e31c\",\"e31d\",\"ea45\",\"eb47\",\"e50d\",\"e892\",\"e937\",\"e948\",\"e9b6\",\"e893\",\"eb2f\",\"e3f7\",\"ebd7\",\"e894\",\"e31e\",\"e31f\",\"e320\",\"e321\",\"e5dd\",\"e895\",\"e53b\",\"e53c\",\"f20c\",\"e3f8\",\"e3f9\",\"f21b\",\"f11b\",\"e3fa\",\"f029\",\"e02e\",\"e9b7\",\"e02f\",\"e030\",\"f02a\",\"e518\",\"e0f0\",\"ebfe\",\"e90f\",\"ea9a\",\"e919\",\"e91a\",\"e260\",\"e157\",\"e16f\",\"e438\",\"ea60\",\"e896\",\"e0ee\",\"e0c6\",\"e639\",\"f02b\",\"e53f\",\"e53d\",\"e53e\",\"e53f\",\"e540\",\"e541\",\"e542\",\"e543\",\"e556\",\"e544\",\"ef55\",\"e545\",\"e546\",\"e547\",\"e548\",\"e549\",\"e54a\",\"e54b\",\"e54c\",\"e54d\",\"e54e\",\"e54f\",\"e550\",\"e551\",\"e552\",\"e553\",\"ef56\",\"e554\",\"e555\",\"e555\",\"e556\",\"e557\",\"e558\",\"e559\",\"e7f1\",\"e1b6\",\"e55a\",\"e0c7\",\"e0c8\",\"f1db\",\"e1b7\",\"e897\",\"ef57\",\"e898\",\"e899\",\"f8f3\",\"eade\",\"ea77\",\"ead6\",\"e9ba\",\"e3fc\",\"e3fb\",\"e3fd\",\"e3fe\",\"e3ff\",\"e400\",\"e401\",\"e028\",\"e402\",\"e16d\",\"e89a\",\"f02c\",\"f02d\",\"f235\",\"ea61\",\"ec0b\",\"e158\",\"ec0a\",\"e0e1\",\"e58e\",\"e4eb\",\"f02e\",\"ebe7\",\"f02f\",\"e55b\",\"f030\",\"ef58\",\"e9bb\",\"e9bc\",\"f18b\",\"f189\",\"f18c\",\"f18a\",\"eb9d\",\"e159\",\"e89b\",\"f218\",\"e930\",\"f031\",\"f032\",\"efa7\",\"ebed\",\"f109\",\"f033\",\"ea87\",\"eb4f\",\"e322\",\"e5d2\",\"ea19\",\"e9bd\",\"eb98\",\"e252\",\"e0c9\",\"e0ca\",\"e0cb\",\"e029\",\"ef59\",\"ef5a\",\"e02a\",\"e02b\",\"f204\",\"ea3f\",\"e931\",\"ebf1\",\"f10c\",\"e073\",\"e618\",\"e200\",\"e201\",\"e0e7\",\"f034\",\"f097\",\"e253\",\"e254\",\"f035\",\"ec17\",\"f036\",\"e7ce\",\"f037\",\"f0cf\",\"e263\",\"e57d\",\"e25c\",\"f038\",\"ef5b\",\"eaa2\",\"f039\",\"e403\",\"e7f2\",\"e7f3\",\"eb28\",\"e619\",\"e5d3\",\"ea5d\",\"e5d4\",\"eab2\",\"f03a\",\"e9c0\",\"e9c1\",\"f227\",\"e9c2\",\"e91b\",\"e323\",\"eb61\",\"e168\",\"eb64\",\"e02c\",\"e404\",\"e43a\",\"e501\",\"e9c3\",\"e6df\",\"f1b9\",\"e1b8\",\"ea36\",\"e405\",\"e440\",\"e063\",\"e02e\",\"e02f\",\"e030\",\"e55c\",\"ef5c\",\"e406\",\"e407\",\"e408\",\"e409\",\"e55d\",\"e569\",\"f1ef\",\"f03b\",\"f03c\",\"ec16\",\"e1b9\",\"e640\",\"e61a\",\"ebca\",\"e1ba\",\"ebe4\",\"ebd6\",\"ebe1\",\"e609\",\"e031\",\"eb81\",\"ef5d\",\"e16a\",\"e1bb\",\"f1f1\",\"ea62\",\"f03d\",\"ef5e\",\"ea46\",\"f03e\",\"f8fe\",\"f237\",\"f1a4\",\"ebf0\",\"f1a5\",\"e641\",\"f03f\",\"f1a6\",\"f1a7\",\"f23b\",\"f1d6\",\"f229\",\"eb4e\",\"f1a8\",\"e0cc\",\"f1af\",\"f1d5\",\"ebec\",\"ebf3\",\"e50e\",\"f1e0\",\"f1e1\",\"f1e2\",\"f0fe\",\"e033\",\"e575\",\"f0d1\",\"e06f\",\"e89c\",\"f040\",\"e26c\",\"e399\",\"e004\",\"e7f4\",\"e7f7\",\"e7f5\",\"e7f6\",\"e7f7\",\"e7f8\",\"e1bc\",\"e1bd\",\"eac7\",\"e932\",\"e90a\",\"e9c5\",\"ec15\",\"ebfd\",\"e63a\",\"f0eb\",\"e91c\",\"e89d\",\"f1ce\",\"e89e\",\"e4f6\",\"e89f\",\"e58c\",\"f228\",\"e1ca\",\"ef5f\",\"ea47\",\"f0d2\",\"f1d4\",\"e16e\",\"ebbe\",\"e9c8\",\"e7f9\",\"e8a0\",\"f041\",\"e40a\",\"e925\",\"ebb9\",\"e40b\",\"e40c\",\"e40c\",\"e40d\",\"ef60\",\"e9c9\",\"e9ca\",\"e40e\",\"ef61\",\"e40f\",\"ef62\",\"e50f\",\"ea63\",\"e7fa\",\"f042\",\"f043\",\"e034\",\"e1a2\",\"e035\",\"e036\",\"e0ea\",\"e8a1\",\"ef63\",\"ea8d\",\"eb29\",\"ef64\",\"f1bb\",\"eb50\",\"e7fb\",\"ea21\",\"e7fc\",\"eb58\",\"e8a2\",\"e8a3\",\"e8a3\",\"e8a4\",\"e8a5\",\"e8a5\",\"e8a6\",\"e8a7\",\"e8a8\",\"e8a9\",\"e7fd\",\"e7fe\",\"ea4d\",\"ef65\",\"e9cb\",\"e510\",\"e7ff\",\"e55a\",\"e56a\",\"ef66\",\"ef67\",\"f106\",\"e6da\",\"e63b\",\"f0fa\",\"f0fd\",\"e91d\",\"ead7\",\"e0cd\",\"e324\",\"e61b\",\"e649\",\"e9cc\",\"e9cd\",\"e61c\",\"e61d\",\"e325\",\"e61e\",\"e61f\",\"e620\",\"e326\",\"e0db\",\"e0dc\",\"e327\",\"e0dd\",\"e0de\",\"e410\",\"e411\",\"e412\",\"ef68\",\"ef69\",\"e43b\",\"e413\",\"e432\",\"e433\",\"e434\",\"eb8f\",\"e521\",\"e520\",\"e415\",\"e8aa\",\"e911\",\"e6c4\",\"f044\",\"e6c5\",\"f045\",\"e55e\",\"e767\",\"e763\",\"eb38\",\"e9ce\",\"eaa3\",\"e55f\",\"ea5a\",\"e037\",\"e1c4\",\"e038\",\"e038\",\"e039\",\"ef6a\",\"e906\",\"f047\",\"e03b\",\"e065\",\"e7e6\",\"e7e5\",\"e05f\",\"eb80\",\"f107\",\"e800\",\"f048\",\"f17e\",\"ea17\",\"e801\",\"ebbb\",\"e8ab\",\"eb48\",\"e0ce\",\"e416\",\"ea20\",\"e63c\",\"e336\",\"e646\",\"e8ac\",\"f049\",\"e91e\",\"e0df\",\"f1c5\",\"f04a\",\"f04b\",\"e8ad\",\"e9cf\",\"e645\",\"f0dc\",\"e744\",\"e1d1\",\"ec14\",\"ec13\",\"ea4a\",\"e80b\",\"f1ca\",\"e255\",\"f232\",\"eaa8\",\"f10d\",\"ef6b\",\"e00a\",\"f206\",\"e8ae\",\"e4fc\",\"e8af\",\"eb8b\",\"e03c\",\"e03d\",\"e066\",\"e0cf\",\"e0d0\",\"ef6c\",\"f04c\",\"ea98\",\"f04d\",\"f04e\",\"e03e\",\"e837\",\"e836\",\"e837\",\"e836\",\"e9d1\",\"ea64\",\"eb9c\",\"eb96\",\"e560\",\"f04f\",\"f050\",\"ef6d\",\"e73a\",\"e8b0\",\"ef6e\",\"e03f\",\"e9d2\",\"e91f\",\"eb54\",\"e760\",\"eaa0\",\"e8b1\",\"e15a\",\"f21c\",\"e5d5\",\"f051\",\"e15b\",\"e15c\",\"e15d\",\"e9d3\",\"e067\",\"e9d4\",\"e417\",\"ebfc\",\"e928\",\"e8fe\",\"e040\",\"e9d6\",\"e041\",\"e9d7\",\"e042\",\"e059\",\"e05a\",\"e05b\",\"e9d8\",\"e15e\",\"e15f\",\"e160\",\"f052\",\"e170\",\"e8b2\",\"f22c\",\"f1b6\",\"e9d9\",\"f053\",\"e56c\",\"e561\",\"e8b3\",\"e938\",\"e929\",\"f054\",\"f1f5\",\"e0d1\",\"eba5\",\"eb9b\",\"ec12\",\"ec11\",\"ebcd\",\"f201\",\"e8b4\",\"f1b8\",\"eb49\",\"e418\",\"eaab\",\"e419\",\"e41a\",\"eb99\",\"eba3\",\"e920\",\"eacd\",\"e328\",\"e921\",\"e0e5\",\"f055\",\"e9ad\",\"f1c2\",\"f1c9\",\"ef6f\",\"e51d\",\"e642\",\"ebef\",\"e1cc\",\"e502\",\"f21d\",\"e562\",\"eb3a\",\"e161\",\"e171\",\"eb60\",\"ea11\",\"e2eb\",\"eb5f\",\"e329\",\"e268\",\"e8b5\",\"ea0a\",\"e4fd\",\"e80c\",\"ea4b\",\"e269\",\"ebd0\",\"e1be\",\"e1bf\",\"e1c0\",\"e1c1\",\"ebee\",\"ef70\",\"e0e2\",\"f056\",\"ec08\",\"ebce\",\"e9dd\",\"e623\",\"f057\",\"e1c2\",\"e8b6\",\"ea76\",\"e32a\",\"f058\",\"f059\",\"f05a\",\"e94b\",\"e162\",\"ea78\",\"f05b\",\"e163\",\"ea0c\",\"eadb\",\"f05c\",\"f1b5\",\"ec10\",\"f1b4\",\"e51e\",\"e51f\",\"e811\",\"e812\",\"e813\",\"e0ed\",\"e814\",\"e815\",\"f1ea\",\"e8b8\",\"f05d\",\"e8b9\",\"e8ba\",\"e8bb\",\"e8bd\",\"e8bc\",\"e8bd\",\"e8be\",\"e8bf\",\"e8c0\",\"e8c1\",\"e8c2\",\"e8c3\",\"e8c4\",\"e8c5\",\"e8c6\",\"e8c7\",\"f05e\",\"e1c3\",\"e8c8\",\"ebd3\",\"e80d\",\"e524\",\"f05f\",\"e9e0\",\"eaa9\",\"e8c9\",\"e19e\",\"e8ca\",\"ea9d\",\"f1cc\",\"e8cb\",\"e8cc\",\"eb88\",\"e261\",\"f060\",\"e6e1\",\"f061\",\"e043\",\"e9e1\",\"e43d\",\"f220\",\"ebe5\",\"f0a8\",\"e1c8\",\"e202\",\"ebdf\",\"ebe3\",\"f0ac\",\"e1cd\",\"e1ce\",\"f062\",\"e1cf\",\"e1d0\",\"f0b0\",\"e1d8\",\"e1d9\",\"f063\",\"f064\",\"e1da\",\"f065\",\"f066\",\"f067\",\"eb91\",\"e32b\",\"e624\",\"f068\",\"ea48\",\"f069\",\"e511\",\"e044\",\"e045\",\"e512\",\"e41b\",\"e068\",\"f1c1\",\"f06a\",\"f06b\",\"f06c\",\"e32c\",\"eb4a\",\"eb4b\",\"e625\",\"e626\",\"ea6e\",\"f1c7\",\"e046\",\"e513\",\"e80f\",\"e503\",\"e514\",\"f1b2\",\"e1cb\",\"ec0f\",\"e164\",\"e053\",\"ebf7\",\"e7d3\",\"f1c4\",\"f1e3\",\"e7e4\",\"f1e4\",\"f1e5\",\"eb4c\",\"e256\",\"e66b\",\"ebeb\",\"ebe8\",\"ebea\",\"e32d\",\"e32e\",\"e8cd\",\"e92a\",\"e0d2\",\"e9e4\",\"e8ce\",\"f06d\",\"e9a7\",\"ea30\",\"f1f3\",\"ea51\",\"ea26\",\"ea27\",\"ea28\",\"ea29\",\"ea2a\",\"ebc4\",\"ea33\",\"ea2b\",\"ea34\",\"eae9\",\"ea2c\",\"ea2d\",\"ea2e\",\"f06e\",\"ea2f\",\"ea32\",\"ea31\",\"eb36\",\"ea49\",\"eb66\",\"e9e6\",\"f22b\",\"eb90\",\"f1a9\",\"e838\",\"e83a\",\"f099\",\"e839\",\"f06f\",\"f09a\",\"f0ec\",\"e8d0\",\"e089\",\"e0d3\",\"e0d4\",\"e0d5\",\"e0d6\",\"f1fc\",\"e047\",\"ef71\",\"e0e3\",\"e1db\",\"e8d1\",\"e563\",\"ea12\",\"f070\",\"eb95\",\"e41c\",\"e9e9\",\"e56e\",\"e257\",\"f1ae\",\"e41d\",\"e5d9\",\"e5da\",\"e8d2\",\"f111\",\"e064\",\"e048\",\"ef72\",\"e56f\",\"f071\",\"e81a\",\"e819\",\"f112\",\"e939\",\"e8d3\",\"ef73\",\"f0e2\",\"e515\",\"e049\",\"e0d7\",\"e8d4\",\"e933\",\"e8d5\",\"e8d6\",\"e8d6\",\"e9ec\",\"eb53\",\"eb30\",\"eb59\",\"eb33\",\"eb52\",\"eb56\",\"eb2e\",\"eb35\",\"eb51\",\"e7e1\",\"e7e2\",\"e9ed\",\"e41e\",\"f1d1\",\"f1d2\",\"e41f\",\"eab0\",\"e627\",\"ea18\",\"e628\",\"eaee\",\"e629\",\"f072\",\"f073\",\"f074\",\"e62a\",\"e8d7\",\"e8d7\",\"e8d8\",\"e8d9\",\"ead2\",\"e265\",\"eac6\",\"f101\",\"f1be\",\"e32f\",\"e330\",\"e331\",\"e9ef\",\"e420\",\"ea74\",\"e62b\",\"f1e9\",\"f075\",\"e2e6\",\"ef74\",\"ea6b\",\"eab3\",\"eaaf\",\"eb8e\",\"e564\",\"eadd\",\"e262\",\"e165\",\"eae2\",\"e93a\",\"e93b\",\"e93c\",\"e93d\",\"e93e\",\"e93f\",\"f1c6\",\"e0d8\",\"e421\",\"ea66\",\"e8da\",\"f076\",\"f077\",\"e8db\",\"e816\",\"e9f2\",\"e8dc\",\"e817\",\"e9f3\",\"e8dd\",\"ebdb\",\"ea7e\",\"e62c\",\"e422\",\"e922\",\"e425\",\"e423\",\"f07a\",\"e424\",\"f07b\",\"e426\",\"e79a\",\"ebc8\",\"e264\",\"e8de\",\"e8df\",\"e9f5\",\"e9f6\",\"ea25\",\"e8e0\",\"e427\",\"f1c8\",\"e199\",\"e913\",\"ef75\",\"e332\",\"e8e1\",\"e565\",\"e570\",\"e571\",\"e572\",\"e428\",\"e58d\",\"e579\",\"e8e2\",\"e2db\",\"e8e3\",\"e8e4\",\"e8e4\",\"e8e5\",\"e57b\",\"e1d2\",\"f07c\",\"ebd8\",\"f1aa\",\"e429\",\"f07d\",\"eba6\",\"ebab\",\"eba7\",\"ebaa\",\"eba4\",\"eb9a\",\"e8e6\",\"e8e7\",\"e333\",\"e647\",\"e9f9\",\"eba1\",\"eba2\",\"f1ad\",\"e169\",\"e166\",\"e5d6\",\"e5d7\",\"f236\",\"e0eb\",\"f07e\",\"e923\",\"e075\",\"f0fb\",\"f09b\",\"e9fc\",\"e1e0\",\"e4fa\",\"e138\",\"ebc6\",\"ebcf\",\"ef76\",\"e8e8\",\"e258\",\"e259\",\"e25a\",\"e076\",\"ec0e\",\"ec0d\",\"e949\",\"e62d\",\"e070\",\"f07f\",\"f080\",\"e04a\",\"eb87\",\"e071\",\"e04a\",\"ea75\",\"f081\",\"e04b\",\"e04c\",\"e338\",\"e500\",\"e8e9\",\"e8ea\",\"e8eb\",\"e8ec\",\"e42a\",\"e42a\",\"eb73\",\"e42b\",\"eb74\",\"eb75\",\"e8ed\",\"e8ee\",\"e9fe\",\"eb7f\",\"e8ef\",\"e8f0\",\"e8f1\",\"f114\",\"e8f2\",\"eb85\",\"e8f3\",\"e435\",\"e586\",\"e8f4\",\"e8f5\",\"e62e\",\"e94a\",\"e0d9\",\"ebda\",\"e04d\",\"e79c\",\"e04e\",\"e04f\",\"e050\",\"ea70\",\"e0da\",\"eb7a\",\"e62f\",\"f082\",\"f8ff\",\"e8f6\",\"e8f7\",\"e8f8\",\"e1bc\",\"ebb8\",\"e002\",\"f083\",\"f1b1\",\"e334\",\"e924\",\"eae3\",\"f084\",\"f203\",\"e798\",\"ea00\",\"e176\",\"e766\",\"e42c\",\"e42d\",\"e42e\",\"e436\",\"ea01\",\"e430\",\"ea02\",\"e1c6\",\"e63d\",\"e051\",\"e069\",\"e4f7\",\"e595\",\"eb92\",\"ea81\",\"e16b\",\"f1e6\",\"ea9c\",\"e80e\",\"f1ab\",\"e177\",\"e1bd\",\"f8f5\",\"f8f6\",\"f8f7\",\"e63e\",\"e4ca\",\"e4d9\",\"ef77\",\"f085\",\"eb6a\",\"eb31\",\"e1e1\",\"e648\",\"eb6b\",\"f0fc\",\"e1e2\",\"ead9\",\"f086\",\"f087\",\"ec0c\",\"f088\",\"f1e8\",\"e13e\",\"ea6d\",\"ea9f\",\"e8f9\",\"ec09\",\"e942\",\"e943\",\"e7af\",\"e1a0\",\"ea0d\",\"ea0f\",\"e25b\",\"ef78\",\"f1c3\",\"f089\",\"e8fa\",\"e8ff\",\"eb2d\",\"e900\",\"e56b\"];\n\t\u003c/script\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n\n \u003cstyle\u003e\n body {\n margin: 0;\n padding: 0;\n overflow: hidden;\n }\n\n canvas {\n margin: auto;\n }\n \u003c/style\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e\n\u003c/body\u003e\n\n\u003c/html\u003e\n","artId":"ce0s51kn70rs76qrbelg","libraries":[]},{"id":"ce0s534n70rs76qrben0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce0s51kn70rs76qrbelg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce0s534n70rs76qrbeng","type":2,"text":"let xNum = 10,\n yNum = 10;\nlet canvasSize;\nlet icons = [];\nlet fs;\n\nfunction setup() {\n createCanvas(windowWidth, windowHeight);\n colorMode(HSB, 360, 100, 100, 100);\n\n textAlign(CENTER, CENTER);\n textFont(\"Material Icons\");\n strokeCap(ROUND);\n\tstrokeJoin(ROUND);\n\n yNum = 4;\n fs = height / yNum;\n xNum = floor(width / fs) + 2;\n\n textSize(fs * 0.875);\n\n for (let i = 0; i \u003c xNum; i++) {\n for (let j = 0; j \u003c yNum; j++) {\n icons.push(new Icon(i * fs + fs / 2 - fs, j * fs + fs / 2));\n }\n }\n}\n\nfunction draw() {\n blendMode(BLEND);\n background(0);\n\n blendMode(ADD);\n push();\n translate(0, height / 2 - (fs * yNum) / 2);\n\n for (let i = 0; i \u003c icons.length; i++) {\n icons[i].move();\n\n push();\n noFill();\n stroke(0, 0, 80, 30);\n strokeWeight(1);\n translate(7, 7);\n icons[i].display();\n pop();\n\n push();\n strokeWeight(10);\n stroke(icons[i].color);\n noFill();\n icons[i].display();\n pop();\n\n push();\n stroke(0, 0, 90, 40);\n strokeWeight(2);\n icons[i].display();\n pop();\n }\n\n pop();\n}\n\nclass Icon {\n constructor(tmpX, tmpY) {\n this.x = tmpX;\n this.y = tmpY;\n this.isChanging = false;\n this.count = 0;\n this.maxCount = 60 * random(0.05, 0.5);\n this.color = color(random(360), random(70, 90), random(70, 90), 80);\n\n\t\tthis.mojiInit();\n }\n\n\tmojiInit() {\n\t\tthis.codepoint = random(codes);\n\t\tthis.icon = char(unhex(this.codepoint));\n\t\tthis.mojibakeIndex = floor(random(txt.length));\n\t\tthis.mojibake = txt.slice(this.mojibakeIndex, this.mojibakeIndex + 1);\n\t\tthis.moji = random([true, false]) ? this.icon : this.mojibake;\n\t}\n\n move() {\n this.x++;\n if (this.x \u003e fs * xNum - fs / 2) {\n this.x = -fs / 2;\n }\n\n if (!this.isChanging \u0026\u0026 random(100) \u003c 0.5) {\n this.isChanging = true;\n }\n\n if (this.isChanging) {\n if (frameCount % 4 == 0) {\n this.mojiInit();\n }\n\n this.count++;\n if (this.count \u003e this.maxCount) {\n this.isChanging = false;\n this.count = 0;\n this.maxCount = 60 * random(0.05, 0.5);\n }\n }\n }\n\n display() {\n text(this.moji, this.x, this.y);\n }\n}\n","artId":"ce0s51kn70rs76qrbelg","libraries":[]}],"like":0,"thumbFileName":"ce0s51kn70rs76qrbelg.png","selectedThumbFileName":"ce0s51kn70rs76qrbelg.png","thumbnailFileUrl":"","resourceFileName":"ce0s51kn70rs76qrbelg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZM9heFA9pej9ytypGNH8w8KmNwaKs2GyCtfYUVfgPqz8","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"bne4dlk3p9f5erb52j0g","name":"generative"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce0pebcn70rqdtr2l9r0","title":"昨日までの世界","description":"昨日までの記憶が不規律に混ざり合っている。\n過ぎ去りし時の一切は思い出す度に形を変えて、確らしさを失っていく。\n\nMemories of yesterday are mingled in an undisciplined manner.\nEvery time I recall anything from the past, it changes form and loses its certainty.","createdAt":1669437253,"updatedAt":1669437253,"user":{"id":"3EIcVpQDG2eKZxO9UeiKcqICDOj2","customId":"shotashimura","name":"志村翔太","biography":"ずっと念じ続けた未来はいつか運命となって自分を導いてくれる","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/3EIcVpQDG2eKZxO9UeiKcqICDOj2.png","createdAt":1669434806877,"updatedAt":1699794359049},"codes":[],"like":5,"thumbFileName":"","selectedThumbFileName":"ce0pebcn70rqdtr2l9r0.jpg","thumbnailFileUrl":"","resourceFileName":"ce0pebcn70rqdtr2l9r0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmav84zPKA4mBNKN9omHdGpxVDURLzVybsMsHDNPFMEfsa","resourceType":2,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdvlfakn70rqdtr2l200","title":"NEORT++ (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221124","createdAt":1669289922,"updatedAt":1669289922,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"cdvlfakn70rqdtr2l200.png","thumbnailFileUrl":"","resourceFileName":"cdvlfakn70rqdtr2l200.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmd8Zo4bsKkf7QPh676YWXzbc11scGujZBNeASWBmhBq8r","resourceType":2,"metadataUrl":"","tags":[{"id":"bmjc0643p9f7m1g01ebg","name":"openFrameworks"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdt13dcn70rqdtr2k7r0","title":"Puzzled Picture (circular)","description":"Grids of squares with simple line patterns are laid out. The closed shapes formed by the lines are filled with color. Every 2 seconds (unless there is a processing delay 😅), one randomly selected grid is rotated 90 degrees, which changes the overall pattern. The left and right sides of the picture are looped.\n\nThis work is a modification of an older work that can be seamlessly projected and displayed 360 degrees on all four walls.","createdAt":1668944350,"updatedAt":1670035255,"user":{"id":"Kiz7VIowEkUqUJNuzjLKUPpLxqs1","customId":"Kiz7VIowEkUqUJNuzjLKUPpLxqs1","name":"3","biography":"https://www.drawinghell.com\nAlias:neort.io/@Hu2sBEJ9QrXHcZ1FsX6Lny8d5YJ2","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/Kiz7VIowEkUqUJNuzjLKUPpLxqs1.png","createdAt":1668916528748,"updatedAt":1735597596405},"codes":[{"id":"cdt13e4n70rqdtr2k7s0","type":0,"text":"\u003c!DOCTYPE html\u003e\r\n\u003chtml\u003e\r\n \u003chead\u003e\r\n \u003ctitle\u003ePuzzled Picture (circular)\u003c/title\u003e\r\n \u003cmeta charset=\"utf-8\" /\u003e\r\n \u003c/head\u003e\r\n \u003cbody\u003e\r\n \u003c/body\u003e\r\n\u003c/html\u003e\r\n","artId":"cdt13dcn70rqdtr2k7r0","libraries":[]},{"id":"cdt13e4n70rqdtr2k7sg","type":1,"text":"* {\n margin: 0px;\n padding: 0px;\n}\n\nhtml, body {\n display: flex;\n flex-direction: column;\n justify-content: center;\n align-items: center;\n width: 100%;\n height: 100%;\n overflow: hidden;\n background-color: #404040;\n}\n\ncanvas {\n margin: 0px auto;\n}","artId":"cdt13dcn70rqdtr2k7r0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cdt13e4n70rqdtr2k7t0","type":2,"text":"(()=\u003e{\"use strict\";var a={936:(a,s)=\u003e{Object.defineProperty(s,\"__esModule\",{value:!0}),s.allColors=void 0,s.allColors=[{rgb:[238,234,231],hsv:[25.7,0,.9],sat:14,val:703},{rgb:[236,224,223],hsv:[4.6,.1,.9],sat:26,val:683},{rgb:[239,227,216],hsv:[28.7,.1,.9],sat:46,val:682},{rgb:[240,222,219],hsv:[8.6,.1,.9],sat:42,val:681},{rgb:[243,221,215],hsv:[12.9,.1,1],sat:56,val:679},{rgb:[242,220,214],hsv:[12.9,.1,.9],sat:56,val:676},{rgb:[238,233,204],hsv:[51.2,.1,.9],sat:68,val:675},{rgb:[233,231,211],hsv:[54.5,.1,.9],sat:44,val:675},{rgb:[243,222,209],hsv:[22.9,.1,1],sat:68,val:674},{rgb:[233,231,209],hsv:[55,.1,.9],sat:48,val:673},{rgb:[221,228,224],hsv:[145.7,0,.9],sat:14,val:673},{rgb:[239,231,203],hsv:[46.7,.2,.9],sat:72,val:673},{rgb:[236,215,221],hsv:[342.9,.1,.9],sat:42,val:672},{rgb:[229,234,208],hsv:[71.5,.1,.9],sat:52,val:671},{rgb:[241,224,206],hsv:[30.9,.1,.9],sat:70,val:671},{rgb:[247,234,186],hsv:[47.2,.2,1],sat:122,val:667},{rgb:[241,225,200],hsv:[36.6,.2,.9],sat:82,val:666},{rgb:[213,230,222],hsv:[151.8,.1,.9],sat:34,val:665},{rgb:[216,226,223],hsv:[162,0,.9],sat:20,val:665},{rgb:[232,230,202],hsv:[56,.1,.9],sat:60,val:664},{rgb:[238,231,194],hsv:[50.5,.2,.9],sat:88,val:663},{rgb:[217,231,215],hsv:[112.5,.1,.9],sat:32,val:663},{rgb:[213,223,227],hsv:[197.1,.1,.9],sat:28,val:663},{rgb:[242,219,201],hsv:[26.3,.2,.9],sat:82,val:662},{rgb:[242,211,209],hsv:[3.6,.1,.9],sat:66,val:662},{rgb:[224,217,221],hsv:[325.7,0,.9],sat:14,val:662},{rgb:[237,236,189],hsv:[58.8,.2,.9],sat:96,val:662},{rgb:[252,234,173],hsv:[46.3,.3,1],sat:158,val:659},{rgb:[245,207,207],hsv:[0,.2,1],sat:76,val:659},{rgb:[244,216,199],hsv:[22.7,.2,1],sat:90,val:659},{rgb:[243,214,202],hsv:[17.6,.2,1],sat:82,val:659},{rgb:[242,225,191],hsv:[40,.2,.9],sat:102,val:658},{rgb:[213,219,226],hsv:[212.3,.1,.9],sat:26,val:658},{rgb:[239,232,187],hsv:[51.9,.2,.9],sat:104,val:658},{rgb:[242,220,195],hsv:[31.9,.2,.9],sat:94,val:657},{rgb:[219,213,224],hsv:[272.7,0,.9],sat:22,val:656},{rgb:[215,216,225],hsv:[234,0,.9],sat:20,val:656},{rgb:[244,214,198],hsv:[20.9,.2,1],sat:92,val:656},{rgb:[244,212,199],hsv:[17.3,.2,1],sat:90,val:655},{rgb:[239,214,199],hsv:[22.5,.2,.9],sat:80,val:652},{rgb:[248,206,198],hsv:[9.6,.2,1],sat:100,val:652},{rgb:[203,228,220],hsv:[160.8,.1,.9],sat:50,val:651},{rgb:[239,204,208],hsv:[353.1,.1,.9],sat:70,val:651},{rgb:[204,225,220],hsv:[165.7,.1,.9],sat:42,val:649},{rgb:[223,209,217],hsv:[325.7,.1,.9],sat:28,val:649},{rgb:[239,195,214],hsv:[334.1,.2,.9],sat:88,val:648},{rgb:[216,231,201],hsv:[90,.1,.9],sat:60,val:648},{rgb:[241,228,178],hsv:[47.6,.3,.9],sat:126,val:647},{rgb:[199,225,223],hsv:[175.4,.1,.9],sat:52,val:647},{rgb:[234,216,197],hsv:[30.8,.2,.9],sat:74,val:647},{rgb:[240,234,172],hsv:[54.7,.3,.9],sat:136,val:646},{rgb:[211,230,205],hsv:[105.6,.1,.9],sat:50,val:646},{rgb:[219,202,224],hsv:[286.4,.1,.9],sat:44,val:645},{rgb:[249,198,198],hsv:[0,.2,1],sat:102,val:645},{rgb:[204,213,227],hsv:[216.5,.1,.9],sat:46,val:644},{rgb:[203,213,228],hsv:[216,.1,.9],sat:50,val:644},{rgb:[254,225,164],hsv:[40.7,.4,1],sat:180,val:643},{rgb:[249,209,185],hsv:[22.5,.3,1],sat:128,val:643},{rgb:[224,226,193],hsv:[63.6,.1,.9],sat:66,val:643},{rgb:[202,218,222],hsv:[192,.1,.9],sat:40,val:642},{rgb:[245,212,184],hsv:[27.5,.2,1],sat:122,val:641},{rgb:[196,227,218],hsv:[162.6,.1,.9],sat:62,val:641},{rgb:[245,203,193],hsv:[11.5,.2,1],sat:104,val:641},{rgb:[234,215,190],hsv:[34.1,.2,.9],sat:88,val:639},{rgb:[244,235,159],hsv:[53.6,.3,1],sat:170,val:638},{rgb:[199,227,210],hsv:[143.6,.1,.9],sat:56,val:636},{rgb:[204,206,226],hsv:[234.5,.1,.9],sat:44,val:636},{rgb:[197,212,226],hsv:[209,.1,.9],sat:58,val:635},{rgb:[191,227,217],hsv:[163.3,.2,.9],sat:72,val:635},{rgb:[234,233,168],hsv:[59.1,.3,.9],sat:132,val:635},{rgb:[211,200,223],hsv:[268.7,.1,.9],sat:46,val:634},{rgb:[250,189,195],hsv:[354.1,.2,1],sat:122,val:634},{rgb:[240,184,210],hsv:[332.1,.2,.9],sat:112,val:634},{rgb:[255,226,153],hsv:[42.9,.4,1],sat:204,val:634},{rgb:[241,187,205],hsv:[340,.2,.9],sat:108,val:633},{rgb:[210,224,198],hsv:[92.3,.1,.9],sat:52,val:632},{rgb:[217,214,199],hsv:[50,.1,.9],sat:36,val:630},{rgb:[247,176,207],hsv:[333.8,.3,1],sat:142,val:630},{rgb:[230,203,197],hsv:[10.9,.1,.9],sat:66,val:630},{rgb:[197,206,226],hsv:[221.4,.1,.9],sat:58,val:629},{rgb:[203,230,195],hsv:[106.3,.2,.9],sat:70,val:628},{rgb:[255,221,152],hsv:[40.2,.4,1],sat:206,val:628},{rgb:[216,218,193],hsv:[64.8,.1,.9],sat:50,val:627},{rgb:[184,222,221],hsv:[178.4,.2,.9],sat:76,val:627},{rgb:[249,194,182],hsv:[10.7,.3,1],sat:134,val:625},{rgb:[206,195,224],hsv:[262.8,.1,.9],sat:58,val:625},{rgb:[208,197,218],hsv:[271.4,.1,.9],sat:42,val:623},{rgb:[224,188,210],hsv:[323.3,.2,.9],sat:72,val:622},{rgb:[253,227,140],hsv:[46.2,.4,1],sat:226,val:620},{rgb:[255,216,149],hsv:[37.9,.4,1],sat:212,val:620},{rgb:[246,165,208],hsv:[328.1,.3,1],sat:162,val:619},{rgb:[254,192,173],hsv:[14.1,.3,1],sat:162,val:619},{rgb:[248,184,187],hsv:[357.2,.3,1],sat:128,val:619},{rgb:[186,225,206],hsv:[150.8,.2,.9],sat:78,val:617},{rgb:[252,188,177],hsv:[8.8,.3,1],sat:150,val:617},{rgb:[243,233,141],hsv:[54.1,.4,1],sat:204,val:617},{rgb:[234,238,144],hsv:[62.6,.4,.9],sat:188,val:616},{rgb:[222,219,175],hsv:[56.2,.2,.9],sat:94,val:616},{rgb:[244,225,146],hsv:[48.4,.4,1],sat:196,val:615},{rgb:[181,207,227],hsv:[206.1,.2,.9],sat:92,val:615},{rgb:[203,189,222],hsv:[265.5,.1,.9],sat:66,val:614},{rgb:[244,175,194],hsv:[343.5,.3,1],sat:138,val:613},{rgb:[248,211,153],hsv:[36.6,.4,1],sat:190,val:612},{rgb:[173,225,213],hsv:[166.2,.2,.9],sat:104,val:611},{rgb:[212,185,214],hsv:[295.9,.1,.8],sat:58,val:611},{rgb:[255,200,156],hsv:[26.7,.4,1],sat:198,val:611},{rgb:[253,180,177],hsv:[2.4,.3,1],sat:152,val:610},{rgb:[200,204,205],hsv:[192,0,.8],sat:10,val:609},{rgb:[189,211,208],hsv:[171.8,.1,.8],sat:44,val:608},{rgb:[240,182,186],hsv:[355.9,.2,.9],sat:116,val:608},{rgb:[255,182,169],hsv:[9.1,.3,1],sat:172,val:606},{rgb:[179,210,215],hsv:[188.3,.2,.8],sat:72,val:604},{rgb:[241,235,128],hsv:[56.8,.5,.9],sat:226,val:604},{rgb:[255,173,175],hsv:[358.5,.3,1],sat:164,val:603},{rgb:[237,188,176],hsv:[11.8,.3,.9],sat:122,val:601},{rgb:[252,163,185],hsv:[345.2,.4,1],sat:178,val:600},{rgb:[224,229,146],hsv:[63.6,.4,.9],sat:166,val:599},{rgb:[255,175,168],hsv:[4.8,.3,1],sat:174,val:598},{rgb:[245,164,188],hsv:[342.2,.3,1],sat:162,val:597},{rgb:[241,163,193],hsv:[336.9,.3,.9],sat:156,val:597},{rgb:[197,180,220],hsv:[265.5,.2,.9],sat:80,val:597},{rgb:[252,207,137],hsv:[36.5,.5,1],sat:230,val:596},{rgb:[215,233,148],hsv:[72.7,.4,.9],sat:170,val:596},{rgb:[252,197,147],hsv:[28.6,.4,1],sat:210,val:596},{rgb:[217,231,147],hsv:[70,.4,.9],sat:168,val:595},{rgb:[210,182,202],hsv:[317.1,.1,.8],sat:56,val:594},{rgb:[250,213,130],hsv:[41.5,.5,1],sat:240,val:593},{rgb:[244,231,118],hsv:[53.8,.5,1],sat:252,val:593},{rgb:[254,182,156],hsv:[15.9,.4,1],sat:196,val:592},{rgb:[207,188,197],hsv:[331.6,.1,.8],sat:38,val:592},{rgb:[190,184,218],hsv:[250.6,.2,.9],sat:68,val:592},{rgb:[248,156,185],hsv:[341.1,.4,1],sat:184,val:589},{rgb:[164,212,213],hsv:[181.2,.2,.8],sat:98,val:589},{rgb:[197,176,215],hsv:[272.3,.2,.8],sat:78,val:588},{rgb:[247,219,122],hsv:[46.6,.5,1],sat:250,val:588},{rgb:[247,221,119],hsv:[47.8,.5,1],sat:256,val:587},{rgb:[219,234,133],hsv:[68.9,.4,.9],sat:202,val:586},{rgb:[217,173,196],hsv:[328.6,.2,.9],sat:88,val:586},{rgb:[243,247,95],hsv:[61.6,.6,1],sat:304,val:585},{rgb:[197,173,215],hsv:[274.3,.2,.8],sat:84,val:585},{rgb:[255,188,141],hsv:[24.7,.4,1],sat:228,val:584},{rgb:[255,181,147],hsv:[18.9,.4,1],sat:216,val:583},{rgb:[195,164,224],hsv:[271,.3,.9],sat:120,val:583},{rgb:[232,184,166],hsv:[16.4,.3,.9],sat:132,val:582},{rgb:[201,196,183],hsv:[43.3,.1,.8],sat:36,val:580},{rgb:[255,210,114],hsv:[40.9,.6,1],sat:282,val:579},{rgb:[169,206,204],hsv:[176.8,.2,.8],sat:74,val:579},{rgb:[232,169,178],hsv:[351.4,.3,.9],sat:126,val:579},{rgb:[183,227,168],hsv:[104.7,.3,.9],sat:118,val:578},{rgb:[247,152,179],hsv:[342.9,.4,1],sat:190,val:578},{rgb:[149,208,221],hsv:[190.8,.3,.9],sat:144,val:578},{rgb:[253,172,152],hsv:[11.9,.4,1],sat:202,val:577},{rgb:[255,166,156],hsv:[6.1,.4,1],sat:198,val:577},{rgb:[248,142,187],hsv:[334.5,.4,1],sat:212,val:577},{rgb:[224,228,124],hsv:[62.3,.5,.9],sat:208,val:576},{rgb:[252,154,170],hsv:[350.2,.4,1],sat:196,val:576},{rgb:[252,191,133],hsv:[29.2,.5,1],sat:238,val:576},{rgb:[255,185,135],hsv:[25,.5,1],sat:240,val:575},{rgb:[202,228,144],hsv:[78.6,.4,.9],sat:168,val:574},{rgb:[180,225,168],hsv:[107.4,.3,.9],sat:114,val:573},{rgb:[138,218,216],hsv:[178.5,.4,.9],sat:160,val:572},{rgb:[148,212,212],hsv:[180,.3,.8],sat:128,val:572},{rgb:[147,207,218],hsv:[189.3,.3,.9],sat:142,val:572},{rgb:[248,224,100],hsv:[50.3,.6,1],sat:296,val:572},{rgb:[243,170,155],hsv:[10.2,.4,1],sat:176,val:568},{rgb:[255,159,154],hsv:[3,.4,1],sat:202,val:568},{rgb:[141,210,217],hsv:[185.5,.4,.9],sat:152,val:568},{rgb:[177,219,171],hsv:[112.5,.2,.9],sat:96,val:567},{rgb:[255,184,128],hsv:[26.5,.5,1],sat:254,val:567},{rgb:[214,191,162],hsv:[33.5,.2,.8],sat:104,val:567},{rgb:[159,187,220],hsv:[212.5,.3,.9],sat:122,val:566},{rgb:[171,215,180],hsv:[132.3,.2,.8],sat:88,val:566},{rgb:[255,179,130],hsv:[23.5,.5,1],sat:250,val:564},{rgb:[188,196,180],hsv:[90,.1,.8],sat:32,val:564},{rgb:[255,111,197],hsv:[324.2,.6,1],sat:288,val:563},{rgb:[180,164,219],hsv:[257.5,.3,.9],sat:110,val:563},{rgb:[246,146,171],hsv:[345,.4,1],sat:200,val:563},{rgb:[197,166,200],hsv:[294.7,.2,.8],sat:68,val:563},{rgb:[228,210,124],hsv:[49.6,.5,.9],sat:208,val:562},{rgb:[153,193,216],hsv:[201.9,.3,.8],sat:126,val:562},{rgb:[255,145,162],hsv:[350.7,.4,1],sat:220,val:562},{rgb:[255,167,140],hsv:[14.1,.5,1],sat:230,val:562},{rgb:[203,165,193],hsv:[315.8,.2,.8],sat:76,val:561},{rgb:[212,176,172],hsv:[6,.2,.8],sat:80,val:560},{rgb:[197,160,203],hsv:[291.6,.2,.8],sat:86,val:560},{rgb:[253,203,103],hsv:[40,.6,1],sat:300,val:559},{rgb:[210,206,143],hsv:[56.4,.3,.8],sat:134,val:559},{rgb:[225,160,172],hsv:[348.9,.3,.9],sat:130,val:557},{rgb:[201,229,127],hsv:[76.5,.4,.9],sat:204,val:557},{rgb:[139,194,224],hsv:[201.2,.4,.9],sat:170,val:557},{rgb:[133,216,207],hsv:[173.5,.4,.8],sat:166,val:556},{rgb:[243,237,76],hsv:[57.8,.7,1],sat:334,val:556},{rgb:[255,99,201],hsv:[320.8,.6,1],sat:312,val:555},{rgb:[192,166,196],hsv:[292,.2,.8],sat:60,val:554},{rgb:[193,222,139],hsv:[81,.4,.9],sat:166,val:554},{rgb:[255,138,161],hsv:[348.2,.5,1],sat:234,val:554},{rgb:[244,143,167],hsv:[345.7,.4,1],sat:202,val:554},{rgb:[165,215,174],hsv:[130.8,.2,.8],sat:100,val:554},{rgb:[158,203,192],hsv:[165.3,.2,.8],sat:90,val:553},{rgb:[250,216,86],hsv:[47.6,.7,1],sat:328,val:552},{rgb:[241,150,160],hsv:[353.4,.4,.9],sat:182,val:551},{rgb:[245,131,174],hsv:[337.4,.5,1],sat:228,val:550},{rgb:[255,193,102],hsv:[35.7,.6,1],sat:306,val:550},{rgb:[189,185,176],hsv:[41.5,.1,.7],sat:26,val:550},{rgb:[145,183,222],hsv:[210.4,.3,.9],sat:154,val:550},{rgb:[255,184,111],hsv:[30.4,.6,1],sat:288,val:550},{rgb:[189,214,145],hsv:[81.7,.3,.8],sat:138,val:548},{rgb:[193,157,198],hsv:[292.7,.2,.8],sat:82,val:548},{rgb:[209,153,185],hsv:[325.7,.3,.8],sat:112,val:547},{rgb:[163,222,162],hsv:[119,.3,.9],sat:120,val:547},{rgb:[207,145,194],hsv:[312.6,.3,.8],sat:124,val:546},{rgb:[123,206,217],hsv:[187,.4,.9],sat:188,val:546},{rgb:[193,139,213],hsv:[283.8,.3,.8],sat:148,val:545},{rgb:[181,183,181],hsv:[120,0,.7],sat:4,val:545},{rgb:[255,106,184],hsv:[328.6,.6,1],sat:298,val:545},{rgb:[255,154,135],hsv:[9.5,.5,1],sat:240,val:544},{rgb:[255,157,132],hsv:[12.2,.5,1],sat:246,val:544},{rgb:[184,186,173],hsv:[69.2,.1,.7],sat:26,val:543},{rgb:[125,216,202],hsv:[170.8,.4,.8],sat:182,val:543},{rgb:[255,172,116],hsv:[24.2,.5,1],sat:278,val:543},{rgb:[164,173,206],hsv:[227.1,.2,.8],sat:84,val:543},{rgb:[255,150,138],hsv:[6.2,.5,1],sat:234,val:543},{rgb:[172,219,152],hsv:[102.1,.3,.9],sat:134,val:543},{rgb:[255,116,171],hsv:[336.3,.5,1],sat:278,val:542},{rgb:[132,186,223],hsv:[204.4,.4,.9],sat:182,val:541},{rgb:[209,212,120],hsv:[62,.4,.8],sat:184,val:541},{rgb:[126,197,218],hsv:[193.7,.4,.9],sat:184,val:541},{rgb:[249,228,63],hsv:[53.2,.7,1],sat:372,val:540},{rgb:[246,230,63],hsv:[54.8,.7,1],sat:366,val:539},{rgb:[131,197,211],hsv:[190.5,.4,.8],sat:160,val:539},{rgb:[216,155,168],hsv:[347.2,.3,.8],sat:122,val:539},{rgb:[180,213,145],hsv:[89.1,.3,.8],sat:136,val:538},{rgb:[113,212,213],hsv:[180.6,.5,.8],sat:200,val:538},{rgb:[232,200,106],hsv:[44.8,.5,.9],sat:252,val:538},{rgb:[162,185,191],hsv:[192.4,.2,.7],sat:58,val:538},{rgb:[175,151,212],hsv:[263.6,.3,.8],sat:122,val:538},{rgb:[244,231,63],hsv:[55.7,.7,1],sat:362,val:538},{rgb:[168,164,206],hsv:[245.7,.2,.8],sat:84,val:538},{rgb:[240,112,185],hsv:[325.8,.5,.9],sat:256,val:537},{rgb:[220,224,93],hsv:[61.8,.6,.9],sat:262,val:537},{rgb:[148,196,193],hsv:[176.3,.2,.8],sat:96,val:537},{rgb:[163,167,207],hsv:[234.5,.2,.8],sat:88,val:537},{rgb:[126,187,223],hsv:[202.3,.4,.9],sat:194,val:536},{rgb:[187,168,181],hsv:[318.9,.1,.7],sat:38,val:536},{rgb:[115,216,205],hsv:[173.5,.5,.8],sat:202,val:536},{rgb:[136,179,221],hsv:[209.6,.4,.9],sat:170,val:536},{rgb:[147,210,178],hsv:[149.5,.3,.8],sat:126,val:535},{rgb:[193,221,120],hsv:[76.6,.5,.9],sat:202,val:534},{rgb:[145,187,201],hsv:[195,.3,.8],sat:112,val:533},{rgb:[226,209,98],hsv:[52,.6,.9],sat:256,val:533},{rgb:[174,178,181],hsv:[205.7,0,.7],sat:14,val:533},{rgb:[222,123,186],hsv:[321.8,.4,.9],sat:198,val:531},{rgb:[122,203,206],hsv:[182.1,.4,.8],sat:168,val:531},{rgb:[201,210,119],hsv:[65.9,.4,.8],sat:182,val:530},{rgb:[214,149,167],hsv:[343.4,.3,.8],sat:130,val:530},{rgb:[173,185,172],hsv:[115.4,.1,.7],sat:26,val:530},{rgb:[206,133,191],hsv:[312.3,.4,.8],sat:146,val:530},{rgb:[203,186,141],hsv:[43.5,.3,.8],sat:124,val:530},{rgb:[249,130,151],hsv:[349.4,.5,1],sat:238,val:530},{rgb:[207,167,155],hsv:[13.8,.3,.8],sat:104,val:529},{rgb:[207,167,155],hsv:[13.8,.3,.8],sat:104,val:529},{rgb:[226,136,167],hsv:[339.3,.4,.9],sat:180,val:529},{rgb:[134,190,205],hsv:[192.7,.3,.8],sat:142,val:529},{rgb:[238,133,157],hsv:[346.3,.4,.9],sat:210,val:528},{rgb:[193,167,168],hsv:[357.7,.1,.8],sat:52,val:528},{rgb:[182,183,163],hsv:[63,.1,.7],sat:40,val:528},{rgb:[255,120,153],hsv:[345.3,.5,1],sat:270,val:528},{rgb:[200,179,148],hsv:[35.8,.3,.8],sat:104,val:527},{rgb:[111,213,203],hsv:[174.1,.5,.8],sat:204,val:527},{rgb:[177,132,217],hsv:[271.8,.4,.9],sat:170,val:526},{rgb:[241,146,139],hsv:[4.1,.4,.9],sat:204,val:526},{rgb:[211,204,111],hsv:[55.8,.5,.8],sat:200,val:526},{rgb:[248,119,158],hsv:[341.9,.5,1],sat:258,val:525},{rgb:[158,179,188],hsv:[198,.2,.7],sat:60,val:525},{rgb:[169,146,209],hsv:[261.9,.3,.8],sat:126,val:524},{rgb:[204,150,170],hsv:[337.8,.3,.8],sat:108,val:524},{rgb:[158,182,184],hsv:[184.6,.1,.7],sat:52,val:524},{rgb:[171,170,182],hsv:[245,.1,.7],sat:24,val:523},{rgb:[157,184,181],hsv:[173.3,.1,.7],sat:54,val:522},{rgb:[195,170,157],hsv:[20.5,.2,.8],sat:76,val:522},{rgb:[181,161,180],hsv:[303,.1,.7],sat:40,val:522},{rgb:[185,161,175],hsv:[325,.1,.7],sat:48,val:521},{rgb:[218,115,188],hsv:[317.5,.5,.9],sat:206,val:521},{rgb:[154,214,153],hsv:[119,.3,.8],sat:122,val:521},{rgb:[112,187,221],hsv:[198.7,.5,.9],sat:218,val:520},{rgb:[241,111,168],hsv:[333.7,.5,.9],sat:260,val:520},{rgb:[195,220,104],hsv:[72.9,.5,.9],sat:232,val:519},{rgb:[185,166,168],hsv:[353.7,.1,.7],sat:38,val:519},{rgb:[198,187,133],hsv:[49.8,.3,.8],sat:130,val:518},{rgb:[116,179,223],hsv:[204.7,.5,.9],sat:214,val:518},{rgb:[254,207,57],hsv:[45.7,.8,1],sat:394,val:518},{rgb:[118,194,206],hsv:[188.2,.4,.8],sat:176,val:518},{rgb:[255,149,114],hsv:[14.9,.6,1],sat:282,val:518},{rgb:[249,115,153],hsv:[343,.5,1],sat:268,val:517},{rgb:[154,185,178],hsv:[166.5,.2,.7],sat:62,val:517},{rgb:[220,223,74],hsv:[61.2,.7,.9],sat:298,val:517},{rgb:[163,169,185],hsv:[223.6,.1,.7],sat:44,val:517},{rgb:[236,105,176],hsv:[327.5,.6,.9],sat:262,val:517},{rgb:[213,150,154],hsv:[356.2,.3,.8],sat:126,val:517},{rgb:[231,200,85],hsv:[47.3,.6,.9],sat:292,val:516},{rgb:[224,128,164],hsv:[337.5,.4,.9],sat:192,val:516},{rgb:[172,159,185],hsv:[270,.1,.7],sat:52,val:516},{rgb:[255,143,118],hsv:[10.9,.5,1],sat:274,val:516},{rgb:[255,154,106],hsv:[19.3,.6,1],sat:298,val:515},{rgb:[236,183,96],hsv:[37.3,.6,.9],sat:280,val:515},{rgb:[185,139,191],hsv:[293.1,.3,.7],sat:104,val:515},{rgb:[182,182,151],hsv:[60,.2,.7],sat:62,val:515},{rgb:[101,212,201],hsv:[174.1,.5,.8],sat:222,val:514},{rgb:[156,182,176],hsv:[166.2,.1,.7],sat:52,val:514},{rgb:[138,209,166],hsv:[143.7,.3,.8],sat:142,val:513},{rgb:[143,219,151],hsv:[126.3,.3,.9],sat:152,val:513},{rgb:[103,213,197],hsv:[171.3,.5,.8],sat:220,val:513},{rgb:[162,174,177],hsv:[192,.1,.7],sat:30,val:513},{rgb:[186,175,151],hsv:[41.1,.2,.7],sat:70,val:512},{rgb:[103,187,222],hsv:[197.6,.5,.9],sat:238,val:512},{rgb:[128,203,181],hsv:[162.4,.4,.8],sat:150,val:512},{rgb:[130,192,190],hsv:[178.1,.3,.8],sat:124,val:512},{rgb:[255,190,67],hsv:[39.3,.7,1],sat:376,val:512},{rgb:[210,146,156],hsv:[350.6,.3,.8],sat:128,val:512},{rgb:[225,107,179],hsv:[323.4,.5,.9],sat:236,val:511},{rgb:[181,167,163],hsv:[13.3,.1,.7],sat:36,val:511},{rgb:[194,150,167],hsv:[336.8,.2,.8],sat:88,val:511},{rgb:[131,193,186],hsv:[173.2,.3,.8],sat:124,val:510},{rgb:[167,178,164],hsv:[107.1,.1,.7],sat:28,val:509},{rgb:[107,217,185],hsv:[162.5,.5,.9],sat:220,val:509},{rgb:[176,155,178],hsv:[294.8,.1,.7],sat:46,val:509},{rgb:[195,145,169],hsv:[331.2,.3,.8],sat:100,val:509},{rgb:[233,109,167],hsv:[331.9,.5,.9],sat:248,val:509},{rgb:[248,187,73],hsv:[39.1,.7,1],sat:350,val:508},{rgb:[229,126,153],hsv:[344.3,.4,.9],sat:206,val:508},{rgb:[229,144,135],hsv:[5.7,.4,.9],sat:188,val:508},{rgb:[147,207,154],hsv:[127,.3,.8],sat:120,val:508},{rgb:[130,183,195],hsv:[191.1,.3,.8],sat:130,val:508},{rgb:[236,122,150],hsv:[345.3,.5,.9],sat:228,val:508},{rgb:[131,155,221],hsv:[224,.4,.9],sat:180,val:507},{rgb:[182,203,121],hsv:[75.4,.4,.8],sat:164,val:506},{rgb:[238,120,147],hsv:[346.3,.5,.9],sat:236,val:505},{rgb:[103,196,206],hsv:[185.8,.5,.8],sat:206,val:505},{rgb:[255,183,66],hsv:[37.1,.7,1],sat:378,val:504},{rgb:[255,194,55],hsv:[41.7,.8,1],sat:400,val:504},{rgb:[147,161,196],hsv:[222.9,.3,.8],sat:98,val:504},{rgb:[255,189,59],hsv:[39.8,.8,1],sat:392,val:503},{rgb:[163,146,194],hsv:[261.3,.2,.8],sat:96,val:503},{rgb:[255,175,73],hsv:[33.6,.7,1],sat:364,val:503},{rgb:[166,136,200],hsv:[268.1,.3,.8],sat:128,val:502},{rgb:[255,198,49],hsv:[43.4,.8,1],sat:412,val:502},{rgb:[255,114,132],hsv:[352.3,.6,1],sat:282,val:501},{rgb:[212,95,194],hsv:[309.2,.6,.8],sat:234,val:501},{rgb:[200,135,166],hsv:[331.4,.3,.8],sat:130,val:501},{rgb:[190,223,88],hsv:[74.7,.6,.9],sat:270,val:501},{rgb:[194,108,199],hsv:[296.7,.5,.8],sat:182,val:501},{rgb:[186,144,171],hsv:[321.4,.2,.7],sat:84,val:501},{rgb:[255,195,50],hsv:[42.4,.8,1],sat:410,val:500},{rgb:[255,132,112],hsv:[8.4,.6,1],sat:286,val:499},{rgb:[90,194,215],hsv:[190.1,.6,.8],sat:250,val:499},{rgb:[150,134,215],hsv:[251.9,.4,.8],sat:162,val:499},{rgb:[255,189,55],hsv:[40.2,.8,1],sat:400,val:499},{rgb:[170,139,190],hsv:[276.5,.3,.7],sat:102,val:499},{rgb:[125,195,178],hsv:[165.4,.4,.8],sat:140,val:498},{rgb:[255,179,64],hsv:[36.1,.7,1],sat:382,val:498},{rgb:[156,183,159],hsv:[126.7,.1,.7],sat:54,val:498},{rgb:[214,103,180],hsv:[318.4,.5,.8],sat:222,val:497},{rgb:[215,224,57],hsv:[63.2,.7,.9],sat:334,val:496},{rgb:[161,151,184],hsv:[258.2,.2,.7],sat:66,val:496},{rgb:[239,125,131],hsv:[356.8,.5,.9],sat:228,val:495},{rgb:[204,165,126],hsv:[30,.4,.8],sat:156,val:495},{rgb:[189,125,181],hsv:[307.5,.3,.7],sat:128,val:495},{rgb:[134,143,218],hsv:[233.6,.4,.9],sat:168,val:495},{rgb:[139,174,182],hsv:[191.2,.2,.7],sat:86,val:495},{rgb:[216,116,163],hsv:[331.8,.5,.8],sat:200,val:495},{rgb:[211,192,92],hsv:[50.4,.6,.8],sat:238,val:495},{rgb:[189,161,144],hsv:[22.7,.2,.7],sat:90,val:494},{rgb:[151,209,134],hsv:[106.4,.4,.8],sat:150,val:494},{rgb:[211,130,152],hsv:[343.7,.4,.8],sat:162,val:493},{rgb:[249,225,18],hsv:[53.8,.9,1],sat:462,val:492},{rgb:[255,174,63],hsv:[34.7,.8,1],sat:384,val:492},{rgb:[192,144,156],hsv:[345,.3,.8],sat:96,val:492},{rgb:[105,168,219],hsv:[206.8,.5,.9],sat:228,val:492},{rgb:[198,171,122],hsv:[38.7,.4,.8],sat:152,val:491},{rgb:[107,165,219],hsv:[208.9,.5,.9],sat:224,val:491},{rgb:[255,210,26],hsv:[48.2,.9,1],sat:458,val:491},{rgb:[214,195,81],hsv:[51.4,.6,.8],sat:266,val:490},{rgb:[110,159,221],hsv:[213.5,.5,.9],sat:222,val:490},{rgb:[245,182,63],hsv:[39.2,.7,1],sat:364,val:490},{rgb:[255,188,46],hsv:[40.8,.8,1],sat:418,val:489},{rgb:[173,214,102],hsv:[82,.5,.8],sat:224,val:489},{rgb:[209,172,108],hsv:[38,.5,.8],sat:202,val:489},{rgb:[255,176,58],hsv:[35.9,.8,1],sat:394,val:489},{rgb:[254,204,31],hsv:[46.5,.9,1],sat:446,val:489},{rgb:[115,156,217],hsv:[215.9,.5,.9],sat:204,val:488},{rgb:[148,218,122],hsv:[103.7,.4,.9],sat:192,val:488},{rgb:[96,172,220],hsv:[203.2,.6,.9],sat:248,val:488},{rgb:[201,181,106],hsv:[47.4,.5,.8],sat:190,val:488},{rgb:[141,167,180],hsv:[200,.2,.7],sat:78,val:488},{rgb:[115,195,177],hsv:[166.5,.4,.8],sat:160,val:487},{rgb:[73,202,212],hsv:[184.3,.7,.8],sat:278,val:487},{rgb:[154,181,151],hsv:[114,.2,.7],sat:60,val:486},{rgb:[229,120,137],hsv:[350.6,.5,.9],sat:218,val:486},{rgb:[220,182,84],hsv:[43.2,.6,.9],sat:272,val:486},{rgb:[182,162,141],hsv:[30.7,.2,.7],sat:82,val:485},{rgb:[174,195,116],hsv:[75.9,.4,.8],sat:158,val:485},{rgb:[98,193,194],hsv:[180.6,.5,.8],sat:192,val:485},{rgb:[100,172,212],hsv:[201.4,.5,.8],sat:224,val:484},{rgb:[255,176,53],hsv:[36.5,.8,1],sat:404,val:484},{rgb:[167,148,169],hsv:[294.3,.1,.7],sat:42,val:484},{rgb:[255,167,62],hsv:[32.6,.8,1],sat:386,val:484},{rgb:[181,152,151],hsv:[2,.2,.7],sat:60,val:484},{rgb:[227,101,156],hsv:[333.8,.6,.9],sat:252,val:484},{rgb:[253,125,105],hsv:[8.1,.6,1],sat:296,val:483},{rgb:[123,201,159],hsv:[147.7,.4,.8],sat:156,val:483},{rgb:[255,177,51],hsv:[37.1,.8,1],sat:408,val:483},{rgb:[230,187,66],hsv:[44.3,.7,.9],sat:328,val:483},{rgb:[176,187,119],hsv:[69.7,.4,.7],sat:136,val:482},{rgb:[174,160,148],hsv:[27.7,.1,.7],sat:52,val:482},{rgb:[190,154,138],hsv:[18.5,.3,.7],sat:104,val:482},{rgb:[180,145,157],hsv:[339.4,.2,.7],sat:70,val:482},{rgb:[204,151,127],hsv:[18.7,.4,.8],sat:154,val:482},{rgb:[187,199,95],hsv:[66.9,.5,.8],sat:208,val:481},{rgb:[81,177,223],hsv:[199.4,.6,.9],sat:284,val:481},{rgb:[149,163,169],hsv:[198,.1,.7],sat:40,val:481},{rgb:[101,159,221],hsv:[211,.5,.9],sat:240,val:481},{rgb:[159,161,160],hsv:[150,0,.6],sat:4,val:480},{rgb:[255,145,80],hsv:[22.3,.7,1],sat:350,val:480},{rgb:[255,199,26],hsv:[45.3,.9,1],sat:458,val:480},{rgb:[89,203,187],hsv:[171.6,.6,.8],sat:228,val:479},{rgb:[255,155,69],hsv:[27.7,.7,1],sat:372,val:479},{rgb:[69,186,224],hsv:[194.7,.7,.9],sat:310,val:479},{rgb:[207,141,131],hsv:[7.9,.4,.8],sat:152,val:479},{rgb:[255,135,89],hsv:[16.6,.7,1],sat:332,val:479},{rgb:[198,141,138],hsv:[3,.3,.8],sat:120,val:477},{rgb:[250,227,0],hsv:[54.5,1,1],sat:500,val:477},{rgb:[217,127,132],hsv:[356.7,.4,.9],sat:180,val:476},{rgb:[225,101,150],hsv:[336.3,.6,.9],sat:248,val:476},{rgb:[252,224,0],hsv:[53.3,1,1],sat:504,val:476},{rgb:[252,224,0],hsv:[53.3,1,1],sat:504,val:476},{rgb:[209,135,132],hsv:[2.3,.4,.8],sat:154,val:476},{rgb:[255,152,69],hsv:[26.8,.7,1],sat:372,val:476},{rgb:[175,159,142],hsv:[30.9,.2,.7],sat:66,val:476},{rgb:[207,154,114],hsv:[25.8,.4,.8],sat:186,val:475},{rgb:[109,151,215],hsv:[216.2,.5,.8],sat:212,val:475},{rgb:[227,85,162],hsv:[327.5,.6,.9],sat:284,val:474},{rgb:[255,137,82],hsv:[19.1,.7,1],sat:346,val:474},{rgb:[250,223,0],hsv:[53.5,1,1],sat:500,val:473},{rgb:[162,159,152],hsv:[42,.1,.6],sat:20,val:473},{rgb:[164,169,139],hsv:[70,.2,.7],sat:60,val:472},{rgb:[171,129,172],hsv:[298.6,.3,.7],sat:86,val:472},{rgb:[206,146,120],hsv:[18.1,.4,.8],sat:172,val:472},{rgb:[221,102,149],hsv:[336.3,.5,.9],sat:238,val:472},{rgb:[211,150,111],hsv:[23.4,.5,.8],sat:200,val:472},{rgb:[249,94,129],hsv:[346.5,.6,1],sat:310,val:472},{rgb:[173,151,148],hsv:[7.2,.1,.7],sat:50,val:472},{rgb:[115,214,142],hsv:[136.4,.5,.8],sat:198,val:471},{rgb:[182,163,126],hsv:[39.6,.3,.7],sat:112,val:471},{rgb:[224,220,27],hsv:[58.8,.9,.9],sat:394,val:471},{rgb:[255,168,48],hsv:[34.8,.8,1],sat:414,val:471},{rgb:[215,106,150],hsv:[335.8,.5,.8],sat:218,val:471},{rgb:[174,217,80],hsv:[78.8,.6,.9],sat:274,val:471},{rgb:[255,100,116],hsv:[353.8,.6,1],sat:310,val:471},{rgb:[255,159,56],hsv:[31.1,.8,1],sat:398,val:470},{rgb:[127,166,177],hsv:[193.2,.3,.7],sat:100,val:470},{rgb:[63,205,202],hsv:[178.7,.7,.8],sat:284,val:470},{rgb:[188,164,117],hsv:[39.7,.4,.7],sat:142,val:469},{rgb:[252,120,97],hsv:[8.9,.6,1],sat:310,val:469},{rgb:[246,222,0],hsv:[54.1,1,1],sat:492,val:468},{rgb:[255,144,69],hsv:[24.2,.7,1],sat:372,val:468},{rgb:[255,213,0],hsv:[50.1,1,1],sat:510,val:468},{rgb:[255,150,63],hsv:[27.2,.8,1],sat:384,val:468},{rgb:[134,145,187],hsv:[227.5,.3,.7],sat:106,val:466},{rgb:[244,166,56],hsv:[35.1,.8,1],sat:376,val:466},{rgb:[255,161,50],hsv:[32.5,.8,1],sat:410,val:466},{rgb:[107,141,217],hsv:[221.5,.5,.9],sat:220,val:465},{rgb:[119,172,174],hsv:[182.2,.3,.7],sat:110,val:465},{rgb:[255,140,69],hsv:[22.9,.7,1],sat:372,val:464},{rgb:[105,182,177],hsv:[176.1,.4,.7],sat:154,val:464},{rgb:[174,158,132],hsv:[37.1,.2,.7],sat:84,val:464},{rgb:[170,162,132],hsv:[47.4,.2,.7],sat:76,val:464},{rgb:[183,143,138],hsv:[6.7,.2,.7],sat:90,val:464},{rgb:[129,162,172],hsv:[194,.3,.7],sat:86,val:463},{rgb:[131,178,154],hsv:[149.4,.3,.7],sat:94,val:463},{rgb:[255,124,84],hsv:[14,.7,1],sat:342,val:463},{rgb:[231,76,155],hsv:[329.4,.7,.9],sat:310,val:462},{rgb:[84,211,165],hsv:[158.3,.6,.8],sat:254,val:460},{rgb:[136,144,180],hsv:[229.1,.2,.7],sat:88,val:460},{rgb:[108,150,202],hsv:[213.2,.5,.8],sat:188,val:460},{rgb:[116,186,158],hsv:[156,.4,.7],sat:140,val:460},{rgb:[151,154,155],hsv:[195,0,.6],sat:8,val:460},{rgb:[255,144,61],hsv:[25.7,.8,1],sat:388,val:460},{rgb:[169,210,81],hsv:[79.1,.6,.8],sat:258,val:460},{rgb:[194,125,141],hsv:[346.1,.4,.8],sat:138,val:460},{rgb:[180,217,63],hsv:[74.4,.7,.9],sat:308,val:460},{rgb:[51,190,219],hsv:[190.4,.8,.9],sat:336,val:460},{rgb:[230,207,23],hsv:[53.3,.9,.9],sat:414,val:460},{rgb:[255,131,73],hsv:[19.1,.7,1],sat:364,val:459},{rgb:[47,190,221],hsv:[190.7,.8,.9],sat:348,val:458},{rgb:[254,112,92],hsv:[7.4,.6,1],sat:324,val:458},{rgb:[105,173,180],hsv:[185.6,.4,.7],sat:150,val:458},{rgb:[177,197,83],hsv:[70.5,.6,.8],sat:228,val:457},{rgb:[231,73,153],hsv:[329.6,.7,.9],sat:316,val:457},{rgb:[238,82,137],hsv:[338.8,.7,.9],sat:312,val:457},{rgb:[255,125,77],hsv:[16.2,.7,1],sat:356,val:457},{rgb:[255,99,102],hsv:[358.8,.6,1],sat:312,val:456},{rgb:[255,201,0],hsv:[47.3,1,1],sat:510,val:456},{rgb:[212,80,164],hsv:[321.8,.6,.8],sat:264,val:456},{rgb:[230,111,115],hsv:[358,.5,.9],sat:238,val:456},{rgb:[169,86,201],hsv:[283.3,.6,.8],sat:230,val:456},{rgb:[141,207,108],hsv:[100,.5,.8],sat:198,val:456},{rgb:[196,89,170],hsv:[314.6,.5,.8],sat:214,val:455},{rgb:[167,156,132],hsv:[41.1,.2,.7],sat:70,val:455},{rgb:[108,214,133],hsv:[134.2,.5,.8],sat:212,val:455},{rgb:[181,120,154],hsv:[326.6,.3,.7],sat:122,val:455},{rgb:[251,128,76],hsv:[17.8,.7,1],sat:350,val:455},{rgb:[63,172,220],hsv:[198.3,.7,.9],sat:314,val:455},{rgb:[66,211,178],hsv:[166.3,.7,.8],sat:290,val:455},{rgb:[218,105,130],hsv:[346.7,.5,.9],sat:226,val:453},{rgb:[167,159,127],hsv:[48,.2,.7],sat:80,val:453},{rgb:[170,171,112],hsv:[61,.3,.7],sat:118,val:453},{rgb:[184,176,93],hsv:[54.7,.5,.7],sat:182,val:453},{rgb:[183,136,133],hsv:[3.6,.3,.7],sat:100,val:452},{rgb:[182,131,139],hsv:[350.6,.3,.7],sat:102,val:452},{rgb:[135,168,149],hsv:[145.5,.2,.7],sat:66,val:452},{rgb:[247,118,86],hsv:[11.9,.7,1],sat:322,val:451},{rgb:[255,151,45],hsv:[30.3,.8,1],sat:420,val:451},{rgb:[178,153,120],hsv:[34.1,.3,.7],sat:116,val:451},{rgb:[115,175,161],hsv:[166,.3,.7],sat:120,val:451},{rgb:[255,112,84],hsv:[9.8,.7,1],sat:342,val:451},{rgb:[104,175,172],hsv:[177.5,.4,.7],sat:142,val:451},{rgb:[241,141,69],hsv:[25.1,.7,.9],sat:344,val:451},{rgb:[163,168,119],hsv:[66.1,.3,.7],sat:98,val:450},{rgb:[223,115,112],hsv:[1.6,.5,.9],sat:222,val:450},{rgb:[156,137,157],hsv:[297,.1,.6],sat:40,val:450},{rgb:[213,95,142],hsv:[336.1,.6,.8],sat:236,val:450},{rgb:[145,134,171],hsv:[257.8,.2,.7],sat:74,val:450},{rgb:[143,184,122],hsv:[99.7,.3,.7],sat:124,val:449},{rgb:[191,133,125],hsv:[7.3,.3,.7],sat:132,val:449},{rgb:[208,108,133],hsv:[345,.5,.8],sat:200,val:449},{rgb:[123,153,172],hsv:[203.3,.3,.7],sat:98,val:448},{rgb:[205,205,37],hsv:[60,.8,.8],sat:336,val:447},{rgb:[255,129,63],hsv:[20.6,.8,1],sat:384,val:447},{rgb:[254,92,100],hsv:[357,.6,1],sat:324,val:446},{rgb:[126,161,159],hsv:[176.6,.2,.6],sat:70,val:446},{rgb:[200,109,136],hsv:[342.2,.5,.8],sat:182,val:445},{rgb:[209,183,53],hsv:[50,.7,.8],sat:312,val:445},{rgb:[113,173,159],hsv:[166,.3,.7],sat:120,val:445},{rgb:[175,135,135],hsv:[0,.2,.7],sat:80,val:445},{rgb:[251,87,107],hsv:[352.7,.7,1],sat:328,val:445},{rgb:[255,116,73],hsv:[14.2,.7,1],sat:364,val:444},{rgb:[41,196,207],hsv:[184,.8,.8],sat:332,val:444},{rgb:[154,138,152],hsv:[307.5,.1,.6],sat:32,val:444},{rgb:[203,212,28],hsv:[62.9,.9,.8],sat:368,val:443},{rgb:[103,186,154],hsv:[156.9,.4,.7],sat:166,val:443},{rgb:[255,99,89],hsv:[3.6,.7,1],sat:332,val:443},{rgb:[134,134,175],hsv:[240,.2,.7],sat:82,val:443},{rgb:[63,180,200],hsv:[188.8,.7,.8],sat:274,val:443},{rgb:[199,155,89],hsv:[36,.6,.8],sat:220,val:443},{rgb:[173,142,127],hsv:[19.6,.3,.7],sat:92,val:442},{rgb:[185,110,147],hsv:[330.4,.4,.7],sat:150,val:442},{rgb:[204,102,136],hsv:[340,.5,.8],sat:204,val:442},{rgb:[52,174,215],hsv:[195.1,.8,.8],sat:326,val:441},{rgb:[194,109,138],hsv:[339.5,.4,.8],sat:170,val:441},{rgb:[133,147,161],hsv:[210,.2,.6],sat:56,val:441},{rgb:[49,205,187],hsv:[173.1,.8,.8],sat:312,val:441},{rgb:[145,155,141],hsv:[102.9,.1,.6],sat:28,val:441},{rgb:[247,105,88],hsv:[6.4,.6,1],sat:318,val:440},{rgb:[169,145,126],hsv:[26.5,.3,.7],sat:86,val:440},{rgb:[199,152,89],hsv:[34.4,.6,.8],sat:220,val:440},{rgb:[176,209,55],hsv:[72.9,.7,.8],sat:308,val:440},{rgb:[158,110,172],hsv:[286.5,.4,.7],sat:124,val:440},{rgb:[167,149,124],hsv:[34.9,.3,.7],sat:86,val:440},{rgb:[255,106,79],hsv:[9.2,.7,1],sat:352,val:440},{rgb:[255,99,86],hsv:[4.6,.7,1],sat:338,val:440},{rgb:[71,199,169],hsv:[165.9,.6,.8],sat:256,val:439},{rgb:[139,121,179],hsv:[258.6,.3,.7],sat:116,val:439},{rgb:[254,91,94],hsv:[358.9,.6,1],sat:326,val:439},{rgb:[168,123,147],hsv:[328,.3,.7],sat:90,val:438},{rgb:[255,136,47],hsv:[25.7,.8,1],sat:416,val:438},{rgb:[152,154,131],hsv:[65.2,.1,.6],sat:46,val:437},{rgb:[188,133,116],hsv:[14.2,.4,.7],sat:144,val:437},{rgb:[255,104,78],hsv:[8.8,.7,1],sat:354,val:437},{rgb:[222,65,150],hsv:[327.5,.7,.9],sat:314,val:437},{rgb:[147,147,142],hsv:[60,0,.6],sat:10,val:436},{rgb:[184,84,168],hsv:[309.6,.5,.7],sat:200,val:436},{rgb:[151,180,105],hsv:[83.2,.4,.7],sat:150,val:436},{rgb:[213,92,130],hsv:[341.2,.6,.8],sat:242,val:435},{rgb:[195,185,55],hsv:[55.7,.7,.8],sat:280,val:435},{rgb:[62,185,188],hsv:[181.4,.7,.7],sat:252,val:435},{rgb:[238,118,78],hsv:[15,.7,.9],sat:320,val:434},{rgb:[192,133,109],hsv:[17.3,.4,.8],sat:166,val:434},{rgb:[89,135,209],hsv:[217,.6,.8],sat:240,val:433},{rgb:[145,119,169],hsv:[271.2,.3,.7],sat:100,val:433},{rgb:[147,207,79],hsv:[88.1,.6,.8],sat:256,val:433},{rgb:[228,70,135],hsv:[335.3,.7,.9],sat:316,val:433},{rgb:[170,126,137],hsv:[345,.3,.7],sat:88,val:433},{rgb:[255,108,69],hsv:[12.6,.7,1],sat:372,val:432},{rgb:[79,188,165],hsv:[167.3,.6,.7],sat:218,val:432},{rgb:[229,84,119],hsv:[345.5,.6,.9],sat:290,val:432},{rgb:[207,98,126],hsv:[344.6,.5,.8],sat:218,val:431},{rgb:[115,110,206],hsv:[243.1,.5,.8],sat:192,val:431},{rgb:[206,88,136],hsv:[335.6,.6,.8],sat:236,val:430},{rgb:[145,156,129],hsv:[84.4,.2,.6],sat:54,val:430},{rgb:[254,90,85],hsv:[1.8,.7,1],sat:338,val:429},{rgb:[192,101,136],hsv:[336.9,.5,.8],sat:182,val:429},{rgb:[71,142,215],hsv:[210.4,.7,.8],sat:288,val:428},{rgb:[205,118,105],hsv:[7.8,.5,.8],sat:200,val:428},{rgb:[165,157,106],hsv:[51.9,.4,.6],sat:118,val:428},{rgb:[153,124,151],hsv:[304.1,.2,.6],sat:58,val:428},{rgb:[93,158,176],hsv:[193,.5,.7],sat:166,val:427},{rgb:[190,123,114],hsv:[7.1,.4,.7],sat:152,val:427},{rgb:[123,125,179],hsv:[237.9,.3,.7],sat:112,val:427},{rgb:[117,105,205],hsv:[247.2,.5,.8],sat:200,val:427},{rgb:[197,74,156],hsv:[320,.6,.8],sat:246,val:427},{rgb:[50,175,201],hsv:[190.3,.8,.8],sat:302,val:426},{rgb:[199,131,96],hsv:[20.4,.5,.8],sat:206,val:426},{rgb:[227,137,62],hsv:[27.3,.7,.9],sat:330,val:426},{rgb:[124,125,177],hsv:[238.9,.3,.7],sat:106,val:426},{rgb:[255,127,44],hsv:[23.6,.8,1],sat:422,val:426},{rgb:[255,88,83],hsv:[1.7,.7,1],sat:344,val:426},{rgb:[113,162,151],hsv:[166.5,.3,.6],sat:98,val:426},{rgb:[131,114,180],hsv:[255.5,.4,.7],sat:132,val:425},{rgb:[145,149,131],hsv:[73.3,.1,.6],sat:36,val:425},{rgb:[89,163,173],hsv:[187.1,.5,.7],sat:168,val:425},{rgb:[240,71,113],hsv:[345.1,.7,.9],sat:338,val:424},{rgb:[145,144,135],hsv:[54,.1,.6],sat:20,val:424},{rgb:[255,99,70],hsv:[9.4,.7,1],sat:370,val:424},{rgb:[255,107,62],hsv:[14,.8,1],sat:386,val:424},{rgb:[188,129,105],hsv:[17.3,.4,.7],sat:166,val:422},{rgb:[102,149,171],hsv:[199.1,.4,.7],sat:138,val:422},{rgb:[146,150,125],hsv:[69.6,.2,.6],sat:50,val:421},{rgb:[224,63,134],hsv:[333.5,.7,.9],sat:322,val:421},{rgb:[206,57,158],hsv:[319.3,.7,.8],sat:298,val:421},{rgb:[195,64,162],hsv:[315.1,.7,.8],sat:262,val:421},{rgb:[176,185,60],hsv:[64.3,.7,.7],sat:250,val:421},{rgb:[96,162,162],hsv:[180,.4,.6],sat:132,val:420},{rgb:[105,150,165],hsv:[195,.4,.6],sat:120,val:420},{rgb:[119,129,171],hsv:[228.5,.3,.7],sat:104,val:419},{rgb:[156,132,131],hsv:[2.4,.2,.6],sat:50,val:419},{rgb:[252,88,78],hsv:[3.4,.7,1],sat:348,val:418},{rgb:[120,172,126],hsv:[126.9,.3,.7],sat:104,val:418},{rgb:[201,157,60],hsv:[41.3,.7,.8],sat:282,val:418},{rgb:[131,199,87],hsv:[96.4,.6,.8],sat:224,val:417},{rgb:[199,94,124],hsv:[342.9,.5,.8],sat:210,val:417},{rgb:[134,114,169],hsv:[261.8,.3,.7],sat:110,val:417},{rgb:[187,100,130],hsv:[339.3,.5,.7],sat:174,val:417},{rgb:[233,130,54],hsv:[25.5,.8,.9],sat:358,val:417},{rgb:[255,93,69],hsv:[7.7,.7,1],sat:372,val:417},{rgb:[179,108,130],hsv:[341.4,.4,.7],sat:142,val:417},{rgb:[255,87,74],hsv:[4.3,.7,1],sat:362,val:416},{rgb:[201,125,90],hsv:[18.9,.6,.8],sat:222,val:416},{rgb:[111,144,161],hsv:[200.4,.3,.6],sat:100,val:416},{rgb:[41,162,213],hsv:[197.8,.8,.8],sat:344,val:416},{rgb:[133,109,173],hsv:[262.5,.4,.7],sat:128,val:415},{rgb:[168,94,153],hsv:[312.2,.4,.7],sat:148,val:415},{rgb:[47,176,192],hsv:[186.6,.8,.8],sat:290,val:415},{rgb:[216,133,66],hsv:[26.8,.7,.8],sat:300,val:415},{rgb:[217,53,144],hsv:[326.7,.8,.9],sat:328,val:414},{rgb:[112,140,162],hsv:[206.4,.3,.6],sat:100,val:414},{rgb:[52,187,175],hsv:[174.7,.7,.7],sat:270,val:414},{rgb:[124,130,160],hsv:[230,.2,.6],sat:72,val:414},{rgb:[124,135,155],hsv:[218.7,.2,.6],sat:62,val:414},{rgb:[92,160,161],hsv:[180.9,.4,.6],sat:138,val:413},{rgb:[168,183,62],hsv:[67.4,.7,.7],sat:242,val:413},{rgb:[141,139,132],hsv:[46.7,.1,.6],sat:18,val:412},{rgb:[180,143,88],hsv:[35.9,.5,.7],sat:184,val:411},{rgb:[80,124,207],hsv:[219.2,.6,.8],sat:254,val:411},{rgb:[252,92,67],hsv:[8.1,.7,1],sat:370,val:411},{rgb:[143,116,151],hsv:[286.3,.2,.6],sat:70,val:410},{rgb:[149,134,127],hsv:[19.1,.1,.6],sat:44,val:410},{rgb:[153,132,125],hsv:[15,.2,.6],sat:56,val:410},{rgb:[119,168,123],hsv:[124.9,.3,.7],sat:98,val:410},{rgb:[197,86,127],hsv:[337.8,.6,.8],sat:222,val:410},{rgb:[175,79,155],hsv:[312.5,.5,.7],sat:192,val:409},{rgb:[223,58,128],hsv:[334.5,.7,.9],sat:330,val:409},{rgb:[62,147,200],hsv:[203,.7,.8],sat:276,val:409},{rgb:[184,142,82],hsv:[35.3,.6,.7],sat:204,val:408},{rgb:[167,119,122],hsv:[356.3,.3,.7],sat:96,val:408},{rgb:[193,138,77],hsv:[31.6,.6,.8],sat:232,val:408},{rgb:[221,48,138],hsv:[328.8,.8,.9],sat:346,val:407},{rgb:[161,179,67],hsv:[69.6,.6,.7],sat:224,val:407},{rgb:[131,143,133],hsv:[130,.1,.6],sat:24,val:407},{rgb:[52,151,204],hsv:[200.9,.7,.8],sat:304,val:407},{rgb:[218,67,122],hsv:[338.1,.7,.9],sat:302,val:407},{rgb:[160,104,142],hsv:[319.3,.4,.6],sat:112,val:406},{rgb:[99,114,193],hsv:[230.4,.5,.8],sat:188,val:406},{rgb:[173,55,178],hsv:[297.6,.7,.7],sat:246,val:406},{rgb:[216,63,127],hsv:[334.9,.7,.8],sat:306,val:406},{rgb:[99,206,101],hsv:[121.1,.5,.8],sat:214,val:406},{rgb:[133,157,115],hsv:[94.3,.3,.6],sat:84,val:405},{rgb:[247,81,77],hsv:[1.4,.7,1],sat:340,val:405},{rgb:[160,130,115],hsv:[20,.3,.6],sat:90,val:405},{rgb:[152,127,126],hsv:[2.3,.2,.6],sat:52,val:405},{rgb:[148,137,120],hsv:[36.4,.2,.6],sat:56,val:405},{rgb:[52,187,165],hsv:[170.2,.7,.7],sat:270,val:404},{rgb:[166,136,102],hsv:[31.9,.4,.7],sat:128,val:404},{rgb:[115,119,170],hsv:[235.6,.3,.7],sat:110,val:404},{rgb:[116,197,90],hsv:[105.4,.5,.8],sat:214,val:403},{rgb:[77,120,206],hsv:[220,.6,.8],sat:258,val:403},{rgb:[157,139,107],hsv:[38.4,.3,.6],sat:100,val:403},{rgb:[217,94,91],hsv:[1.4,.6,.9],sat:252,val:402},{rgb:[252,89,61],hsv:[8.8,.8,1],sat:382,val:402},{rgb:[166,92,144],hsv:[317.8,.4,.7],sat:148,val:402},{rgb:[132,183,86],hsv:[91.5,.5,.7],sat:194,val:401},{rgb:[143,101,157],hsv:[285,.4,.6],sat:112,val:401},{rgb:[175,105,120],hsv:[347.1,.4,.7],sat:140,val:400},{rgb:[185,66,149],hsv:[318.2,.6,.7],sat:238,val:400},{rgb:[94,212,94],hsv:[120,.6,.8],sat:236,val:400},{rgb:[212,112,76],hsv:[15.9,.6,.8],sat:272,val:400},{rgb:[160,57,183],hsv:[289,.7,.7],sat:252,val:400},{rgb:[144,120,136],hsv:[320,.2,.6],sat:48,val:400},{rgb:[229,93,78],hsv:[6,.7,.9],sat:302,val:400},{rgb:[131,173,96],hsv:[92.7,.4,.7],sat:154,val:400},{rgb:[210,84,105],hsv:[350,.6,.8],sat:252,val:399},{rgb:[212,119,68],hsv:[21.3,.7,.8],sat:288,val:399},{rgb:[98,125,175],hsv:[219,.4,.7],sat:154,val:398},{rgb:[210,43,145],hsv:[323.4,.8,.8],sat:334,val:398},{rgb:[88,142,168],hsv:[199.5,.5,.7],sat:160,val:398},{rgb:[107,120,170],hsv:[227.6,.4,.7],sat:126,val:397},{rgb:[162,112,123],hsv:[346.8,.3,.6],sat:100,val:397},{rgb:[194,115,88],hsv:[15.3,.5,.8],sat:212,val:397},{rgb:[176,110,111],hsv:[359.1,.4,.7],sat:132,val:397},{rgb:[223,87,87],hsv:[0,.6,.9],sat:272,val:397},{rgb:[0,178,219],hsv:[191.2,1,.9],sat:438,val:397},{rgb:[183,149,65],hsv:[42.7,.6,.7],sat:236,val:397},{rgb:[174,129,94],hsv:[26.3,.5,.7],sat:160,val:397},{rgb:[107,117,172],hsv:[230.8,.4,.7],sat:130,val:396},{rgb:[86,163,146],hsv:[166.8,.5,.6],sat:154,val:395},{rgb:[95,159,141],hsv:[163.1,.4,.6],sat:128,val:395},{rgb:[0,186,209],hsv:[186.6,1,.8],sat:418,val:395},{rgb:[196,52,147],hsv:[320.4,.7,.8],sat:288,val:395},{rgb:[159,79,157],hsv:[301.5,.5,.6],sat:160,val:395},{rgb:[35,158,201],hsv:[195.5,.8,.8],sat:332,val:394},{rgb:[150,128,116],hsv:[21.2,.2,.6],sat:68,val:394},{rgb:[146,63,185],hsv:[280.8,.7,.7],sat:244,val:394},{rgb:[121,162,111],hsv:[108.2,.3,.6],sat:102,val:394},{rgb:[150,115,129],hsv:[336,.2,.6],sat:70,val:394},{rgb:[109,116,168],hsv:[232.9,.4,.7],sat:118,val:393},{rgb:[90,139,164],hsv:[200.3,.5,.6],sat:148,val:393},{rgb:[147,118,128],hsv:[339.3,.2,.6],sat:58,val:393},{rgb:[203,59,131],hsv:[330,.7,.8],sat:288,val:393},{rgb:[212,74,106],hsv:[346.1,.7,.8],sat:276,val:392},{rgb:[0,190,202],hsv:[183.6,1,.8],sat:404,val:392},{rgb:[148,100,144],hsv:[305,.3,.6],sat:96,val:392},{rgb:[195,127,70],hsv:[27.4,.6,.8],sat:250,val:392},{rgb:[98,159,135],hsv:[156.4,.4,.6],sat:122,val:392},{rgb:[168,98,126],hsv:[336,.4,.7],sat:140,val:392},{rgb:[0,206,186],hsv:[174.2,1,.8],sat:412,val:392},{rgb:[119,146,127],hsv:[137.8,.2,.6],sat:54,val:392},{rgb:[186,139,66],hsv:[36.5,.6,.7],sat:240,val:391},{rgb:[134,132,125],hsv:[46.7,.1,.5],sat:18,val:391},{rgb:[220,91,80],hsv:[4.7,.6,.9],sat:280,val:391},{rgb:[0,203,187],hsv:[175.3,1,.8],sat:406,val:390},{rgb:[66,128,196],hsv:[211.4,.7,.8],sat:260,val:390},{rgb:[221,89,80],hsv:[3.8,.6,.9],sat:282,val:390},{rgb:[165,47,178],hsv:[294,.7,.7],sat:262,val:390},{rgb:[0,191,199],hsv:[182.4,1,.8],sat:398,val:390},{rgb:[132,178,80],hsv:[88.2,.6,.7],sat:196,val:390},{rgb:[144,116,129],hsv:[332.1,.2,.6],sat:56,val:389},{rgb:[126,109,154],hsv:[262.7,.3,.6],sat:90,val:389},{rgb:[169,96,124],hsv:[337,.4,.7],sat:146,val:389},{rgb:[183,84,122],hsv:[337,.5,.7],sat:198,val:389},{rgb:[222,86,80],hsv:[2.5,.6,.9],sat:284,val:388},{rgb:[192,111,85],hsv:[14.6,.6,.8],sat:214,val:388},{rgb:[0,200,188],hsv:[176.4,1,.8],sat:400,val:388},{rgb:[138,113,137],hsv:[302.4,.2,.5],sat:50,val:388},{rgb:[222,47,119],hsv:[335.3,.8,.9],sat:350,val:388},{rgb:[173,107,108],hsv:[359.1,.4,.7],sat:132,val:388},{rgb:[186,53,148],hsv:[317.1,.7,.7],sat:266,val:387},{rgb:[214,101,72],hsv:[12.3,.7,.8],sat:284,val:387},{rgb:[209,81,97],hsv:[352.5,.6,.8],sat:256,val:387},{rgb:[163,109,115],hsv:[353.3,.3,.6],sat:108,val:387},{rgb:[56,125,206],hsv:[212.4,.7,.8],sat:300,val:387},{rgb:[240,69,78],hsv:[356.8,.7,.9],sat:342,val:387},{rgb:[0,206,181],hsv:[172.7,1,.8],sat:412,val:387},{rgb:[226,53,107],hsv:[341.3,.8,.9],sat:346,val:386},{rgb:[207,119,60],hsv:[24.1,.7,.8],sat:294,val:386},{rgb:[134,140,112],hsv:[72.9,.2,.5],sat:56,val:386},{rgb:[89,137,160],hsv:[199.4,.4,.6],sat:142,val:386},{rgb:[185,115,85],hsv:[18,.5,.7],sat:200,val:385},{rgb:[85,146,154],hsv:[187,.4,.6],sat:138,val:385},{rgb:[122,142,121],hsv:[117.1,.1,.6],sat:42,val:385},{rgb:[114,123,148],hsv:[224.1,.2,.6],sat:68,val:385},{rgb:[148,172,65],hsv:[73.5,.6,.7],sat:214,val:385},{rgb:[102,130,153],hsv:[207.1,.3,.6],sat:102,val:385},{rgb:[117,119,148],hsv:[236.1,.2,.6],sat:62,val:384},{rgb:[203,123,58],hsv:[26.9,.7,.8],sat:290,val:384},{rgb:[224,89,71],hsv:[7.1,.7,.9],sat:306,val:384},{rgb:[13,155,216],hsv:[198,.9,.8],sat:406,val:384},{rgb:[194,92,97],hsv:[357.1,.5,.8],sat:204,val:383},{rgb:[111,193,79],hsv:[103.2,.6,.8],sat:228,val:383},{rgb:[139,132,112],hsv:[44.4,.2,.5],sat:54,val:383},{rgb:[209,47,126],hsv:[330.7,.8,.8],sat:324,val:382},{rgb:[169,103,110],hsv:[353.6,.4,.7],sat:132,val:382},{rgb:[185,103,94],hsv:[5.9,.5,.7],sat:182,val:382},{rgb:[30,191,160],hsv:[168.4,.8,.7],sat:322,val:381},{rgb:[140,128,113],hsv:[33.3,.2,.5],sat:54,val:381},{rgb:[103,161,117],hsv:[134.5,.4,.6],sat:116,val:381},{rgb:[160,92,129],hsv:[327.4,.4,.6],sat:136,val:381},{rgb:[57,179,145],hsv:[163.3,.7,.7],sat:244,val:381},{rgb:[154,110,116],hsv:[351.8,.3,.6],sat:88,val:380},{rgb:[203,77,100],hsv:[349,.6,.8],sat:252,val:380},{rgb:[158,108,113],hsv:[354,.3,.6],sat:100,val:379},{rgb:[177,132,70],hsv:[34.8,.6,.7],sat:214,val:379},{rgb:[0,173,206],hsv:[189.6,1,.8],sat:412,val:379},{rgb:[142,74,162],hsv:[286.4,.5,.6],sat:176,val:378},{rgb:[151,108,119],hsv:[344.7,.3,.6],sat:86,val:378},{rgb:[225,44,109],hsv:[338.5,.8,.9],sat:362,val:378},{rgb:[84,130,163],hsv:[205.1,.5,.6],sat:158,val:377},{rgb:[124,125,128],hsv:[225,0,.5],sat:8,val:377},{rgb:[49,148,180],hsv:[194.7,.7,.7],sat:262,val:377},{rgb:[159,58,160],hsv:[299.4,.6,.6],sat:204,val:377},{rgb:[0,163,214],hsv:[194.3,1,.8],sat:428,val:377},{rgb:[84,148,145],hsv:[177.2,.4,.6],sat:128,val:377},{rgb:[103,176,97],hsv:[115.4,.4,.7],sat:158,val:376},{rgb:[141,120,115],hsv:[11.5,.2,.6],sat:52,val:376},{rgb:[0,177,199],hsv:[186.6,1,.8],sat:398,val:376},{rgb:[132,131,112],hsv:[57,.2,.5],sat:40,val:375},{rgb:[225,44,106],hsv:[339.4,.8,.9],sat:362,val:375},{rgb:[129,133,113],hsv:[72,.2,.5],sat:40,val:375},{rgb:[219,85,71],hsv:[5.7,.7,.9],sat:296,val:375},{rgb:[171,126,78],hsv:[31,.5,.7],sat:186,val:375},{rgb:[80,129,165],hsv:[205.4,.5,.6],sat:170,val:374},{rgb:[0,157,217],hsv:[196.6,1,.9],sat:434,val:374},{rgb:[203,97,74],hsv:[10.7,.6,.8],sat:258,val:374},{rgb:[0,206,168],hsv:[168.9,1,.8],sat:412,val:374},{rgb:[226,54,93],hsv:[346.4,.8,.9],sat:344,val:373},{rgb:[207,44,122],hsv:[331.3,.8,.8],sat:326,val:373},{rgb:[126,105,142],hsv:[274.1,.3,.6],sat:74,val:373},{rgb:[54,171,148],hsv:[168.2,.7,.7],sat:234,val:373},{rgb:[89,87,196],hsv:[241.1,.6,.8],sat:218,val:372},{rgb:[0,200,172],hsv:[171.6,1,.8],sat:400,val:372},{rgb:[166,72,134],hsv:[320.4,.6,.7],sat:188,val:372},{rgb:[111,160,100],hsv:[109,.4,.6],sat:120,val:371},{rgb:[194,105,72],hsv:[16.2,.6,.8],sat:244,val:371},{rgb:[125,173,73],hsv:[88.8,.6,.7],sat:200,val:371},{rgb:[127,115,129],hsv:[291.4,.1,.5],sat:28,val:371},{rgb:[132,104,135],hsv:[294.2,.2,.5],sat:62,val:371},{rgb:[173,55,142],hsv:[315.8,.7,.7],sat:236,val:370},{rgb:[141,160,69],hsv:[72.5,.6,.6],sat:182,val:370},{rgb:[179,100,91],hsv:[6.1,.5,.7],sat:176,val:370},{rgb:[138,123,109],hsv:[29,.2,.5],sat:58,val:370},{rgb:[206,90,74],hsv:[7.3,.6,.8],sat:264,val:370},{rgb:[146,104,120],hsv:[337.1,.3,.6],sat:84,val:370},{rgb:[97,109,163],hsv:[229.1,.4,.6],sat:132,val:369},{rgb:[115,68,186],hsv:[263.9,.6,.7],sat:236,val:369},{rgb:[163,151,55],hsv:[53.3,.7,.6],sat:216,val:369},{rgb:[125,134,110],hsv:[82.5,.2,.5],sat:48,val:369},{rgb:[0,156,213],hsv:[196.1,1,.8],sat:426,val:369},{rgb:[0,151,217],hsv:[198.2,1,.9],sat:434,val:368},{rgb:[83,131,154],hsv:[199.4,.5,.6],sat:142,val:368},{rgb:[192,72,104],hsv:[344,.6,.8],sat:240,val:368},{rgb:[154,106,108],hsv:[357.5,.3,.6],sat:96,val:368},{rgb:[169,116,83],hsv:[23,.5,.7],sat:172,val:368},{rgb:[0,153,214],hsv:[197.1,1,.8],sat:428,val:367},{rgb:[170,116,81],hsv:[23.6,.5,.7],sat:178,val:367},{rgb:[0,178,189],hsv:[183.5,1,.7],sat:378,val:367},{rgb:[185,100,82],hsv:[10.5,.6,.7],sat:206,val:367},{rgb:[167,121,79],hsv:[28.6,.5,.7],sat:176,val:367},{rgb:[157,148,61],hsv:[54.4,.6,.6],sat:192,val:366},{rgb:[207,74,85],hsv:[355,.6,.8],sat:266,val:366},{rgb:[92,127,147],hsv:[201.8,.4,.6],sat:110,val:366},{rgb:[153,90,123],hsv:[328.6,.4,.6],sat:126,val:366},{rgb:[0,195,170],hsv:[172.3,1,.8],sat:390,val:365},{rgb:[0,152,213],hsv:[197.2,1,.8],sat:426,val:365},{rgb:[0,155,210],hsv:[195.7,1,.8],sat:420,val:365},{rgb:[140,107,118],hsv:[340,.2,.5],sat:66,val:365},{rgb:[141,133,91],hsv:[50.4,.4,.6],sat:100,val:365},{rgb:[29,187,149],hsv:[165.6,.8,.7],sat:316,val:365},{rgb:[162,111,91],hsv:[16.9,.4,.6],sat:142,val:364},{rgb:[180,65,119],hsv:[331.8,.6,.7],sat:230,val:364},{rgb:[108,116,140],hsv:[225,.2,.5],sat:64,val:364},{rgb:[216,46,102],hsv:[340.2,.8,.8],sat:340,val:364},{rgb:[0,193,170],hsv:[172.8,1,.8],sat:386,val:363},{rgb:[20,157,186],hsv:[190.5,.9,.7],sat:332,val:363},{rgb:[23,176,164],hsv:[175.3,.9,.7],sat:306,val:363},{rgb:[119,92,152],hsv:[267,.4,.6],sat:120,val:363},{rgb:[185,90,88],hsv:[1.2,.5,.7],sat:194,val:363},{rgb:[130,124,108],hsv:[43.6,.2,.5],sat:44,val:362},{rgb:[0,165,196],hsv:[189.5,1,.8],sat:392,val:361},{rgb:[179,116,66],hsv:[26.5,.6,.7],sat:226,val:361},{rgb:[0,183,178],hsv:[178.4,1,.7],sat:366,val:361},{rgb:[210,75,76],hsv:[359.6,.6,.8],sat:270,val:361},{rgb:[86,88,186],hsv:[238.8,.5,.7],sat:200,val:360},{rgb:[53,193,114],hsv:[146.1,.7,.8],sat:280,val:360},{rgb:[158,141,61],hsv:[49.5,.6,.6],sat:194,val:360},{rgb:[147,131,82],hsv:[45.2,.4,.6],sat:130,val:360},{rgb:[94,89,177],hsv:[243.4,.5,.7],sat:176,val:360},{rgb:[149,102,109],hsv:[351.1,.3,.6],sat:94,val:360},{rgb:[217,78,65],hsv:[5.1,.7,.9],sat:304,val:360},{rgb:[184,107,69],hsv:[19.8,.6,.7],sat:230,val:360},{rgb:[204,73,83],hsv:[355.4,.6,.8],sat:262,val:360},{rgb:[134,142,84],hsv:[68.3,.4,.6],sat:116,val:360},{rgb:[101,178,81],hsv:[107.6,.5,.7],sat:194,val:360},{rgb:[184,101,75],hsv:[14.3,.6,.7],sat:218,val:360},{rgb:[123,121,116],hsv:[42.9,.1,.5],sat:14,val:360},{rgb:[81,119,159],hsv:[210.8,.5,.6],sat:156,val:359},{rgb:[185,82,92],hsv:[354.2,.6,.7],sat:206,val:359},{rgb:[160,60,139],hsv:[312.6,.6,.6],sat:200,val:359},{rgb:[0,152,207],hsv:[195.9,1,.8],sat:414,val:359},{rgb:[127,124,108],hsv:[50.5,.1,.5],sat:38,val:359},{rgb:[172,81,106],hsv:[343.5,.5,.7],sat:182,val:359},{rgb:[177,106,75],hsv:[18.2,.6,.7],sat:204,val:358},{rgb:[192,54,112],hsv:[334.8,.7,.8],sat:276,val:358},{rgb:[84,138,136],hsv:[177.8,.4,.5],sat:108,val:358},{rgb:[213,74,70],hsv:[1.7,.7,.8],sat:286,val:357},{rgb:[208,78,70],hsv:[3.5,.7,.8],sat:276,val:356},{rgb:[88,121,147],hsv:[206.4,.4,.6],sat:118,val:356},{rgb:[169,99,88],hsv:[8.1,.5,.7],sat:162,val:356},{rgb:[0,153,203],hsv:[194.8,1,.8],sat:406,val:356},{rgb:[133,97,126],hsv:[311.7,.3,.5],sat:72,val:356},{rgb:[97,88,171],hsv:[246.5,.5,.7],sat:166,val:356},{rgb:[128,124,103],hsv:[50.4,.2,.5],sat:50,val:355},{rgb:[196,72,87],hsv:[352.7,.6,.8],sat:248,val:355},{rgb:[42,158,155],hsv:[178.4,.7,.6],sat:232,val:355},{rgb:[104,67,183],hsv:[259.1,.6,.7],sat:232,val:354},{rgb:[129,116,109],hsv:[21,.2,.5],sat:40,val:354},{rgb:[146,54,153],hsv:[295.8,.6,.6],sat:198,val:353},{rgb:[0,168,184],hsv:[185.2,1,.7],sat:368,val:352},{rgb:[118,125,109],hsv:[86.3,.1,.5],sat:32,val:352},{rgb:[121,119,112],hsv:[46.7,.1,.5],sat:18,val:352},{rgb:[0,186,166],hsv:[173.5,1,.7],sat:372,val:352},{rgb:[127,87,138],hsv:[287.1,.4,.5],sat:102,val:352},{rgb:[87,175,90],hsv:[122,.5,.7],sat:176,val:352},{rgb:[117,123,111],hsv:[90,.1,.5],sat:24,val:351},{rgb:[69,143,139],hsv:[176.8,.5,.6],sat:148,val:351},{rgb:[80,149,122],hsv:[156.5,.5,.6],sat:138,val:351},{rgb:[0,143,208],hsv:[198.8,1,.8],sat:416,val:351},{rgb:[203,78,70],hsv:[3.6,.7,.8],sat:266,val:351},{rgb:[139,125,87],hsv:[43.8,.4,.5],sat:104,val:351},{rgb:[161,111,79],hsv:[23.4,.5,.6],sat:164,val:351},{rgb:[111,74,165],hsv:[264.4,.6,.6],sat:182,val:350},{rgb:[137,60,153],hsv:[289.7,.6,.6],sat:186,val:350},{rgb:[128,121,101],hsv:[44.4,.2,.5],sat:54,val:350},{rgb:[53,114,183],hsv:[211.8,.7,.7],sat:260,val:350},{rgb:[115,116,119],hsv:[225,0,.5],sat:8,val:350},{rgb:[88,188,74],hsv:[112.6,.6,.7],sat:228,val:350},{rgb:[62,198,89],hsv:[131.9,.7,.8],sat:272,val:349},{rgb:[0,197,152],hsv:[166.3,1,.8],sat:394,val:349},{rgb:[121,107,121],hsv:[300,.1,.5],sat:28,val:349},{rgb:[78,118,152],hsv:[207.6,.5,.6],sat:148,val:348},{rgb:[139,142,67],hsv:[62.4,.5,.6],sat:150,val:348},{rgb:[100,142,105],hsv:[127.1,.3,.6],sat:84,val:347},{rgb:[89,88,170],hsv:[240.7,.5,.7],sat:164,val:347},{rgb:[109,83,155],hsv:[261.7,.5,.6],sat:144,val:347},{rgb:[112,81,153],hsv:[265.8,.5,.6],sat:144,val:346},{rgb:[106,162,78],hsv:[100,.5,.6],sat:168,val:346},{rgb:[115,127,104],hsv:[91.3,.2,.5],sat:46,val:346},{rgb:[196,73,77],hsv:[358,.6,.8],sat:246,val:346},{rgb:[137,117,92],hsv:[33.3,.3,.5],sat:90,val:346},{rgb:[120,103,122],hsv:[293.7,.2,.5],sat:38,val:345},{rgb:[32,180,133],hsv:[160.9,.8,.7],sat:296,val:345},{rgb:[166,86,93],hsv:[354.8,.5,.7],sat:160,val:345},{rgb:[175,57,113],hsv:[331.5,.7,.7],sat:236,val:345},{rgb:[116,124,104],hsv:[84,.2,.5],sat:40,val:344},{rgb:[103,133,108],hsv:[130,.2,.5],sat:60,val:344},{rgb:[41,150,153],hsv:[181.6,.7,.6],sat:224,val:344},{rgb:[148,130,66],hsv:[46.8,.6,.6],sat:164,val:344},{rgb:[11,136,197],hsv:[199.7,.9,.8],sat:372,val:344},{rgb:[115,141,88],hsv:[89.4,.4,.6],sat:106,val:344},{rgb:[98,163,82],hsv:[108.1,.5,.6],sat:162,val:343},{rgb:[100,75,168],hsv:[256.1,.6,.7],sat:186,val:343},{rgb:[199,75,69],hsv:[2.8,.7,.8],sat:260,val:343},{rgb:[0,152,191],hsv:[192.3,1,.7],sat:382,val:343},{rgb:[125,98,120],hsv:[311.1,.2,.5],sat:54,val:343},{rgb:[114,129,99],hsv:[90,.2,.5],sat:60,val:342},{rgb:[72,91,179],hsv:[229.3,.6,.7],sat:214,val:342},{rgb:[182,75,85],hsv:[354.4,.6,.7],sat:214,val:342},{rgb:[170,86,86],hsv:[0,.5,.7],sat:168,val:342},{rgb:[94,137,111],hsv:[143.7,.3,.5],sat:86,val:342},{rgb:[166,81,94],hsv:[350.8,.5,.7],sat:170,val:341},{rgb:[74,132,135],hsv:[183,.5,.5],sat:122,val:341},{rgb:[110,124,106],hsv:[106.7,.1,.5],sat:36,val:340},{rgb:[119,136,85],hsv:[80,.4,.5],sat:102,val:340},{rgb:[190,77,73],hsv:[2.1,.6,.7],sat:234,val:340},{rgb:[0,147,192],hsv:[194.1,1,.8],sat:384,val:339},{rgb:[66,114,159],hsv:[209,.6,.6],sat:186,val:339},{rgb:[186,73,80],hsv:[356.3,.6,.7],sat:226,val:339},{rgb:[183,85,71],hsv:[7.5,.6,.7],sat:224,val:339},{rgb:[0,173,166],hsv:[177.6,1,.7],sat:346,val:339},{rgb:[181,74,84],hsv:[354.4,.6,.7],sat:214,val:339},{rgb:[193,71,75],hsv:[358,.6,.8],sat:244,val:339},{rgb:[0,138,200],hsv:[198.6,1,.8],sat:400,val:338},{rgb:[186,76,76],hsv:[0,.6,.7],sat:220,val:338},{rgb:[132,67,139],hsv:[294.2,.5,.5],sat:144,val:338},{rgb:[117,101,120],hsv:[290.5,.2,.5],sat:38,val:338},{rgb:[171,90,77],hsv:[8.3,.5,.7],sat:188,val:338},{rgb:[143,69,126],hsv:[313.8,.5,.6],sat:148,val:338},{rgb:[157,117,64],hsv:[34.2,.6,.6],sat:186,val:338},{rgb:[93,97,147],hsv:[235.6,.4,.6],sat:108,val:337},{rgb:[118,66,152],hsv:[276.3,.6,.6],sat:172,val:336},{rgb:[122,142,71],hsv:[76.9,.5,.6],sat:142,val:335},{rgb:[152,105,78],hsv:[21.9,.5,.6],sat:148,val:335},{rgb:[126,77,132],hsv:[293.5,.4,.5],sat:110,val:335},{rgb:[117,117,101],hsv:[60,.1,.5],sat:32,val:335},{rgb:[161,85,88],hsv:[357.6,.5,.6],sat:152,val:334},{rgb:[45,167,121],hsv:[157.4,.7,.7],sat:244,val:333},{rgb:[189,76,67],hsv:[4.4,.6,.7],sat:244,val:332},{rgb:[0,176,156],hsv:[173.2,1,.7],sat:352,val:332},{rgb:[88,118,126],hsv:[192.6,.3,.5],sat:76,val:332},{rgb:[160,66,106],hsv:[334.5,.6,.6],sat:188,val:332},{rgb:[145,112,75],hsv:[31.7,.5,.6],sat:140,val:332},{rgb:[91,81,159],hsv:[247.7,.5,.6],sat:156,val:331},{rgb:[0,193,138],hsv:[162.9,1,.8],sat:386,val:331},{rgb:[0,123,208],hsv:[204.5,1,.8],sat:416,val:331},{rgb:[164,81,86],hsv:[356.4,.5,.6],sat:166,val:331},{rgb:[165,72,94],hsv:[345.8,.6,.6],sat:186,val:331},{rgb:[147,113,70],hsv:[33.5,.5,.6],sat:154,val:330},{rgb:[119,76,135],hsv:[283.7,.4,.5],sat:118,val:330},{rgb:[173,85,72],hsv:[7.7,.6,.7],sat:202,val:330},{rgb:[98,105,127],hsv:[225.5,.2,.5],sat:58,val:330},{rgb:[137,104,89],hsv:[18.8,.4,.5],sat:96,val:330},{rgb:[74,124,132],hsv:[188.3,.4,.5],sat:116,val:330},{rgb:[111,142,77],hsv:[88.6,.5,.6],sat:130,val:330},{rgb:[172,88,70],hsv:[10.6,.6,.7],sat:204,val:330},{rgb:[82,122,125],hsv:[184.2,.3,.5],sat:86,val:329},{rgb:[116,98,115],hsv:[303.3,.2,.5],sat:36,val:329},{rgb:[111,109,109],hsv:[0,0,.4],sat:4,val:329},{rgb:[116,113,100],hsv:[48.8,.1,.5],sat:32,val:329},{rgb:[106,134,89],hsv:[97.3,.3,.5],sat:90,val:329},{rgb:[87,112,130],hsv:[205.1,.3,.5],sat:86,val:329},{rgb:[109,109,111],hsv:[240,0,.4],sat:4,val:329},{rgb:[112,62,155],hsv:[272.3,.6,.6],sat:186,val:329},{rgb:[157,97,74],hsv:[16.6,.5,.6],sat:166,val:328},{rgb:[142,83,103],hsv:[339.7,.4,.6],sat:118,val:328},{rgb:[147,87,94],hsv:[353,.4,.6],sat:120,val:328},{rgb:[86,106,136],hsv:[216,.4,.5],sat:100,val:328},{rgb:[85,105,138],hsv:[217.4,.4,.5],sat:106,val:328},{rgb:[108,94,126],hsv:[266.3,.3,.5],sat:64,val:328},{rgb:[117,98,112],hsv:[315.8,.2,.5],sat:38,val:327},{rgb:[146,107,74],hsv:[27.5,.5,.6],sat:144,val:327},{rgb:[160,72,94],hsv:[345,.6,.6],sat:176,val:326},{rgb:[92,76,158],hsv:[251.7,.5,.6],sat:164,val:326},{rgb:[101,129,95],hsv:[109.4,.3,.5],sat:68,val:325},{rgb:[176,90,59],hsv:[15.9,.7,.7],sat:234,val:325},{rgb:[178,68,79],hsv:[354,.6,.7],sat:220,val:325},{rgb:[128,73,124],hsv:[304.4,.4,.5],sat:110,val:325},{rgb:[36,162,127],hsv:[163.3,.8,.6],sat:252,val:325},{rgb:[119,113,93],hsv:[46.2,.2,.5],sat:52,val:325},{rgb:[139,89,96],hsv:[351.6,.4,.5],sat:100,val:324},{rgb:[164,72,88],hsv:[349.6,.6,.6],sat:184,val:324},{rgb:[76,146,102],hsv:[142.3,.5,.6],sat:140,val:324},{rgb:[84,121,119],hsv:[176.8,.3,.5],sat:74,val:324},{rgb:[181,76,67],hsv:[4.7,.6,.7],sat:228,val:324},{rgb:[130,95,98],hsv:[354.9,.3,.5],sat:70,val:323},{rgb:[137,100,86],hsv:[16.5,.4,.5],sat:102,val:323},{rgb:[109,114,100],hsv:[81.4,.1,.4],sat:28,val:323},{rgb:[105,123,95],hsv:[98.6,.2,.5],sat:56,val:323},{rgb:[57,109,157],hsv:[208.8,.6,.6],sat:200,val:323},{rgb:[106,109,108],hsv:[160,0,.4],sat:6,val:323},{rgb:[0,168,155],hsv:[175.4,1,.7],sat:336,val:323},{rgb:[146,86,91],hsv:[355,.4,.6],sat:120,val:323},{rgb:[0,178,144],hsv:[168.5,1,.7],sat:356,val:322},{rgb:[131,114,77],hsv:[41.1,.4,.5],sat:108,val:322},{rgb:[162,95,65],hsv:[18.6,.6,.6],sat:194,val:322},{rgb:[116,112,94],hsv:[49.1,.2,.5],sat:44,val:322},{rgb:[51,178,93],hsv:[139.8,.7,.7],sat:254,val:322},{rgb:[118,107,96],hsv:[30,.2,.5],sat:44,val:321},{rgb:[130,103,88],hsv:[21.4,.3,.5],sat:84,val:321},{rgb:[49,110,161],hsv:[207.3,.7,.6],sat:224,val:320},{rgb:[122,94,104],hsv:[338.6,.2,.5],sat:56,val:320},{rgb:[138,83,99],hsv:[342.5,.4,.5],sat:110,val:320},{rgb:[110,117,92],hsv:[76.8,.2,.5],sat:50,val:319},{rgb:[14,119,186],hsv:[203.4,.9,.7],sat:344,val:319},{rgb:[101,98,120],hsv:[248.2,.2,.5],sat:44,val:319},{rgb:[67,88,163],hsv:[226.9,.6,.6],sat:192,val:318},{rgb:[135,83,100],hsv:[340.4,.4,.5],sat:104,val:318},{rgb:[179,74,65],hsv:[4.7,.6,.7],sat:228,val:318},{rgb:[49,177,92],hsv:[140.2,.7,.7],sat:256,val:318},{rgb:[110,137,71],hsv:[84.5,.5,.5],sat:132,val:318},{rgb:[78,156,84],hsv:[124.6,.5,.6],sat:156,val:318},{rgb:[68,144,106],hsv:[150,.5,.6],sat:152,val:318},{rgb:[131,87,99],hsv:[343.6,.3,.5],sat:88,val:317},{rgb:[160,79,78],hsv:[.7,.5,.6],sat:164,val:317},{rgb:[79,101,137],hsv:[217.2,.4,.5],sat:116,val:317},{rgb:[88,131,98],hsv:[134,.3,.5],sat:86,val:317},{rgb:[116,113,87],hsv:[53.8,.3,.5],sat:58,val:316},{rgb:[97,120,98],hsv:[122.6,.2,.5],sat:46,val:315},{rgb:[139,83,93],hsv:[349.3,.4,.5],sat:112,val:315},{rgb:[108,106,101],hsv:[42.9,.1,.4],sat:14,val:315},{rgb:[144,79,92],hsv:[348,.5,.6],sat:130,val:315},{rgb:[105,115,95],hsv:[90,.2,.5],sat:40,val:315},{rgb:[31,152,132],hsv:[170.1,.8,.6],sat:242,val:315},{rgb:[92,130,92],hsv:[120,.3,.5],sat:76,val:314},{rgb:[175,74,65],hsv:[4.9,.6,.7],sat:220,val:314},{rgb:[128,106,80],hsv:[32.5,.4,.5],sat:96,val:314},{rgb:[106,94,113],hsv:[277.9,.2,.4],sat:38,val:313},{rgb:[104,97,111],hsv:[270,.1,.4],sat:28,val:312},{rgb:[129,69,114],hsv:[315,.5,.5],sat:120,val:312},{rgb:[99,117,96],hsv:[111.4,.2,.5],sat:42,val:312},{rgb:[6,197,109],hsv:[152.4,1,.8],sat:382,val:312},{rgb:[127,83,101],hsv:[335.5,.3,.5],sat:88,val:311},{rgb:[26,189,96],hsv:[145.8,.9,.7],sat:326,val:311},{rgb:[140,103,68],hsv:[29.2,.5,.5],sat:144,val:311},{rgb:[90,124,97],hsv:[132.4,.3,.5],sat:68,val:311},{rgb:[103,103,105],hsv:[240,0,.4],sat:4,val:311},{rgb:[159,75,77],hsv:[358.6,.5,.6],sat:168,val:311},{rgb:[101,105,104],hsv:[165,0,.4],sat:8,val:310},{rgb:[85,100,125],hsv:[217.5,.3,.5],sat:80,val:310},{rgb:[78,145,87],hsv:[128.1,.5,.6],sat:134,val:310},{rgb:[97,135,78],hsv:[100,.4,.5],sat:114,val:310},{rgb:[47,101,162],hsv:[211.8,.7,.6],sat:230,val:310},{rgb:[104,69,136],hsv:[271.3,.5,.5],sat:134,val:309},{rgb:[118,99,92],hsv:[16.2,.2,.5],sat:52,val:309},{rgb:[101,90,118],hsv:[263.6,.2,.5],sat:56,val:309},{rgb:[0,181,128],hsv:[162.4,1,.7],sat:362,val:309},{rgb:[90,106,113],hsv:[198.3,.2,.4],sat:46,val:309},{rgb:[148,63,98],hsv:[335.3,.6,.6],sat:170,val:309},{rgb:[154,82,72],hsv:[7.3,.5,.6],sat:164,val:308},{rgb:[115,115,77],hsv:[60,.3,.5],sat:76,val:307},{rgb:[119,122,66],hsv:[63.2,.5,.5],sat:112,val:307},{rgb:[94,98,115],hsv:[228.6,.2,.5],sat:42,val:307},{rgb:[139,93,74],hsv:[17.5,.5,.5],sat:130,val:306},{rgb:[142,93,71],hsv:[18.6,.5,.6],sat:142,val:306},{rgb:[103,90,113],hsv:[273.9,.2,.4],sat:46,val:306},{rgb:[142,94,69],hsv:[20.5,.5,.6],sat:146,val:305},{rgb:[122,85,98],hsv:[338.9,.3,.5],sat:74,val:305},{rgb:[96,79,130],hsv:[260,.4,.5],sat:102,val:305},{rgb:[0,148,157],hsv:[183.4,1,.6],sat:314,val:305},{rgb:[2,139,163],hsv:[188.9,1,.6],sat:322,val:304},{rgb:[144,85,75],hsv:[8.7,.5,.6],sat:138,val:304},{rgb:[67,152,85],hsv:[132.7,.6,.6],sat:170,val:304},{rgb:[99,103,102],hsv:[165,0,.4],sat:8,val:304},{rgb:[50,102,152],hsv:[209.4,.7,.6],sat:204,val:304},{rgb:[107,105,91],hsv:[52.5,.1,.4],sat:32,val:303},{rgb:[93,72,138],hsv:[259.1,.5,.5],sat:132,val:303},{rgb:[98,126,79],hsv:[95.7,.4,.5],sat:94,val:303},{rgb:[88,73,141],hsv:[253.2,.5,.6],sat:136,val:302},{rgb:[145,66,91],hsv:[341,.5,.6],sat:158,val:302},{rgb:[84,136,81],hsv:[116.7,.4,.5],sat:110,val:301},{rgb:[0,133,168],hsv:[192.5,1,.7],sat:336,val:301},{rgb:[83,98,120],hsv:[215.7,.3,.5],sat:74,val:301},{rgb:[121,77,103],hsv:[324.5,.4,.5],sat:88,val:301},{rgb:[107,113,81],hsv:[71.3,.3,.4],sat:64,val:301},{rgb:[151,81,68],hsv:[9.4,.5,.6],sat:166,val:300},{rgb:[100,100,100],hsv:[0,0,.4],sat:0,val:300},{rgb:[138,85,76],hsv:[8.7,.4,.5],sat:124,val:299},{rgb:[0,192,107],hsv:[153.4,1,.8],sat:384,val:299},{rgb:[59,94,146],hsv:[215.9,.6,.6],sat:174,val:299},{rgb:[106,102,91],hsv:[44,.1,.4],sat:30,val:299},{rgb:[92,89,118],hsv:[246.2,.2,.5],sat:58,val:299},{rgb:[109,118,71],hsv:[71.5,.4,.5],sat:94,val:298},{rgb:[133,91,74],hsv:[17.3,.4,.5],sat:118,val:298},{rgb:[61,115,122],hsv:[186.9,.5,.5],sat:122,val:298},{rgb:[95,77,126],hsv:[262,.4,.5],sat:98,val:298},{rgb:[119,87,91],hsv:[352.5,.3,.5],sat:64,val:297},{rgb:[114,110,73],hsv:[54.1,.4,.4],sat:82,val:297},{rgb:[142,85,70],hsv:[12.5,.5,.6],sat:144,val:297},{rgb:[122,100,75],hsv:[31.9,.4,.5],sat:94,val:297},{rgb:[127,94,76],hsv:[21.2,.4,.5],sat:102,val:297},{rgb:[88,111,97],hsv:[143.5,.2,.4],sat:46,val:296},{rgb:[131,90,75],hsv:[16.1,.4,.5],sat:112,val:296},{rgb:[98,104,94],hsv:[96,.1,.4],sat:20,val:296},{rgb:[160,70,66],hsv:[2.6,.6,.6],sat:188,val:296},{rgb:[120,102,74],hsv:[36.5,.4,.5],sat:92,val:296},{rgb:[126,83,86],hsv:[355.8,.3,.5],sat:86,val:295},{rgb:[75,110,110],hsv:[180,.3,.4],sat:70,val:295},{rgb:[0,155,140],hsv:[174.2,1,.6],sat:310,val:295},{rgb:[100,103,91],hsv:[75,.1,.4],sat:24,val:294},{rgb:[0,159,135],hsv:[170.9,1,.6],sat:318,val:294},{rgb:[0,174,119],hsv:[161,1,.7],sat:348,val:293},{rgb:[45,102,146],hsv:[206.1,.7,.6],sat:202,val:293},{rgb:[93,95,105],hsv:[230,.1,.4],sat:24,val:293},{rgb:[117,70,105],hsv:[315.3,.4,.5],sat:94,val:292},{rgb:[80,115,97],hsv:[149.1,.3,.5],sat:70,val:292},{rgb:[100,98,94],hsv:[40,.1,.4],sat:12,val:292},{rgb:[0,159,133],hsv:[170.2,1,.6],sat:318,val:292},{rgb:[91,80,121],hsv:[256.1,.3,.5],sat:82,val:292},{rgb:[121,96,75],hsv:[27.4,.4,.5],sat:92,val:292},{rgb:[63,113,115],hsv:[182.3,.5,.5],sat:104,val:291},{rgb:[155,73,63],hsv:[6.5,.6,.6],sat:184,val:291},{rgb:[82,115,93],hsv:[140,.3,.5],sat:66,val:290},{rgb:[124,87,79],hsv:[10.7,.4,.5],sat:90,val:290},{rgb:[80,111,99],hsv:[156.8,.3,.4],sat:62,val:290},{rgb:[111,88,91],hsv:[352.2,.2,.4],sat:46,val:290},{rgb:[86,91,112],hsv:[228.5,.2,.4],sat:52,val:289},{rgb:[128,87,74],hsv:[14.4,.4,.5],sat:108,val:289},{rgb:[114,72,102],hsv:[317.1,.4,.4],sat:84,val:288},{rgb:[104,93,91],hsv:[9.2,.1,.4],sat:26,val:288},{rgb:[104,93,91],hsv:[9.2,.1,.4],sat:26,val:288},{rgb:[138,80,70],hsv:[8.8,.5,.5],sat:136,val:288},{rgb:[86,109,90],hsv:[130.4,.2,.4],sat:46,val:285},{rgb:[0,160,125],hsv:[166.9,1,.6],sat:320,val:285},{rgb:[96,90,99],hsv:[280,.1,.4],sat:18,val:285},{rgb:[108,100,76],hsv:[45,.3,.4],sat:64,val:284},{rgb:[67,94,123],hsv:[211.1,.5,.5],sat:112,val:284},{rgb:[98,73,113],hsv:[277.5,.4,.4],sat:80,val:284},{rgb:[58,123,102],hsv:[160.6,.5,.5],sat:130,val:283},{rgb:[91,96,96],hsv:[180,.1,.4],sat:10,val:283},{rgb:[85,84,114],hsv:[242,.3,.4],sat:60,val:283},{rgb:[76,122,84],hsv:[130.4,.4,.5],sat:92,val:282},{rgb:[62,86,134],hsv:[220,.5,.5],sat:144,val:282},{rgb:[119,70,93],hsv:[331.8,.4,.5],sat:98,val:282},{rgb:[99,93,89],hsv:[24,.1,.4],sat:20,val:281},{rgb:[0,103,178],hsv:[205.3,1,.7],sat:356,val:281},{rgb:[97,54,130],hsv:[273.9,.6,.5],sat:152,val:281},{rgb:[68,112,101],hsv:[165,.4,.4],sat:88,val:281},{rgb:[96,95,90],hsv:[50,.1,.4],sat:12,val:281},{rgb:[69,118,94],hsv:[150.6,.4,.5],sat:98,val:281},{rgb:[0,117,163],hsv:[196.9,1,.6],sat:326,val:280},{rgb:[115,86,79],hsv:[11.7,.3,.5],sat:72,val:280},{rgb:[24,90,165],hsv:[211.9,.9,.6],sat:282,val:279},{rgb:[0,156,123],hsv:[167.3,1,.6],sat:312,val:279},{rgb:[109,80,90],hsv:[339.3,.3,.4],sat:58,val:279},{rgb:[0,179,100],hsv:[153.5,1,.7],sat:358,val:279},{rgb:[129,77,72],hsv:[5.3,.4,.5],sat:114,val:278},{rgb:[124,88,66],hsv:[22.8,.5,.5],sat:116,val:278},{rgb:[97,50,130],hsv:[275.3,.6,.5],sat:160,val:277},{rgb:[90,93,94],hsv:[195,0,.4],sat:8,val:277},{rgb:[106,95,74],hsv:[39.4,.3,.4],sat:64,val:275},{rgb:[69,88,118],hsv:[216.7,.4,.5],sat:98,val:275},{rgb:[56,124,95],hsv:[154.4,.5,.5],sat:136,val:275},{rgb:[78,104,93],hsv:[154.6,.3,.4],sat:52,val:275},{rgb:[75,115,85],hsv:[135,.3,.5],sat:80,val:275},{rgb:[90,95,89],hsv:[110,.1,.4],sat:12,val:274},{rgb:[78,78,118],hsv:[240,.3,.5],sat:80,val:274},{rgb:[0,157,115],hsv:[163.9,1,.6],sat:314,val:272},{rgb:[94,89,89],hsv:[0,.1,.4],sat:10,val:272},{rgb:[109,89,74],hsv:[25.7,.3,.4],sat:70,val:272},{rgb:[90,90,92],hsv:[240,0,.4],sat:4,val:272},{rgb:[0,157,115],hsv:[163.9,1,.6],sat:314,val:272},{rgb:[76,94,101],hsv:[196.8,.2,.4],sat:50,val:271},{rgb:[0,126,145],hsv:[187.9,1,.6],sat:290,val:271},{rgb:[89,83,98],hsv:[264,.2,.4],sat:30,val:270},{rgb:[76,80,114],hsv:[233.7,.3,.4],sat:76,val:270},{rgb:[93,91,86],hsv:[42.9,.1,.4],sat:14,val:270},{rgb:[73,99,98],hsv:[177.7,.3,.4],sat:52,val:270},{rgb:[113,77,79],hsv:[356.7,.3,.4],sat:72,val:269},{rgb:[106,69,93],hsv:[321.1,.3,.4],sat:74,val:268},{rgb:[92,82,94],hsv:[290,.1,.4],sat:24,val:268},{rgb:[66,83,119],hsv:[220.8,.4,.5],sat:106,val:268},{rgb:[109,85,73],hsv:[20,.3,.4],sat:72,val:267},{rgb:[0,121,145],hsv:[189.9,1,.6],sat:290,val:266},{rgb:[111,82,72],hsv:[15.4,.4,.4],sat:78,val:265},{rgb:[93,87,85],hsv:[15,.1,.4],sat:16,val:265},{rgb:[113,75,77],hsv:[356.8,.3,.4],sat:76,val:265},{rgb:[77,93,95],hsv:[186.7,.2,.4],sat:36,val:265},{rgb:[0,119,145],hsv:[190.8,1,.6],sat:290,val:264},{rgb:[84,95,85],hsv:[125.5,.1,.4],sat:22,val:264},{rgb:[93,87,83],hsv:[24,.1,.4],sat:20,val:263},{rgb:[0,172,90],hsv:[151.4,1,.7],sat:344,val:262},{rgb:[69,107,85],hsv:[145.3,.4,.4],sat:76,val:261},{rgb:[0,120,140],hsv:[188.6,1,.5],sat:280,val:260},{rgb:[53,90,117],hsv:[205.3,.5,.5],sat:128,val:260},{rgb:[106,82,70],hsv:[20,.3,.4],sat:72,val:258},{rgb:[74,79,105],hsv:[230.3,.3,.4],sat:62,val:258},{rgb:[75,94,87],hsv:[157.9,.2,.4],sat:38,val:256},{rgb:[0,164,92],hsv:[153.7,1,.6],sat:328,val:256},{rgb:[71,100,85],hsv:[149,.3,.4],sat:58,val:256},{rgb:[89,68,99],hsv:[280.6,.3,.4],sat:62,val:256},{rgb:[74,87,94],hsv:[201,.2,.4],sat:40,val:255},{rgb:[79,82,93],hsv:[227.1,.2,.4],sat:28,val:254},{rgb:[82,86,85],hsv:[165,0,.3],sat:8,val:253},{rgb:[0,146,107],hsv:[164,1,.6],sat:292,val:253},{rgb:[102,81,70],hsv:[20.6,.3,.4],sat:64,val:253},{rgb:[106,76,70],hsv:[10,.3,.4],sat:72,val:252},{rgb:[0,167,85],hsv:[150.5,1,.7],sat:334,val:252},{rgb:[93,76,83],hsv:[335.3,.2,.4],sat:34,val:252},{rgb:[72,79,100],hsv:[225,.3,.4],sat:56,val:251},{rgb:[25,108,118],hsv:[186.5,.8,.5],sat:186,val:251},{rgb:[53,88,110],hsv:[203.2,.5,.4],sat:114,val:251},{rgb:[101,80,69],hsv:[20.6,.3,.4],sat:64,val:250},{rgb:[99,80,70],hsv:[20.7,.3,.4],sat:58,val:249},{rgb:[12,124,112],hsv:[173.6,.9,.5],sat:224,val:248},{rgb:[15,155,77],hsv:[146.6,.9,.6],sat:280,val:247},{rgb:[47,90,110],hsv:[199,.6,.4],sat:126,val:247},{rgb:[0,113,131],hsv:[188.2,1,.5],sat:262,val:244},{rgb:[78,83,83],hsv:[180,.1,.3],sat:10,val:244},{rgb:[99,72,72],hsv:[0,.3,.4],sat:54,val:243},{rgb:[72,78,92],hsv:[222,.2,.4],sat:40,val:242},{rgb:[75,77,87],hsv:[230,.1,.3],sat:24,val:239},{rgb:[90,68,80],hsv:[327.3,.2,.4],sat:44,val:238},{rgb:[63,92,83],hsv:[161.4,.3,.4],sat:58,val:238},{rgb:[51,101,86],hsv:[162,.5,.4],sat:100,val:238},{rgb:[43,99,96],hsv:[176.8,.6,.4],sat:112,val:238},{rgb:[72,82,83],hsv:[185.5,.1,.3],sat:22,val:237},{rgb:[0,146,89],hsv:[156.6,1,.6],sat:292,val:235},{rgb:[0,150,83],hsv:[153.2,1,.6],sat:300,val:233},{rgb:[66,82,85],hsv:[189.5,.2,.3],sat:38,val:233},{rgb:[72,78,82],hsv:[204,.1,.3],sat:20,val:232},{rgb:[64,89,78],hsv:[153.6,.3,.3],sat:50,val:231},{rgb:[92,72,67],hsv:[12,.3,.4],sat:50,val:231},{rgb:[79,73,70],hsv:[20,.1,.3],sat:18,val:222}]},366:(a,s)=\u003e{Object.defineProperty(s,\"__esModule\",{value:!0}),s.gridLines=void 0,s.gridLines=[[[[-8,0,-8,0,-8,0],[0,8,0,8,0,8]],[[8,8,8,8,8,8],[0,-8,0,-8,0,-8]],[[8,0,8,0,8,0],[8,-8,8,-8,8,-8]]],[[[8,8,8,8,8,8],[0,-8,0,-8,0,-8]],[[8,0,8,0,8,0],[8,-8,8,-8,8,-8]],[[0,8,0,3.6,0,8],[-8,0,-8,0,-3.6,0]]],[[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[0,-8,0,-8,0,-8],[8,8,8,8,8,8]],[[-8,-8,-8,-8,-8,-8],[0,8,0,8,0,8]]],[[[-8,0,-8,0,-8,0],[-8,8,-8,8,-8,8]],[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[0,-8,0,-8,0,-8],[8,8,8,8,8,8]],[[-8,-8,-8,-8,-8,-8],[0,8,0,8,0,8]]],[[[-8,8,-8,8,-8,8],[8,-8,8,-8,8,-8]],[[8,0,8,0,8,0],[0,8,0,8,0,8]],[[0,-8,0,-8,0,-8],[-8,0,-8,0,-8,0]]],[[[8,8,8,8,8,8],[-8,-8,-8,-8,-8,-8]],[[0,-8,0,-3.6,0,-8],[8,0,8,0,3.6,0]],[[0,8,0,3.6,0,8],[-8,0,-8,0,-3.6,0]]],[[[-8,8,-8,8,-8,8],[0,0,0,0,0,0]],[[8,0,8,0,8,0],[0,8,0,8,0,8]],[[8,-8,8,-8,8,-8],[0,0,0,0,0,0]],[[-8,-8,-8,-8,-8,-8],[0,0,0,0,0,0]]],[[[0,8,0,8,0,8],[-8,8,-8,8,-8,8]],[[8,0,8,0,8,0],[0,0,0,0,0,0]],[[8,8,8,8,8,8],[0,8,0,8,0,8]],[[0,-8,0,-8,0,-8],[0,0,0,0,0,0]],[[-8,8,-8,8,-8,8],[-8,0,-8,0,-8,0]],[[-8,-8,-8,-8,-8,-8],[-8,0,-8,0,-8,0]]],[[[0,8,0,8,0,8],[-8,8,-8,8,-8,8]],[[8,8,8,8,8,8],[0,8,0,8,0,8]],[[0,-8,0,-8,0,-8],[8,0,8,0,8,0]],[[-8,8,-8,8,-8,8],[-8,0,-8,0,-8,0]],[[-8,-8,-8,-8,-8,-8],[-8,0,-8,0,-8,0]]],[[[0,-8,0,-3.6,0,-8],[8,0,8,0,3.6,0]],[[0,8,0,8,0,8],[-8,8,-8,8,-8,8]],[[8,8,8,8,8,8],[0,8,0,8,0,8]],[[-8,8,-8,8,-8,8],[-8,0,-8,0,-8,0]],[[-8,-8,-8,-8,-8,-8],[-8,0,-8,0,-8,0]]],[[[8,-8,8,-8,8,-8],[0,0,0,0,0,0]],[[-8,-8,-8,-8,-8,-8],[0,0,0,0,0,0]],[[8,0,8,0,8,0],[0,8,0,8,0,8]],[[-8,8,-8,8,-8,8],[0,8,0,8,0,8]]],[[[0,0,0,0,0,0],[-8,-8,-8,-8,-8,-8]],[[-8,0,-8,0,-8,0],[0,8,0,8,0,8]],[[8,-8,8,-8,8,-8],[0,0,0,0,0,0]],[[8,0,8,0,8,0],[0,8,0,8,0,8]]],[[[8,-8,8,-8,8,-8],[0,-8,0,-8,0,-8]],[[0,-8,0,-8,0,-8],[-8,-8,-8,-8,-8,-8]],[[-8,8,-8,3.6,-8,8],[0,0,0,0,-4.4,0]],[[0,0,4.4,0,0,0],[8,8,8,8,8,3.6]]],[[[0,0,0,0,0,0],[8,8,8,8,8,8]],[[8,-8,8,-8,8,-8],[0,-8,0,-8,0,-8]],[[-8,8,-8,8,-8,8],[0,0,0,0,0,0]],[[-8,-8,-8,-8,-8,-8],[0,-8,0,-8,0,-8]]],[[[0,-8,0,-8,0,-8],[-8,-8,-8,-8,-8,-8]],[[8,-8,8,-8,8,-8],[0,-8,0,-8,0,-8]],[[0,0,0,4.4,0,0],[-8,8,-8,8,-3.6,8]],[[0,0,0,4.4,0,0],[8,8,8,8,3.6,8]]],[[[8,0,8,0,8,0],[8,8,8,8,8,8]],[[0,-8,0,-8,0,-8],[0,8,0,8,0,8]],[[-8,0,-8,0,-8,0],[-8,8,-8,8,-8,8]]],[[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[0,-8,0,-8,0,-8],[0,8,0,8,0,8]],[[-8,0,-8,0,-8,0],[-8,8,-8,8,-8,8]]],[[[8,0,8,0,8,0],[8,8,8,8,8,8]],[[0,-8,0,-8,0,-8],[0,8,0,8,0,8]],[[-8,0,-8,0,-8,0],[-8,8,-8,8,-8,8]],[[-8,-8,-8,-8,-8,-8],[-8,0,-8,0,-8,0]]],[[[8,8,8,8,8,8],[0,0,0,0,0,0]],[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[0,-8,0,-8,0,-8],[0,0,0,0,0,0]],[[0,8,0,8,0,8],[-8,0,-8,0,-8,0]],[[-8,-8,-8,-8,-8,-8],[-8,0,-8,0,-8,0]]],[[[-8,8,-8,8,-8,8],[0,8,0,8,0,8]],[[0,-8,0,-8,0,-8],[8,-8,8,-8,8,-8]],[[0,-8,0,-8,0,-8],[8,8,8,8,8,8]],[[-8,-8,-8,-8,-8,-8],[0,8,0,8,0,8]]],[[[8,0,8,0,8,0],[8,8,8,8,8,8]],[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[0,-8,0,-8,0,-8],[0,8,0,8,0,8]],[[-8,0,-8,0,-8,0],[-8,8,-8,8,-8,8]],[[-8,-8,-8,-8,-8,-8],[-8,0,-8,0,-8,0]]],[[[8,0,8,0,8,0],[8,8,8,8,8,8]],[[0,-8,0,-8,0,-8],[0,0,0,0,0,0]],[[0,0,0,0,0,0],[0,8,0,8,0,8]],[[0,0,0,0,0,0],[-8,0,-8,0,-8,0]]],[[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[8,0,8,0,8,0],[8,8,8,8,8,8]],[[0,-8,0,-8,0,-8],[0,0,0,0,0,0]],[[0,0,0,0,0,0],[0,8,0,8,0,8]],[[0,0,0,0,0,0],[-8,0,-8,0,-8,0]]],[[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[8,0,8,0,8,0],[8,8,8,8,8,8]],[[0,-8,0,-8,0,-8],[0,0,0,0,0,0]],[[0,0,0,0,0,0],[0,8,0,8,0,8]],[[0,-8,0,-8,0,-8],[-8,-8,-8,-8,-8,-8]]],[[[0,0,0,0,0,0],[-8,8,-8,8,-8,8]],[[8,-8,8,-8,8,-8],[0,0,0,0,0,0]],[[0,0,0,0,0,0],[0,8,0,8,0,8]],[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]],[[8,0,8,0,8,0],[8,8,8,8,8,8]]],[[[0,8,0,8,0,8],[-8,0,-8,0,-8,0]],[[-8,-8,-8,-8,-8,-8],[0,-8,0,-8,0,-8]],[[8,0,8,0,8,0],[0,8,0,8,0,8]],[[8,-8,8,-8,8,-8],[0,-8,0,-8,0,-8]]],[[[0,-8,0,-8,0,-8],[-8,0,-8,0,-8,0]],[[0,-8,0,-8,0,-8],[8,0,8,0,8,0]],[[8,0,8,0,8,0],[-8,8,-8,8,-8,8]]],[[[-8,0,-8,0,-8,0],[0,-8,0,-8,0,-8]],[[-8,8,-8,8,-8,8],[8,0,8,0,8,0]],[[0,-8,0,-8,0,-8],[8,-8,8,-8,8,-8]],[[8,-8,8,-8,8,-8],[8,0,8,0,8,0]]],[[[8,-8,8,-3.6,8,-8],[0,0,0,0,4.4,0]],[[-8,-8,-8,-3.6,-8,-8],[0,0,0,0,-4.4,0]],[[-8,8,-8,3.6,-8,8],[0,0,0,0,-4.4,0]]],[[[0,-8,0,-8,0,-8],[-8,-8,-8,-8,-8,-8]],[[8,-8,8,-8,8,-8],[0,-8,0,-8,0,-8]],[[0,8,0,3.6,0,8],[8,0,8,0,3.6,0]],[[0,8,0,3.6,0,8],[-8,0,-8,0,-3.6,0]]],[[[0,8,0,8,0,8],[0,0,0,0,0,0]],[[-8,-8,-3.6,-8,-8,-8],[0,0,0,0,0,-4.4]],[[0,0,0,-4.4,0,0],[8,-8,8,-8,3.6,-8]]],[[[0,8,0,8,0,8],[0,0,0,0,0,0]],[[-8,-8,-3.6,-8,-8,-8],[0,0,0,0,0,-4.4]],[[0,0,4.4,0,0,0],[8,-8,8,-8,8,-3.6]]],[[[0,0,0,0,0,0],[0,-8,0,-8,0,-8]],[[-8,8,-8,3.6,-8,8],[0,0,0,0,-4.4,0]],[[0,0,4.4,0,0,0],[8,8,8,8,8,3.6]]],[[[-8,8,-8,8,-8,8],[-8,0,-8,0,-8,0]],[[0,8,0,8,0,8],[0,0,0,0,0,0]],[[-8,-8,-3.6,-8,-8,-8],[0,0,0,0,0,-4.4]],[[0,0,4.4,0,0,0],[8,-8,8,-8,8,-3.6]]],[[[0,0,0,0,0,0],[-8,8,-8,8,-8,8]],[[0,0,0,-4.4,0,0],[-8,-8,-8,-8,-3.6,-8]],[[8,8,8,3.6,8,8],[0,0,0,0,4.4,0]]],[[[8,-8,8,-8,8,-8],[0,0,0,0,0,0]],[[0,0,0,-4.4,0,0],[-8,-8,-8,-8,-3.6,-8]],[[8,8,8,3.6,8,8],[0,0,0,0,4.4,0]]],[[[0,0,0,0,0,0],[0,8,0,8,0,8]],[[0,0,0,-4.4,0,0],[-8,-8,-8,-8,-3.6,-8]],[[8,8,8,3.6,8,8],[0,0,0,0,4.4,0]]],[[[0,8,0,8,0,8],[-8,8,-8,8,-8,8]],[[8,8,8,8,8,8],[0,8,0,8,0,8]],[[-8,-8,-8,-3.6,-8,-8],[0,0,0,0,-4.4,0]],[[8,8,8,3.6,8,8],[0,0,0,0,4.4,0]]]]},891:(a,s)=\u003e{function v(a,s){return Math.round(a[0])===Math.round(s[0])\u0026\u0026Math.round(a[1])===Math.round(s[1])}function t(a,s){var t=a[0],r=a[a.length-1],h=s[0],l=s[s.length-1];return a.length===s.length\u0026\u0026(v(t,h)\u0026\u0026v(r,l)||v(t,l)\u0026\u0026v(r,h))}function r(a,s){return a.points.length===s.points.length\u0026\u0026a.left===s.left\u0026\u0026a.right===s.right\u0026\u0026a.top===s.top\u0026\u0026a.bottom===s.bottom\u0026\u0026a.sumX===s.sumX\u0026\u0026a.sumY===s.sumY}function h(a){a.sort((function(a,s){return s.val-a.val}))}function l(a){a.sort((function(a,s){return s.sat-a.sat}))}function g(a,s){a.sort((function(a,v){return(360-a.hsv[0]+s)%360-(360-v.hsv[0]+s)%360}))}function b(a,s){var v=a.length;l(a);for(var t=0;t\u003cv;t++)a[t].sat2=t;h(a);for(var r=0;r\u003cv;r++)a[r].val2=r;a.sort((function(a,v){return a.sat2*s+a.val2*(1-s)-(v.sat2*s+v.val2*(1-s))}))}function n(a){return JSON.parse(JSON.stringify(a))}Object.defineProperty(s,\"__esModule\",{value:!0}),s.round2=s.makeArrayArray=s.deepCopy=s.easingInOut=s.easing=s.satValSort=s.hueSortPlus=s.hueSort=s.saturationSort=s.valueSort=s.hasPoint=s.countSameLineSur2=s.decomposeLine=s.isSameOmitObj=s.omitSameObject=s.omitSameLine=s.connectLine=s.makeLoopLine=s.isLoop=s.isSameLineComp=s.isSameLine=s.isSamePoint=s.shiftXoObj=s.shiftXP6s=s.shiftXP6=s.flip=s.rotate=s.draw=s.makeColor=s.stringToRGB=s.pormper=s.porm=void 0,s.porm=function(){return Math.random()\u003c.5?1:-1},s.pormper=function(a){return Math.random()\u003ca?1:-1},s.stringToRGB=function(a){var s=a.replace(/[^\\d,]/g,\"\").split(\",\"),v=[];return s.forEach((function(a){return v.push(Number(a))})),v},s.makeColor=function(a){return void 0===a||a.length\u003c3||isNaN(a[0])||isNaN(a[1])||isNaN(a[2])?\"rgb(\\n \".concat(255,\",\\n \").concat(0,\",\\n \").concat(0,\")\"):\"rgb(\\n \".concat(a[0],\",\\n \").concat(a[1],\",\\n \").concat(a[2],\")\")},s.draw=function(a,s,v,t,r,h,l,g,b,n,o,e){void 0===g\u0026\u0026(g=!0),void 0===b\u0026\u0026(b=!0),void 0===n\u0026\u0026(n=0),a.save(),g\u0026\u0026(a.fillStyle=v),b\u0026\u0026(a.strokeStyle=t,a.lineWidth=r,a.lineJoin=\"round\",a.lineCap=\"round\"),void 0!==o\u0026\u0026(a.globalAlpha=o),a.globalCompositeOperation=e||\"source-over\",a.beginPath(),a.moveTo(s[0][0]*h+n,s[0][1]*l);for(var i=1,u=s.length;i\u003cu;i++){var c=s[i],f=s[i-1];a.bezierCurveTo(f[2]*h+n,f[3]*l,c[4]*h+n,c[5]*l,c[0]*h+n,c[1]*l)}g\u0026\u0026a.fill(),b\u0026\u0026a.stroke(),a.restore()},s.rotate=function(a,s){var v=[],t=Math.cos(s),r=Math.sin(s);return a.forEach((function(a){var s=[];a.forEach((function(a){var v=a[0]*t-a[1]*r,h=a[0]*r+a[1]*t,l=a[2]*t-a[3]*r,g=a[2]*r+a[3]*t,b=a[4]*t-a[5]*r,n=a[4]*r+a[5]*t;s.push([v,h,l,g,b,n])})),v.push(s)})),v},s.flip=function(a){var s=[];return a.forEach((function(a){var v=[];a.forEach((function(a){v.push([-a[0],a[1],-a[2],a[3],-a[4],a[5]])})),s.push(v)})),s},s.shiftXP6=function(a,s){var v=n(a);return v.forEach((function(a){a[0]=Math.round(a[0]+s),a[2]=Math.round(a[2]+s),a[4]=Math.round(a[4]+s)})),v},s.shiftXP6s=function(a,s){var v=n(a);return v.forEach((function(a){a.forEach((function(a){a[0]=Math.round(a[0]+s),a[2]=Math.round(a[2]+s),a[4]=Math.round(a[4]+s)}))})),v},s.shiftXoObj=function(a,s){var v=n(a);return v.left=v.left+s,v.right=v.right+s,v.sumX=v.sumX+s*(v.points.length-1),v},s.isSamePoint=v,s.isSameLine=t,s.isSameLineComp=function(a,s){if(a.length!==s.length)return!1;var t=a.slice(1),r=s.slice(1);return t.every((function(a){return r.some((function(s){return v(a,s)}))}))},s.isLoop=function(a){return v(a[0],a[a.length-1])},s.makeLoopLine=function(a){var s=a[0],v=a[a.length-1],t=s[2],r=s[3],h=v[2],l=v[3];return s[0]===s[2]\u0026\u0026s[1]===s[3]\u0026\u0026(t=s[4],r=s[5]),v[0]===v[2]\u0026\u0026v[1]===v[3]\u0026\u0026(h=v[4],l=v[5]),v=s=[s[0],s[1],t,r,h,l],[s].concat(a.slice(1,a.length-1)).concat([v])},s.connectLine=function(a,s){var t,r=a[a.length-1];if(v(r,s[0])){var h=(t=s[0])[2],l=t[3],g=r[2],b=r[3];return r[0]===r[2]\u0026\u0026r[1]===r[3]\u0026\u0026(g=r[4],b=r[5]),t[0]===t[2]\u0026\u0026t[1]===t[3]\u0026\u0026(h=t[4],l=t[5]),a.slice(0,a.length-1).concat([[r[0],r[1],h,l,g,b]]).concat(s.slice(1))}if(v(r,s[s.length-1]))return h=(t=s[s.length-1])[2],l=t[3],g=r[2],b=r[3],r[0]===r[2]\u0026\u0026r[1]===r[3]\u0026\u0026(g=r[4],b=r[5]),t[0]===t[2]\u0026\u0026t[1]===t[3]\u0026\u0026(h=t[4],l=t[5]),a.slice(0,a.length-1).concat([[r[0],r[1],h,l,g,b]]).concat(s.reverse().slice(1))},s.omitSameLine=function(a){for(var s=[],v=function(v,r){var h=a[v],l=a.slice(v+1);h\u0026\u0026l\u0026\u0026!l.some((function(a){return a\u0026\u0026t(a,h)}))\u0026\u0026s.push(h)},r=0,h=a.length;r\u003ch;r++)v(r);return s},s.omitSameObject=function(a){var s=[],v=[];a.forEach((function(a){var s=a.reduce((function(a,s){return a[0]\u003cs[0]?a:s}))[0],t=a.reduce((function(a,s){return a[0]\u003es[0]?a:s}))[0],r=a.reduce((function(a,s){return a[1]\u003cs[1]?a:s}))[1],h=a.reduce((function(a,s){return a[1]\u003es[1]?a:s}))[1],l=a.reduce((function(a,s){return a+s[0]}),0),g=a.reduce((function(a,s){return a+s[1]}),0);v.push({points:a,left:s,right:t,top:h,bottom:r,sumX:Math.round(l-a[0][0]),sumY:Math.round(g-a[0][1]),area:Math.abs((s-t)*(h-r))})})),v.sort((function(a,s){return s.area-a.area}));for(var t=function(a,t){var h=v[a];v.slice(a+1).some((function(a){return r(a,h)}))||s.push(h)},h=0,l=v.length;h\u003cl;h++)t(h);return s},s.isSameOmitObj=r,s.decomposeLine=function(a){for(var s=[],v=0,t=a.length;v\u003ct-1;v++)s.push([a[v],a[v+1]]);return s},s.countSameLineSur2=function(a,s){for(var v=0,r=0,h=s.length;r\u003ch;r++)if(t(s[r],a)\u0026\u0026v++,v\u003e=2)return!0;return!1},s.hasPoint=function(a,s){return s.some((function(s){return v(a,s)}))},s.valueSort=h,s.saturationSort=l,s.hueSort=g,s.hueSortPlus=function(a,s,v,t){var r=a.length;g(a,v);for(var h=0;h\u003cr;h++)a[h].hue=h;for(b(a,t),h=0;h\u003cr;h++)a[h].sv=h;a.sort((function(a,v){return v.hue*s-v.sv*(1-s)-(a.hue*s-a.sv*(1-s))}))},s.satValSort=b,s.easing=function(a,s){return s\u003e0?Math.pow(a,s):1-Math.pow(1+a,s)},s.easingInOut=function(a,s){var v=Math.abs(s);return a\u003c.5?Math.pow(2,v-1)*Math.pow(a,v):1-Math.pow(-2*a+2,v)/2},s.deepCopy=n,s.makeArrayArray=function(a){for(var s=Array(a),v=0;v\u003ca;v++)s[v]=[];return s},s.round2=function(a){return Math.round(100*a)/100}}},s={};function v(t){var r=s[t];if(void 0!==r)return r.exports;var h=s[t]={exports:{}};return a[t](h,h.exports,v),h.exports}(()=\u003e{var a=v(891),s=v(366),t=v(936),r=document.createElement(\"canvas\");r.id=\"canvas\",document.body.prepend(r);for(var h,l=r.getContext(\"2d\"),g=320,b=320,n=2,o=2,e=!0,i=16*n,u=16*o,c=[],f=[],m=[],p=[],d=[],M=[],S=[],y=[],L=[],P=[],w=1+Math.floor(2*Math.pow(Math.random(),.25))+Math.floor(Math.pow(Math.random(),Math.pow(s.gridLines.length,.75))*(s.gridLines.length-1)),x=[],C=function(){var a=Math.floor(Math.random()*s.gridLines.length);x.some((function(s){return s===a}))||x.push(a)};x.length\u003cw;)C();function E(){N();var v=2+Math.min(Math.floor(b/g*5),5);function t(){n=Math.max(v,Math.max(Math.floor(Math.max(Math.sqrt(366)*(b/g),7)*Math.random()),v));var a=Math.floor(b/n);o=Math.floor(g/a)}for(t();n*o\u003e366;)t();console.log(n,o),c=[{points:[[0,0,0,0,0,0],[0,i=16*n,0,i,0,i],[u=16*o,i,u,i,u,i],[u,0,u,0,u,0],[0,0,0,0,0,0]],left:0,right:u,top:i,bottom:0,sumX:2*u,sumY:2*i,area:u*i}],M=[];for(var r=0;r\u003cu;r+=8)M.push([[r,0,r,0,r,0],[r+8,0,r+8,0,r+8,0]]),M.push([[r,i,r,i,r,i],[r+8,i,r+8,i,r+8,i]]);for(p=[],r=-u;r\u003c2*u;r+=8)p.push([[r,0,r,0,r,0],[r+8,0,r+8,0,r+8,0]]),p.push([[r,i,r,i,r,i],[r+8,i,r+8,i,r+8,i]]);d=[];for(var h=0;h\u003ci;h+=8)d.push([[-u,h,-u,h,-u,h],[-u,h+8,-u,h+8,-u,h+8]]),d.push([[2*u,h,2*u,h,2*u,h],[2*u,h+8,2*u,h+8,2*u,h+8]]);!function(v,t){m=[];for(var r=[],h=8;h\u003ct;h+=16)for(var l=function(v){var t=Math.round((v-8)/16+(h-8)/16*o),l=Math.floor(Math.random()*x.length);r.some((function(a){return a===x[l]}))||r.push(x[l]);var g=s.gridLines[x[l]],b=(0,a.deepCopy)(g);Math.random()\u003c.5\u0026\u0026(b=(0,a.flip)(b)),b=(0,a.rotate)(b,.5*Math.floor(4*Math.random())*Math.PI),m[t]={lines:b,xy:[v,h]}},g=8;g\u003cv;g+=16)l(g);e=r.some((function(a){return a\u003c20})),f=[];var b=function(s){for(var t=function(v){var t=m.find((function(t){return(0,a.isSamePoint)(t.xy,[v,s])}));if(t){var r=(0,a.deepCopy)(t.lines);r=A(r,v,s),f.push(r)}},r=8;r\u003cv;r+=16)t(r)};for(h=8;h\u003ct;h+=16)b(h)}(u,i)}E();var O=1,j=(0,a.makeColor)([8,8,8]),X=1,k=1;function N(){h=window.devicePixelRatio,g=window.innerWidth,b=window.innerHeight,r.style.height=b+\"px\",r.style.width=g+\"px\",r.height=b*h,r.width=g*h,l.scale(h,h),X=g/u,k=b/i,O=1*Math.sqrt(X*k)}function A(s,v,t){for(var r=(0,a.deepCopy)(s),h=0,l=r.length;h\u003cl;h++)for(var g=r[h],b=0,n=g.length;b\u003cn;b++){var o=g[b];o[0]+=v,o[1]+=t,o[2]+=v,o[3]+=t,o[4]+=v,o[5]+=t,o[0]=Math.round(o[0]),o[1]=Math.round(o[1]),o[2]=(0,a.round2)(o[2]),o[3]=(0,a.round2)(o[3]),o[4]=(0,a.round2)(o[4]),o[5]=(0,a.round2)(o[5])}return r}var I=Math.random(),T=360*Math.random(),_=.2*Math.pow(Math.random(),2)+.2*Math.pow(Math.random(),5)+.2*Math.pow(Math.random(),20);(0,a.hueSortPlus)(t.allColors,I,T,_);var Y=Math.pow(Math.random(),3),D=Math.pow(Math.random(),3),J=(0,a.pormper)(.85)*(.005+Math.pow(Math.random(),2)+2*Math.pow(Math.random(),20)),R=Math.random()\u003c.2,q=Math.random()\u003c.4,z=t.allColors.length;function B(s){for(var v=[],r=200*Y+1280/s.length*D+1,h=-1,l=[],g=function(g,b){var n,o=s[g+1],e=g*r;r*(b-1)\u003ez-1\u0026\u0026(q?e%=z:e=Math.floor(e/(r*b)*(z-1)));var i=R?(0,a.easingInOut)(e/z,J):(0,a.easing)(e/z,J),u=Math.floor(z*i),c=1;if(u===h||l.some((function(a){return a===u})))for(;l.some((function(a){return a===u}));)u+1\u003e=z\u0026\u0026(c=-1),u=Math.abs(u+c)%z;h=u,l.push(u),n=t.allColors[u],v.push({obj:o,color:\"rgb(\".concat(n.rgb[0],\",\").concat(n.rgb[1],\",\").concat(n.rgb[2],\")\")})},b=0,n=s.length-1;b\u003cn;b++)g(b,n);var o=t.allColors[0];return v.unshift({obj:s[0],color:\"rgb(\".concat(o.rgb[0],\",\").concat(o.rgb[1],\",\").concat(o.rgb[2],\")\")}),v}function G(){N();var s=function(){var s=[];f.forEach((function(v){return v.length?v.forEach((function(v){return s.push((0,a.deepCopy)(v))})):\"\"})),s=s.concat(M);var v=W(V(s=(0,a.omitSameLine)(s),0,u),s),t=B(v=c.concat(v));return K(t),t}();P=s,Q(s)}function V(s,v,t){for(var r=[],h=0;h\u003c=i;h+=8)for(var l=function(v){var t=[v,h],l=[];s.forEach((function(s){((0,a.isSamePoint)(s[0],t)||(0,a.isSamePoint)(s[s.length-1],t))\u0026\u0026l.push(s)})),l.length\u0026\u0026r.push({lines:l,xy:[v,h]})},g=v;g\u003c=t;g+=8)l(g);return r}function W(s,v,t){var r=V((0,a.deepCopy)(v).concat((0,a.shiftXP6s)(v,-u)).concat((0,a.shiftXP6s)(v,u)),-u,2*u),h=(0,a.deepCopy)(s).filter((function(s){return s.lines.length\u003e(e?1:2)||(0,a.isSamePoint)(s.xy,[-u,0])||(0,a.isSamePoint)(s.xy,[2*u,0])||(0,a.isSamePoint)(s.xy,[-u,i])||(0,a.isSamePoint)(s.xy,[2*u,i])})),l=[];for(h.map((function(a){a.lines.length\u0026\u0026a.lines.forEach((function(a){return l.push(a)}))})),l.length\u003e1\u0026\u0026(l=(0,a.omitSameLine)(l));r.some((function(a){return a.lines.length\u003c2}));)for(var g=r.length-1;g\u003e=0;g--){var b=r[g];if(b.lines.length\u003c2){if(b.lines.length){for(var n=l.length-1;n\u003e=0;n--){var o=l[n];(0,a.hasPoint)(b.xy,o)\u0026\u0026l.splice(n,1)}for(var c=r.length-1;c\u003e=0;c--)for(var f=r[c],m=f.lines.length-1;m\u003e=0;m--){var M=f.lines[m];(0,a.hasPoint)(b.xy,M)\u0026\u0026f.lines.splice(m,1)}}r.splice(g,1)}}return t\u0026\u0026l.filter((function(s){return t.some((function(v){return(0,a.isSameLine)(s,v)}))})),S=[],L=(0,a.deepCopy)(p).concat(d),l.forEach((function(a,v){a[0][0]\u003c=-u\u0026\u0026a[1][0]\u003c=-u?a[0][1]\u003ca[1][1]\u0026\u0026(a=[a[1],a[0]]):a[0][1]\u003e=i\u0026\u0026a[1][1]\u003e=i?a[0][0]\u003ca[1][0]\u0026\u0026(a=[a[1],a[0]]):a[0][0]\u003e=u\u0026\u0026a[1][0]\u003e=u?a[0][1]\u003ea[1][1]\u0026\u0026(a=[a[1],a[0]]):(a[0][0]\u003ea[1][0]||a[0][0]===a[1][0]\u0026\u0026a[0][1]\u003ea[1][1])\u0026\u0026(a=[a[1],a[0]]),y[v]=s.length,H(a,r,v)})),(0,a.omitSameObject)(S)}function H(s,v,t){var r=s[s.length-1],h=v.find((function(s){return(0,a.isSamePoint)(s.xy,r)}));if(h\u0026\u0026h.lines.length\u003e1){var l=h.lines.filter((function(v){return!(0,a.isSameLine)(v,s)}));if(l.length){l=l.map((function(s){return(0,a.isSamePoint)(s[0],r)?s:[s[1],s[0]]})),l=function(s,v){var t=2*Math.PI,r=s[s.length-1],h=(F(s[s.length-2],r)+t)%t,l=(0,a.deepCopy)(v);return l.sort((function(a,s){var v=h-(F(a[1],a[0])+t)%t,r=h-(F(s[1],s[0])+t)%t;v\u003c0\u0026\u0026(v+=t),r\u003c0\u0026\u0026(r+=t);return(v-=.01)-(r-.01)})),l}(s,l);for(var g=[],b=0,n=l.length;b\u003cn;b++)if(!(0,a.isSamePoint)(l[b][1],s[s.length-2])){g=l[b];break}if(g.length){var o=(0,a.connectLine)(s,g);if(o\u0026\u0026o.length\u003cy[t]){if(!(o.length\u003e3\u0026\u0026(0,a.isLoop)(o)))return H(o,v,t);var e=(0,a.makeLoopLine)(o),i=(0,a.decomposeLine)(e);S.some((function(s){return(0,a.isSameLineComp)(s,e)}))||i.some((function(s){return(0,a.countSameLineSur2)(s,L)}))||(S.push(e),y[t]\u003ee.length\u0026\u0026(y[t]=e.length,L=L.concat((0,a.decomposeLine)(e))))}}}}}function F(a,s){return Math.atan2(s[1]-a[1],s[0]-a[0])}function K(s){s.forEach((function(s){P.forEach((function(v){(0,a.isSameOmitObj)(s.obj,v.obj)\u0026\u0026(s.color=v.color)}))})),s.forEach((function(v){s.forEach((function(s){var t=(0,a.shiftXoObj)(s.obj,-u);(0,a.isSameOmitObj)(v.obj,t)\u0026\u0026(v.color=s.color)}))}))}function Q(s){s.forEach((function(s){(0,a.draw)(l,s.obj.points,s.color,\"\",0,X,k,!0,!1,0)})),f.forEach((function(s){return s.forEach((function(s){(0,a.draw)(l,s,j,j,O,X,k,!1,!0,0)}))}));var v=[];f.forEach((function(s){s.forEach((function(s){0!==s[0][0]\u0026\u00260!==s[1][0]||v.push((0,a.shiftXP6)(s,u)),s[0][0]!==u\u0026\u0026s[1][0]!==u||v.push((0,a.shiftXP6)(s,-u))}))})),v.forEach((function(s){(0,a.draw)(l,s,j,j,O,X,k,!1,!0,0)}))}G(),window.addEventListener(\"resize\",(function(){clearTimeout(U),c=[],f=[],m=[],p=[],d=[],M=[],S=[],y=[],L=[],P=[],E(),G();var a=Date.now();$+=a-Z,aa(!0)}));var U=void 0,Z=0,$=0;function aa(s){var v=Date.now(),t=Math.floor(Math.random()*u),r=Math.floor(Math.random()*i);s||function(s,v){for(var t=[],r=[],h=0,l=m.length;h\u003cl;h++){var g=m[h];if(g.xy[0]\u003es-8\u0026\u0026g.xy[0]\u003c=s+8\u0026\u0026g.xy[1]\u003ev-8\u0026\u0026g.xy[1]\u003c=v+8){var b=(0,a.deepCopy)(g);g.lines=(0,a.rotate)(g.lines,Math.PI/2),f[h]=A(g.lines,g.xy[0],g.xy[1]),t=A(b.lines,b.xy[0],b.xy[1]),r=f[h]}}P=P.filter((function(s){return!(0,a.decomposeLine)(s.obj.points).some((function(s){return t.some((function(v){return(0,a.isSameLine)(v,s)}))}))}));var n=[];f.forEach((function(s){return s.length?s.forEach((function(s){return n.push((0,a.deepCopy)(s))})):\"\"})),n=n.concat(M);var o=W(V(n=(0,a.omitSameLine)(n),0,u),n,r),e=B(o=c.concat(o)),i=P.concat(e),p=[],d=function(s,v){var t=i[s];i.slice(s+1).some((function(s){return(0,a.isSameOmitObj)(s.obj,t.obj)}))||p.push(t)};for(h=0,l=i.length;h\u003cl;h++)d(h);K(p),Q(P=p)}(t,r);var h=Date.now(),l=h-v+$;Z=h,$=0,U=setTimeout((function(){aa(!1)}),Math.max(1,2e3-l))}aa(!0)})()})();","artId":"cdt13dcn70rqdtr2k7r0","libraries":[]}],"like":2,"thumbFileName":"cdt13dcn70rqdtr2k7r0.png","selectedThumbFileName":"cdt13dcn70rqdtr2k7r0.png","thumbnailFileUrl":"","resourceFileName":"cdt13dcn70rqdtr2k7r0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPneKgZRfviFY8vMnAHe29wvwC8t3NycofVYX6P5Vqt7V","resourceType":1,"metadataUrl":"","tags":[{"id":"bmplkfs3p9f7m1g02cdg","name":"pattern"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdt13e4n70rqdtr2k7tg","name":"day5"},{"id":"ce0rr54n70rs76qrbehg","name":"grid"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"ce9fj8kn70rvflp1dnd0.png","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1670578989,"updatedAt":1670578989},{"id":"ce9fhrsn70rvflp1dn9g","title":"CURATION FREE Day 4","description":"Artworks displayed at open exhibition \"CURATION FREE\" at NEORT++.\nCheck the page below for the detail.\nhttps://neort.io/challenge/cdq4oe4n70rqdtr2jaf0","user":{"id":"FEBFBVGRlZMDfXhIymp2NcAIyM22","customId":"","name":"NEORT","biography":"Thank you for using NEORT.\nThis is NEORT staff account.","image":"https://pbs.twimg.com/profile_images/1095209921816158208/Yznn0ohE_normal.jpg","createdAt":1551604907000,"updatedAt":1670997369315},"arts":[{"id":"ce6akk4n70rh3gnts62g","title":"randsphere16","description":"","createdAt":1670163037,"updatedAt":1670163037,"user":{"id":"BtcaWnAHawTVwsiiDsI4FPTbibc2","customId":"BtcaWnAHawTVwsiiDsI4FPTbibc2","name":"rukrel","biography":"https://twitter.com/rukrel","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/BtcaWnAHawTVwsiiDsI4FPTbibc2.jpg","createdAt":1669984747901,"updatedAt":1681473159886},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce6akk4n70rh3gnts62g.png","thumbnailFileUrl":"","resourceFileName":"ce6akk4n70rh3gnts62g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmU3ZcLkNzZyB65jR8vsTZ4tq91pfehhqUSLyKyxNDkYeV","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdst244n70rqdtr2k5f0","name":"day4"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce6859kn70rh3gntrq1g","title":"Crippled squares","description":"This is a long horizontal generative art created for CURATION_FREE.","createdAt":1670152873,"updatedAt":1670154147,"user":{"id":"frbTvj363JQYvSV4nuD9dxGVPq33","customId":"frbTvj363JQYvSV4nuD9dxGVPq33","name":"Lisa Sekaida 世界田りさ","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/frbTvj363JQYvSV4nuD9dxGVPq33.jpg","createdAt":1643083264007,"updatedAt":1716332663248},"codes":[{"id":"ce685acn70rh3gntrq2g","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n\t\u003cmeta charset=\"utf-8\" /\u003e\n\t\u003c!-- keep the line below for OpenProcessing compatibility --\u003e\n\t\u003cscript src=\"https://openprocessing.org/openprocessing_sketch.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"mySketch.js\"\u003e\u003c/script\u003e\n\t\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e \n\u003c/body\u003e\n\n\u003c/html\u003e","artId":"ce6859kn70rh3gntrq1g","libraries":[]},{"id":"ce685acn70rh3gntrq30","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce6859kn70rh3gntrq1g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce685acn70rh3gntrq3g","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n colorMode(HSB, s = 11012, 100, 100, 100)\n background(0);\n frameRate(5);\n noStroke();\n}\n\nfunction draw() {\n\tvar r = random;\n\tfor (let y = 0; y \u003c 1180; y += 100) {\n\t\tfor (let x = 0; x \u003c 11012; x += 102) {\n\t\t\tfill(x + r(s * 0.2), r(100), r(100), r(0,70));\n\t\t\trect(x, y - 100, y / r(100));\n\t\t}\n\t}\n}","artId":"ce6859kn70rh3gntrq1g","libraries":[]}],"like":0,"thumbFileName":"ce6859kn70rh3gntrq1g.png","selectedThumbFileName":"ce6859kn70rh3gntrq1g.png","thumbnailFileUrl":"","resourceFileName":"ce6859kn70rh3gntrq1g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmPdDU2roZA3AKG1QeMHN8iPqcWjBga32Yy1MZByW15EB1","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdst244n70rqdtr2k5f0","name":"day4"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce635isn70rlpj69ddmg","title":"y2k fractal","description":"code:\nhttps://www.shadertoy.com/view/dsBXWR","createdAt":1670132473,"updatedAt":1670132794,"user":{"id":"NxPYHDam6negh8a07DjN2k417CB2","customId":"NxPYHDam6negh8a07DjN2k417CB2","name":"yasuo_pdx","biography":"mother fucker","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/NxPYHDam6negh8a07DjN2k417CB2.png","createdAt":1670057184253,"updatedAt":1699926215784},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce635isn70rlpj69ddmg.png","thumbnailFileUrl":"","resourceFileName":"ce635isn70rlpj69ddmg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQc7Vnaqorj3PygS9DQYV51WFLt6KT4K27Xnt4vxnJXv1","resourceType":2,"metadataUrl":"","tags":[{"id":"bmqr67s3p9f7m1g02kqg","name":"shader"},{"id":"bmqr67s3p9f7m1g02kr0","name":"creativecoding"},{"id":"bogjdok3p9fd1q8oc7c0","name":"generativeart"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce633vcn70rlpj69dde0","title":"LOSER #6701","description":"Loser Club. Never Cool. Never Alone.\t\nA project by artist J’Von aka Catman aka Cool Sweater.\t\nOne thing remains true in this budding NFT space, and that is community.\t\nWe celebrate non-conformity and spontaneous creativity.Let's be the new majority. \t\nIt's the loser's time.\n\nLoserclub.io","createdAt":1670132224,"updatedAt":1670132224,"user":{"id":"HiSd8D3GJkejFh1uSmsuFiooYBz2","customId":"","name":"jaxo (🌸, 🌿)","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/HiSd8D3GJkejFh1uSmsuFiooYBz2.jpg","createdAt":1670132216981,"updatedAt":1670171516974},"codes":[],"like":0,"thumbFileName":"ce633vcn70rlpj69dde0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce633vcn70rlpj69ddeg.jpg","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmV5NWQD48x5PERVUnWr473C68r6sXt8XwBxDZ5SKT6eRk","resourceType":4,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce63404n70rlpj69ddfg","name":"LOSERWINTOGETHER"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"#000","layoutType":1,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce626ckn70rlpj69dcm0","title":"Kaku-Rin","description":"ループされる映像と音響、固定カメラで撮影した画像を再生・逆再生でループさせる。\n同じ映像をループで体感する作品。","createdAt":1670128480,"updatedAt":1670128480,"user":{"id":"gXbwFayTrhMG4JqrQQUlsN8C3zx1","customId":"","name":"立川清志楼 【第一次三ヶ年計画推進中】","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/gXbwFayTrhMG4JqrQQUlsN8C3zx1.jpg","createdAt":1670126867902,"updatedAt":1670902693262},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce626ckn70rlpj69dcm0.jpg","thumbnailFileUrl":"","resourceFileName":"ce626ckn70rlpj69dcm0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmeJRfvkjH2AnQKS9pbgE7dzC7YwaxvAnbBvcwuX2svKPk","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdst244n70rqdtr2k5f0","name":"day4"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5ugnsn70rlpj69d8o0","title":"Mecha can Burst","description":"This 3D render was created using scultping and modeling in Blender. The new techniques explored lead me into designing mecha inspired by Gundam which is a new frontier for me. There was some use of Substance Painter for materials testing composition. The mech is fully modeled and rigged, viewable on my website: https://mwilsonart.myportfolio.com","createdAt":1670113381,"updatedAt":1670223048,"user":{"id":"acD1v2o1aYTsLOlnvlAVXzUkQi32","customId":"acD1v2o1aYTsLOlnvlAVXzUkQi32","name":"Matt Wilson","biography":"Artist and game dev in Chicago. I like to make all kinds of creative projects including 3D models, digital illustration, JavaScript projects, and music. Open to collaborating for product design, video game assets, and more. ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/acD1v2o1aYTsLOlnvlAVXzUkQi32.png","createdAt":1670113092846,"updatedAt":1670724289888},"codes":[],"like":0,"thumbFileName":"ce5ugnsn70rlpj69d8o0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce5ugnsn70rlpj69d8o0.jpg","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/Qmdiiwafz583BhxXpLdyYAP8uAwipGh4L3oXFGtJMbATke","resourceType":4,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"rgba(15, 17, 21, 1)","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5b424n70rlpj69d06g","title":"man-machine interface3.0","description":"This work combines physical painting and AR.","createdAt":1670033959,"updatedAt":1670034191,"user":{"id":"IgjN3oziIDZrRtJ5NNA6F3BxwN82","customId":"","name":"おた(´・д・`)","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/IgjN3oziIDZrRtJ5NNA6F3BxwN82.jpg","createdAt":1670024696364,"updatedAt":1680928211555},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce5b424n70rlpj69d06g.jpg","thumbnailFileUrl":"","resourceFileName":"ce5b424n70rlpj69d06g.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmNjZUNua3oTWhUmLVpfwqkxBksdSLYzDDHdv74XqarR7n","resourceType":2,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdst244n70rqdtr2k5f0","name":"day4"},{"id":"ce5b49sn70rlpj69d08g","name":"OpenBrush"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce3k8gcn70rlpj69c9a0","title":"Crumpled torus (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221130","createdAt":1669809242,"updatedAt":1669809242,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":1,"thumbFileName":"","selectedThumbFileName":"ce3k8gcn70rlpj69c9a0.png","thumbnailFileUrl":"","resourceFileName":"ce3k8gcn70rlpj69c9a0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmT5R6h9cnpiwYQJvcWiGL8DPMU1WgU1wks8LgoziZXuZ3","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdst244n70rqdtr2k5f0","name":"day4"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce31ghkn70rs76qrc5j0","title":"Bone Structure","description":"Look at it in the micro.","createdAt":1669732429,"updatedAt":1669732429,"user":{"id":"IWD3ncMyhLhqMb7dInMwosr9Yw92","customId":"IWD3ncMyhLhqMb7dInMwosr9Yw92","name":"ayametakuya","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/IWD3ncMyhLhqMb7dInMwosr9Yw92.jpg","createdAt":1638366088154,"updatedAt":1718276802080},"codes":[{"id":"ce31gjcn70rs76qrc5k0","type":0,"text":"","artId":"ce31ghkn70rs76qrc5j0","libraries":[]},{"id":"ce31gjcn70rs76qrc5kg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce31ghkn70rs76qrc5j0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce31gjcn70rs76qrc5l0","type":2,"text":"let points = [];\nlet grid;\nlet seed;\n\nfunction setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n background(0);\n angleMode(DEGREES)\n\n grid = width / 200;\n for (let x = 0; x \u003c width + grid; x += grid) {\n for (let y = 0; y \u003c height + grid; y += grid) {\n let p = createVector(x, y);\n points.push(p);\n }\n }\n\n seed = random(100000000000);\n}\n\nfunction draw() {\n randomSeed(seed)\n for (let i = 0; i \u003c points.length; i++) {\n push();\n let angle = map(noise(points[i].x * 0.01, points[i].y * 0.01, frameCount*0.01),0,1,0,360)\n points[i].add(createVector(cos(angle), sin(angle)))\n if(points[i].x \u003c 0) points[i].x = width\n if(points[i].x \u003e width) points[i].x = 0\n if(points[i].y \u003c 0) points[i].y = height\n if(points[i].y \u003e height) points[i].y = 0\n\n translate(points[i].x, points[i].y)\n stroke(map(angle, 0, 360, 0, 255))\n let step = random(grid)\n line(0, 0, sin(frameCount * step) * grid , cos(frameCount * step) * grid)\n pop()\n }\n}","artId":"ce31ghkn70rs76qrc5j0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":0,"thumbFileName":"ce31ghkn70rs76qrc5j0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce31ghkn70rs76qrc5j0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmbqKRKYyEFSn7e6Xk7VkdSzpkhfZLtyMQR81PMcKfEqsN","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdst244n70rqdtr2k5f0","name":"day4"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cduu73sn70rqdtr2kqh0","title":"Circle of gradation (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221123","createdAt":1669194654,"updatedAt":1669196531,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"cduu73sn70rqdtr2kqh0.png","thumbnailFileUrl":"","resourceFileName":"cduu73sn70rqdtr2kqh0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmReEbiDa7PiaKnQTaL2h7jaFey5Ae88Py8J5BH5p75ttk","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdst244n70rqdtr2k5f0","name":"day4"},{"id":"cduu77kn70rqdtr2kqi0","name":"Circle of gradation "}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdqpc5cn70rqdtr2jkqg","title":"Pink worlds","description":"This is a combination piece of some of my favourite 3D art pieces which have the common theme of pink surreal atmosphere. \n\n\"C for colombia\" + \"endangered paradise\" + \"pink relativity\"\n\nyou can find more of my work on my website: https://www.angelamantilla.com","createdAt":1668650522,"updatedAt":1668650522,"user":{"id":"bG0AJTqH20SOeQRY35IbkxfVmGz2","customId":"","name":"Angela Mantilla","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/bG0AJTqH20SOeQRY35IbkxfVmGz2.jpg","createdAt":1668650506264,"updatedAt":1668650564322},"codes":[],"like":0,"thumbFileName":"cdqpc5cn70rqdtr2jkqg.jpg","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"cdqpc5cn70rqdtr2jkr0.jpg","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZiaKagKvfCS2ycKUSygDPKBe7Ci5YS351YkyNErGppYQ","resourceType":4,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"#000","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdqci64n70rqdtr2jdig","title":"Assault","description":"Massacre, horror, archbishop, knights.\n\n","createdAt":1668598046,"updatedAt":1668598638,"user":{"id":"NiIInKNK23bA8siPYt4gWXC6Y2K2","customId":"danctrl","name":"danctrl","biography":"Digital and traditional painter.\n\n","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/NiIInKNK23bA8siPYt4gWXC6Y2K2.jpg","createdAt":1668597998055,"updatedAt":1723299986110},"codes":[],"like":5,"thumbFileName":"cdqci64n70rqdtr2jdig.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"cdqci64n70rqdtr2jdj0.png","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZU2Uma1HehhfqJBKMGbpaBy3GnSzGrerrnbsS6cqFrse","resourceType":4,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"#000","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"ce9fhrsn70rvflp1dn9g.png","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1670578531,"updatedAt":1670578532},{"id":"ce9ffqcn70rvflp1dn50","title":"CURATION FREE Day 3","description":"Artworks displayed at open exhibition \"CURATION FREE\" at NEORT++.\nCheck the page below for the detail.\nhttps://neort.io/challenge/cdq4oe4n70rqdtr2jaf0","user":{"id":"FEBFBVGRlZMDfXhIymp2NcAIyM22","customId":"","name":"NEORT","biography":"Thank you for using NEORT.\nThis is NEORT staff account.","image":"https://pbs.twimg.com/profile_images/1095209921816158208/Yznn0ohE_normal.jpg","createdAt":1551604907000,"updatedAt":1670997369315},"arts":[{"id":"ce683fcn70rh3gntrpo0","title":"000-7854","description":" ","createdAt":1670152645,"updatedAt":1670153684,"user":{"id":"ciLxURq6h1RmSqhPbAlxPvTjx4H3","customId":"jsf","name":"Julio Smitter","biography":"JSF twitter.com/thejaysf","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ciLxURq6h1RmSqhPbAlxPvTjx4H3.png","createdAt":1574404743000,"updatedAt":1734444596488},"codes":[{"id":"ce683hcn70rh3gntrpp0","type":0,"text":"\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/addons/p5.sound.min.js\"\u003e\u003c/script\u003e","artId":"ce683fcn70rh3gntrpo0","libraries":[]},{"id":"ce683hcn70rh3gntrppg","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n background-color: #000; \n}\n\ncanvas {\n display: block;\n position: absolute;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n margin: auto;\n}","artId":"ce683fcn70rh3gntrpo0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce683hcn70rh3gntrpq0","type":2,"text":"function setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n rectMode(CENTER);\n colorMode(HSB, 360, 255, 255);\n angleMode(DEGREES);\n noCursor();\n}\n\nfunction draw() {\n background(0);\n randomSeed(7854);\n noFill(0);\n\n for (let i = 0; i \u003c 40; i++) {\n push();\n forma();\n pop();\n }\n}\n\nfunction forma() {\n let s1 = 888;\n let s2 = 400;\n stroke(random(360), 255, 255);\n translate(random(0, width), random(0, height));\n rotate(random(-180, 180));\n rotate(random(-millis() / 200, millis() / 200));\n scale(2);\n\n for (let i = 0; i \u003c 20; i++) {\n strokeWeight(i / 3);\n rect(0, 0, s1 * 1.1, s2 * 1.1, 5000);\n s1 = s1 - 21;\n s2 = s2 - 21;\n }\n}","artId":"ce683fcn70rh3gntrpo0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":0,"thumbFileName":"ce683fcn70rh3gntrpo0.png","selectedThumbFileName":"ce683fcn70rh3gntrpo0.png","thumbnailFileUrl":"","resourceFileName":"ce683fcn70rh3gntrpo0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUyRwh23AEb45nGFTvESGEbKLixt9rmcrMDGbrrEbHGpZ","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"},{"id":"ce683hcn70rh3gntrpqg","name":"JSF"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce67sbkn70rlpj69dqpg","title":"Metal icicles","description":"This is a long horizontal generative art created for CURATION_FREE.","createdAt":1670151730,"updatedAt":1670151797,"user":{"id":"frbTvj363JQYvSV4nuD9dxGVPq33","customId":"frbTvj363JQYvSV4nuD9dxGVPq33","name":"Lisa Sekaida 世界田りさ","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/frbTvj363JQYvSV4nuD9dxGVPq33.jpg","createdAt":1643083264007,"updatedAt":1716332663248},"codes":[{"id":"ce67sckn70rlpj69dqqg","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n\n\u003chead\u003e\n\t\u003cmeta charset=\"utf-8\" /\u003e\n\t\u003c!-- keep the line below for OpenProcessing compatibility --\u003e\n\t\u003cscript src=\"https://openprocessing.org/openprocessing_sketch.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n\t\u003cscript src=\"mySketch.js\"\u003e\u003c/script\u003e\n\t\u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n\u003c/head\u003e\n\n\u003cbody\u003e \n\u003c/body\u003e\n\n\u003c/html\u003e","artId":"ce67sbkn70rlpj69dqpg","libraries":[]},{"id":"ce67sckn70rlpj69dqr0","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce67sbkn70rlpj69dqpg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce67sckn70rlpj69dqrg","type":2,"text":"function setup() {\n\tcreateCanvas(11012, 1080, WEBGL);\n\tpixelDensity(1);\n\tframeRate(1);\n\tnoStroke();\n}\n\nfunction draw() {\n\tbackground(0);\n\t\n\tambientLight(127, 127, 255);\n\tpointLight(0, 255, 255, 500, 0, 10);\n\tspecularMaterial(50);\n\tshininess(5);\n\t\n\tfor (let i = -11012; i \u003c 11082; i++) {\n\t\trotateY(i);\n\t\tpush();\n\t\ttranslate(random(-11012 / 2, 11012 / 2), random(-1080 / 2, 1080 / 2), i * 10);\n\t\tfill(random(255), 0, 0, 127);\n\t\tcone(20, 400);\n\t\tfill(0, random(255),0, 127);\n\t\tbox(100);\n\t\tpop();\n\t}\n}","artId":"ce67sbkn70rlpj69dqpg","libraries":[]}],"like":0,"thumbFileName":"ce67sbkn70rlpj69dqpg.png","selectedThumbFileName":"ce67sbkn70rlpj69dqpg.png","thumbnailFileUrl":"","resourceFileName":"ce67sbkn70rlpj69dqpg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmQVoFHJQ9ZA5S2Sc2FG8dUfbQG3472NCZ6vMXupCNiv7L","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce6350sn70rlpj69ddh0","title":"Flow","description":"リアルタイムジェネ\n\nmadewithnotch","createdAt":1670132400,"updatedAt":1670342747,"user":{"id":"xrpX5GGqY2O7Euv2mTDnOXqDvVW2","customId":"","name":"Shuhei Maeta","biography":"Motion Graphics Designer\nライブ演出 / カメラエフェクト / Vtuber演出 / 電飾デザイン\nCinema4D / After Effects / Notch / UE4","image":"https://pbs.twimg.com/profile_images/903850410032586752/6CcLmyRL_normal.jpg","createdAt":1562120034000,"updatedAt":1708955739017},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce6350sn70rlpj69ddh0.png","thumbnailFileUrl":"","resourceFileName":"ce6350sn70rlpj69ddh0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmXFawqtDi2Te4gj31eSu2dvq6kNEtuqiAtSQ2fNqQL3c1","resourceType":2,"metadataUrl":"","tags":[{"id":"bmke4j43p9f7m1g01qqg","name":"Notch"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce621qkn70rlpj69dcag","title":"Dou-kou","description":"変化を繰り返す表層の動き、手持ちカメラで撮影した画像を多重化。\n変容する視覚変化と音響を体感する作品。","createdAt":1670127894,"updatedAt":1670127894,"user":{"id":"gXbwFayTrhMG4JqrQQUlsN8C3zx1","customId":"","name":"立川清志楼 【第一次三ヶ年計画推進中】","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/gXbwFayTrhMG4JqrQQUlsN8C3zx1.jpg","createdAt":1670126867902,"updatedAt":1670902693262},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce621qkn70rlpj69dcag.jpg","thumbnailFileUrl":"","resourceFileName":"ce621qkn70rlpj69dcag.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmWdNxbJT4o9N7o75kFMPquJ46EwBSeWA56VdBSQTSu6Ln","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce5cvrcn70rlpj69d0v0","title":"Triangular Strings / 三角形の紐","description":"This piece is for display on 4 walls in a rectangular room, or alternatively for a very large wall screen display\n\nThe four walls are:\n\"Hyperspace Nylon\" ハイパースペースナイロン\n\"Cat's Cradle\" あやとり\n\"Crystal Wave\" 水晶波\n\"Leaf Heart\" 葉の心\n\nWe use triangles to represent objects inside of a computer. Starting with a simple triangle and some strings, I created illusions of three dimensions in a virtual world, simulate the movements of nature, space, time, and life.\n","createdAt":1670041589,"updatedAt":1672559213,"user":{"id":"qnn1cjHNk0XIOh9PhzhmBFPrtii1","customId":"qnn1cjHNk0XIOh9PhzhmBFPrtii1","name":"j4son3099","biography":"An artist located in Tokyo who loves traditional art, street art, and code art. ","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/qnn1cjHNk0XIOh9PhzhmBFPrtii1.png","createdAt":1669608388448,"updatedAt":1683725472704},"codes":[{"id":"ce5cvtcn70rlpj69d100","type":0,"text":"","artId":"ce5cvrcn70rlpj69d0v0","libraries":[]},{"id":"ce5cvtcn70rlpj69d10g","type":1,"text":"html, body {\n width: 100%;\n height: 100%;\n overflow: hidden;\n margin: 0;\n}","artId":"ce5cvrcn70rlpj69d0v0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce5cvtcn70rlpj69d110","type":2,"text":"let hash,triangles,stdError,WIDTH,HEIGHT;function getCustomWidth(t,i,e){return e?t:i%2==0?2408*WIDTH/11012\u003e\u003e0:3098*WIDTH/11012\u003e\u003e0}function getScreenXPosition(t,i,e){if(e)return 0;switch(i){case 0:return 0;case 1:return 2408*t/11012\u003e\u003e0;case 2:return 5506*t/11012\u003e\u003e0;case 3:return 7914*t/11012\u003e\u003e0;case 4:return t}}let glitchCount,aLambda,bLambda,triangleMode,omegaFactor,noiseGraphic,loopCount=0,glitchMode=!1,glitchProbability=.9,failCount=0,divisor=1,DEBUG=!1,graphics=[],tArray=[],modesList=[\"glitch\",\"catsCradle\",\"waves\",\"random\"];function standardizeRadians(t){return t%(2*PI)}function setup(){WIDTH=windowWidth,HEIGHT=windowHeight,createCanvas(WIDTH,HEIGHT);for(let t=0;t\u003c4;t++)graphics.push(createGraphics(getCustomWidth(WIDTH,t,!1)\u003e\u003e0,HEIGHT));noiseGraphic=createGraphics(WIDTH,HEIGHT),noiseGraphic.background(255);for(let t=0;t\u003cWIDTH;t++)noiseGraphic.stroke(color(230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,20)),noiseGraphic.line(t,0,t,HEIGHT);for(let t=0;t\u003cHEIGHT;t++)noiseGraphic.stroke(color(230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,20)),noiseGraphic.line(0,t,WIDTH,t);let t,i;stdError=.05;for(let e=0;e\u003c4;e++)triangleMode=modesList[e],\"glitch\"==triangleMode||\"waves\"==triangleMode?(i=14,t=10):(i=40,t=40),\"waves\"==triangleMode?(frameRate(300),aLambda=function(t,i){return-.5+sin(t.x+i%1e4*.3)},bLambda=function(t,i){return-.5+cos(t.y+i%1e4*.3)}):\"random\"==triangleMode?(aLambda=function(t,i){return-.5+sin(t.x+i%100*.3)},bLambda=function(t,i){return-.5+cos(t.y+i%100*.3)}):(frameRate(120),aLambda=function(t,i){return-.5+sin(t.x+i%1e4)},bLambda=function(t,i){return-.5+cos(t.y+i%1e4)}),tArray.push(new TriangleMatrix(i,t,WIDTH,HEIGHT,stdError,aLambda,bLambda,triangleMode)),tArray[e].setupTriangles();animateFlag=!0,hash=randomHash()}function draw(){randomSeed(getSeed()),background(\"#0D0D0D\");for(let t=0;t\u003c4;t++)graphics[t].background(\"#0D0D0D\"),tArray[t].drawAllTriangles(graphics[t]),tint(255,255),image(graphics[t],getScreenXPosition(WIDTH,t,!1)\u003e\u003e0,0),tArray[t].animateAllTriangles(animateFlag);tint(255,40),image(noiseGraphic,0,0,WIDTH,HEIGHT),loopCount++,failCount\u003e6||loopCount%divisor==0\u0026\u0026Math.sin(random(1))\u003cglitchProbability?(DEBUG\u0026\u0026console.log(\"passed\"),glitchCount++,animateFlag=!0,failCount=0):(DEBUG\u0026\u0026(console.log(\"failed\"),console.log(\"loopCount \"+loopCount),console.log(\"sample random: \"+(random()\u003cglitchProbability)),console.log(\"failCount: \"+failCount)),animateFlag=!1,failCount++)}function windowResized(){resizeCanvas(windowWidth,windowHeight),WIDTH=windowWidth,HEIGHT=windowHeight,noiseGraphic=createGraphics(WIDTH,HEIGHT),noiseGraphic.background(255);for(let t=0;t\u003cWIDTH;t++)noiseGraphic.stroke(color(230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,20)),noiseGraphic.line(t,0,t,HEIGHT);for(let t=0;t\u003cHEIGHT;t++)noiseGraphic.stroke(color(230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,230+random(25)\u003e\u003e0,20)),noiseGraphic.line(0,t,WIDTH,t);loopCount=0,\"glitch\"==this.mode\u0026\u0026(glitchCount=5e3);for(let t=0;t\u003c4;t++)graphics[t].resizeCanvas(getCustomWidth(WIDTH,t,!1),HEIGHT),tArray[t].width=WIDTH,tArray[t].height=HEIGHT,tArray[t].rTriangles=[],tArray[t].setupTriangles()}keyPressed=function(){\"t\"===key\u0026\u0026console.log(loopCount,animateFlag)};class RTriangle{constructor(t,i,e,s,r){this.points=t,this.basePoints=this.points.copyWithin(this.basePoints),this.color=i,this.rotation=e,this.omega=s,this.center=r;let a=this.getI();this.mI=a[0],this.base=a[1],this.height=a[2],this.bBase=this.base,this.bHeight=this.height,this.a=0,this.b=0}updateA(t){let i,e,s;switch(t){case\"glitch\":i=p5.Vector.mult(p5.Vector.normalize(this.points[0]),this.bHeight),p5.Vector.add(this.basePoints[0],i.mult(this.a),this.points[0]);break;case\"catsCradle\":e=p5.Vector.mult(this.center,-1),s=p5.Vector.add(this.points[0],e),i=p5.Vector.mult(p5.Vector.normalize(s),this.bHeight/2),this.points[0]=p5.Vector.add(this.basePoints[0],i.mult(this.a)),this.points[0].add(e);break;case\"waves\":e=p5.Vector.mult(this.center,-1),s=p5.Vector.add(this.points[0],e),i=p5.Vector.mult(p5.Vector.normalize(s),this.bHeight/2),this.points[0]=p5.Vector.add(this.basePoints[0],i.mult(this.a));break;case\"random\":e=p5.Vector.mult(this.center,-1),s=p5.Vector.add(this.points[0],e),i=p5.Vector.mult(p5.Vector.normalize(s),this.bHeight/2),this.points[0]=p5.Vector.add(this.basePoints[0],i.mult(this.a)),loopCount%40\u003c21?this.points[0].add(this.center):this.points[0].add(e)}}updateB(t){let i,e,s,r,a;switch(t){case\"glitch\":i=p5.Vector.mult(p5.Vector.normalize(this.points[1]),this.bBase),e=p5.Vector.mult(p5.Vector.normalize(this.points[1]),this.bBase),this.points[1]=p5.Vector.add(this.basePoints[1],i.mult(this.b)),this.points[2]=p5.Vector.add(this.basePoints[2],e.mult(-this.b));break;case\"catsCradle\":s=p5.Vector.mult(this.center,-1),r=p5.Vector.add(this.points[1],s),a=p5.Vector.add(this.points[2],s),i=p5.Vector.mult(p5.Vector.normalize(r),this.bBase/2),e=p5.Vector.mult(p5.Vector.normalize(a),this.bBase/2),this.points[1]=p5.Vector.add(this.basePoints[1],i.mult(this.b)),this.points[2]=p5.Vector.add(this.basePoints[2],e.mult(-this.b)),this.points[1].add(this.center),this.points[2].add(this.center);break;case\"waves\":s=p5.Vector.mult(this.center,-1),r=p5.Vector.add(this.basePoints[1],s),a=p5.Vector.add(this.basePoints[2],s),i=p5.Vector.mult(p5.Vector.normalize(r),this.bBase/2),e=p5.Vector.mult(p5.Vector.normalize(a),this.bBase/2),this.points[1]=p5.Vector.add(this.basePoints[1],i.mult(this.b)),this.points[2]=p5.Vector.add(this.basePoints[2],e.mult(this.b));break;case\"random\":s=p5.Vector.mult(this.center,-1),r=p5.Vector.add(this.points[1],s),a=p5.Vector.add(this.points[2],s),i=p5.Vector.mult(p5.Vector.normalize(r),this.bBase/2),e=p5.Vector.mult(p5.Vector.normalize(a),this.bBase/2),this.points[1]=p5.Vector.add(this.basePoints[1],i.mult(this.b)),this.points[2]=p5.Vector.add(this.basePoints[2],e.mult(-this.b)),loopCount%40\u003c21?(this.points[1].add(this.center),this.points[2].add(this.center)):(this.points[1].add(s),this.points[2].add(s))}}getI(){let t,i=p5.Vector.add(p5.Vector.mult(this.points[1],-1),this.points[2]),e=p5.Vector.add(p5.Vector.mult(this.points[1],-1),this.points[0]),s=e.heading()-i.heading(),r=p5.Vector.mag(i),a=p5.Vector.mag(e),o=Math.min(Math.tan(s)*a,1e4);return t=r*Math.pow(o,3)/4,[t,r,o]}}class TriangleMatrix{constructor(t,i,e,s,r,a,o,n){this.wDivs=t\u003e\u003e0,this.hDivs=i\u003e\u003e0,this.triangles=[],this.stdError=r,this.height=s,this.width=e,this.rTriangles=[],this.aLambda=a,this.bLambda=o,this.mode=n}setupTriangles(){let t,i,e,s,r,a=this.width/this.wDivs\u003e\u003e0,o=this.height/this.hDivs\u003e\u003e0,n=createVector(a/2\u003e\u003e0,o/2\u003e\u003e0),h=[];r=\"waves\"==this.mode?7:1;for(let l=0;l\u003cr;l++)for(n=createVector(a/2\u003e\u003e0,o/2\u003e\u003e0);n.y\u003cthis.height;){for(;n.x\u003cthis.width;){switch(this.mode){case\"glitch\":e=color(255,100+55*Math.sin(this.rTriangles.length+WIDTH)\u003e\u003e0,200+55*Math.sin(this.rTriangles.length+HEIGHT+1)\u003e\u003e0);break;case\"catsCradle\":e=color(255,255*Math.sin(this.rTriangles.length+WIDTH)\u003e\u003e0,255*Math.sin(this.rTriangles.length+HEIGHT+1)\u003e\u003e0);break;case\"waves\":e=color(255*Math.sin(this.rTriangles.length+WIDTH)\u003e\u003e0,255*Math.sin(this.rTriangles.length+HEIGHT+1+l)\u003e\u003e0,255,80);break;case\"random\":e=color(220*Math.sin(this.rTriangles.length+WIDTH)\u003e\u003e0,220,220*Math.sin(this.rTriangles.length+HEIGHT+1)\u003e\u003e0,80)}switch(h=[createVector(n.x+random(this.stdError)*o,n.y+o*(random()-.5)),createVector(n.x+a*(1-random(this.stdError)),n.y+o*(1-random(this.stdError))),createVector(n.x-a*(1-random(this.stdError)),n.y+o*(1-random(this.stdError))),e],t=0,this.mode){case\"glitch\":case\"random\":omegaFactor=1;break;case\"catsCradle\":omegaFactor=25;break;case\"waves\":omegaFactor=.8}i=(-PI/100*this.stdError+random(PI/50*this.stdError))*omegaFactor,s=new RTriangle([h[0],h[1],h[2]],h[3],0,i,createVector(n.x,n.y)),this.rTriangles.push(s),n.x+=a}n.x=a/2\u003e\u003e0,n.y+=o/2\u003e\u003e0}\"glitch\"==this.mode\u0026\u0026(glitchCount=5e3)}drawAllTriangles(t){t.noStroke();for(let i=0;i\u003cthis.rTriangles.length;i++)t.push(),t.translate(this.rTriangles[i].center.x,this.rTriangles[i].center.y),t.rotate(this.rTriangles[i].rotation),t.fill(this.rTriangles[i].color),t.triangle(this.rTriangles[i].points[0].x-this.rTriangles[i].center.x\u003e\u003e0,this.rTriangles[i].points[0].y-this.rTriangles[i].center.y\u003e\u003e0,this.rTriangles[i].points[1].x-this.rTriangles[i].center.x\u003e\u003e0,this.rTriangles[i].points[1].y-this.rTriangles[i].center.y\u003e\u003e0,this.rTriangles[i].points[2].x-this.rTriangles[i].center.x\u003e\u003e0,this.rTriangles[i].points[2].y-this.rTriangles[i].center.y\u003e\u003e0),t.pop()}animateAllTriangles(t){if(!t\u0026\u0026\"glitch\"==this.mode)return!1;for(let t=0;t\u003cthis.rTriangles.length;t++)this.rTriangles[t].rotation+=this.rTriangles[t].omega,this.rTriangles[t].rotation=standardizeRadians(this.rTriangles[t].rotation),\"glitch\"==this.mode?(this.rTriangles[t].a=this.aLambda(this.rTriangles[t].center,glitchCount),this.rTriangles[t].b=this.bLambda(this.rTriangles[t].center,glitchCount)):(this.rTriangles[t].a=this.aLambda(this.rTriangles[t].center,loopCount),this.rTriangles[t].b=this.bLambda(this.rTriangles[t].center,loopCount)),this.rTriangles[t].updateA(this.mode),this.rTriangles[t].updateB(this.mode)}}function randomHash(){let t=\"0x\";for(var i=0;i\u003c64;i++)t+=Math.floor(16*Math.random()).toString(16);return t}function getSeed(){return parseInt(hash.slice(0,16),16)}\r\n","artId":"ce5cvrcn70rlpj69d0v0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.3.1/p5.min.js"]}],"like":0,"thumbFileName":"ce5cvrcn70rlpj69d0v0.png","selectedThumbFileName":"ce5cvrcn70rlpj69d0v0.png","thumbnailFileUrl":"https://neort.mypinata.cloud/ipfs/QmeXTuAMZVY4YX7sJpyHHhnduj9mj5BFU4vLsFdotFVkG4","resourceFileName":"ce5cvrcn70rlpj69d0v0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYK44czXvw82x43uHyj9W4rCgiBwdG88Tof7BsQTbRWcq","resourceType":1,"metadataUrl":"https://neort.mypinata.cloud/ipfs/QmYjMyJ6VNweDwzFCyRHCv5LMZykvJt4T46dizznpNx8Cn","tags":[{"id":"bmo28bc3p9f7m1g027kg","name":"p5js"},{"id":"bn9dats3p9f5erb522q0","name":"animation"},{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"c7gmkdc3p9fdutchbekg","name":"waves"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"},{"id":"ce5cvtcn70rlpj69d11g","name":"triangles"},{"id":"ce5cvtcn70rlpj69d120","name":"life"},{"id":"ce5cvtcn70rlpj69d12g","name":"strings"},{"id":"ce5cvtcn70rlpj69d130","name":"crystal"},{"id":"ce5cvtcn70rlpj69d13g","name":"heartbeat"},{"id":"ce5cvtcn70rlpj69d140","name":"あやとり"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0.1,"royalty":0.1,"systemFee":0.15,"currency":"eth"},"remaining":0,"owner":null},{"id":"ce503msn70rlpj69ctpg","title":"randsphere 3.6","description":"乱数によるぼんやりした分布","createdAt":1669988840,"updatedAt":1669988840,"user":{"id":"BtcaWnAHawTVwsiiDsI4FPTbibc2","customId":"BtcaWnAHawTVwsiiDsI4FPTbibc2","name":"rukrel","biography":"https://twitter.com/rukrel","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/BtcaWnAHawTVwsiiDsI4FPTbibc2.jpg","createdAt":1669984747901,"updatedAt":1681473159886},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce503msn70rlpj69ctpg.png","thumbnailFileUrl":"","resourceFileName":"ce503msn70rlpj69ctpg.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmSkCfKBZ9pbRoFwiYEvP1X1amUxsPb67cdfP25swRtiPw","resourceType":2,"metadataUrl":"","tags":[{"id":"bnfgqds3p9f5erb52nc0","name":"processing"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4t4skn70rlpj69cqn0","title":"Future still here","description":"Maybe the future has already passed/","createdAt":1669976697,"updatedAt":1669976697,"user":{"id":"nsWiH7awloPo3THWjO0Pc6cdhND3","customId":"taito_otani","name":"Taito Otani ","biography":"Audio \u0026 Visuals","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/nsWiH7awloPo3THWjO0Pc6cdhND3.jpg","createdAt":1568337758000,"updatedAt":1713681611594},"codes":[{"id":"ce4t4ucn70rlpj69cqo0","type":0,"text":"\u003c!DOCTYPE html\u003e\n\u003chtml lang=\"en\"\u003e\n \u003chead\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.js\"\u003e\u003c/script\u003e\n \u003cscript src=\"https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/addons/p5.sound.min.js\"\u003e\u003c/script\u003e\n \u003clink rel=\"stylesheet\" type=\"text/css\" href=\"style.css\"\u003e\n \u003cmeta charset=\"utf-8\" /\u003e\n\n \u003c/head\u003e\n \u003cbody\u003e\n \u003cmain\u003e\n \u003c/main\u003e\n \u003cscript src=\"sketch.js\"\u003e\u003c/script\u003e\n \u003c/body\u003e\n\u003c/html\u003e\n","artId":"ce4t4skn70rlpj69cqn0","libraries":[]},{"id":"ce4t4ucn70rlpj69cqog","type":1,"text":"html, body {\n margin: 0;\n padding: 0;\n}\ncanvas {\n display: block;\n}\n","artId":"ce4t4skn70rlpj69cqn0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce4t4ucn70rlpj69cqp0","type":2,"text":"\nvar t;\nvar num, vNum;\nvar radius, mySize, margin;\nvar sizes = [];\nvar seed = Math.random() * 1000;\nlet colors = [];\nlet colorsTest = \"B8DBBB-B8DBBB-B8DBBB-B8DBBB\".split(\"-\").map((a) =\u003e \"#\" + a);\nlet colors0 = \"f8fcda-e3e9c2-f9fbb2-7c6354-a5abaf\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors22 = \"79b473-70a37f-41658a-414073-4c3957\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors23 = \"a7bed3-c6e2e9-f1ffc4-ffcaaf-dab894\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors24 = \"85696-e7e7e7-f9c784-fc7a1e-f24c00\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors25 = \"1c3144-d00000-ffba08-a2aebb-3f88c5\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors26 = \"55dde0-33658a-2f4858-f6ae2d-f26419\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors7 = \"00272b-e0ff4f-ff6663-ff2ecc-a51080\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors8 = \"74d3ae-678d58-a6c48a-f6e7cb-dd9787\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors11 = \"1e1e24-fb9f89-c4af9a-81ae9d-21a179\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors12 = \"f1e8b8-f9e784-e58f65-d05353-191919\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nlet colors13 = \"642ca9-ff36ab-ff74d4-ffb8de-ffdde1\"\n .split(\"-\")\n .map((a) =\u003e \"#\" + a);\nvar color_setup1, color_setup2;\nlet color_bg;\nlet v_planet = [];\nlet mySound;\nlet fft;\nfunction preload() {\n soundFormats('mp3', 'ogg');\n mySound = loadSound('https://stat.neort.io/externalResource/ccss6sk3p9f4hhftic0g.mp3');\n}\n\nfunction setup() {\n\tmySize = min(400, 400);\n margin = mySize / 100;\n createCanvas(windowWidth, windowHeight, WEBGL);\n\t\n // pixelDensity(5);\n\tmySound.loop();\n mySound.play();\n color_setup1 = colors7;\n color_setup2 = random([\n colors22,\n colors23,\n colors24,\n colors25,\n colors26,\n colors11,\n colors12,\n colors13,\n ]);\n\n num = int(random(50, 60));\n radius = mySize * 0.75;\n for (let a = 0; a \u003c TAU; a += TAU / num) {\n sizes.push(random(0.1, 0.5));\n }\n t = 0;\n\tfft = new p5.FFT();\n}\n\nfunction draw() {\n randomSeed(seed);\n background(20);\n \n let spectrum = fft.analyze();\n \n for (let i = 0; i \u003c num; i++) {\n let a = (TAU / num) * i;\n let x = (radius * sin(a + t)) / random(5, 3) / 1.0;\n let y = (radius * cos(a + t)) / random(3, 5) / 1.0;\n v_planet[i] = createVector(x, y);\n }\n push();\n\n for (let q = 0; q \u003c 1 / 5; q += 2 * random(0.01, 0.02)) {\n for (let j = 0; j \u003c 1; j++) {\n rotateX(random(TAU) + t / 10 + q / random(75, 100) / 10);\n rotateY(random(PI) - t / 10 - q / random(75, 100) / 10);\n rotateZ(random(PI / 2) - t / 10 + q / random(75, 100) / 10);\n noFill();\n strokeWeight(2.5 * random(0.2, 0.6));\n stroke(random(color_setup2));\n\n for (let i = 0; i \u003c num; i+=1) {\n \tlet d = random(radius / 128, radius / 64);\n \tlet x_plus = random(-100, 100)/2.5 +0.5 * random(-d, d) / 1;\n \tlet y_plus =random(-100, 100)/2.5 + 0.5 * random(-d, d) / 1;\n \tlet z_plus = random(-100, 100)/2.5 + 0.5 * random(-d, d) / 1;\n translate(v_planet[i].x + x_plus, v_planet[i].y + y_plus, z_plus);\n \tbox(width*0.01);\n }\n \n\n for (let i = 0; i \u003c num; i += 2) {\n let d = (1.0 + sin(t)) * random(radius / 2, radius / 4);\n let x_plus = (0.5 * random(-d, d)) / 1;\n let y_plus = (0.5 * random(-d, d)) / 1;\n let z_plus = (0.5 * random(-d, d)) / 1;\n stroke(random(colors7));\n strokeWeight(random(0.5));\n fill(random(color_setup2));\n push();\n translate(v_planet[i].x + x_plus, v_planet[i].y + y_plus, z_plus);\n rotateX(t);\n rotateY(t);\n rotateZ(-t);\n box(random(5));\n pop();\n }\n }\n }\n pop();\n\n t += spectrum[80]*0.001+spectrum[800]*0.01;\n}\n\nfunction windowResized() {\n resizeCanvas(windowWidth, windowHeight);\n}\n","artId":"ce4t4skn70rlpj69cqn0","libraries":[]}],"like":0,"thumbFileName":"ce4t4skn70rlpj69cqn0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce4t4skn70rlpj69cqn0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYrGdzcnsQ7L9SgCmXHudT13ujfNHy9Pj3y1M6vq54rwk","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"ce4t4ucn70rlpj69cqpg","name":"Day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce4s564n70rlpj69cqi0","title":"Fractal Painting (for CURATION_FREE)","description":"・Fractal Painting #133\n\n・Fractal Painting #56\n\n・Fractal Painting #197\n\nOriginal: https://www.fxhash.xyz/generative/16141","createdAt":1669972636,"updatedAt":1669972636,"user":{"id":"ctdhDGDqQwQSv15IHpAKaOh42hg2","customId":"gin","name":"ギン","biography":"Generative Artist\ntwitter(JP): https://twitter.com/gin_graphic\ntwitter(EN): https://twitter.com/ginzi_o\nlinktree: https://linktr.ee/gin_graphic","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/ctdhDGDqQwQSv15IHpAKaOh42hg2.jpg","createdAt":1637141678304,"updatedAt":1702694434431},"codes":[],"like":1,"thumbFileName":"ce4s564n70rlpj69cqi0.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce4s564n70rlpj69cqig.png","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmWeT9hpYom2xeJMk2BgioCvxvRxAH6gZLxRvfNW2vdF9s","resourceType":4,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"#000","layoutType":2,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce31724n70rs76qrc590","title":"Spectating","description":"Dental Wimbledon.","createdAt":1669731215,"updatedAt":1669731215,"user":{"id":"IWD3ncMyhLhqMb7dInMwosr9Yw92","customId":"IWD3ncMyhLhqMb7dInMwosr9Yw92","name":"ayametakuya","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/IWD3ncMyhLhqMb7dInMwosr9Yw92.jpg","createdAt":1638366088154,"updatedAt":1718276802080},"codes":[{"id":"ce3173sn70rs76qrc5a0","type":0,"text":"","artId":"ce31724n70rs76qrc590","libraries":[]},{"id":"ce3173sn70rs76qrc5ag","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"ce31724n70rs76qrc590","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce3173sn70rs76qrc5b0","type":2,"text":"let points = [];\nlet grid;\n\nfunction setup() {\n createCanvas(11012, 1080);\n pixelDensity(1);\n\n grid = width / 150\n rectMode(CENTER);\n colorMode(HSB, 360, 100, 100, 100);\n background(0);\n noStroke();\n\n for (let y = 0; y \u003c= height + grid; y += grid) {\n for (let x = 0; x \u003c= width + grid; x += grid) {\n let p = createVector(x, y);\n points.push(p);\n }\n }\n}\n\nfunction draw() {\n background(0)\n for (let i = 0; i \u003c points.length; i++) {\n let h = map(noise(points[i].x * 0.01, points[i].y * 0.01, frameCount*0.05),0,1,0,480);\n let s = map(noise(points[i].x * 0.1, points[i].y * 0.1, frameCount*0.05),0,1,0,100);\n fill(h, s, 30, 100)\n noStroke()\n rect(points[i].x, points[i].y, grid*0.8, grid*0.8, grid*0.1, grid*0.1);\n fill(h, s, 100, 100)\n stroke(h, 100, 100, 100)\n circle(points[i].x - grid * 0.2 + sin(frameCount*0.1) * grid*0.1, points[i].y - grid*0.25, grid*0.1);\n circle(points[i].x + grid * 0.2 + sin(frameCount*0.1) * grid*0.1, points[i].y - grid*0.25, grid*0.1);\n ellipse(points[i].x + sin(frameCount*0.1) * grid*0.1, points[i].y - grid*0.1, grid*0.2, grid*0.03);\n fill(0);\n noStroke();\n ellipse(points[i].x, points[i].y + grid*0.3, grid*0.7, grid*0.5);\n }\n}","artId":"ce31724n70rs76qrc590","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":0,"thumbFileName":"ce31724n70rs76qrc590.png","selectedThumbFileName":"","thumbnailFileUrl":"","resourceFileName":"ce31724n70rs76qrc590.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmYRVWFdDpgU3XEpLTQkNHQjMKYSNFNEdxuokLgfudRLZt","resourceType":1,"metadataUrl":"","tags":[{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce2v60cn70rs76qrc2f0","title":"Distorted sphere (CURATION_FREE)","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221129/","createdAt":1669722908,"updatedAt":1669722908,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"ce2v60cn70rs76qrc2f0.png","thumbnailFileUrl":"","resourceFileName":"ce2v60cn70rs76qrc2f0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmZ4isSEqt3hjNoAmk1wV5JsiKRDSikcNpSrVAnb7k27PS","resourceType":2,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"ce2cp8sn70rs76qrbv9g","title":"Lorenz Attractor 01","description":"","createdAt":1669647526,"updatedAt":1669647844,"user":{"id":"X9oC9Zoah7MwobvFt5RNJ9ExlRg2","customId":"X9oC9Zoah7MwobvFt5RNJ9ExlRg2","name":"Atsushi Tanaka","biography":"Processing p5.js TouchDesiger Unity","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/X9oC9Zoah7MwobvFt5RNJ9ExlRg2.png","createdAt":1669109903757,"updatedAt":1727256248322},"codes":[{"id":"ce2cp9kn70rs76qrbvag","type":0,"text":"\u003cscript src=\"https://cdn.jsdelivr.net/npm/p5@1.5.0/lib/p5.js\"\u003e\u003c/script\u003e","artId":"ce2cp8sn70rs76qrbv9g","libraries":[]},{"id":"ce2cp9kn70rs76qrbvb0","type":1,"text":"body {\n\t-webkit-text-size-adjust: 100%;\n\tbackground-color: #000000;\n\tpadding: 0;\n\tmargin: 0;\n\toverflow-x: visible;\n}\n\n#top_view {\n\tposition: fixed;\n\ttop: 0px;\n\tleft: 0px;\n\twidth: 100%;\n\theight: 100%;\n\tz-index: -1;\n}","artId":"ce2cp8sn70rs76qrbv9g","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"ce2cp9kn70rs76qrbvbg","type":2,"text":"var x = 0.01;\r\nvar y = 0.0;\r\nvar z = 0.0;\r\n\r\nvar a = 10.0;\r\nvar b = 28.0;\r\nvar c = 8.0 / 3.0;\r\n\r\nvar dist = 0.0;\r\nvar amp = 10.0;\r\n\r\nvar points = [];\r\nvar point_num = 2000;\r\n\r\nvar deg = 0.0;\r\n\r\nvar cam;\r\n\r\nvar camx;\r\nvar camy;\r\nvar camz;\r\n\r\nvar noisex;\r\nvar noisey;\r\nvar noisez;\r\n\r\nfunction setup () {\r\n\r\n\tcanvas = createCanvas (windowWidth, windowHeight, WEBGL);\r\n\tcanvas.id (\"top_view\");\r\n\r\n\tpixelDensity (displayDensity ());\r\n\tcolorMode (HSB, 360, 256, 256, 256);\r\n\tbackground (0);\r\n\r\n\tcam = createCamera ();\r\n\r\n}\r\n\r\nfunction draw () {\r\n\r\n\tbackground (0);\r\n\r\n\tnoisex = noise (frameCount * 0.001);\r\n\tnoisey = noise (frameCount * 0.001 + 1000.0);\r\n\tnoisez = noise (frameCount * 0.001 + 2000.0);\r\n\r\n\tcamx = noisex * 2000.0 - 2000.0 / 2.0;\r\n\tcamy = noisey * 2000.0 - 2000.0 / 2.0;\r\n\tcamz = noisez * 600.0;\r\n\r\n\tvar dt = 0.01;\r\n\tvar dx = (a * (y - x)) * dt;\r\n\tvar dy = (x * (b - z) - y) * dt;\r\n\tvar dz = (x * y - c * z) * dt;\r\n\tx = x + dx;\r\n\ty = y + dy;\r\n\tz = z + dz;\r\n\r\n\tcam.camera (camx, camy, camz + (height / 2.0) / tan (180.0 * 30.0 / 180.0), 0, 0, 300, 0, 1, 0);\r\n\r\n\tdist = sqrt (dx * dx + dy * dy + dz * dz);\r\n\r\n\tif (deg \u003e 360.0) {\r\n\t\tdeg = 0.0;\r\n\t}\r\n\r\n\tpoints.push (new LinePoint (x, y, z, deg, dist));\r\n\t\r\n\tbeginShape ();\r\n\tfor (var i = 0; i \u003c points.length; i++) {\r\n\t\tpoints[i].render ();\r\n\t}\r\n\tendShape ();\r\n\r\n\tif (points.length \u003e point_num) {\r\n\t\tpoints.splice (0, 1);\r\n\t}\r\n\t\r\n\tdeg += 1.0;\r\n\r\n\t// push ();\r\n\t// translate (0, 0, 300);\r\n\t// box (100);\r\n\t// pop ();\r\n\r\n}\r\n\r\nfunction LinePoint (x, y, z, h, s) {\r\n\r\n\tvar posx = x;\r\n\tvar posy = y;\r\n\tvar posz = z;\r\n\tvar h_val = h;\r\n\tvar s_val = map (s, 0.0, 2.0, 255, 0);\r\n\tvar pr = s;\r\n\r\n\tthis.update = function () {\r\n\r\n\t}\r\n\r\n\tthis.render = function () {\r\n\r\n\t\tnoFill ();\r\n\t\tstroke (0, 0, 100);\r\n\t\tstrokeWeight (0.5);\r\n\t\tvertex (posx * amp, posy * amp, posz * amp);\r\n\t\t\r\n\t\tpush ();\r\n\t\ttranslate (posx * amp, posy * amp, posz * amp);\r\n\t\tnoFill ();\r\n\t\tstroke (h_val, s_val, 255);\r\n\t\tstrokeWeight (0.8);\r\n\t\tellipse (0.0, 0.0, pr, pr);\r\n\t\tpop ();\r\n\r\n\t}\r\n\r\n}","artId":"ce2cp8sn70rs76qrbv9g","libraries":[]}],"like":1,"thumbFileName":"ce2cp8sn70rs76qrbv9g.png","selectedThumbFileName":"ce2cp8sn70rs76qrbv9g.png","thumbnailFileUrl":"","resourceFileName":"ce2cp8sn70rs76qrbv9g.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUZEoK29bUU4xGNubT3Jpbftcav2f71id2vNHMxkY4XUB","resourceType":1,"metadataUrl":"","tags":[{"id":"bmjb2ss3p9f7m1g01690","name":"p5.js"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdubpjkn70rqdtr2kjn0","title":"Vortex (CURATION_FREE) ","description":"Source code -\u003e https://junkiyoshi.com/openframeworks20221122","createdAt":1669119208,"updatedAt":1669119208,"user":{"id":"tJkqI3yzrAdAVp1gie52ycVyKeq1","customId":"junkiyoshi","name":"JunKiyoshi","biography":"openFrameworksで動くお絵描きをしています。Blogでソースコードを公開しています。 https://junkiyoshi.com/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/tJkqI3yzrAdAVp1gie52ycVyKeq1.jpg","createdAt":1551230667000,"updatedAt":1735727857904},"codes":[],"like":0,"thumbFileName":"","selectedThumbFileName":"cdubpjkn70rqdtr2kjn0.png","thumbnailFileUrl":"","resourceFileName":"cdubpjkn70rqdtr2kjn0.mp4","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmfTN16xoZvN7KGVK28VX5C4GbezaQDR4R72iRraVqBrPX","resourceType":2,"metadataUrl":"","tags":[{"id":"bmjc0643p9f7m1g01ebg","name":"openFrameworks"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdsr8b4n70rqdtr2k4dg","title":"KUMALEON Particle for CURATION FREE","description":"","createdAt":1668920376,"updatedAt":1669032561,"user":{"id":"LTRLw1X1pQeaAFeiHMahAgOnvOk2","customId":"unshift","name":"Takumi Hasegawa (unshift Inc.)","biography":"Front-end / creative developer | unshift Inc. founder. 主にWebサイトのフロントエンド実装をやっています。WebGLなどWebのグラフィック技術を使った表現が得意です。2021年11月に法人化しました。\n\nWebsite: https://unshift.co.jp/\nTwitter: https://twitter.com/_unshift\nInstagram: https://www.instagram.com/_unshift/","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/LTRLw1X1pQeaAFeiHMahAgOnvOk2.png","createdAt":1591974922000,"updatedAt":1706152977951},"codes":[{"id":"cdsr8e4n70rqdtr2k4eg","type":0,"text":"\u003cscript src=\"https://stat.neort.io/externalResource/cdsr75kn70rqdtr2k4c0.js\" type=\"module\"\u003e\u003c/script\u003e\n\u003cdiv class=\"loading js-loading\"\u003e\u003c/div\u003e\n\u003cmain class=\"main js-main\"\u003e\n \u003ccanvas class=\"mainCanvas js-mainCanvas\"\u003e\u003c/canvas\u003e\n\u003c/main\u003e\n","artId":"cdsr8b4n70rqdtr2k4dg","libraries":[]},{"id":"cdsr8e4n70rqdtr2k4f0","type":1,"text":"html,body{padding:0;margin:0;overflow:hidden;background-color:#000}.main,.loading{position:fixed;top:0;right:0;bottom:0;left:0;padding:0;margin:0}.mainCanvas{z-index:2}canvas{position:absolute;top:0;right:0;bottom:0;left:0;margin:auto}.loading{z-index:10;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:center;justify-content:center;background-color:#000}.loading:after{font-family:sans-serif;font-size:16px;font-weight:700;color:#fff;text-transform:uppercase;letter-spacing:.1em;content:\"Loading...\"}.loading.is-loaded{visibility:hidden;opacity:0;transition:opacity .4s linear,visibility .4s linear}.loading.is-error:after{visibility:visible!important;content:\"Error!!\"!important;opacity:1!important;transition:none!important}\n","artId":"cdsr8b4n70rqdtr2k4dg","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cdsr8e4n70rqdtr2k4fg","type":2,"text":"","artId":"cdsr8b4n70rqdtr2k4dg","libraries":[]}],"like":8,"thumbFileName":"cdsr8b4n70rqdtr2k4dg.png","selectedThumbFileName":"cdsr8b4n70rqdtr2k4dg.png","thumbnailFileUrl":"","resourceFileName":"cdsr8b4n70rqdtr2k4dg.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmdK2qn5ynKJBHTtY7YNzZFQm2vuSMRLAaxwgxrpqWJcEB","resourceType":1,"metadataUrl":"","tags":[{"id":"bmj9c1c3p9fdr6916krg","name":"GLSL"},{"id":"bmk0qi43p9f7m1g01q1g","name":"WebGL"},{"id":"bpcq6043p9f4nmb8bb60","name":"threejs"},{"id":"caomatk3p9f2v73unnp0","name":"KUMALEON"},{"id":"caonvus3p9f2v73uno2g","name":"KumaKreative"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cdsm2ecn70rqdtr2k2h0","title":"Experiencing acceleration in NEORT++","description":"","createdAt":1668899147,"updatedAt":1669466868,"user":{"id":"HYUXSIXKnRYIaf8DYY5uTeaEW9u1","customId":"HYUXSIXKnRYIaf8DYY5uTeaEW9u1","name":"Kazu","biography":"","image":"https://d32h66pp7fue57.cloudfront.net/userThumb/HYUXSIXKnRYIaf8DYY5uTeaEW9u1.jpg","createdAt":1668614571095,"updatedAt":1673159640277},"codes":[{"id":"cdsm2isn70rqdtr2k2i0","type":0,"text":"","artId":"cdsm2ecn70rqdtr2k2h0","libraries":[]},{"id":"cdsm2isn70rqdtr2k2ig","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"cdsm2ecn70rqdtr2k2h0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cdsm2isn70rqdtr2k2j0","type":2,"text":"p5.disableFriendlyErrors = true;\r\n\r\nclass point{\r\n constructor(){\r\n this.x=0;\r\n this.y=0;\r\n this.vx=0;\r\n this.vy=0;\r\n this.rx=0;\r\n this.ry=0;\r\n this.rvx=0;\r\n this.rvy=0;\r\n this.sz=0;\r\n this.cl=0;\r\n }\r\n\r\n genp(){\r\n\r\n\r\n if(random(1)\u003e0.5){\r\n this.x = random(-lgt_ssz,DW+lgt_ssz);\r\n this.y = random(1)\u003e0.5 ? -lgt_ssz : DH+lgt_ssz;\r\n }\r\n else{\r\n this.x = random(1)\u003e0.5 ? -lgt_ssz : DW+lgt_ssz;\r\n this.y = random(-lgt_ssz,DH+lgt_ssz);\r\n }\r\n\r\n this.vx=random(10,-10);\r\n this.vy=random(10,-10);\r\n this.rx=0;\r\n this.ry=0;\r\n this.rvx=random(-0.1,0.1);\r\n this.rvy=random(-0.1,0.1);\r\n this.sz=random(0.1,1) * (random(1)\u003c0.01 ? 10:1);\r\n this.cl=lgt_sc + noise(frameCount*0.01,this.x*0.001)*255;\r\n if(this.cl\u003e255)this.cl-=255;\r\n if(this.cl\u003c0)this.cl+=255;\r\n\r\n }\r\n\r\n udc(fmvlx,fmvly){\r\n\r\n this.x += this.vx*this.sz+fmvlx*Math.pow(this.sz,0.5);\r\n this.y += this.vy*this.sz+fmvly*Math.pow(this.sz,0.5);\r\n\r\n this.rx += this.vx*0.01;\r\n this.ry += this.vy*0.01;\r\n\r\n if(this.x\u003c-lgt_ssz||this.x\u003eDW+lgt_ssz||this.y\u003c-lgt_ssz||this.y\u003eDH+lgt_ssz){\r\n this.genp();\r\n }\r\n\r\n }\r\n\r\n}\r\n\r\n\r\nconst DW=11012;\r\nconst DH=1080;\r\nconst DI=Math.min(DW,DH);\r\n\r\n\r\nvar fi1,lgt;\r\nvar ig1,ig2;\r\n\r\n\r\nvar pp=[];\r\nconst pp_n = 500;\r\n\r\nconst lgt_ssz = 300;\r\nvar fmvlx = fmvly = 0;\r\nvar fdfg = false;\r\nvar fdx = 0;\r\nvar fdy = 0;\r\n\r\nvar lgt_sc;\r\n\r\n\r\n\r\n\r\nfunction setup(){\r\n\r\n createCanvas(DW,DH);\r\n\r\n fi1=createGraphics(DW,DH)\r\n fi1.imageMode(CENTER);\r\n \r\n frameRate(30);\r\n\r\n noiseSeed(random(0,1000));\r\n\r\n\r\n lgt=createGraphics(lgt_ssz,lgt_ssz);\r\n\r\n\r\n lgt.noStroke();\r\n lgt.background(0);\r\n lgt.fill(255);\r\n lgt.circle(lgt_ssz/2,lgt_ssz/2,100);\r\n lgt.filter(BLUR,40);\r\n lgt.circle(lgt_ssz/2,lgt_ssz/2,50);\r\n lgt.filter(BLUR,5);\r\n\r\n ig1 = lgt.get();\r\n\r\n lgt.colorMode(HSB,255);\r\n\r\n lgt_sc = random(255);\r\n\r\n for( let k = 0; k \u003c pp_n; k++ ){\r\n pp[k] = new point();\r\n pp[k].genp();\r\n pp[k].y += random(0,DH);\r\n }\r\n \r\n}\r\n\r\n\r\n\r\nfunction draw(){\r\n\r\n fi1.blendMode(BLEND);\r\n fi1.fill(0,100);\r\n fi1.rect(0,0,DW,DH);\r\n\r\n if(Math.abs(fmvly)\u003c0.1\u0026\u0026Math.abs(fmvlx)\u003c0.1)fdfg=false;\r\n\r\n if(!fdfg){\r\n fdfg = true;\r\n\r\n\r\n if(random(1)\u003e0.5){\r\n fdy = 0;\r\n fdx = random(1)\u003e0.5 ? -1:1;\r\n }\r\n else{\r\n fdx = 0;\r\n fdy = random(1)\u003e0.5 ? -1:1;\r\n }\r\n }\r\n\r\n\r\n fmvlx += fdx*Math.sin(frameCount*0.01)*0.5;\r\n fmvly += fdy*Math.sin(frameCount*0.01)*0.5;\r\n\r\n \r\n for(let i=0;i\u003cpp_n;i++){\r\n\r\n lgt.clear();\r\n\r\n lgt.blendMode(BLEND);\r\n lgt.image(ig1,0,0);\r\n lgt.fill(0,255*abs(Math.sin(pp[i].rx)));\r\n lgt.rect(0,0,300,300);\r\n\r\n lgt.blendMode(OVERLAY);\r\n lgt.fill(pp[i].cl,255*abs(Math.sin(pp[i].ry)),255);\r\n lgt.rect(0,0,300,300);\r\n\r\n fi1.blendMode(ADD);\r\n\r\n\r\n pp[i].udc(fmvlx,fmvly);\r\n\r\n fi1.image(lgt,pp[i].x,pp[i].y,300*pp[i].sz,300*pp[i].sz);\r\n }\r\n\r\n background(0);\r\n\r\n image(fi1,0,0,DW,DH,0,0,DW,DH);\r\n\r\n}\r\n\r\n","artId":"cdsm2ecn70rqdtr2k2h0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.5.0/p5.min.js"]}],"like":0,"thumbFileName":"cdsm2ecn70rqdtr2k2h0.png","selectedThumbFileName":"cdsm2ecn70rqdtr2k2h0.png","thumbnailFileUrl":"","resourceFileName":"cdsm2ecn70rqdtr2k2h0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmUTj5KGhu1quqMsfTfFhgj6rTayfwPPFTH8FhacNyAaqE","resourceType":1,"metadataUrl":"","tags":[{"id":"brom7ts3p9ffuj8og9rg","name":"HelloNEORT"},{"id":"broov8k3p9ffuj8ogbl0","name":"NEORTchallenge"},{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null},{"id":"cagun1s3p9fbkmo5u9r0","title":"animated quadtree no.14","description":"","createdAt":1654778765,"updatedAt":1670155878,"user":{"id":"pXryEWgcPWdaCezlWfPre6OW2QF3","customId":"pXryEWgcPWdaCezlWfPre6OW2QF3","name":"@kitasenjudesign","biography":"北千住に棲む、限界クリエーティブコーダー。\nhttps://kitasenjudesign.com\nhttps://twitter.com/kitasenjudesign","image":"https://pbs.twimg.com/profile_images/1015898747794907136/baQA-1Wh_normal.jpg","createdAt":1550935012000,"updatedAt":1722233111879},"codes":[{"id":"cagun3c3p9fbkmo5u9s0","type":0,"text":"\u003cdiv id=\"canvas\"\u003e\u003c/div\u003e","artId":"cagun1s3p9fbkmo5u9r0","libraries":[]},{"id":"cagun3c3p9fbkmo5u9sg","type":1,"text":"html {\n overflow: hidden;\n position: fixed;\n}","artId":"cagun1s3p9fbkmo5u9r0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css"]},{"id":"cagun3c3p9fbkmo5u9t0","type":2,"text":"let img;\nlet count=0;\nlet tt=0;\nvar ran = Math.random() * 10;\n\nfunction setup() {\n frameRate(24);\n let canvas = createCanvas(window.innerWidth, window.innerHeight);\n canvas.parent('canvas');\ncolorMode(HSB);\n //createCanvas(500, 500);\n}\n\nfunction draw() {\n\n var c = document.getElementById(\"canvas\");\n c.style.position = 'absolute';\n\n background(255,0,255,0.01);\n stroke(50,50,120,200);\n strokeWeight(30);\n\n //print(\"hey\");\n\n\n split0(window.innerWidth, window.innerHeight);\n \n count=0;\n tt+=2;\n\n if(tt%300==0) ran = Math.random() * 10;\n}\n\nfunction split0(w,h){\n split1(0,0,w,h,0);\n}\n\nfunction split1(x,y,w,h,n){\n randomSeed(count + ran);\n\n //if( (random()\u003c0.2 \u0026\u0026 n\u003e3) || n \u003e ((tt*0.01)%20) ){\n if( (random()\u003c0.5 \u0026\u0026 n\u003e=2) || n \u003e= 5 || w\u003c10 || h\u003c10 ){\n \n //image(img, x, y, w, h);\n noFill();//random()*255, random()*255, random()*255);\n if(w\u003e2 \u0026\u0026 h\u003e2){\n \n //rect(x, y, w, h);\n //line(x,y,x+w,y+h);\n //line(x+w,y,x,y+h);\n let points = [];//\n //let px = x+w*Math.random();\n //let py = y+h*Math.random();\n let nn = 4 + (w+h)*0.001;\n if(nn\u003e15)nn=15;\n for(let i=0;i\u003cnn;i++){\n points[i] = {x:x+w*Math.random(),y:y+h*Math.random()};\n \n if(Math.random()\u003c0.07)points[i].x=x+w;\n if(Math.random()\u003c0.07)points[i].x=x;\n if(Math.random()\u003c0.07)points[i].y=y+h;\n if(Math.random()\u003c0.07)points[i].y=y;\n \n }\n\n strokeWeight((w+h)/40);\n stroke(random()*255,128+128*random(),128);\n\n for(let i=0;i\u003cpoints.length-2;i++){\n let cx = points[i].x;\n let cy = points[i].y;\n let cx2 = points[i+1].x;\n let cy2 = points[i+1].y;\n let cx3 = points[i+2].x;\n let cy3 = points[i+2].y;\n \n bezier(\n (cx+cx2)/2,(cy+cy2)/2,\n cx2,cy2,\n cx2,cy2, \n (cx2+cx3)/2,(cy2+cy3)/2,\n );\n\n }\n\n \n \n }\n\n }else{\n \n \n\n let rr = random();// + 0.2 * Math.sin(tt*(0.01+n*0.015) + n*50);\n rr = Math.max(Math.min(rr,1),0);\n\n let ww = w*rr;\n let ww2 = w*(1-rr);\n\n rr = random();// + 0.2 * Math.cos(tt*(0.01+n*0.005) + n*9930);\n rr = Math.max(Math.min(rr,1),0);\n\n let hh = h*rr;\n let hh2 = h*(1-rr);\n \n split1(x,y,ww,hh,n+1);\n split1(x+ww,y,ww2,hh,n+1);\n\n split1(x,y+hh,ww,hh2,n+1);\n split1(x+ww,y+hh,ww2,hh2,n+1);\n \n }\n \n count++;\n}\n\n\n\n","artId":"cagun1s3p9fbkmo5u9r0","libraries":["https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.4.1/p5.min.js"]}],"like":3,"thumbFileName":"cagun1s3p9fbkmo5u9r0.png","selectedThumbFileName":"cagun1s3p9fbkmo5u9r0.png","thumbnailFileUrl":"","resourceFileName":"cagun1s3p9fbkmo5u9r0.html","resourceFileUrl":"https://neort.mypinata.cloud/ipfs/QmRbyLTbNzoAs2Pvbpew6m4qKT2EvYQjH99GMJR8kLdfdx","resourceType":1,"metadataUrl":"","tags":[{"id":"cdq4oecn70rqdtr2jafg","name":"CURATION_FREE"},{"id":"cdsm2isn70rqdtr2k2jg","name":"day3"}],"awards":[],"assetFiles":[],"isPublic":true,"hasProduct":false,"artExternalResources":[],"developer":{"id":"","name":""},"backgroundColor":"","layoutType":0,"price":{"amount":0,"royalty":0,"systemFee":0,"currency":""},"remaining":0,"owner":null}],"image":"ce9ffqcn70rvflp1dn50.png","isDeleted":false,"isPublic":true,"isEnabled":true,"createdAt":1670578303,"updatedAt":1670578303}],"loadedAt":1670578303}