commit d95e547982e446b04cef630f24edeb0c895b3baf
parent 3e0abd2dede69ae1a83886f56d13b96bcc0cd70b
Author: mpizzzle <m@michaelpercival.xyz>
Date: Sun, 7 Aug 2022 13:42:10 +0100
porting mpxyz to hugo (safety commit)
Diffstat:
62 files changed, 638 insertions(+), 1946 deletions(-)
diff --git a/.gitignore b/.gitignore
@@ -1,2 +1,4 @@
-lb
-blog/.htaccess
+.hugo_build.lock
+public/
+static/wallpapers/
+themes/
diff --git a/2020.html b/2020.html
@@ -1,105 +0,0 @@
-<head>
-<title>Michael's Blog</title>
-<meta charset="utf-8">
-<meta name="author" content="mpizzzle">
-<link href="style.css" rel="stylesheet">
-<link rel="icon" type="image/png" href="rss.png"/ >
-</head>
-<body>
-<nav>
- <div class="nav-container">
- <div class="nav-element">
- <p><a href="https://git.michaelpercival.xyz"><img src="git.png" alt="" width="32" height="32" /></a> | <a href="https://github.com/mpizzzle"><img src="github.png" alt="" width="32" height="32" /></a> | <a href="rss.xml"><img src="rss.png" alt="" width="32" height="32" /></a></p>
- </div>
- <div class="nav-element">
- <p><a href="index.html">home</a> |
- <a href="2020.html">thoughts</a> |
- <a href="software.html">software</a> |
- <a href="hardware.html">hardware</a> |
- <a href="library.html">library</a> |
- <a href="shaders.html">shaders</a></p>
- </div>
- <div class="nav-element">
- <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> | <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></p>
- </div>
- </div>
-</nav>
-<div class="main">
-<p><a href="blog.html"><li>blog index</li></a></p>
-
-<!-- LB -->
-<div class='entry'>
-<h2 id='penrose-tilings-part-1'>Penrose Tilings part 1</h2>
-<small>[<a href='#penrose-tilings-part-1'>link</a>—<a href='blog/penrose-tilings-part-1.html'>standalone</a>]</small>
-<p>I recently read an article that <a href="https://www.nobelprize.org/prizes/physics/2020/penrose/interview/">Roger Penrose</a> won a nobel prize for his theoretical work on Black Holes, which I'm sure is well deserved. Another creation of Roger Penrose, 'Penrose tilings' are also very interesting, being his solution for tiling an infinite plane aperiodically with only two tiles. Penrose tilings have an Escheresque quality to them (Escher and Penrose famously were both inspired by one-another during their respective careers) which I find fascinating.</p>
-<p>Having just moved into a new (tragically empty) flat, I've been inspired to try decorating it with some self created art, and Penrose tiling's beauty in conjunction with their relative ease of computability make them an ideal candidate. The idea I have is to write a program to generate some basic Penrose tilings, where I can then play around with the colour scheme, print out a frame, and paint them by hand in an Escher like style. How is that going to work? Let's find out.</p>
-
-<p>The rules for constructing penrose tilings are well documented, <a href="https://tartarus.org/~simon/20110412-penrose/penrose.xhtml">this</a> link in particular explains the iterative process in better detail than I ever could.</p>
-<p>The initial starting triangle shares it's geometry with a slice from a decagon (I will refer to this triangle type as 't123'). The easiest way to construct one is to draw a line of length 1 and rotate the end point by π/5 radians with respect to the origin; optionally repeat the process nine more times and you have a decagon. Conveniently, (0, 0) is the middle of the screen when it comes to computer graphics so arranging the triangles around the center of the screen is trivial.</p>
-<p>The simplest method of division is to take each t123 triangle and divide it into three sub triangles; you can calculate the sub-triangle geometry by finding two new vertices along the perimeter of the parent t123 triangle via the golden ratio (again, check out the link above for more detail).</p>
-<p>Doing this correctly you can fit two t123's and one t124 perfectly into a parent t123 triangle, and in a similar manner the rules for dividing t124 triangles is to fit one t123 and one t124. Boom, infinite Penrose tilings. Simple right? Check out the initial decagon and first t123 split below:
-
-<p><a href="blog/assets/pizza.png"><img src="blog/assets/pizza.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/more_complicated_pizza.png"><img src="blog/assets/more_complicated_pizza.png" alt="" width="400" height="400" /></a></p>
-
-<p>I have used the <a href="https://www.sfml-dev.org/">sfml</a> library in the past as a wrapper for GLSL shading, but it turned out to be a pain to use for this project. I admit my knowledge of the library is poor, but in a marginally more complex project I found a few too many things to be restrictive, for example managing <a href="https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1VertexBuffer.php">vertex buffers</a> (how do I handle my own element buffer objects?); in the end I'd rather just call the OpenGL functions myself, so I scrapped the library in favour of <a href="https://www.glfw.org/">glfw</a>. A little more work required in exchange for a little more control turned out to be the right balance.</p>
-
-<p>Once I had sufficiently bashed myself over the head trying to remember how the OpenGL rendering pipeline works, most of the implementation was a modest cycle of tinkering/ refactoring. The only tricky part was that I had to look up was <a href="https://math.stackexchange.com/questions/2045174/how-to-find-a-point-between-two-points-with-given-distance">how to find a point on a line</a> (thank you based math stack exchange), something I'm sure I learned in school and immediately forgot.</p>
-
-<p>For reference, the formula for calculating a point between two points is:
-<ul>
- <li>(xt, yt) = (((1 − t) * x0 + (t * x1)), ((1 − t) * y0 + (t * y1)))</li>
- <li>where ratio t = dt / d</li>
- <li>and distance d = √((x1 − x0)² + (y1 − y0)²)</li>
-</ul></p>
-
-<p>That looks like a bit of a pain, but for our use case it simplifies nicely since sub-triangles are always a... ratio... of the golden ratio. That is to say:
-<ul>
- <li>dt = φ * d</li>
- <li>∴ t = φ</li>
- <li>∴ no need to calculate d at all (nice.).</li>
-</ul></p>
-
-<p>Once that was solved I ended up with this interesting pattern, from which the Penrose tiling can be carved out:</p>
-<a href="blog/assets/skeleton.png"><img src="blog/assets/skeleton.png" alt="" width="400" height="400" /></a></p>
-
-<p>Despite the above picture being formed from only two different triangles, it is not a valid Penrose tiling. Some of the lines need to be removed, and at the time I was rendering whole triangles instead of individual lines which wasn't flexible enough in terms of design. Once I figured out which lines needed to be removed and how, I ended up with the following:</p>
-
-<p><a href="blog/assets/p2.png"><img src="blog/assets/p2.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p3.png"><img src="blog/assets/p3.png" alt="" width="400" height="400" /></a></p>
-
-<p>Voila! That qualifies as a valid Penrose tiling, and with some careful tinkering I was able to generate the P3 tiling also. Next, using the triangle index data for shading (one element buffer for the t123 triangles, and one for t124):</p>
-
-<p><a href="blog/assets/p2_two_colour.png"><img src="blog/assets/p2_two_colour.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p3_two_colour.png"><img src="blog/assets/p3_two_colour.png" alt="" width="400" height="400" /></a></p>
-
-<p>Then trying to be clever by using a six colour palette (including the lines and background). This was achieved by looking at the parent type of any given triangle giving us 2² colour options for the triangles. I think it turned out nicely:</p>
-
-<p><a href="blog/assets/p3_four_colour_1.png"><img src="blog/assets/p3_four_colour_1.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p2_four_colour_1.png"><img src="blog/assets/p2_four_colour_1.png" alt="" width="400" height="400" /></a></p>
-<p><a href="blog/assets/p2_four_colour_2.png"><img src="blog/assets/p2_four_colour_2.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p3_four_colour_2.png"><img src="blog/assets/p3_four_colour_2.png" alt="" width="400" height="400" /></a></p>
-
-<p>I know there are better and more elegant ways of shading Penrose tilings but I feel happy that I've done what I set out to do, the hard part is waiting for divine inspiration to kick in before I try and paint one for real.</p>
-<p>You can find the code used to generate the images above on github <a href="https://github.com/mpizzzle/penrose">here</a>. If you want to compile the program yourself you'll have install the dependencies manually for now; I may take the time to package it with a more modern build tool in the future.</p>
-<p>Peace out.</p>
-<small>Mon, 09 Nov 2020 22:35:02 +0000</small>
-</div>
-<div class='entry'>
-<h2 id='on-shaders'>on shaders</h2>
-<small>[<a href='#on-shaders'>link</a>—<a href='blog/on-shaders.html'>standalone</a>]</small>
-<p>Writing shaders is an impressive art form.<p/>
-
-<p>I think this is because shaders intersect with a few interesting disciplines: mathematics, art, minimalism, etc. and thus anyone can look at a shader and see the inherent beauty.<p/>
-
-<p>The flip side is that writing shaders is hard, and my own 'shading ability' is total dog shit.<p/>
-
-<p>I'm going to try and nail two birds with one stone; my inability to finish personal projects, and my terrible understanding of shaders. Writing a shader is such a small self-contained project that it surely must be hard not to finish one, even for someone as lazy as myself? I will soon find out.<p/>
-
-<p>I want to see if I can crank out a shader every day for two weeks, creative integrity be damned. Of course this includes publishing shaders to this site, which means setting up whatever relevant frameworks (exactly the kind of BS that I end up tinkering with endlessly to avoid actually doing my projects).<p/>
-
-<p>Vamos. (see current progress <a href="../shaders.html">here<a/>.)<p/>
-<small>Fri, 21 Aug 2020 22:15:31 +0100</small>
-</div>
-</div>
-</body>
diff --git a/README.md b/README.md
@@ -1 +0,0 @@
-# mpercivalxyz
diff --git a/archetypes/default.md b/archetypes/default.md
@@ -0,0 +1,6 @@
+---
+title: "{{ replace .Name "-" " " | title }}"
+date: {{ .Date }}
+draft: true
+---
+
diff --git a/blog.html b/blog.html
@@ -1,33 +0,0 @@
-<head>
-<title>Michael's Blog Index</title>
-<meta charset="utf-8">
-<meta name="author" content="mpizzzle">
-<link href="style.css" rel="stylesheet">
-<link rel="icon" type="image/png" href="rss.png"/ >
-</head>
-<body>
-<nav>
- <div class="nav-container">
- <div class="nav-element">
- <p><a href="https://git.michaelpercival.xyz"><img src="git.png" alt="" width="32" height="32" /></a> | <a href="https://github.com/mpizzzle"><img src="github.png" alt="" width="32" height="32" /></a> | <a href="rss.xml"><img src="rss.png" alt="" width="32" height="32" /></a></p>
- </div>
- <div class="nav-element">
- <p><a href="index.html">home</a> |
- <a href="2020.html">thoughts</a> |
- <a href="software.html">software</a> |
- <a href="hardware.html">hardware</a> |
- <a href="library.html">library</a> |
- <a href="shaders.html">shaders</a></p>
- </div>
- <div class="nav-element">
- <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> | <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></p>
- </div>
- </div>
-</nav>
-<div class="main">
-
-<!-- LB -->
-<li>2020 Nov 09 – <a href="blog/penrose-tilings-part-1.html">Penrose Tilings part 1</a></li>
-<li>2020 Aug 21 – <a href="blog/on-shaders.html">on shaders</a></li>
-</div>
-</body>
diff --git a/blog/on-shaders.html b/blog/on-shaders.html
@@ -1,24 +0,0 @@
-<html>
-<head>
-<title>on shaders</title>
-<link rel='stylesheet' type='text/css' href='../style.css'>
-<meta charset='utf-8'/>
-</head>
-<body>
-<h1>on shaders</h1>
-<small>[<a href='../2020.html#on-shaders'>link</a>—<a href='on-shaders.html'>standalone</a>]</small>
-<p>Writing shaders is an impressive art form.<p/>
-
-<p>I think this is because shaders intersect with a few interesting disciplines: mathematics, art, minimalism, etc. and thus anyone can look at a shader and see the inherent beauty.<p/>
-
-<p>The flip side is that writing shaders is hard, and my own 'shading ability' is total dog shit.<p/>
-
-<p>I'm going to try and nail two birds with one stone; my inability to finish personal projects, and my terrible understanding of shaders. Writing a shader is such a small self-contained project that it surely must be hard not to finish one, even for someone as lazy as myself? I will soon find out.<p/>
-
-<p>I want to see if I can crank out a shader every day for two weeks, creative integrity be damned. Of course this includes publishing shaders to this site, which means setting up whatever relevant frameworks (exactly the kind of BS that I end up tinkering with endlessly to avoid actually doing my projects).<p/>
-
-<p>Vamos. (see current progress <a href="../shaders.html">here<a/>.)<p/>
-<footer>by <strong><a href='https://michaelpercival.xyz/'>Michael Percival</a></strong></footer>
-</body>
-
-</html>-
No newline at end of file
diff --git a/blog/penrose-tilings-part-1.html b/blog/penrose-tilings-part-1.html
@@ -1,65 +0,0 @@
-<html>
-<head>
-<title>Penrose Tilings part 1</title>
-<link rel='stylesheet' type='text/css' href='../style.css'>
-<meta charset='utf-8'/>
-</head>
-<body>
-<h1>Penrose Tilings part 1</h1>
-<small>[<a href='../2020.html#penrose-tilings-part-1'>link</a>—<a href='penrose-tilings-part-1.html'>standalone</a>]</small>
-<p>I recently read an article that <a href="https://www.nobelprize.org/prizes/physics/2020/penrose/interview/">Roger Penrose</a> won a nobel prize for his theoretical work on Black Holes, which I'm sure is well deserved. Another creation of Roger Penrose, 'Penrose tilings' are also very interesting, being his solution for tiling an infinite plane aperiodically with only two tiles. Penrose tilings have an Escheresque quality to them (Escher and Penrose famously were both inspired by one-another during their respective careers) which I find fascinating.</p>
-<p>Having just moved into a new (tragically empty) flat, I've been inspired to try decorating it with some self created art, and Penrose tiling's beauty in conjunction with their relative ease of computability make them an ideal candidate. The idea I have is to write a program to generate some basic Penrose tilings, where I can then play around with the colour scheme, print out a frame, and paint them by hand in an Escher like style. How is that going to work? Let's find out.</p>
-
-<p>The rules for constructing penrose tilings are well documented, <a href="https://tartarus.org/~simon/20110412-penrose/penrose.xhtml">this</a> link in particular explains the iterative process in better detail than I ever could.</p>
-<p>The initial starting triangle shares it's geometry with a slice from a decagon (I will refer to this triangle type as 't123'). The easiest way to construct one is to draw a line of length 1 and rotate the end point by π/5 radians with respect to the origin; optionally repeat the process nine more times and you have a decagon. Conveniently, (0, 0) is the middle of the screen when it comes to computer graphics so arranging the triangles around the center of the screen is trivial.</p>
-<p>The simplest method of division is to take each t123 triangle and divide it into three sub triangles; you can calculate the sub-triangle geometry by finding two new vertices along the perimeter of the parent t123 triangle via the golden ratio (again, check out the link above for more detail).</p>
-<p>Doing this correctly you can fit two t123's and one t124 perfectly into a parent t123 triangle, and in a similar manner the rules for dividing t124 triangles is to fit one t123 and one t124. Boom, infinite Penrose tilings. Simple right? Check out the initial decagon and first t123 split below:
-
-<p><a href="assets/pizza.png"><img src="assets/pizza.png" alt="" width="540" height="540" /></a>
-<a href="assets/more_complicated_pizza.png"><img src="assets/more_complicated_pizza.png" alt="" width="540" height="540" /></a></p>
-
-<p>I have used the <a href="https://www.sfml-dev.org/">sfml</a> library in the past as a wrapper for GLSL shading, but it turned out to be a pain to use for this project. I admit my knowledge of the library is poor, but in a marginally more complex project I found a few too many things to be restrictive, for example managing <a href="https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1VertexBuffer.php">vertex buffers</a> (how do I handle my own element buffer objects?); in the end I'd rather just call the OpenGL functions myself, so I scrapped the library in favour of <a href="https://www.glfw.org/">glfw</a>. A little more work required in exchange for a little more control turned out to be the right balance.</p>
-
-<p>Once I had sufficiently bashed myself over the head trying to remember how the OpenGL rendering pipeline works, most of the implementation was a modest cycle of tinkering/ refactoring. The only tricky part was that I had to look up was <a href="https://math.stackexchange.com/questions/2045174/how-to-find-a-point-between-two-points-with-given-distance">how to find a point on a line</a> (thank you based math stack exchange), something I'm sure I learned in school and immediately forgot.</p>
-
-<p>For reference, the formula for calculating a point between two points is:
-<ul>
- <li>(xt, yt) = (((1 − t) * x0 + (t * x1)), ((1 − t) * y0 + (t * y1)))</li>
- <li>where ratio t = dt / d</li>
- <li>and distance d = √((x1 − x0)² + (y1 − y0)²)</li>
-</ul></p>
-
-<p>That looks like a bit of a pain, but for our use case it simplifies nicely since sub-triangles are always a... ratio... of the golden ratio. That is to say:
-<ul>
- <li>dt = φ * d</li>
- <li>∴ t = φ</li>
- <li>∴ no need to calculate d at all (nice.).</li>
-</ul></p>
-
-<p>Once that was solved I ended up with this interesting pattern, from which the Penrose tiling can be carved out:</p>
-<a href="assets/skeleton.png"><img src="assets/skeleton.png" alt="" width="540" height="540" /></a></p>
-
-<p>Despite the above picture being formed from only two different triangles, it is not a valid Penrose tiling. Some of the lines need to be removed, and at the time I was rendering whole triangles instead of individual lines which wasn't flexible enough in terms of design. Once I figured out which lines needed to be removed and how, I ended up with the following:</p>
-
-<p><a href="assets/p2.png"><img src="assets/p2.png" alt="" width="540" height="540" /></a>
-<a href="assets/p3.png"><img src="assets/p3.png" alt="" width="540" height="540" /></a></p>
-
-<p>Voila! That qualifies as a valid Penrose tiling, and with some careful tinkering I was able to generate the P3 tiling also. Next, using the triangle index data for shading (one element buffer for the t123 triangles, and one for t124):</p>
-
-<p><a href="assets/p2_two_colour.png"><img src="assets/p2_two_colour.png" alt="" width="540" height="540" /></a>
-<a href="assets/p3_two_colour.png"><img src="assets/p3_two_colour.png" alt="" width="540" height="540" /></a></p>
-
-<p>Then trying to be clever by using a six colour palette (including the lines and background). This was achieved by looking at the parent type of any given triangle giving us 2² colour options for the triangles. I think it turned out nicely:</p>
-
-<p><a href="assets/p3_four_colour_1.png"><img src="assets/p3_four_colour_1.png" alt="" width="540" height="540" /></a>
-<a href="assets/p2_four_colour_1.png"><img src="assets/p2_four_colour_1.png" alt="" width="540" height="540" /></a></p>
-<p><a href="assets/p2_four_colour_2.png"><img src="assets/p2_four_colour_2.png" alt="" width="540" height="540" /></a>
-<a href="assets/p3_four_colour_2.png"><img src="assets/p3_four_colour_2.png" alt="" width="540" height="540" /></a></p>
-
-<p>I know there are better and more elegant ways of shading Penrose tilings but I feel happy that I've done what I set out to do, the hard part is waiting for divine inspiration to kick in before I try and paint one for real.</p>
-<p>You can find the code used to generate the images above on github <a href="https://github.com/mpizzzle/penrose">here</a>. If you want to compile the program yourself you'll have install the dependencies manually for now; I may take the time to package it with a more modern build tool in the future.</p>
-<p>Peace out.</p>
-<footer>by <strong><a href='https://michaelpercival.xyz/'>Michael Percival</a></strong></footer>
-</body>
-
-</html>-
No newline at end of file
diff --git a/config.toml b/config.toml
@@ -0,0 +1,3 @@
+baseURL = 'https://michaelpercival.xyz'
+languageCode = 'en-gb'
+title = "Michael Percival's Home Page"
diff --git a/content/bent-four-in-the-corner-for-dummies.html b/content/bent-four-in-the-corner-for-dummies.html
@@ -0,0 +1,78 @@
+Chess is notoriously a game of perfect information, and can be approached with purely deductive reasoning.
+
+I found the rules of Go to be nebulous, which was off-putting coming from a 'more logical' game like chess; it didn't seem to be clear in many common cases how territories could be defined. If I have a line down the center of the board, which side is the inside of my territory and which side is the outside? If there's no way to define this then surely there's no way to count a score of what's 'inside' vs 'outside' a group right? Why does a group need two eyes to be alive? There is nothing in the ruleset saying that a group needs two eyes to live. And if I have some territory with two eyes and my opponent still plays inside it, what the fuck is happening? wait, my group with two eyes managed to die???
+
+As it turns out the rules are in fact very well defined; the consequences of these rules however can be nebulous for a new player, and therefore can be a lot harder to get an intuition for compared to chess.
+
+When I first learned to play Go, I started by doing life and death puzzles (tsumego).
+
+The outcome of each puzzle is also very logical, of which there are exactly four:
+life, death, seki, ko.
+
+getting an intuitive feel for life and death comes quite naturally coming from chess, as it's the same binary severity as being checkmated. Can you checkmate your opponent in this position? Can you defend against checkmate in this position? Very easy to understand. Seki is somewhat analogous to stalemate, and can occur when two weak groups are attacking each other at the same time. If neither group has a significant advantage in the fight, then it's possible to reach a situation where if either player tries to kill the other, that player would end up killing themselves first by shorting their own liberty count. As such, the best option for both players is to live peacefully in 'mutual life' (seki), which, while doesn't net you any points in some rulesets, is better than dying.
+
+ko, however, is a fascinating result; however, when first learning the game the nuance of ko was lost on me. It was hard to get an intuitive grasp of 'ko' compared to the other three results as it doesn't have an analog in chess, and I remember when first learning the game thinking "yes I can sort of see that the shape of this result is a ko, but what the fuck is a ko?". The light-bulb moment came during live teaching game, where the implications of an evolving ko fight became apparent to me. You mean this fight can affect every single other fight happening on the board? mind blown! a Queen in the middle of a chess board certainly has a lot of influence, but there will still be pockets of the board where her presence is not felt.
+
+Anyway, if you look on online-go.com, early on in the puzzle lists you encounter many 'bent four in the corner' problems, and when first learning the game these puzzles stood out to me as making no sense; I found this 'bent four' concept to be even more opaque than ko fights, and unlike ko fights didn't seem to have very much significance. There is a lot of complexity to unpack with the bent four (we'll break it down), and they do have some interesting significance, however personally I found it unhelpful to have this puzzle introduced to me so early on while learning; if I was teaching go to someone I would wait WAY longer before showing them bent four in the corner problems.
+
+Complexity layer 1:
+So here's the scoop. This is seki right? if Black plays either X or Y, they are reducing their own liberties from two to one, and next turn White will play whichever move Black didn't play reducing Black's liberties from one to zero thus capturing the group. Ok, so Black doesn't have a move, it's seki right?
+
+Complexity layer 2:
+Well, no. What about White's moves?
+If White plays Y, then Black plays at X and captures. This makes a straight 4 in the corner, and this is a shape which White cannot stop from making two eyes.
+However if White plays at X, Black plays at Y making a bent four in the corner. Can you see what's about to happen? Lets continue:
+
+White plays at Z. Now Black has only one move which can potentially still make two eyes at A. If White were to play away, Black could capture the stone at Z and be alive. However, White isn't a dumbass and instead takes the stone at A. Next opportunity White gets, White will play at A reducing the shape to a bent three in the corner, which as you can see is pretty trivially a dead shape.
+
+But it is Black's turn. and do you notice anything about the shape? it's a ko! White has started a ko fight, and therefore if Black can find enough threats elsewhere on the board he has the potential to make life!... right?
+
+Complexity layer 3:
+Well, no. Think about the initial position of the puzzle; remember that Black has no way to initiate this ko fight, only White does. So theoretically, White can keep the pseudo seki on the board until the very end of the game, neutralize any remaining ko threats, and then start the sequence above. When Black tries to find a ko threat, he will find that no move on the board forces White to respond, and therefore White will simply ignore it and play at A, thus finally killing the group.
+
+So, finally, here is the conundrum. What is the result of the puzzle? alive, dead, seki or ko?
+we can rule out life for Black pretty easily, so this leaves death, seki and ko.
+
+If White so wishes, she can leave the seki on the board and that's that. However, at any point she has the option to force a ko fight, including waiting until the end of the game where she can 100% guarantee that Black will lose the ko fight. So is it dead?
+
+Complexity layer 4:
+The weird answer is, it depends on the ruleset! The strangest case is the Japanese ruleset, which in the UK is also the most common (although the AGA ruleset, which I believe to be superior, seems to have gained traction)
+
+In the Japanese ruleset, the bent four in the corner shape is declared to be unconditionally dead; there is literally a special case in the ruleset for this shape. You don't even have to initiate the ko! despite it technically being a seki, Black is declared to be dead if there is a bent four on the board.
+
+Wait, how is that fair? it's a seki on the board, so surely at the very least you need to reduce it to a dead shape before it can be declared dead, right?
+Well, no. Again, it's a special case baked directly into the rules, so it is dead. So why does a rule for this case exist?
+
+Complexity layer 5:
+Imagine the following scenario when there is no bent four in the corner rule:
+
+We are (almost) at the end of the game and there is a bent four on the board. White needs to kill the bent four to win the game. In order for White to kill the bent four, she has to reduce Black's group to a dead shape. But as we have highlighted, this involves winning a ko fight. Therefore, she needs to preemptively neutralize any remaining ko threats before initiating the sequence, otherwise there's a chance that she might accidently let Black reach unconditional life which could be the difference between winning and losing. Eventually, White manages to do all this and capture the group successfully. She won the game right?
+
+Complexity layer 6:
+Well... It depends. How much is capturing the bent four group worth? How close was the score before the above scenario started? How many ko threats needed to be neutralized?
+
+Lets say the group is worth 15 points, White is down by 0.5 points, and she had to preemptively respond to 15 ko threats before starting the ko. In this case, the 15 points of territory gained is offset by the 15 extra moves she needed to make, each of which is worth -1 points (It's possible for this not to be the case, e.g. the preemptive move was dame, but suppose all were worth -1). She still loses by a half point, even though objectively there's a group on the board that she can kill that would win the game, but the amount a stones she needs to invest makes it not worth it.
+
+In the Chinese ruleset, this problem does not exist. each extra move played in your own territory is worth 0 points instead of -1, as your stones + territory count towards your score, where as in the Japanese ruleset territory + prisoners are considered. This means that in the Chinese ruleset playing preemptive ko threats doesn't reduce your score and therefore you are free to clean up the bent four, winning by 14.5 points.
+
+The Japanese saw this flaw in their ruleset especially when compared to the original Chinese rules. rather than throw out their ruleset entirely, they introduced a rule to handle this so that this very odd circumstance wouldn't force outcome of the match to diverge radically between rulesets.
+
+Ok, so under some rulesets the rules of Go are a bit less elegant, but it solves the problem right?
+
+Complexity layer 7:
+Well... no.
+While they are much, much rarer than the bent four, there are other shapes that share this 'bent fourness' quirk of being technically dead at the end of the game, but having to go through one or more ko fights before eventually being reduced to death. While this scenario is more complex, it could again feasibly be the difference between winning and losing, and again being another wedge between the Chinese and Japanese rulesets, especially since only the special case for the bent four exists! No other shapes, despite their similar properties are covered.
+
+So... yeah. Unfortunate as it is to say, but the Japanese ruleset is inelegant. The Chinese ruleset is more elegant in some ways, but it too has it's own problems.
+
+Is there a middle ground?
+Well... yes! It's the AGA ruleset, in my opinion the best ruleset, and they fix this entire problem with a solution that is so elegant (as Go is supposed to be) that I'm genuinely surprised that the Americans figured it out before anybody in Asia.
+
+The rule is simple: passing your turn is worth -1 points. That's it, that's the entire rule. No bent four in the corner special case. See if you can figure out how that fixes the problem before we continue.
+
+Here's how it works: imagine the bent four scenario again. White needs to capture a 15 point bent four territory, is behind by 0.5 points, and needs to fix their shape preemptively against 15 ko threats.
+The situation is exactly the same: Every time White neutralizes a ko threat, it's -1 point to her. However the small detail is that when Black passes the turn, it's also -1 point for him. So no net loss has occured. If there are any dame (zero point moves) then both players need to fill those in first before White starts neutralizing threats. So if Black passes it's -1, and no matter else where Black plays it's also -1 points. Therefore, at the end of the sequence after the bent four has been captured, White has +15 for the territory, -15 for the ko threat neutralizations, however now Black also has -15 for passing 15 turns (or playing 15 unnecessary moves). Therefore, White wins by 14.5. Genius!
+
+There are more subtleties to this ruleset, but basically it combines the best of both the Japanese and Chinese rulesets while still managing to be more elegant. Notice that this rule doesn't just fix the bent four in the corner, but any other variations of 'bent fourness' that might not technically be covered by the Japanese ruleset.
+
+The irony of it all is that this kind of complexity arises BECAUSE the rules are so simple, allowing difficult edge cases where small subleties make all the difference.
diff --git a/content/hardware.md b/content/hardware.md
@@ -0,0 +1,15 @@
+---
+title: "Hardware"
+date: 2022-08-07T11:48:19+01:00
+draft: false
+---
+
+Hardware:
+
+- Dell XPS 13 (main)
+- OS: [Manjaro](https://manjaro.org/)
++ IBM Thinkpad T60
++ OS: [Parabola](https://www.parabola.nu/)
++ [Librebooted](https://libreboot.org)! this is the only machine I own that rms would approve of.
+- Lenovo Thinkpad W540
+- OS: [Arch](https://archlinux.org/), though I plan on replacing it with [OpenBSD](https://www.openbsd.org/) at some point.
diff --git a/content/library.md b/content/library.md
@@ -0,0 +1,8 @@
+---
+title: "Library"
+date: 2022-08-07T11:48:24+01:00
+draft: false
+---
+
+Fiction
+Non-Fiction
diff --git a/content/penrose-tilings-part-1.md b/content/penrose-tilings-part-1.md
@@ -0,0 +1,58 @@
+---
+title: "Penrose Tilings"
+date: 2022-08-06T14:03:39+01:00
+draft: false
+---
+
+I recently read an article that [Roger Penrose](https://www.nobelprize.org/prizes/physics/2020/penrose/interview/) won a nobel prize for his theoretical work on Black Holes, which I'm sure is well deserved. Another creation of Roger Penrose, 'Penrose tilings' are also very interesting, being his solution for tiling an infinite plane aperiodically with only two tiles. Penrose tilings have an Escheresque quality to them (Escher and Penrose famously were both inspired by one-another during their respective careers) which I find fascinating.
+
+Having just moved into a new (tragically empty) flat, I've been inspired to try decorating it with some self created art, and Penrose tiling's beauty in conjunction with their relative ease of computability make them an ideal candidate. The idea I have is to write a program to generate some basic Penrose tilings, where I can then play around with the colour scheme, print out a frame, and paint them by hand in an Escher like style. How is that going to work? Let's find out.
+
+The rules for constructing penrose tilings are well documented, [this](https://tartarus.org/~simon/20110412-penrose/penrose.xhtml) link in particular explains the rules in better detail than I ever could.
+
+Starting with a decagon is probably the easiest method, though there are other seeds that can be used. To construct one procedurally, draw a line of length 1 and rotate the end point by π/5 radians with respect to the origin; repeat the process nine more times, fill in the lines and you have a decagon.
+
+Conveniently, (0, 0) is the middle of the screen when it comes to computer graphics so arranging the triangles around the center of the screen is trivial.
+
+{{< image-row img1="pizza.png" img2="more_complicated_pizza.png">}}
+
+The simplest method of division is to take each triangle and divide it into three sub triangles; you can find the sub-triangle geometry by from the two new vertices along the perimeter of the parent triangle via the golden ratio (again, check out the link above for more detail).
+
+Doing this correctly you can fit two t123's and one t124 perfectly into a parent t123 triangle, and in a similar manner the rules for dividing t124 triangles is to fit one t123 and one t124. Boom, infinite Penrose tilings. Simple right? Check out the first split to the left.
+
+I have used the [sfml](https://www.sfml-dev.org/) library in the past as a wrapper for GLSL shading, but it turned out to be a pain to use for this project. I admit my knowledge of the library is poor, but in a marginally more complex project I found a few too many things to be restrictive, for example managing [vertex buffers](https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1VertexBuffer.php) (how do I handle my own element buffer objects?); in the end I'd rather just call the OpenGL functions myself, so I scrapped the library in favour of [glfw](https://www.glfw.org/). A little more work required in exchange for a little more control turned out to be the right balance.
+
+Once I had sufficiently bashed myself over the head trying to remember how the OpenGL rendering pipeline works, most of the implementation was a modest cycle of tinkering/ refactoring. The only tricky part was that I had to look up was [how to find a point on a line](https://math.stackexchange.com/questions/2045174/how-to-find-a-point-between-two-points-with-given-distance) (thank you based math stack exchange), something I'm sure I learned in school and immediately forgot.
+
+For reference, the formula for calculating a point between two points is:
+- (xt, yt) = (((1 − t) * x0 + (t * x1)), ((1 − t) * y0 + (t * y1)))
+- where ratio t = dt / d
+- and distance d = √((x1 − x0)² + (y1 − y0)²)
+
+That looks like a bit of a pain, but for our use case it simplifies nicely since sub-triangles are always a ratio of... the golden ratio. That is to say:
+- dt = φ * d
+- ∴ t = φ
+- ∴ no need to calculate d at all (nice.).
+
+Once that was solved I ended up with an interesting pattern, from which the Penrose tiling can be carved out.
+
+{{< img src="/assets/skeleton.png" width="500" height="500">}}
+
+Despite the above picture being formed from only two different triangles, it is not a valid Penrose tiling. Some of the lines need to be removed, and at the time I was rendering whole triangles instead of individual lines which wasn't flexible enough in terms of design. Once I figured out which lines needed to be removed and how, I ended up with the following:
+
+{{< image-row img1="p2.png" img2="p3.png">}}
+
+Voila! That qualifies as a valid Penrose tiling, and with some careful tinkering I was able to generate the P3 tiling also. Next, using the triangle index data for shading (one element buffer for the t123 triangles, and one for t124):
+
+{{< image-row img1="p2_two_colour.png" img2="p3_two_colour.png">}}
+
+Then trying to be clever by using a six colour palette (including the lines and background). This was achieved by looking at the parent type of any given triangle giving us 2² colour options for the triangles. I think it turned out nicely:
+
+{{< image-row img1="p3_four_colour_1.png" img2="p2_four_colour_1.png">}}
+{{< image-row img1="p2_four_colour_2.png" img2="p3_four_colour_2.png">}}
+
+I know there are better and more elegant ways of shading Penrose tilings but I feel happy that I've done what I set out to do, the hard part is waiting for divine inspiration to kick in before I try and paint one for real.
+
+You can find the code used to generate the images above on github [here](https://github.com/mpizzzle/penrose). If you want to compile the program yourself you'll have install the dependencies manually for now; I may take the time to package it with a more modern build tool in the future.
+
+Peace out.
diff --git a/content/pgp.md b/content/pgp.md
@@ -0,0 +1,8 @@
+---
+date: 2022-08-07T00:15:31+01:00
+draft: false
+---
+
+{{< pgp >}}
+
+alternatively, you can download the key [here](/mpxyz.pgp).
diff --git a/content/posts/my-first-post.md b/content/posts/my-first-post.md
@@ -0,0 +1,17 @@
++++
+title = "Site maintenance"
+date = "2022-05-19T19:07:16+01:00"
+author = "Percy"
+authorTwitter = "" #do not include @
+cover = ""
+tags = ["", ""]
+keywords = ["", ""]
+description = ""
+showFullContent = false
+readingTime = false
+hideComments = false
++++
+
+BLEP
+
+BLEP BLEP
diff --git a/content/software.md b/content/software.md
@@ -0,0 +1,7 @@
+---
+title: "Software"
+date: 2022-08-07T11:48:13+01:00
+draft: false
+---
+
+Coming soon.
diff --git a/content/wallpapers.md b/content/wallpapers.md
@@ -0,0 +1,21 @@
+---
+title: "Wallpapers"
+date: 2022-08-06T12:38:37+01:00
+draft: false
+---
+
+Here is my current desktop wallpaper gallery.
+
+My personal guidelines for choosing wallpapers are:
+
+- Nothing remotely pornographic
+- Pictures of flowers/ nature are a solid go-to
+- If I have two similar pictures with similar palettes I'll cut one (eventually), though green tends to be an exception
+- Video game/ anime papers should be subtle
+- Nothing overly 'moody' or depressing
+- Text should not be the focus, no quotes
+- Avoid non-stylised people/ characters if they are the focus (except cute animals)
+
+{{< gallery >}}
+
+I tend to get my wallpapers from [/wg/](https://4chan.org/wg/).
diff --git a/gpg.html b/gpg.html
@@ -1,78 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
- <meta charset="utf-8">
- <meta http-equiv="X-UA-Compatible" content="IE=edge">
- <meta name="viewport" content="width=device-width, initial-scale=1">
- <meta name="description" content="">
- <meta name="author" content="mpizzzle">
- <title>Michael Percival's PGP Key</title>
- <link href="style.css" rel="stylesheet">
- <link rel="icon" type="image/png" href="gnupg.png"/ >
-</head>
-<body>
-<div class="gpg">
-<pre>
-pub rsa4096 2019-04-07 [SC] [expires: 2021-04-06]
- FC3056FFB25B27F3E23C4714C9A24A99EB95BCAC
-uid [ultimate] Michael Percival <m@michaelpercival.xyz>
-sub rsa4096 2019-04-07 [E] [expires: 2021-04-06]
-
------BEGIN PGP PUBLIC KEY BLOCK-----
-
-mQINBFyp4XoBEAC9Wq/xvQcXL8n7eMrr3DtCq9F2XfgVs6rkkh1+p5IPmGJRkXn7
-yt6QHG0j+UF7z1Wc3Ds6QS11p4c2I8KOltu9fywWyZPu6RhqL8/fCMe+kb4vNCVZ
-guBWQKYlhHJFNrbP5vkfpGmSFInjaHjl5FaS1lZJke5M7KkYtyjHeQwMp4uRqdic
-i/eu5y6V99jUU45Am7+Lo5HEHZv2bx1i5JtNXA4x2ZZ6GoAtbJ2tPyLd/xYEEvMw
-b7uQ+3czuoWPFvFhXmuYPZS02CYvhmyRDdKgwDHuw6Fg7KhH6PICDphOV5WJQj5w
-t8XhgvT5z7yWrKQtmaUJpwVkieirsDMQyJAzoeDEwAA23CjVKXvS0FmxLO4pPhpg
-dN+zr3q+ZAWn72HbWKtIolQi3T1DhUla+FhkmMUn/SYgOWTqTgNWg4oksfGpfc/s
-QMW1WjVSmJpMjRq823XwWvprJNruSXfZ4IeaO14InPLeOtSs0w757wr+646KQSaU
-epVxtlm38NNqrMArgnWP/82otXBFQ8KC8h9prJetq0fD851jfgGjiL2Amc3UnZRM
-y49dGtdAMjqtzc1Eejh3is+cF/cW042PmQ+bYyPVaarDT8g5YAvh0g3IVMEDh2ch
-2buB84cMIR1CbAgUfY3Shhpb7thsdm7iQHqAnO2gQiWIeDuN/tt0wU6btwARAQAB
-tChNaWNoYWVsIFBlcmNpdmFsIDxtQG1pY2hhZWxwZXJjaXZhbC54eXo+iQJUBBMB
-CAA+FiEE/DBW/7JbJ/PiPEcUyaJKmeuVvKwFAlyp4XoCGwMFCQPCZwAFCwkIBwIG
-FQoJCAsCBBYCAwECHgECF4AACgkQyaJKmeuVvKw0Ww/7Bj2SXgVX/ryTaWy+6nM9
-+7a+mEHQj7N1LZdeiY9gsUxsulyuPISoEHcxjXP+RAUvU70Xn0XQp5o0L1ep9S9m
-uVexMA4Rv7ntt8cRp05SyQjX9+UIfvKyABrwHDwGbIier6a0WXmIoeLAH0BIpCj9
-AsgejzjCwQeKWOTIU+aW8IhBsDEMDV27viOoseB9cEna3PNy6SFg3N4GecD5yz1Y
-wsWCPhPhA5/lddSYaStms1nExM57wgl3VYr2Gq5/aynTp/s74FK+mQWWmyrunNf2
-N+Tdvi+zZ7bIJjl8gCrWYHA/uTdtb7uD23j9C9qwzx+tfrggMCh2C/VntQA85gdy
-GobnbVBsGhOdySSZG2fRe7hU8cgZoIdM2ltfSwxupndDpwYiSSr+GnlvRhA+bLbG
-1rop3dRWFW0G3xgZeRYJKViXf5TPnZiV0w1rWCwHRSGJMSG4LcF2xa7oY1QlPHEu
-5FhnlGyXPIoRqoaoUShJCgWnWQ7Ak+1HvUg3feIYeSCEDwY8huN64SD7KNJwiWk8
-onNXcKspD2I8mCyMzZDJpacVzr4gX+H2ss7YYKdCUcIUBwe8pKTlJssaUHj9Ahy1
-wMALs2nZBvzswL89awOHxmR2mVGfTK+cmkFLeXEWRdyp3q60e0I2fCklNOTmagIV
-BVVaLzNf2HDNSaUd6qrLEqK5Ag0EXKnhegEQAL4EYRAjhzMhQaSmKF7AvAzWuLoD
-oa8DdoMGxzX3pnbJMRpKmYHFa90w93+CFwk2Ded/4WFoF28rZx9v0KgWNuhVpigH
-6/iCCaki974YxG8iPPU8KfPJA0nPW4sH1lZr3IHd8W28sHruDCJH4e6IHOybk85m
-SvGlFPRP/PIAfpuv1qu+SDDcTfbv59AOhrYNsfEnLgVlOjZlD7S6RqMqB0lMeMwr
-fzJ/g0Ydf0Dq+qmDGInlL6C4Qovsk+uegyJVdqYt47pfu9O6SQNQNMegyHLHFsac
-j+EDzMTaQEd/tJJ3qIT7pP6JMZAQvYqdd9Hcw4lVzpGZn3Dl+NEetlzrYqlF+Y1d
-Eeux/tW3q+9bAkaf+ctQcXDawlHxN7METmjtNKoU3bUX0dqpdWZb0t6zyksZYxLN
-TYGnIEm+XL7oHAUJRDY4v645TyQTIT9E/O0EtpsL+mjkDOyv5Sp911dM0ExeDk7v
-dliMkXdrzi9jeziBQNYW8tFDefhrJ6XEDWr6SE7cHMjVr3dcLZDXQWWroiGplxSF
-F+Ba81KaEsD8eidSrYQgdm4ZSTAwFWkMwZt5DD56sgXzTUnGPVkjZMUuLWM70Xm8
-Fr8+UY6djZxF3kzD97sK35H28TWHr7pnuLnfgDWhFLU37nfQv9uVz8Oqh6ddTe2C
-d/t6bb+2B8Mq7BerABEBAAGJAjwEGAEIACYWIQT8MFb/slsn8+I8RxTJokqZ65W8
-rAUCXKnhegIbDAUJA8JnAAAKCRDJokqZ65W8rIqlD/459MDMUYn0aGRzQf8Co/T5
-Upv014i53yIZlKfbzx4Pi46AOhiJ9Sc8eqJyCYSzHrhR+6DYyW/RAD5q3ANz5gkZ
-Q4/S7EdcMQQ7VwZklJ8xcieLtqRAlQxdc7pce5m5sfhk9YB9lMxg7jEOwLCI/7wd
-H6A5CJKPXXezTZZ8kBQJMyTQjzr5ug5/lUG3cblmz79XIovoCrLF3Md81Lh7vXHQ
-37H67Kq0ABGSx/pr04UbV12tBsgY+JP5GZiEWcbSzAz1skVagQSeA4Z01Pf5q3Iz
-lQ/ZAX8K7xIc/gbioRrv+9RO/IT2rq56XIDqVRQdUyvnujDjKWvgxq9bzJnDXau0
-KY3SIZzEHYyrWrQJzTgWP+8Q7+/MPIrrcEEHo8RUs+U+QpAUts+bnvSqP/jijC/t
-rkoXYsgiGs4Fi+6YnPlXLRBkSN3M9H4p5NRQ7CkV+tOL3y60DWPG9udSB4FnZRno
-TiwTyVQRLAYlouyAqH2wHajNC9Su25XV8swWWneRikhDeyyk/Vtebn5jfdcDZ+iR
-MFw6ZC0Vp28GGYDkbaokH4U/EKEKetZDU5EGgtXbzXoIxmNPGXFwnlhnWNxG9vSj
-hdIJ9ZVLaGz/qV9oixVEmdDV/WC9Cu/lIsKu5cPi/ADaMcTFVJWrT0aKpW/rMi28
-x3NtZUPjN9qxwvdorrgKiQ==
-=zamr
------END PGP PUBLIC KEY BLOCK-----
-</pre>
-</div>
-</body>
-
-</html>
diff --git a/hardware.html b/hardware.html
@@ -1,43 +0,0 @@
-<head>
-<title>Hardware</title>
-<meta charset="utf-8">
-<meta name="author" content="mpizzzle">
-<link href="style.css" rel="stylesheet">
-<link rel="icon" type="image/jpg" href="mpizzzle.jpg"/ >
-</head>
-<body>
-<nav>
- <div class="nav-container">
- <div class="nav-element">
- <p><a href="https://git.michaelpercival.xyz"><img src="git.png" alt="" width="32" height="32" /></a> | <a href="https://github.com/mpizzzle"><img src="github.png" alt="" width="32" height="32" /></a> | <a href="rss.xml"><img src="rss.png" alt="" width="32" height="32" /></a></p>
- </div>
- <div class="nav-element">
- <p><a href="index.html">home</a> |
- <a href="2020.html">thoughts</a> |
- <a href="software.html">software</a> |
- <a href="hardware.html">hardware</a> |
- <a href="library.html">library</a> |
- <a href="shaders.html">shaders</a></p>
- </div>
- <div class="nav-element">
- <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> | <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></p>
- </div>
- </div>
-</nav>
-<div class="main">
-<p>Hardware:</p>
-<ul>
-<li>Dell XPS 13 (main)</li>
-<li>OS: <a href="https://manjaro.org/">Manjaro</a></li>
-</ul>
-<ul>
-<li>IBM Thinkpad T60</li>
-<li>OS: <a href="https://www.parabola.nu/">Parabola</a></li>
-<li><a href="https://libreboot.org">Librebooted</a>! this is the only machine I own that rms would approve of.</li>
-</ul>
-<ul>
-<li>Lenovo Thinkpad W540</li>
-<li>OS: <a href="https://archlinux.org/">Arch</a>, though I plan on replacing it with <a href="https://www.openbsd.org/">OpenBSD</a> at some point.</li>
-</ul>
-</div>
-</body>
diff --git a/index.html b/index.html
@@ -1,66 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-
-<head>
-<title>Michael Percival's Home Page</title>
-<meta charset="utf-8"/ >
-<meta name="author" content="mpizzzle"/ >
-<link rel="stylesheet" type="text/css" href="style.css"/ >
-<link rel="icon" type="image/jpg" href="mpizzzle.jpg"/ >
-</head>
-
-<body>
-<nav>
- <div class="nav-container">
- <div class="nav-element">
- <p><a href="https://git.michaelpercival.xyz"><img src="git.png" alt="" width="32" height="32" /></a> | <a href="https://github.com/mpizzzle"><img src="github.png" alt="" width="32" height="32" /></a> | <a href="rss.xml"><img src="rss.png" alt="" width="32" height="32" /></a></p>
- </div>
- <div class="nav-element">
- <p><a href="index.html">home</a> |
- <a href="2020.html">thoughts</a> |
- <a href="software.html">software</a> |
- <a href="hardware.html">hardware</a> |
- <a href="library.html">library</a> |
- <a href="shaders.html">shaders</a></p>
- </div>
- <div class="nav-element">
- <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> | <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></p>
- </div>
- </div>
-</nav>
-<div class="main">
-<div class="nav-container">
- <div class="main-element">
- <p><img src="mpizzzle.jpg" alt="" width="400" height="400" /></p>
- </div>
- <div class="main-element">
- <p>My name is Michael Percival. I am:</p>
- <ul>
- <li>a software engineer based in central London</li>
- <li>trying to be excellent engineer</li>
- <li>trying to suck less at Brazilian Jiu Jitsu</li>
- <li>trying to rank up at Go 바둑.</li>
- </ul>
- <p>Some of my interests include:</p>
- <ul>
- <li>Brazilian Jiu Jitsu. I train at 10th Planet London.</li>
- <li>Minimalist, free/ libre software</li>
- <li>Machine Learning</li>
- <li>Go (the board game, though golang is also neat) challenge me, mpizzzle on <a href="https://pandanet-igs.com/communities/pandanet">pandanet</a>.</li>
- <li>Cryptography. The <a href="https://cryptopals.com/">cryptopals</a> challenges are great if you want to learn through trial by fire.</li>
- <li>Organic Chemistry, no space for it in London though unfortunately.</li>
- <li>Speaking terrible Spanish.</li>
- </ul>
- </div>
-</div>
-
-<div class="contact-element">
- <p>Contact:</p>
- <li>cv: <a href="cv.pdf">cv.pdf</a></li>
- <li>email: <a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></li>
-</div>
-
-</div>
-</body>
-
-</html>
diff --git a/js/shader-container.js b/js/shader-container.js
@@ -1,61 +0,0 @@
-var container;
-var camera, scene, renderer;
-var uniforms;
-
-init();
-animate();
-
-function init() {
- container = document.getElementById( 'container' );
-
- camera = new THREE.Camera();
- camera.position.z = 1;
-
- scene = new THREE.Scene();
-
- var geometry = new THREE.PlaneBufferGeometry( 2, 2 );
-
- uniforms = {
- u_time: { type: "f", value: 1.0 },
- u_resolution: { type: "v2", value: new THREE.Vector2() },
- u_mouse: { type: "v2", value: new THREE.Vector2() }
- };
-
- var material = new THREE.ShaderMaterial( {
- uniforms: uniforms,
- vertexShader: document.getElementById( 'vertexShader' ).textContent,
- fragmentShader: document.getElementById( 'fragmentShader' ).textContent
- } );
-
- var mesh = new THREE.Mesh( geometry, material );
- scene.add( mesh );
-
- renderer = new THREE.WebGLRenderer();
- renderer.setPixelRatio( window.devicePixelRatio );
-
- container.appendChild( renderer.domElement );
-
- onWindowResize();
- window.addEventListener( 'resize', onWindowResize, false );
-
- document.onmousemove = function(e){
- uniforms.u_mouse.value.x = e.pageX
- uniforms.u_mouse.value.y = e.pageY
- }
-}
-
-function onWindowResize( event ) {
- renderer.setSize(400, 400);
- uniforms.u_resolution.value.x = renderer.domElement.width;
- uniforms.u_resolution.value.y = renderer.domElement.height;
-}
-
-function animate() {
- requestAnimationFrame( animate );
- render();
-}
-
-function render() {
- uniforms.u_time.value += 0.05;
- renderer.render( scene, camera );
-}
diff --git a/js/three.min.js b/js/three.min.js
@@ -1,1070 +0,0 @@
-// threejs.org/license
-(function(k,Ea){"object"===typeof exports&&"undefined"!==typeof module?Ea(exports):"function"===typeof define&&define.amd?define(["exports"],Ea):(k=k||self,Ea(k.THREE={}))})(this,function(k){function Ea(){}function u(a,b){void 0===a&&(a=0);void 0===b&&(b=0);this.x=a;this.y=b}function qa(){this.elements=[1,0,0,0,1,0,0,0,1];0<arguments.length&&console.error("THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.")}function V(a,b,c,d,e,f,g,h,l,n){Object.defineProperty(this,"id",
-{value:ej++});this.uuid=P.generateUUID();this.name="";this.image=void 0!==a?a:V.DEFAULT_IMAGE;this.mipmaps=[];this.mapping=void 0!==b?b:V.DEFAULT_MAPPING;this.wrapS=void 0!==c?c:1001;this.wrapT=void 0!==d?d:1001;this.magFilter=void 0!==e?e:1006;this.minFilter=void 0!==f?f:1008;this.anisotropy=void 0!==l?l:1;this.format=void 0!==g?g:1023;this.internalFormat=null;this.type=void 0!==h?h:1009;this.offset=new u(0,0);this.repeat=new u(1,1);this.center=new u(0,0);this.rotation=0;this.matrixAutoUpdate=!0;
-this.matrix=new qa;this.generateMipmaps=!0;this.premultiplyAlpha=!1;this.flipY=!0;this.unpackAlignment=4;this.encoding=void 0!==n?n:3E3;this.version=0;this.onUpdate=null}function S(a,b,c,d){void 0===a&&(a=0);void 0===b&&(b=0);void 0===c&&(c=0);void 0===d&&(d=1);this.x=a;this.y=b;this.z=c;this.w=d}function Ga(a,b,c){this.width=a;this.height=b;this.scissor=new S(0,0,a,b);this.scissorTest=!1;this.viewport=new S(0,0,a,b);c=c||{};this.texture=new V(void 0,c.mapping,c.wrapS,c.wrapT,c.magFilter,c.minFilter,
-c.format,c.type,c.anisotropy,c.encoding);this.texture.image={};this.texture.image.width=a;this.texture.image.height=b;this.texture.generateMipmaps=void 0!==c.generateMipmaps?c.generateMipmaps:!1;this.texture.minFilter=void 0!==c.minFilter?c.minFilter:1006;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.depthTexture=void 0!==c.depthTexture?c.depthTexture:null}function ag(a,b,c){Ga.call(this,a,b,c);this.samples=4}function Y(a,
-b,c,d){void 0===a&&(a=0);void 0===b&&(b=0);void 0===c&&(c=0);void 0===d&&(d=1);this._x=a;this._y=b;this._z=c;this._w=d}function m(a,b,c){void 0===a&&(a=0);void 0===b&&(b=0);void 0===c&&(c=0);this.x=a;this.y=b;this.z=c}function U(){this.elements=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];0<arguments.length&&console.error("THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.")}function Vb(a,b,c,d){void 0===a&&(a=0);void 0===b&&(b=0);void 0===c&&(c=0);void 0===d&&(d=Vb.DefaultOrder);
-this._x=a;this._y=b;this._z=c;this._order=d}function He(){this.mask=1}function C(){Object.defineProperty(this,"id",{value:fj++});this.uuid=P.generateUUID();this.name="";this.type="Object3D";this.parent=null;this.children=[];this.up=C.DefaultUp.clone();var a=new m,b=new Vb,c=new Y,d=new m(1,1,1);b._onChange(function(){c.setFromEuler(b,!1)});c._onChange(function(){b.setFromQuaternion(c,void 0,!1)});Object.defineProperties(this,{position:{configurable:!0,enumerable:!0,value:a},rotation:{configurable:!0,
-enumerable:!0,value:b},quaternion:{configurable:!0,enumerable:!0,value:c},scale:{configurable:!0,enumerable:!0,value:d},modelViewMatrix:{value:new U},normalMatrix:{value:new qa}});this.matrix=new U;this.matrixWorld=new U;this.matrixAutoUpdate=C.DefaultMatrixAutoUpdate;this.matrixWorldNeedsUpdate=!1;this.layers=new He;this.visible=!0;this.receiveShadow=this.castShadow=!1;this.frustumCulled=!0;this.renderOrder=0;this.userData={}}function Ad(){C.call(this);this.type="Scene";this.overrideMaterial=this.fog=
-this.environment=this.background=null;this.autoUpdate=!0;"undefined"!==typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}function Sa(a,b){this.min=void 0!==a?a:new m(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new m(-Infinity,-Infinity,-Infinity)}function bg(a,b,c,d,e){for(var f=0,g=a.length-3;f<=g;f+=3){Wb.fromArray(a,f);var h=e.x*Math.abs(Wb.x)+e.y*Math.abs(Wb.y)+e.z*Math.abs(Wb.z),l=b.dot(Wb),n=c.dot(Wb),q=d.dot(Wb);if(Math.max(-Math.max(l,
-n,q),Math.min(l,n,q))>h)return!1}return!0}function cb(a,b){this.center=void 0!==a?a:new m;this.radius=void 0!==b?b:-1}function Xb(a,b){this.origin=void 0!==a?a:new m;this.direction=void 0!==b?b:new m(0,0,-1)}function Ta(a,b){this.normal=void 0!==a?a:new m(1,0,0);this.constant=void 0!==b?b:0}function ba(a,b,c){this.a=void 0!==a?a:new m;this.b=void 0!==b?b:new m;this.c=void 0!==c?c:new m}function H(a,b,c){return void 0===b&&void 0===c?this.set(a):this.setRGB(a,b,c)}function cg(a,b,c){0>c&&(c+=1);1<
-c&&--c;return c<1/6?a+6*(b-a)*c:.5>c?b:c<2/3?a+6*(b-a)*(2/3-c):a}function dg(a){return.04045>a?.0773993808*a:Math.pow(.9478672986*a+.0521327014,2.4)}function eg(a){return.0031308>a?12.92*a:1.055*Math.pow(a,.41666)-.055}function Cc(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d&&d.isVector3?d:new m;this.vertexNormals=Array.isArray(d)?d:[];this.color=e&&e.isColor?e:new H;this.vertexColors=Array.isArray(e)?e:[];this.materialIndex=void 0!==f?f:0}function L(){Object.defineProperty(this,"id",{value:gj++});
-this.uuid=P.generateUUID();this.name="";this.type="Material";this.fog=!0;this.blending=1;this.side=0;this.vertexColors=this.flatShading=!1;this.opacity=1;this.transparent=!1;this.blendSrc=204;this.blendDst=205;this.blendEquation=100;this.blendEquationAlpha=this.blendDstAlpha=this.blendSrcAlpha=null;this.depthFunc=3;this.depthWrite=this.depthTest=!0;this.stencilWriteMask=255;this.stencilFunc=519;this.stencilRef=0;this.stencilFuncMask=255;this.stencilZPass=this.stencilZFail=this.stencilFail=7680;this.stencilWrite=
-!1;this.clippingPlanes=null;this.clipShadows=this.clipIntersection=!1;this.shadowSide=null;this.colorWrite=!0;this.precision=null;this.polygonOffset=!1;this.polygonOffsetUnits=this.polygonOffsetFactor=0;this.dithering=!1;this.alphaTest=0;this.premultipliedAlpha=!1;this.toneMapped=this.visible=!0;this.userData={};this.version=0}function Na(a){L.call(this);this.type="MeshBasicMaterial";this.color=new H(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=
-1;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphTargets=this.skinning=!1;this.setValues(a)}function J(a,b,c){if(Array.isArray(a))throw new TypeError("THREE.BufferAttribute: array should be a Typed Array.");this.name="";this.array=a;this.itemSize=b;this.count=void 0!==a?a.length/b:0;this.normalized=!0===c;this.usage=35044;this.updateRange=
-{offset:0,count:-1};this.version=0}function Bd(a,b,c){J.call(this,new Int8Array(a),b,c)}function Cd(a,b,c){J.call(this,new Uint8Array(a),b,c)}function Dd(a,b,c){J.call(this,new Uint8ClampedArray(a),b,c)}function Ed(a,b,c){J.call(this,new Int16Array(a),b,c)}function Yb(a,b,c){J.call(this,new Uint16Array(a),b,c)}function Fd(a,b,c){J.call(this,new Int32Array(a),b,c)}function Zb(a,b,c){J.call(this,new Uint32Array(a),b,c)}function A(a,b,c){J.call(this,new Float32Array(a),b,c)}function Gd(a,b,c){J.call(this,
-new Float64Array(a),b,c)}function th(){this.vertices=[];this.normals=[];this.colors=[];this.uvs=[];this.uvs2=[];this.groups=[];this.morphTargets={};this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.uvsNeedUpdate=this.colorsNeedUpdate=this.normalsNeedUpdate=this.verticesNeedUpdate=!1}function uh(a){if(0===a.length)return-Infinity;for(var b=a[0],c=1,d=a.length;c<d;++c)a[c]>b&&(b=a[c]);return b}function E(){Object.defineProperty(this,"id",{value:hj+=
-2});this.uuid=P.generateUUID();this.name="";this.type="BufferGeometry";this.index=null;this.attributes={};this.morphAttributes={};this.morphTargetsRelative=!1;this.groups=[];this.boundingSphere=this.boundingBox=null;this.drawRange={start:0,count:Infinity};this.userData={}}function T(a,b){C.call(this);this.type="Mesh";this.geometry=void 0!==a?a:new E;this.material=void 0!==b?b:new Na;this.updateMorphTargets()}function vh(a,b,c,d,e,f,g,h){if(null===(1===b.side?d.intersectTriangle(g,f,e,!0,h):d.intersectTriangle(e,
-f,g,2!==b.side,h)))return null;Ie.copy(h);Ie.applyMatrix4(a.matrixWorld);b=c.ray.origin.distanceTo(Ie);return b<c.near||b>c.far?null:{distance:b,point:Ie.clone(),object:a}}function Je(a,b,c,d,e,f,g,h,l,n,q,p){yb.fromBufferAttribute(e,n);zb.fromBufferAttribute(e,q);Ab.fromBufferAttribute(e,p);e=a.morphTargetInfluences;if(b.morphTargets&&f&&e){Ke.set(0,0,0);Le.set(0,0,0);Me.set(0,0,0);for(var z=0,k=f.length;z<k;z++){var t=e[z],v=f[z];0!==t&&(fg.fromBufferAttribute(v,n),gg.fromBufferAttribute(v,q),hg.fromBufferAttribute(v,
-p),g?(Ke.addScaledVector(fg,t),Le.addScaledVector(gg,t),Me.addScaledVector(hg,t)):(Ke.addScaledVector(fg.sub(yb),t),Le.addScaledVector(gg.sub(zb),t),Me.addScaledVector(hg.sub(Ab),t)))}yb.add(Ke);zb.add(Le);Ab.add(Me)}a.isSkinnedMesh&&(a.boneTransform(n,yb),a.boneTransform(q,zb),a.boneTransform(p,Ab));if(a=vh(a,b,c,d,yb,zb,Ab,Hd))h&&(Dc.fromBufferAttribute(h,n),Ec.fromBufferAttribute(h,q),Fc.fromBufferAttribute(h,p),a.uv=ba.getUV(Hd,yb,zb,Ab,Dc,Ec,Fc,new u)),l&&(Dc.fromBufferAttribute(l,n),Ec.fromBufferAttribute(l,
-q),Fc.fromBufferAttribute(l,p),a.uv2=ba.getUV(Hd,yb,zb,Ab,Dc,Ec,Fc,new u)),h=new Cc(n,q,p),ba.getNormal(yb,zb,Ab,h.normal),a.face=h;return a}function F(){Object.defineProperty(this,"id",{value:ij+=2});this.uuid=P.generateUUID();this.name="";this.type="Geometry";this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=[];this.boundingSphere=this.boundingBox=null;this.groupsNeedUpdate=this.lineDistancesNeedUpdate=
-this.colorsNeedUpdate=this.normalsNeedUpdate=this.uvsNeedUpdate=this.verticesNeedUpdate=this.elementsNeedUpdate=!1}function Gc(a,b,c,d,e,f){F.call(this);this.type="BoxGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,depthSegments:f};this.fromBufferGeometry(new Bb(a,b,c,d,e,f));this.mergeVertices()}function Bb(a,b,c,d,e,f){function g(a,b,c,d,e,f,g,r,y,I,jj){var t=f/y,v=g/I,x=f/2,w=g/2,Q=r/2;g=y+1;for(var B=I+1,N=f=0,ca=new m,u=0;u<B;u++)for(var C=u*v-w,A=0;A<g;A++)ca[a]=
-(A*t-x)*d,ca[b]=C*e,ca[c]=Q,n.push(ca.x,ca.y,ca.z),ca[a]=0,ca[b]=0,ca[c]=0<r?1:-1,q.push(ca.x,ca.y,ca.z),p.push(A/y),p.push(1-u/I),f+=1;for(a=0;a<I;a++)for(b=0;b<y;b++)c=z+b+g*(a+1),d=z+(b+1)+g*(a+1),e=z+(b+1)+g*a,l.push(z+b+g*a,c,e),l.push(c,d,e),N+=6;h.addGroup(k,N,jj);k+=N;z+=f}void 0===a&&(a=1);void 0===b&&(b=1);void 0===c&&(c=1);void 0===d&&(d=1);void 0===e&&(e=1);void 0===f&&(f=1);E.call(this);this.type="BoxBufferGeometry";this.parameters={width:a,height:b,depth:c,widthSegments:d,heightSegments:e,
-depthSegments:f};var h=this;d=Math.floor(d);e=Math.floor(e);f=Math.floor(f);var l=[],n=[],q=[],p=[],z=0,k=0;g("z","y","x",-1,-1,c,b,a,f,e,0);g("z","y","x",1,-1,c,b,-a,f,e,1);g("x","z","y",1,1,a,c,b,d,f,2);g("x","z","y",1,-1,a,c,-b,d,f,3);g("x","y","z",1,-1,a,b,c,d,e,4);g("x","y","z",-1,-1,a,b,-c,d,e,5);this.setIndex(l);this.setAttribute("position",new A(n,3));this.setAttribute("normal",new A(q,3));this.setAttribute("uv",new A(p,2))}function Hc(a){var b={},c;for(c in a){b[c]={};for(var d in a[c]){var e=
-a[c][d];e&&(e.isColor||e.isMatrix3||e.isMatrix4||e.isVector2||e.isVector3||e.isVector4||e.isTexture)?b[c][d]=e.clone():Array.isArray(e)?b[c][d]=e.slice():b[c][d]=e}}return b}function Aa(a){for(var b={},c=0;c<a.length;c++){var d=Hc(a[c]),e;for(e in d)b[e]=d[e]}return b}function ra(a){L.call(this);this.type="ShaderMaterial";this.defines={};this.uniforms={};this.vertexShader="void main() {ntgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );n}";this.fragmentShader="void main() {ntgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );n}";
-this.linewidth=1;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=this.morphTargets=this.skinning=this.clipping=this.lights=this.fog=!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;void 0!==a&&(void 0!==a.attributes&&console.error("THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead."),this.setValues(a))}
-function db(){C.call(this);this.type="Camera";this.matrixWorldInverse=new U;this.projectionMatrix=new U;this.projectionMatrixInverse=new U}function W(a,b,c,d){db.call(this);this.type="PerspectiveCamera";this.fov=void 0!==a?a:50;this.zoom=1;this.near=void 0!==c?c:.1;this.far=void 0!==d?d:2E3;this.focus=10;this.aspect=void 0!==b?b:1;this.view=null;this.filmGauge=35;this.filmOffset=0;this.updateProjectionMatrix()}function Ic(a,b,c){C.call(this);this.type="CubeCamera";if(!0!==c.isWebGLCubeRenderTarget)console.error("THREE.CubeCamera: The constructor now expects an instance of WebGLCubeRenderTarget as third parameter.");
-else{this.renderTarget=c;var d=new W(90,1,a,b);d.layers=this.layers;d.up.set(0,-1,0);d.lookAt(new m(1,0,0));this.add(d);var e=new W(90,1,a,b);e.layers=this.layers;e.up.set(0,-1,0);e.lookAt(new m(-1,0,0));this.add(e);var f=new W(90,1,a,b);f.layers=this.layers;f.up.set(0,0,1);f.lookAt(new m(0,1,0));this.add(f);var g=new W(90,1,a,b);g.layers=this.layers;g.up.set(0,0,-1);g.lookAt(new m(0,-1,0));this.add(g);var h=new W(90,1,a,b);h.layers=this.layers;h.up.set(0,-1,0);h.lookAt(new m(0,0,1));this.add(h);
-var l=new W(90,1,a,b);l.layers=this.layers;l.up.set(0,-1,0);l.lookAt(new m(0,0,-1));this.add(l);this.update=function(a,b){null===this.parent&&this.updateMatrixWorld();var n=a.xr.enabled,q=a.getRenderTarget();a.xr.enabled=!1;var k=c.texture.generateMipmaps;c.texture.generateMipmaps=!1;a.setRenderTarget(c,0);a.render(b,d);a.setRenderTarget(c,1);a.render(b,e);a.setRenderTarget(c,2);a.render(b,f);a.setRenderTarget(c,3);a.render(b,g);a.setRenderTarget(c,4);a.render(b,h);c.texture.generateMipmaps=k;a.setRenderTarget(c,
-5);a.render(b,l);a.setRenderTarget(q);a.xr.enabled=n};this.clear=function(a,b,d,e){for(var f=a.getRenderTarget(),g=0;6>g;g++)a.setRenderTarget(c,g),a.clear(b,d,e);a.setRenderTarget(f)}}}function ac(a,b,c){Number.isInteger(b)&&(console.warn("THREE.WebGLCubeRenderTarget: constructor signature is now WebGLCubeRenderTarget( size, options )"),b=c);Ga.call(this,a,a,b)}function bc(a,b,c,d,e,f,g,h,l,n,q,p){V.call(this,null,f,g,h,l,n,d,e,q,p);this.image={data:a||null,width:b||1,height:c||1};this.magFilter=
-void 0!==l?l:1003;this.minFilter=void 0!==n?n:1003;this.flipY=this.generateMipmaps=!1;this.unpackAlignment=1;this.needsUpdate=!0}function Jc(a,b,c,d,e,f){this.planes=[void 0!==a?a:new Ta,void 0!==b?b:new Ta,void 0!==c?c:new Ta,void 0!==d?d:new Ta,void 0!==e?e:new Ta,void 0!==f?f:new Ta]}function wh(){function a(c,g){d(c,g);e=b.requestAnimationFrame(a)}var b=null,c=!1,d=null,e=null;return{start:function(){!0!==c&&null!==d&&(e=b.requestAnimationFrame(a),c=!0)},stop:function(){b.cancelAnimationFrame(e);
-c=!1},setAnimationLoop:function(a){d=a},setContext:function(a){b=a}}}function kj(a,b){function c(b,c){var d=b.array,e=b.usage,f=a.createBuffer();a.bindBuffer(c,f);a.bufferData(c,d,e);b.onUploadCallback();c=5126;d instanceof Float32Array?c=5126:d instanceof Float64Array?console.warn("THREE.WebGLAttributes: Unsupported data buffer format: Float64Array."):d instanceof Uint16Array?c=5123:d instanceof Int16Array?c=5122:d instanceof Uint32Array?c=5125:d instanceof Int32Array?c=5124:d instanceof Int8Array?
-c=5120:d instanceof Uint8Array&&(c=5121);return{buffer:f,type:c,bytesPerElement:d.BYTES_PER_ELEMENT,version:b.version}}var d=b.isWebGL2,e=new WeakMap;return{get:function(a){a.isInterleavedBufferAttribute&&(a=a.data);return e.get(a)},remove:function(b){b.isInterleavedBufferAttribute&&(b=b.data);var c=e.get(b);c&&(a.deleteBuffer(c.buffer),e.delete(b))},update:function(b,g){b.isInterleavedBufferAttribute&&(b=b.data);var f=e.get(b);if(void 0===f)e.set(b,c(b,g));else if(f.version<b.version){var l=b.array,
-n=b.updateRange;a.bindBuffer(g,f.buffer);-1===n.count?a.bufferSubData(g,0,l):(d?a.bufferSubData(g,n.offset*l.BYTES_PER_ELEMENT,l,n.offset,n.count):a.bufferSubData(g,n.offset*l.BYTES_PER_ELEMENT,l.subarray(n.offset,n.offset+n.count)),n.count=-1);f.version=b.version}}}}function Id(a,b,c,d){F.call(this);this.type="PlaneGeometry";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};this.fromBufferGeometry(new cc(a,b,c,d));this.mergeVertices()}function cc(a,b,c,d){E.call(this);this.type=
-"PlaneBufferGeometry";this.parameters={width:a,height:b,widthSegments:c,heightSegments:d};a=a||1;b=b||1;var e=a/2,f=b/2;c=Math.floor(c)||1;d=Math.floor(d)||1;var g=c+1,h=d+1,l=a/c,n=b/d;b=[];a=[];for(var q=[],p=[],z=0;z<h;z++)for(var k=z*n-f,t=0;t<g;t++)a.push(t*l-e,-k,0),q.push(0,0,1),p.push(t/c),p.push(1-z/d);for(e=0;e<d;e++)for(f=0;f<c;f++)h=f+g*(e+1),l=f+1+g*(e+1),n=f+1+g*e,b.push(f+g*e,h,n),b.push(h,l,n);this.setIndex(b);this.setAttribute("position",new A(a,3));this.setAttribute("normal",new A(q,
-3));this.setAttribute("uv",new A(p,2))}function lj(a,b,c,d){function e(a,c){b.buffers.color.setClear(a.r,a.g,a.b,c,d)}var f=new H(0),g=0,h,l,n=null,q=0,p=null;return{getClearColor:function(){return f},setClearColor:function(a,b){f.set(a);g=void 0!==b?b:1;e(f,g)},getClearAlpha:function(){return g},setClearAlpha:function(a){g=a;e(f,g)},render:function(b,d,t,k){d=!0===d.isScene?d.background:null;t=a.xr;(t=t.getSession&&t.getSession())&&"additive"===t.environmentBlendMode&&(d=null);null===d?e(f,g):d&&
-d.isColor&&(e(d,1),k=!0);(a.autoClear||k)&&a.clear(a.autoClearColor,a.autoClearDepth,a.autoClearStencil);if(d&&(d.isCubeTexture||d.isWebGLCubeRenderTarget||306===d.mapping)){void 0===l&&(l=new T(new Bb(1,1,1),new ra({name:"BackgroundCubeMaterial",uniforms:Hc(Ua.cube.uniforms),vertexShader:Ua.cube.vertexShader,fragmentShader:Ua.cube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1})),l.geometry.deleteAttribute("normal"),l.geometry.deleteAttribute("uv"),l.onBeforeRender=function(a,b,c){this.matrixWorld.copyPosition(c.matrixWorld)},
-Object.defineProperty(l.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),c.update(l));k=d.isWebGLCubeRenderTarget?d.texture:d;l.material.uniforms.envMap.value=k;l.material.uniforms.flipEnvMap.value=k.isCubeTexture?-1:1;if(n!==d||q!==k.version||p!==a.toneMapping)l.material.needsUpdate=!0,n=d,q=k.version,p=a.toneMapping;b.unshift(l,l.geometry,l.material,0,0,null)}else if(d&&d.isTexture){void 0===h&&(h=new T(new cc(2,2),new ra({name:"BackgroundMaterial",uniforms:Hc(Ua.background.uniforms),
-vertexShader:Ua.background.vertexShader,fragmentShader:Ua.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1})),h.geometry.deleteAttribute("normal"),Object.defineProperty(h.material,"map",{get:function(){return this.uniforms.t2D.value}}),c.update(h));h.material.uniforms.t2D.value=d;!0===d.matrixAutoUpdate&&d.updateMatrix();h.material.uniforms.uvTransform.value.copy(d.matrix);if(n!==d||q!==d.version||p!==a.toneMapping)h.material.needsUpdate=!0,n=d,q=d.version,p=a.toneMapping;b.unshift(h,
-h.geometry,h.material,0,0,null)}}}}function mj(a,b,c,d){function e(b){return d.isWebGL2?a.bindVertexArray(b):t.bindVertexArrayOES(b)}function f(b){return d.isWebGL2?a.deleteVertexArray(b):t.deleteVertexArrayOES(b)}function g(a){for(var b=[],c=[],d=[],e=0;e<r;e++)b[e]=0,c[e]=0,d[e]=0;return{geometry:null,program:null,wireframe:!1,newAttributes:b,enabledAttributes:c,attributeDivisors:d,object:a,attributes:{}}}function h(){for(var a=w.newAttributes,b=0,c=a.length;b<c;b++)a[b]=0}function l(a){n(a,0)}
-function n(c,e){var f=w.enabledAttributes,g=w.attributeDivisors;w.newAttributes[c]=1;0===f[c]&&(a.enableVertexAttribArray(c),f[c]=1);g[c]!==e&&((d.isWebGL2?a:b.get("ANGLE_instanced_arrays"))[d.isWebGL2?"vertexAttribDivisor":"vertexAttribDivisorANGLE"](c,e),g[c]=e)}function q(){for(var b=w.newAttributes,c=w.enabledAttributes,d=0,e=c.length;d<e;d++)c[d]!==b[d]&&(a.disableVertexAttribArray(d),c[d]=0)}function p(){k();w!==B&&(w=B,e(w.object))}function k(){B.geometry=null;B.program=null;B.wireframe=!1}
-var r=a.getParameter(34921),t=d.isWebGL2?null:b.get("OES_vertex_array_object"),v=d.isWebGL2||null!==t,m={},B=g(null),w=B;return{setup:function(f,p,k,z,r){var x=!1;if(v){x=!0===p.wireframe;var D=m[z.id];void 0===D&&(D={},m[z.id]=D);var y=D[k.id];void 0===y&&(y={},D[k.id]=y);D=y[x];void 0===D&&(D=g(d.isWebGL2?a.createVertexArray():t.createVertexArrayOES()),y[x]=D);x=D;w!==x&&(w=x,e(w.object));a:if(x=w.attributes,y=z.attributes,Object.keys(x).length!==Object.keys(y).length)x=!0;else{for(var B in y){D=
-x[B];var Q=y[B];if(D.attribute!==Q||D.data!==Q.data){x=!0;break a}}x=!1}if(x){B={};y=z.attributes;for(var ca in y)D=y[ca],Q={},Q.attribute=D,D.data&&(Q.data=D.data),B[ca]=Q;w.attributes=B}}else if(ca=!0===p.wireframe,w.geometry!==z.id||w.program!==k.id||w.wireframe!==ca)w.geometry=z.id,w.program=k.id,w.wireframe=ca,x=!0;!0===f.isInstancedMesh&&(x=!0);null!==r&&c.update(r,34963);if(x){if(!1!==d.isWebGL2||!f.isInstancedMesh&&!z.isInstancedBufferGeometry||null!==b.get("ANGLE_instanced_arrays")){h();
-ca=z.attributes;k=k.getAttributes();p=p.defaultAttributeValues;for(var N in k)if(x=k[N],0<=x){var I=ca[N];if(void 0!==I){if(B=I.normalized,Q=I.itemSize,D=c.get(I),void 0!==D){var u=D.buffer;y=D.type;D=D.bytesPerElement;if(I.isInterleavedBufferAttribute){var A=I.data,C=A.stride;I=I.offset;A&&A.isInstancedInterleavedBuffer?(n(x,A.meshPerAttribute),void 0===z._maxInstanceCount&&(z._maxInstanceCount=A.meshPerAttribute*A.count)):l(x);a.bindBuffer(34962,u);C*=D;D*=I;!0!==d.isWebGL2||5124!==y&&5125!==y?
-a.vertexAttribPointer(x,Q,y,B,C,D):a.vertexAttribIPointer(x,Q,y,C,D)}else I.isInstancedBufferAttribute?(n(x,I.meshPerAttribute),void 0===z._maxInstanceCount&&(z._maxInstanceCount=I.meshPerAttribute*I.count)):l(x),a.bindBuffer(34962,u),D=Q,!0!==d.isWebGL2||5124!==y&&5125!==y?a.vertexAttribPointer(x,D,y,B,0,0):a.vertexAttribIPointer(x,D,y,0,0)}}else if("instanceMatrix"===N)y=c.get(f.instanceMatrix),void 0!==y&&(B=y.buffer,y=y.type,n(x+0,1),n(x+1,1),n(x+2,1),n(x+3,1),a.bindBuffer(34962,B),a.vertexAttribPointer(x+
-0,4,y,!1,64,0),a.vertexAttribPointer(x+1,4,y,!1,64,16),a.vertexAttribPointer(x+2,4,y,!1,64,32),a.vertexAttribPointer(x+3,4,y,!1,64,48));else if(void 0!==p&&(B=p[N],void 0!==B))switch(B.length){case 2:a.vertexAttrib2fv(x,B);break;case 3:a.vertexAttrib3fv(x,B);break;case 4:a.vertexAttrib4fv(x,B);break;default:a.vertexAttrib1fv(x,B)}}q()}null!==r&&a.bindBuffer(34963,c.get(r).buffer)}},reset:p,resetDefaultState:k,dispose:function(){p();for(var a in m){var b=m[a],c;for(c in b){var d=b[c],e;for(e in d)f(d[e].object),
-delete d[e];delete b[c]}delete m[a]}},releaseStatesOfGeometry:function(a){if(void 0!==m[a.id]){var b=m[a.id],c;for(c in b){var d=b[c],e;for(e in d)f(d[e].object),delete d[e];delete b[c]}delete m[a.id]}},releaseStatesOfProgram:function(a){for(var b in m){var c=m[b];if(void 0!==c[a.id]){var d=c[a.id],e;for(e in d)f(d[e].object),delete d[e];delete c[a.id]}}},initAttributes:h,enableAttribute:l,disableUnusedAttributes:q}}function nj(a,b,c,d){var e=d.isWebGL2,f;this.setMode=function(a){f=a};this.render=
-function(b,d){a.drawArrays(f,b,d);c.update(d,f,1)};this.renderInstances=function(d,h,l){if(0!==l){if(e){var g=a;var q="drawArraysInstanced"}else if(g=b.get("ANGLE_instanced_arrays"),q="drawArraysInstancedANGLE",null===g){console.error("THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}g[q](f,d,h,l);c.update(h,f,l)}}}function oj(a,b,c){function d(b){if("highp"===b){if(0<a.getShaderPrecisionFormat(35633,36338).precision&&
-0<a.getShaderPrecisionFormat(35632,36338).precision)return"highp";b="mediump"}return"mediump"===b&&0<a.getShaderPrecisionFormat(35633,36337).precision&&0<a.getShaderPrecisionFormat(35632,36337).precision?"mediump":"lowp"}var e,f="undefined"!==typeof WebGL2RenderingContext&&a instanceof WebGL2RenderingContext||"undefined"!==typeof WebGL2ComputeRenderingContext&&a instanceof WebGL2ComputeRenderingContext,g=void 0!==c.precision?c.precision:"highp",h=d(g);h!==g&&(console.warn("THREE.WebGLRenderer:",g,
-"not supported, using",h,"instead."),g=h);c=!0===c.logarithmicDepthBuffer;h=a.getParameter(34930);var l=a.getParameter(35660),n=a.getParameter(3379),q=a.getParameter(34076),p=a.getParameter(34921),k=a.getParameter(36347),r=a.getParameter(36348),t=a.getParameter(36349),v=0<l,m=f||!!b.get("OES_texture_float"),B=v&&m,w=f?a.getParameter(36183):0;return{isWebGL2:f,getMaxAnisotropy:function(){if(void 0!==e)return e;var c=b.get("EXT_texture_filter_anisotropic");return e=null!==c?a.getParameter(c.MAX_TEXTURE_MAX_ANISOTROPY_EXT):
-0},getMaxPrecision:d,precision:g,logarithmicDepthBuffer:c,maxTextures:h,maxVertexTextures:l,maxTextureSize:n,maxCubemapSize:q,maxAttributes:p,maxVertexUniforms:k,maxVaryings:r,maxFragmentUniforms:t,vertexTextures:v,floatFragmentTextures:m,floatVertexTextures:B,maxSamples:w}}function pj(){function a(){n.value!==d&&(n.value=d,n.needsUpdate=0<e);c.numPlanes=e;c.numIntersection=0}function b(a,b,d,e){var f=null!==a?a.length:0,g=null;if(0!==f){g=n.value;if(!0!==e||null===g){e=d+4*f;b=b.matrixWorldInverse;
-l.getNormalMatrix(b);if(null===g||g.length<e)g=new Float32Array(e);for(e=0;e!==f;++e,d+=4)h.copy(a[e]).applyMatrix4(b,l),h.normal.toArray(g,d),g[d+3]=h.constant}n.value=g;n.needsUpdate=!0}c.numPlanes=f;c.numIntersection=0;return g}var c=this,d=null,e=0,f=!1,g=!1,h=new Ta,l=new qa,n={value:null,needsUpdate:!1};this.uniform=n;this.numIntersection=this.numPlanes=0;this.init=function(a,c,g){var h=0!==a.length||c||0!==e||f;f=c;d=b(a,g,0);e=a.length;return h};this.beginShadows=function(){g=!0;b(null)};
-this.endShadows=function(){g=!1;a()};this.setState=function(c,h,l,k,t,v){if(!f||null===c||0===c.length||g&&!l)g?b(null):a();else{l=g?0:e;var q=4*l,p=t.clippingState||null;n.value=p;p=b(c,k,q,v);for(c=0;c!==q;++c)p[c]=d[c];t.clippingState=p;this.numIntersection=h?this.numPlanes:0;this.numPlanes+=l}}}function qj(a){var b={};return{has:function(c){if(void 0!==b[c])return b[c];switch(c){case "WEBGL_depth_texture":var d=a.getExtension("WEBGL_depth_texture")||a.getExtension("MOZ_WEBGL_depth_texture")||
-a.getExtension("WEBKIT_WEBGL_depth_texture");break;case "EXT_texture_filter_anisotropic":d=a.getExtension("EXT_texture_filter_anisotropic")||a.getExtension("MOZ_EXT_texture_filter_anisotropic")||a.getExtension("WEBKIT_EXT_texture_filter_anisotropic");break;case "WEBGL_compressed_texture_s3tc":d=a.getExtension("WEBGL_compressed_texture_s3tc")||a.getExtension("MOZ_WEBGL_compressed_texture_s3tc")||a.getExtension("WEBKIT_WEBGL_compressed_texture_s3tc");break;case "WEBGL_compressed_texture_pvrtc":d=a.getExtension("WEBGL_compressed_texture_pvrtc")||
-a.getExtension("WEBKIT_WEBGL_compressed_texture_pvrtc");break;default:d=a.getExtension(c)}b[c]=d;return!!d},get:function(a){this.has(a)||console.warn("THREE.WebGLRenderer: "+a+" extension not supported.");return b[a]}}}function rj(a,b,c,d){function e(a){a=a.target;var f=g.get(a);null!==f.index&&b.remove(f.index);for(var l in f.attributes)b.remove(f.attributes[l]);a.removeEventListener("dispose",e);g.delete(a);if(l=h.get(f))b.remove(l),h.delete(f);d.releaseStatesOfGeometry(a);!0===a.isInstancedBufferGeometry&&
-delete a._maxInstanceCount;c.memory.geometries--}function f(a){var c=[],d=a.index,e=a.attributes.position;if(null!==d){e=d.array;d=d.version;for(var f=0,g=e.length;f<g;f+=3){var l=e[f+0],k=e[f+1],m=e[f+2];c.push(l,k,k,m,m,l)}}else for(f=e.array,d=e.version,e=0,f=f.length/3-1;e<f;e+=3)g=e+0,l=e+1,k=e+2,c.push(g,l,l,k,k,g);c=new (65535<uh(c)?Zb:Yb)(c,1);c.version=d;(d=h.get(a))&&b.remove(d);h.set(a,c)}var g=new WeakMap,h=new WeakMap;return{get:function(a,b){var d=g.get(b);if(d)return d;b.addEventListener("dispose",
-e);b.isBufferGeometry?d=b:b.isGeometry&&(void 0===b._bufferGeometry&&(b._bufferGeometry=(new E).setFromObject(a)),d=b._bufferGeometry);g.set(b,d);c.memory.geometries++;return d},update:function(a){var c=a.attributes;for(e in c)b.update(c[e],34962);a=a.morphAttributes;for(var d in a){c=a[d];var e=0;for(var f=c.length;e<f;e++)b.update(c[e],34962)}},getWireframeAttribute:function(a){var b=h.get(a);if(b){var c=a.index;null!==c&&b.version<c.version&&f(a)}else f(a);return h.get(a)}}}function sj(a,b,c,d){var e=
-d.isWebGL2,f,g,h;this.setMode=function(a){f=a};this.setIndex=function(a){g=a.type;h=a.bytesPerElement};this.render=function(b,d){a.drawElements(f,d,g,b*h);c.update(d,f,1)};this.renderInstances=function(d,n,q){if(0!==q){if(e){var l=a;var k="drawElementsInstanced"}else if(l=b.get("ANGLE_instanced_arrays"),k="drawElementsInstancedANGLE",null===l){console.error("THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.");return}l[k](f,
-n,g,d*h,q);c.update(n,f,q)}}}function tj(a){var b={frame:0,calls:0,triangles:0,points:0,lines:0};return{memory:{geometries:0,textures:0},render:b,programs:null,autoReset:!0,reset:function(){b.frame++;b.calls=0;b.triangles=0;b.points=0;b.lines=0},update:function(a,d,e){b.calls++;switch(d){case 4:b.triangles+=a/3*e;break;case 1:b.lines+=a/2*e;break;case 3:b.lines+=e*(a-1);break;case 2:b.lines+=e*a;break;case 0:b.points+=e*a;break;default:console.error("THREE.WebGLInfo: Unknown draw mode:",d)}}}}function uj(a,
-b){return a[0]-b[0]}function vj(a,b){return Math.abs(b[1])-Math.abs(a[1])}function wj(a){for(var b={},c=new Float32Array(8),d=[],e=0;8>e;e++)d[e]=[e,0];return{update:function(e,g,h,l){var f=e.morphTargetInfluences;e=void 0===f?0:f.length;var q=b[g.id];if(void 0===q){q=[];for(var p=0;p<e;p++)q[p]=[p,0];b[g.id]=q}for(p=0;p<e;p++){var k=q[p];k[0]=p;k[1]=f[p]}q.sort(vj);for(f=0;8>f;f++)f<e&&q[f][1]?(d[f][0]=q[f][0],d[f][1]=q[f][1]):(d[f][0]=Number.MAX_SAFE_INTEGER,d[f][1]=0);d.sort(uj);e=h.morphTargets&&
-g.morphAttributes.position;h=h.morphNormals&&g.morphAttributes.normal;for(f=q=0;8>f;f++)k=d[f],p=k[0],k=k[1],p!==Number.MAX_SAFE_INTEGER&&k?(e&&g.getAttribute("morphTarget"+f)!==e[p]&&g.setAttribute("morphTarget"+f,e[p]),h&&g.getAttribute("morphNormal"+f)!==h[p]&&g.setAttribute("morphNormal"+f,h[p]),c[f]=k,q+=k):(e&&void 0!==g.getAttribute("morphTarget"+f)&&g.deleteAttribute("morphTarget"+f),h&&void 0!==g.getAttribute("morphNormal"+f)&&g.deleteAttribute("morphNormal"+f),c[f]=0);g=g.morphTargetsRelative?
-1:1-q;l.getUniforms().setValue(a,"morphTargetBaseInfluence",g);l.getUniforms().setValue(a,"morphTargetInfluences",c)}}}function xj(a,b,c,d){var e=new WeakMap;return{update:function(a){var f=d.render.frame,h=a.geometry,l=b.get(a,h);e.get(l)!==f&&(h.isGeometry&&l.updateFromObject(a),b.update(l),e.set(l,f));a.isInstancedMesh&&c.update(a.instanceMatrix,34962);return l},dispose:function(){e=new WeakMap}}}function ob(a,b,c,d,e,f,g,h,l,n){a=void 0!==a?a:[];V.call(this,a,void 0!==b?b:301,c,d,e,f,void 0!==
-g?g:1022,h,l,n);this.flipY=!1}function Kc(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Lc(a,b,c,d){V.call(this,null);this.image={data:a||null,width:b||1,height:c||1,depth:d||1};this.minFilter=this.magFilter=1003;this.wrapR=1001;this.flipY=this.generateMipmaps=!1;this.needsUpdate=!0}function Mc(a,b,c){var d=a[0];if(0>=d||0<d)return a;var e=b*c,
-f=xh[e];void 0===f&&(f=new Float32Array(e),xh[e]=f);if(0!==b)for(d.toArray(f,0),d=1,e=0;d!==b;++d)e+=c,a[d].toArray(f,e);return f}function Oa(a,b){if(a.length!==b.length)return!1;for(var c=0,d=a.length;c<d;c++)if(a[c]!==b[c])return!1;return!0}function Fa(a,b){for(var c=0,d=b.length;c<d;c++)a[c]=b[c]}function yh(a,b){var c=zh[b];void 0===c&&(c=new Int32Array(b),zh[b]=c);for(var d=0;d!==b;++d)c[d]=a.allocateTextureUnit();return c}function yj(a,b){var c=this.cache;c[0]!==b&&(a.uniform1f(this.addr,b),
-c[0]=b)}function zj(a,b){var c=this.cache;if(void 0!==b.x){if(c[0]!==b.x||c[1]!==b.y)a.uniform2f(this.addr,b.x,b.y),c[0]=b.x,c[1]=b.y}else Oa(c,b)||(a.uniform2fv(this.addr,b),Fa(c,b))}function Aj(a,b){var c=this.cache;if(void 0!==b.x){if(c[0]!==b.x||c[1]!==b.y||c[2]!==b.z)a.uniform3f(this.addr,b.x,b.y,b.z),c[0]=b.x,c[1]=b.y,c[2]=b.z}else if(void 0!==b.r){if(c[0]!==b.r||c[1]!==b.g||c[2]!==b.b)a.uniform3f(this.addr,b.r,b.g,b.b),c[0]=b.r,c[1]=b.g,c[2]=b.b}else Oa(c,b)||(a.uniform3fv(this.addr,b),Fa(c,
-b))}function Bj(a,b){var c=this.cache;if(void 0!==b.x){if(c[0]!==b.x||c[1]!==b.y||c[2]!==b.z||c[3]!==b.w)a.uniform4f(this.addr,b.x,b.y,b.z,b.w),c[0]=b.x,c[1]=b.y,c[2]=b.z,c[3]=b.w}else Oa(c,b)||(a.uniform4fv(this.addr,b),Fa(c,b))}function Cj(a,b){var c=this.cache,d=b.elements;void 0===d?Oa(c,b)||(a.uniformMatrix2fv(this.addr,!1,b),Fa(c,b)):Oa(c,d)||(Ah.set(d),a.uniformMatrix2fv(this.addr,!1,Ah),Fa(c,d))}function Dj(a,b){var c=this.cache,d=b.elements;void 0===d?Oa(c,b)||(a.uniformMatrix3fv(this.addr,
-!1,b),Fa(c,b)):Oa(c,d)||(Bh.set(d),a.uniformMatrix3fv(this.addr,!1,Bh),Fa(c,d))}function Ej(a,b){var c=this.cache,d=b.elements;void 0===d?Oa(c,b)||(a.uniformMatrix4fv(this.addr,!1,b),Fa(c,b)):Oa(c,d)||(Ch.set(d),a.uniformMatrix4fv(this.addr,!1,Ch),Fa(c,d))}function Fj(a,b,c){var d=this.cache,e=c.allocateTextureUnit();d[0]!==e&&(a.uniform1i(this.addr,e),d[0]=e);c.safeSetTexture2D(b||Dh,e)}function Gj(a,b,c){var d=this.cache,e=c.allocateTextureUnit();d[0]!==e&&(a.uniform1i(this.addr,e),d[0]=e);c.setTexture2DArray(b||
-Hj,e)}function Ij(a,b,c){var d=this.cache,e=c.allocateTextureUnit();d[0]!==e&&(a.uniform1i(this.addr,e),d[0]=e);c.setTexture3D(b||Jj,e)}function Kj(a,b,c){var d=this.cache,e=c.allocateTextureUnit();d[0]!==e&&(a.uniform1i(this.addr,e),d[0]=e);c.safeSetTextureCube(b||Eh,e)}function Lj(a,b){var c=this.cache;c[0]!==b&&(a.uniform1i(this.addr,b),c[0]=b)}function Mj(a,b){var c=this.cache;Oa(c,b)||(a.uniform2iv(this.addr,b),Fa(c,b))}function Nj(a,b){var c=this.cache;Oa(c,b)||(a.uniform3iv(this.addr,b),Fa(c,
-b))}function Oj(a,b){var c=this.cache;Oa(c,b)||(a.uniform4iv(this.addr,b),Fa(c,b))}function Pj(a,b){var c=this.cache;c[0]!==b&&(a.uniform1ui(this.addr,b),c[0]=b)}function Qj(a){switch(a){case 5126:return yj;case 35664:return zj;case 35665:return Aj;case 35666:return Bj;case 35674:return Cj;case 35675:return Dj;case 35676:return Ej;case 5124:case 35670:return Lj;case 35667:case 35671:return Mj;case 35668:case 35672:return Nj;case 35669:case 35673:return Oj;case 5125:return Pj;case 35678:case 36198:case 36298:case 36306:case 35682:return Fj;
-case 35679:case 36299:case 36307:return Ij;case 35680:case 36300:case 36308:case 36293:return Kj;case 36289:case 36303:case 36311:case 36292:return Gj}}function Rj(a,b){a.uniform1fv(this.addr,b)}function Sj(a,b){a.uniform1iv(this.addr,b)}function Tj(a,b){a.uniform2iv(this.addr,b)}function Uj(a,b){a.uniform3iv(this.addr,b)}function Vj(a,b){a.uniform4iv(this.addr,b)}function Wj(a,b){b=Mc(b,this.size,2);a.uniform2fv(this.addr,b)}function Xj(a,b){b=Mc(b,this.size,3);a.uniform3fv(this.addr,b)}function Yj(a,
-b){b=Mc(b,this.size,4);a.uniform4fv(this.addr,b)}function Zj(a,b){b=Mc(b,this.size,4);a.uniformMatrix2fv(this.addr,!1,b)}function ak(a,b){b=Mc(b,this.size,9);a.uniformMatrix3fv(this.addr,!1,b)}function bk(a,b){b=Mc(b,this.size,16);a.uniformMatrix4fv(this.addr,!1,b)}function ck(a,b,c){var d=b.length,e=yh(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.safeSetTexture2D(b[a]||Dh,e[a])}function dk(a,b,c){var d=b.length,e=yh(c,d);a.uniform1iv(this.addr,e);for(a=0;a!==d;++a)c.safeSetTextureCube(b[a]||
-Eh,e[a])}function ek(a){switch(a){case 5126:return Rj;case 35664:return Wj;case 35665:return Xj;case 35666:return Yj;case 35674:return Zj;case 35675:return ak;case 35676:return bk;case 5124:case 35670:return Sj;case 35667:case 35671:return Tj;case 35668:case 35672:return Uj;case 35669:case 35673:return Vj;case 35678:case 36198:case 36298:case 36306:case 35682:return ck;case 35680:case 36300:case 36308:case 36293:return dk}}function fk(a,b,c){this.id=a;this.addr=c;this.cache=[];this.setValue=Qj(b.type)}
-function Fh(a,b,c){this.id=a;this.addr=c;this.cache=[];this.size=b.size;this.setValue=ek(b.type)}function Gh(a){this.id=a;this.seq=[];this.map={}}function Cb(a,b){this.seq=[];this.map={};for(var c=a.getProgramParameter(b,35718),d=0;d<c;++d){var e=a.getActiveUniform(b,d),f=a.getUniformLocation(b,e.name),g=this,h=e.name,l=h.length;for(ig.lastIndex=0;;){var n=ig.exec(h),q=ig.lastIndex,p=n[1],k=n[3];"]"===n[2]&&(p|=0);if(void 0===k||"["===k&&q+2===l){h=g;e=void 0===k?new fk(p,e,f):new Fh(p,e,f);h.seq.push(e);
-h.map[e.id]=e;break}else k=g.map[p],void 0===k&&(k=new Gh(p),p=g,g=k,p.seq.push(g),p.map[g.id]=g),g=k}}}function Hh(a,b,c){b=a.createShader(b);a.shaderSource(b,c);a.compileShader(b);return b}function Ih(a){switch(a){case 3E3:return["Linear","( value )"];case 3001:return["sRGB","( value )"];case 3002:return["RGBE","( value )"];case 3004:return["RGBM","( value, 7.0 )"];case 3005:return["RGBM","( value, 16.0 )"];case 3006:return["RGBD","( value, 256.0 )"];case 3007:return["Gamma","( value, float( GAMMA_FACTOR ) )"];
-case 3003:return["LogLuv","( value )"];default:return console.warn("THREE.WebGLProgram: Unsupported encoding:",a),["Linear","( value )"]}}function Jh(a,b,c){var d=a.getShaderParameter(b,35713),e=a.getShaderInfoLog(b).trim();if(d&&""===e)return"";a=a.getShaderSource(b).split("n");for(b=0;b<a.length;b++)a[b]=b+1+": "+a[b];a=a.join("n");return"THREE.WebGLShader: gl.getShaderInfoLog() "+c+"n"+e+a}function Jd(a,b){b=Ih(b);return"vec4 "+a+"( vec4 value ) { return "+b[0]+"ToLinear"+b[1]+"; }"}function gk(a,
-b){b=Ih(b);return"vec4 "+a+"( vec4 value ) { return LinearTo"+b[0]+b[1]+"; }"}function hk(a,b){switch(b){case 1:b="Linear";break;case 2:b="Reinhard";break;case 3:b="OptimizedCineon";break;case 4:b="ACESFilmic";break;case 5:b="Custom";break;default:console.warn("THREE.WebGLProgram: Unsupported toneMapping:",b),b="Linear"}return"vec3 "+a+"( vec3 color ) { return "+b+"ToneMapping( color ); }"}function ik(a){var b=[],c;for(c in a){var d=a[c];!1!==d&&b.push("#define "+c+" "+d)}return b.join("n")}function Kd(a){return""!==
-a}function Kh(a,b){return a.replace(/NUM_DIR_LIGHTS/g,b.numDirLights).replace(/NUM_SPOT_LIGHTS/g,b.numSpotLights).replace(/NUM_RECT_AREA_LIGHTS/g,b.numRectAreaLights).replace(/NUM_POINT_LIGHTS/g,b.numPointLights).replace(/NUM_HEMI_LIGHTS/g,b.numHemiLights).replace(/NUM_DIR_LIGHT_SHADOWS/g,b.numDirLightShadows).replace(/NUM_SPOT_LIGHT_SHADOWS/g,b.numSpotLightShadows).replace(/NUM_POINT_LIGHT_SHADOWS/g,b.numPointLightShadows)}function Lh(a,b){return a.replace(/NUM_CLIPPING_PLANES/g,b.numClippingPlanes).replace(/UNION_CLIPPING_PLANES/g,
-b.numClippingPlanes-b.numClipIntersection)}function jg(a,b){a=O[b];if(void 0===a)throw Error("Can not resolve #include <"+b+">");return a.replace(kg,jg)}function Mh(a,b,c,d){console.warn("WebGLProgram: #pragma unroll_loop shader syntax is deprecated. Please use #pragma unroll_loop_start syntax instead.");return lg(a,b,c,d)}function lg(a,b,c,d){a="";for(b=parseInt(b);b<parseInt(c);b++)a+=d.replace(/[ i ]/g,"[ "+b+" ]").replace(/UNROLLED_LOOP_INDEX/g,b);return a}function Nh(a){var b="precision "+
-a.precision+" float;nprecision "+a.precision+" int;";"highp"===a.precision?b+="n#define HIGH_PRECISION":"mediump"===a.precision?b+="n#define MEDIUM_PRECISION":"lowp"===a.precision&&(b+="n#define LOW_PRECISION");return b}function jk(a){var b="SHADOWMAP_TYPE_BASIC";1===a.shadowMapType?b="SHADOWMAP_TYPE_PCF":2===a.shadowMapType?b="SHADOWMAP_TYPE_PCF_SOFT":3===a.shadowMapType&&(b="SHADOWMAP_TYPE_VSM");return b}function kk(a){var b="ENVMAP_TYPE_CUBE";if(a.envMap)switch(a.envMapMode){case 301:case 302:b=
-"ENVMAP_TYPE_CUBE";break;case 306:case 307:b="ENVMAP_TYPE_CUBE_UV";break;case 303:case 304:b="ENVMAP_TYPE_EQUIREC"}return b}function lk(a){var b="ENVMAP_MODE_REFLECTION";if(a.envMap)switch(a.envMapMode){case 302:case 304:case 307:b="ENVMAP_MODE_REFRACTION"}return b}function mk(a){var b="ENVMAP_BLENDING_NONE";if(a.envMap)switch(a.combine){case 0:b="ENVMAP_BLENDING_MULTIPLY";break;case 1:b="ENVMAP_BLENDING_MIX";break;case 2:b="ENVMAP_BLENDING_ADD"}return b}function nk(a,b,c,d){var e=a.getContext(),
-f=c.defines,g=c.vertexShader,h=c.fragmentShader,l=jk(c),n=kk(c),q=lk(c),p=mk(c),k=0<a.gammaFactor?a.gammaFactor:1,r=c.isWebGL2?"":[c.extensionDerivatives||c.envMapCubeUV||c.bumpMap||c.tangentSpaceNormalMap||c.clearcoatNormalMap||c.flatShading||"physical"===c.shaderID?"#extension GL_OES_standard_derivatives : enable":"",(c.extensionFragDepth||c.logarithmicDepthBuffer)&&c.rendererExtensionFragDepth?"#extension GL_EXT_frag_depth : enable":"",c.extensionDrawBuffers&&c.rendererExtensionDrawBuffers?"#extension GL_EXT_draw_buffers : require":
-"",(c.extensionShaderTextureLOD||c.envMap)&&c.rendererExtensionShaderTextureLod?"#extension GL_EXT_shader_texture_lod : enable":""].filter(Kd).join("n"),t=ik(f),v=e.createProgram();c.isRawShaderMaterial?(f=[t].filter(Kd).join("n"),0<f.length&&(f+="n"),l=[r,t].filter(Kd).join("n"),0<l.length&&(l+="n")):(f=[Nh(c),"#define SHADER_NAME "+c.shaderName,t,c.instancing?"#define USE_INSTANCING":"",c.supportsVertexTextures?"#define VERTEX_TEXTURES":"","#define GAMMA_FACTOR "+k,"#define MAX_BONES "+c.maxBones,
-c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.envMap?"#define USE_ENVMAP":"",c.envMap?"#define "+q:"",c.lightMap?"#define USE_LIGHTMAP":"",c.aoMap?"#define USE_AOMAP":"",c.emissiveMap?"#define USE_EMISSIVEMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.normalMap&&c.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",c.normalMap&&c.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",c.clearcoatMap?
-"#define USE_CLEARCOATMAP":"",c.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",c.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",c.displacementMap&&c.supportsVertexTextures?"#define USE_DISPLACEMENTMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.roughnessMap?"#define USE_ROUGHNESSMAP":"",c.metalnessMap?"#define USE_METALNESSMAP":"",c.alphaMap?"#define USE_ALPHAMAP":"",c.transmissionMap?"#define USE_TRANSMISSIONMAP":"",c.vertexTangents?"#define USE_TANGENT":"",c.vertexColors?
-"#define USE_COLOR":"",c.vertexUvs?"#define USE_UV":"",c.uvsVertexOnly?"#define UVS_VERTEX_ONLY":"",c.flatShading?"#define FLAT_SHADED":"",c.skinning?"#define USE_SKINNING":"",c.useVertexTexture?"#define BONE_TEXTURE":"",c.morphTargets?"#define USE_MORPHTARGETS":"",c.morphNormals&&!1===c.flatShading?"#define USE_MORPHNORMALS":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapEnabled?"#define "+l:"",c.sizeAttenuation?
-"#define USE_SIZEATTENUATION":"",c.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",c.logarithmicDepthBuffer&&c.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"," attribute mat4 instanceMatrix;","#endif","attribute vec3 position;","attribute vec3 normal;",
-"attribute vec2 uv;","#ifdef USE_TANGENT","tattribute vec4 tangent;","#endif","#ifdef 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","ttattribute vec3 morphNormal0;","ttattribute vec3 morphNormal1;","ttattribute vec3 morphNormal2;","ttattribute vec3 morphNormal3;","t#else","ttattribute vec3 morphTarget4;",
-"ttattribute vec3 morphTarget5;","ttattribute vec3 morphTarget6;","ttattribute vec3 morphTarget7;","t#endif","#endif","#ifdef USE_SKINNING","tattribute vec4 skinIndex;","tattribute vec4 skinWeight;","#endif","n"].filter(Kd).join("n"),l=[r,Nh(c),"#define SHADER_NAME "+c.shaderName,t,c.alphaTest?"#define ALPHATEST "+c.alphaTest+(c.alphaTest%1?"":".0"):"","#define GAMMA_FACTOR "+k,c.useFog&&c.fog?"#define USE_FOG":"",c.useFog&&c.fogExp2?"#define FOG_EXP2":"",c.map?"#define USE_MAP":"",c.matcap?
-"#define USE_MATCAP":"",c.envMap?"#define USE_ENVMAP":"",c.envMap?"#define "+n:"",c.envMap?"#define "+q:"",c.envMap?"#define "+p:"",c.lightMap?"#define USE_LIGHTMAP":"",c.aoMap?"#define USE_AOMAP":"",c.emissiveMap?"#define USE_EMISSIVEMAP":"",c.bumpMap?"#define USE_BUMPMAP":"",c.normalMap?"#define USE_NORMALMAP":"",c.normalMap&&c.objectSpaceNormalMap?"#define OBJECTSPACE_NORMALMAP":"",c.normalMap&&c.tangentSpaceNormalMap?"#define TANGENTSPACE_NORMALMAP":"",c.clearcoatMap?"#define USE_CLEARCOATMAP":
-"",c.clearcoatRoughnessMap?"#define USE_CLEARCOAT_ROUGHNESSMAP":"",c.clearcoatNormalMap?"#define USE_CLEARCOAT_NORMALMAP":"",c.specularMap?"#define USE_SPECULARMAP":"",c.roughnessMap?"#define USE_ROUGHNESSMAP":"",c.metalnessMap?"#define USE_METALNESSMAP":"",c.alphaMap?"#define USE_ALPHAMAP":"",c.sheen?"#define USE_SHEEN":"",c.transmissionMap?"#define USE_TRANSMISSIONMAP":"",c.vertexTangents?"#define USE_TANGENT":"",c.vertexColors?"#define USE_COLOR":"",c.vertexUvs?"#define USE_UV":"",c.uvsVertexOnly?
-"#define UVS_VERTEX_ONLY":"",c.gradientMap?"#define USE_GRADIENTMAP":"",c.flatShading?"#define FLAT_SHADED":"",c.doubleSided?"#define DOUBLE_SIDED":"",c.flipSided?"#define FLIP_SIDED":"",c.shadowMapEnabled?"#define USE_SHADOWMAP":"",c.shadowMapEnabled?"#define "+l:"",c.premultipliedAlpha?"#define PREMULTIPLIED_ALPHA":"",c.physicallyCorrectLights?"#define PHYSICALLY_CORRECT_LIGHTS":"",c.logarithmicDepthBuffer?"#define USE_LOGDEPTHBUF":"",c.logarithmicDepthBuffer&&c.rendererExtensionFragDepth?"#define USE_LOGDEPTHBUF_EXT":
-"",(c.extensionShaderTextureLOD||c.envMap)&&c.rendererExtensionShaderTextureLod?"#define TEXTURE_LOD_EXT":"","uniform mat4 viewMatrix;","uniform vec3 cameraPosition;","uniform bool isOrthographic;",0!==c.toneMapping?"#define TONE_MAPPING":"",0!==c.toneMapping?O.tonemapping_pars_fragment:"",0!==c.toneMapping?hk("toneMapping",c.toneMapping):"",c.dithering?"#define DITHERING":"",O.encodings_pars_fragment,c.map?Jd("mapTexelToLinear",c.mapEncoding):"",c.matcap?Jd("matcapTexelToLinear",c.matcapEncoding):
-"",c.envMap?Jd("envMapTexelToLinear",c.envMapEncoding):"",c.emissiveMap?Jd("emissiveMapTexelToLinear",c.emissiveMapEncoding):"",c.lightMap?Jd("lightMapTexelToLinear",c.lightMapEncoding):"",gk("linearToOutputTexel",c.outputEncoding),c.depthPacking?"#define DEPTH_PACKING "+c.depthPacking:"","n"].filter(Kd).join("n"));g=g.replace(kg,jg);g=Kh(g,c);g=Lh(g,c);h=h.replace(kg,jg);h=Kh(h,c);h=Lh(h,c);g=g.replace(Oh,lg).replace(Ph,Mh);h=h.replace(Oh,lg).replace(Ph,Mh);c.isWebGL2&&!c.isRawShaderMaterial&&
-(f="#version 300 esnn#define attribute inn#define varying outn#define texture2D texturen"+f,l="#version 300 esnn#define varying innout highp vec4 pc_fragColor;n#define gl_FragColor pc_fragColorn#define gl_FragDepthEXT gl_FragDepthn#define texture2D texturen#define textureCube texturen#define texture2DProj textureProjn#define texture2DLodEXT textureLodn#define texture2DProjLodEXT textureProjLodn#define textureCubeLodEXT textureLodn#define texture2DGradEXT textureGradn#define texture2DProjGradEXT textureProjGradn#define textureCubeGradEXT textureGradn"+
-l);h=l+h;g=Hh(e,35633,f+g);h=Hh(e,35632,h);e.attachShader(v,g);e.attachShader(v,h);void 0!==c.index0AttributeName?e.bindAttribLocation(v,0,c.index0AttributeName):!0===c.morphTargets&&e.bindAttribLocation(v,0,"position");e.linkProgram(v);if(a.debug.checkShaderErrors){a=e.getProgramInfoLog(v).trim();n=e.getShaderInfoLog(g).trim();q=e.getShaderInfoLog(h).trim();k=p=!0;if(!1===e.getProgramParameter(v,35714))p=!1,r=Jh(e,g,"vertex"),t=Jh(e,h,"fragment"),console.error("THREE.WebGLProgram: shader error: ",
-e.getError(),"35715",e.getProgramParameter(v,35715),"gl.getProgramInfoLog",a,r,t);else if(""!==a)console.warn("THREE.WebGLProgram: gl.getProgramInfoLog()",a);else if(""===n||""===q)k=!1;k&&(this.diagnostics={runnable:p,programLog:a,vertexShader:{log:n,prefix:f},fragmentShader:{log:q,prefix:l}})}e.deleteShader(g);e.deleteShader(h);var m;this.getUniforms=function(){void 0===m&&(m=new Cb(e,v));return m};var B;this.getAttributes=function(){if(void 0===B){for(var a={},b=e.getProgramParameter(v,35721),
-c=0;c<b;c++){var d=e.getActiveAttrib(v,c).name;a[d]=e.getAttribLocation(v,d)}B=a}return B};this.destroy=function(){d.releaseStatesOfProgram(this);e.deleteProgram(v);this.program=void 0};this.name=c.shaderName;this.id=ok++;this.cacheKey=b;this.usedTimes=1;this.program=v;this.vertexShader=g;this.fragmentShader=h;return this}function pk(a,b,c,d){function e(a){if(a)a.isTexture?b=a.encoding:a.isWebGLRenderTarget&&(console.warn("THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead."),
-b=a.texture.encoding);else var b=3E3;return b}var f=[],g=c.isWebGL2,h=c.logarithmicDepthBuffer,l=c.floatVertexTextures,n=c.maxVertexUniforms,q=c.vertexTextures,p=c.precision,k={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"},r="precision isWebGL2 supportsVertexTextures outputEncoding instancing 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 vertexTangents vertexUvs uvsVertexOnly fog useFog fogExp2 flatShading sizeAttenuation logarithmicDepthBuffer skinning maxBones useVertexTexture morphTargets morphNormals maxMorphTargets maxMorphNormals premultipliedAlpha numDirLights numPointLights numSpotLights numHemiLights numRectAreaLights numDirLightShadows numPointLightShadows numSpotLightShadows shadowMapEnabled shadowMapType toneMapping physicallyCorrectLights alphaTest doubleSided flipSided numClippingPlanes numClipIntersection depthPacking dithering sheen transmissionMap".split(" ");
-return{getParameters:function(d,f,z,r,m,ca,Q){var t=r.fog;r=d.isMeshStandardMaterial?r.environment:null;r=d.envMap||r;var v=k[d.type];if(Q.isSkinnedMesh){var x=Q.skeleton.bones;if(l)x=1024;else{var w=Math.min(Math.floor((n-20)/4),x.length);w<x.length?(console.warn("THREE.WebGLRenderer: Skeleton has "+x.length+" bones. This GPU supports "+w+"."),x=0):x=w}}else x=0;null!==d.precision&&(p=c.getMaxPrecision(d.precision),p!==d.precision&&console.warn("THREE.WebGLProgram.getParameters:",d.precision,"not supported, using",
-p,"instead."));if(v){var D=Ua[v];w=D.vertexShader;D=D.fragmentShader}else w=d.vertexShader,D=d.fragmentShader;var B=a.getRenderTarget();return{isWebGL2:g,shaderID:v,shaderName:d.type,vertexShader:w,fragmentShader:D,defines:d.defines,isRawShaderMaterial:d.isRawShaderMaterial,isShaderMaterial:d.isShaderMaterial,precision:p,instancing:!0===Q.isInstancedMesh,supportsVertexTextures:q,outputEncoding:null!==B?e(B.texture):a.outputEncoding,map:!!d.map,mapEncoding:e(d.map),matcap:!!d.matcap,matcapEncoding:e(d.matcap),
-envMap:!!r,envMapMode:r&&r.mapping,envMapEncoding:e(r),envMapCubeUV:!!r&&(306===r.mapping||307===r.mapping),lightMap:!!d.lightMap,lightMapEncoding:e(d.lightMap),aoMap:!!d.aoMap,emissiveMap:!!d.emissiveMap,emissiveMapEncoding:e(d.emissiveMap),bumpMap:!!d.bumpMap,normalMap:!!d.normalMap,objectSpaceNormalMap:1===d.normalMapType,tangentSpaceNormalMap:0===d.normalMapType,clearcoatMap:!!d.clearcoatMap,clearcoatRoughnessMap:!!d.clearcoatRoughnessMap,clearcoatNormalMap:!!d.clearcoatNormalMap,displacementMap:!!d.displacementMap,
-roughnessMap:!!d.roughnessMap,metalnessMap:!!d.metalnessMap,specularMap:!!d.specularMap,alphaMap:!!d.alphaMap,gradientMap:!!d.gradientMap,sheen:!!d.sheen,transmissionMap:!!d.transmissionMap,combine:d.combine,vertexTangents:d.normalMap&&d.vertexTangents,vertexColors:d.vertexColors,vertexUvs:!!d.map||!!d.bumpMap||!!d.normalMap||!!d.specularMap||!!d.alphaMap||!!d.emissiveMap||!!d.roughnessMap||!!d.metalnessMap||!!d.clearcoatMap||!!d.clearcoatRoughnessMap||!!d.clearcoatNormalMap||!!d.displacementMap||
-!!d.transmissionMap,uvsVertexOnly:!(d.map||d.bumpMap||d.normalMap||d.specularMap||d.alphaMap||d.emissiveMap||d.roughnessMap||d.metalnessMap||d.clearcoatNormalMap||d.transmissionMap)&&!!d.displacementMap,fog:!!t,useFog:d.fog,fogExp2:t&&t.isFogExp2,flatShading:d.flatShading,sizeAttenuation:d.sizeAttenuation,logarithmicDepthBuffer:h,skinning:d.skinning&&0<x,maxBones:x,useVertexTexture:l,morphTargets:d.morphTargets,morphNormals:d.morphNormals,maxMorphTargets:a.maxMorphTargets,maxMorphNormals:a.maxMorphNormals,
-numDirLights:f.directional.length,numPointLights:f.point.length,numSpotLights:f.spot.length,numRectAreaLights:f.rectArea.length,numHemiLights:f.hemi.length,numDirLightShadows:f.directionalShadowMap.length,numPointLightShadows:f.pointShadowMap.length,numSpotLightShadows:f.spotShadowMap.length,numClippingPlanes:m,numClipIntersection:ca,dithering:d.dithering,shadowMapEnabled:a.shadowMap.enabled&&0<z.length,shadowMapType:a.shadowMap.type,toneMapping:d.toneMapped?a.toneMapping:0,physicallyCorrectLights:a.physicallyCorrectLights,
-premultipliedAlpha:d.premultipliedAlpha,alphaTest:d.alphaTest,doubleSided:2===d.side,flipSided:1===d.side,depthPacking:void 0!==d.depthPacking?d.depthPacking:!1,index0AttributeName:d.index0AttributeName,extensionDerivatives:d.extensions&&d.extensions.derivatives,extensionFragDepth:d.extensions&&d.extensions.fragDepth,extensionDrawBuffers:d.extensions&&d.extensions.drawBuffers,extensionShaderTextureLOD:d.extensions&&d.extensions.shaderTextureLOD,rendererExtensionFragDepth:g||null!==b.get("EXT_frag_depth"),
-rendererExtensionDrawBuffers:g||null!==b.get("WEBGL_draw_buffers"),rendererExtensionShaderTextureLod:g||null!==b.get("EXT_shader_texture_lod"),customProgramCacheKey:d.customProgramCacheKey()}},getProgramCacheKey:function(b){var c=[];b.shaderID?c.push(b.shaderID):(c.push(b.fragmentShader),c.push(b.vertexShader));if(void 0!==b.defines)for(var d in b.defines)c.push(d),c.push(b.defines[d]);if(void 0===b.isRawShaderMaterial){for(d=0;d<r.length;d++)c.push(b[r[d]]);c.push(a.outputEncoding);c.push(a.gammaFactor)}c.push(b.customProgramCacheKey);
-return c.join()},getUniforms:function(a){var b=k[a.type];return b?Qh.clone(Ua[b].uniforms):a.uniforms},acquireProgram:function(b,c){for(var e,g=0,h=f.length;g<h;g++){var l=f[g];if(l.cacheKey===c){e=l;++e.usedTimes;break}}void 0===e&&(e=new nk(a,c,b,d),f.push(e));return e},releaseProgram:function(a){if(0===--a.usedTimes){var b=f.indexOf(a);f[b]=f[f.length-1];f.pop();a.destroy()}},programs:f}}function qk(){var a=new WeakMap;return{get:function(b){var c=a.get(b);void 0===c&&(c={},a.set(b,c));return c},
-remove:function(b){a.delete(b)},update:function(b,c,d){a.get(b)[c]=d},dispose:function(){a=new WeakMap}}}function rk(a,b){return a.groupOrder!==b.groupOrder?a.groupOrder-b.groupOrder:a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:a.program!==b.program?a.program.id-b.program.id:a.material.id!==b.material.id?a.material.id-b.material.id:a.z!==b.z?a.z-b.z:a.id-b.id}function sk(a,b){return a.groupOrder!==b.groupOrder?a.groupOrder-b.groupOrder:a.renderOrder!==b.renderOrder?a.renderOrder-b.renderOrder:
-a.z!==b.z?b.z-a.z:a.id-b.id}function Rh(a){function b(b,e,f,q,p,k){var h=c[d],l=a.get(f);void 0===h?(h={id:b.id,object:b,geometry:e,material:f,program:l.program||g,groupOrder:q,renderOrder:b.renderOrder,z:p,group:k},c[d]=h):(h.id=b.id,h.object=b,h.geometry=e,h.material=f,h.program=l.program||g,h.groupOrder=q,h.renderOrder=b.renderOrder,h.z=p,h.group=k);d++;return h}var c=[],d=0,e=[],f=[],g={id:-1};return{opaque:e,transparent:f,init:function(){d=0;e.length=0;f.length=0},push:function(a,c,d,g,p,k){a=
-b(a,c,d,g,p,k);(!0===d.transparent?f:e).push(a)},unshift:function(a,c,d,g,p,k){a=b(a,c,d,g,p,k);(!0===d.transparent?f:e).unshift(a)},finish:function(){for(var a=d,b=c.length;a<b;a++){var e=c[a];if(null===e.id)break;e.id=null;e.object=null;e.geometry=null;e.material=null;e.program=null;e.group=null}},sort:function(a,b){1<e.length&&e.sort(a||rk);1<f.length&&f.sort(b||sk)}}}function tk(a){function b(a){a=a.target;a.removeEventListener("dispose",b);c.delete(a)}var c=new WeakMap;return{get:function(d,
-e){var f=c.get(d);if(void 0===f){var g=new Rh(a);c.set(d,new WeakMap);c.get(d).set(e,g);d.addEventListener("dispose",b)}else g=f.get(e),void 0===g&&(g=new Rh(a),f.set(e,g));return g},dispose:function(){c=new WeakMap}}}function uk(){var a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];switch(b.type){case "DirectionalLight":var c={direction:new m,color:new H};break;case "SpotLight":c={position:new m,direction:new m,color:new H,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case "PointLight":c=
-{position:new m,color:new H,distance:0,decay:0};break;case "HemisphereLight":c={direction:new m,skyColor:new H,groundColor:new H};break;case "RectAreaLight":c={color:new H,position:new m,halfWidth:new m,halfHeight:new m}}return a[b.id]=c}}}function vk(){var a={};return{get:function(b){if(void 0!==a[b.id])return a[b.id];switch(b.type){case "DirectionalLight":var c={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new u};break;case "SpotLight":c={shadowBias:0,shadowNormalBias:0,shadowRadius:1,
-shadowMapSize:new u};break;case "PointLight":c={shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new u,shadowCameraNear:1,shadowCameraFar:1E3}}return a[b.id]=c}}}function wk(a,b){return(b.castShadow?1:0)-(a.castShadow?1:0)}function xk(){for(var a=new uk,b=vk(),c={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:[],point:[],pointShadow:[],pointShadowMap:[],pointShadowMatrix:[],hemi:[]},d=0;9>d;d++)c.probe.push(new m);var e=new m,f=new U,g=new U;return{setup:function(d,l,n){for(var h=l=0,p=0,k=0;9>k;k++)c.probe[k].set(0,0,0);var r=k=0,t=0,v=0,m=0,B=0,w=0,ca=0;n=n.matrixWorldInverse;d.sort(wk);for(var Q=0,N=d.length;Q<N;Q++){var y=d[Q],I=y.color,u=y.intensity,D=y.distance,ha=y.shadow&&y.shadow.map?y.shadow.map.texture:
-null;if(y.isAmbientLight)l+=I.r*u,h+=I.g*u,p+=I.b*u;else if(y.isLightProbe)for(ha=0;9>ha;ha++)c.probe[ha].addScaledVector(y.sh.coefficients[ha],u);else if(y.isDirectionalLight){u=a.get(y);u.color.copy(y.color).multiplyScalar(y.intensity);u.direction.setFromMatrixPosition(y.matrixWorld);e.setFromMatrixPosition(y.target.matrixWorld);u.direction.sub(e);u.direction.transformDirection(n);if(y.castShadow){var va=y.shadow;I=b.get(y);I.shadowBias=va.bias;I.shadowNormalBias=va.normalBias;I.shadowRadius=va.radius;
-I.shadowMapSize=va.mapSize;c.directionalShadow[k]=I;c.directionalShadowMap[k]=ha;c.directionalShadowMatrix[k]=y.shadow.matrix;B++}c.directional[k]=u;k++}else y.isSpotLight?(va=a.get(y),va.position.setFromMatrixPosition(y.matrixWorld),va.position.applyMatrix4(n),va.color.copy(I).multiplyScalar(u),va.distance=D,va.direction.setFromMatrixPosition(y.matrixWorld),e.setFromMatrixPosition(y.target.matrixWorld),va.direction.sub(e),va.direction.transformDirection(n),va.coneCos=Math.cos(y.angle),va.penumbraCos=
-Math.cos(y.angle*(1-y.penumbra)),va.decay=y.decay,y.castShadow&&(u=y.shadow,I=b.get(y),I.shadowBias=u.bias,I.shadowNormalBias=u.normalBias,I.shadowRadius=u.radius,I.shadowMapSize=u.mapSize,c.spotShadow[t]=I,c.spotShadowMap[t]=ha,c.spotShadowMatrix[t]=y.shadow.matrix,ca++),c.spot[t]=va,t++):y.isRectAreaLight?(ha=a.get(y),ha.color.copy(I).multiplyScalar(u),ha.position.setFromMatrixPosition(y.matrixWorld),ha.position.applyMatrix4(n),g.identity(),f.copy(y.matrixWorld),f.premultiply(n),g.extractRotation(f),
-ha.halfWidth.set(.5*y.width,0,0),ha.halfHeight.set(0,.5*y.height,0),ha.halfWidth.applyMatrix4(g),ha.halfHeight.applyMatrix4(g),c.rectArea[v]=ha,v++):y.isPointLight?(u=a.get(y),u.position.setFromMatrixPosition(y.matrixWorld),u.position.applyMatrix4(n),u.color.copy(y.color).multiplyScalar(y.intensity),u.distance=y.distance,u.decay=y.decay,y.castShadow&&(va=y.shadow,I=b.get(y),I.shadowBias=va.bias,I.shadowNormalBias=va.normalBias,I.shadowRadius=va.radius,I.shadowMapSize=va.mapSize,I.shadowCameraNear=
-va.camera.near,I.shadowCameraFar=va.camera.far,c.pointShadow[r]=I,c.pointShadowMap[r]=ha,c.pointShadowMatrix[r]=y.shadow.matrix,w++),c.point[r]=u,r++):y.isHemisphereLight&&(ha=a.get(y),ha.direction.setFromMatrixPosition(y.matrixWorld),ha.direction.transformDirection(n),ha.direction.normalize(),ha.skyColor.copy(y.color).multiplyScalar(u),ha.groundColor.copy(y.groundColor).multiplyScalar(u),c.hemi[m]=ha,m++)}c.ambient[0]=l;c.ambient[1]=h;c.ambient[2]=p;d=c.hash;if(d.directionalLength!==k||d.pointLength!==
-r||d.spotLength!==t||d.rectAreaLength!==v||d.hemiLength!==m||d.numDirectionalShadows!==B||d.numPointShadows!==w||d.numSpotShadows!==ca)c.directional.length=k,c.spot.length=t,c.rectArea.length=v,c.point.length=r,c.hemi.length=m,c.directionalShadow.length=B,c.directionalShadowMap.length=B,c.pointShadow.length=w,c.pointShadowMap.length=w,c.spotShadow.length=ca,c.spotShadowMap.length=ca,c.directionalShadowMatrix.length=B,c.pointShadowMatrix.length=w,c.spotShadowMatrix.length=ca,d.directionalLength=k,
-d.pointLength=r,d.spotLength=t,d.rectAreaLength=v,d.hemiLength=m,d.numDirectionalShadows=B,d.numPointShadows=w,d.numSpotShadows=ca,c.version=yk++},state:c}}function Sh(){var a=new xk,b=[],c=[];return{init:function(){b.length=0;c.length=0},state:{lightsArray:b,shadowsArray:c,lights:a},setupLights:function(d){a.setup(b,c,d)},pushLight:function(a){b.push(a)},pushShadow:function(a){c.push(a)}}}function zk(){function a(c){c=c.target;c.removeEventListener("dispose",a);b.delete(c)}var b=new WeakMap;return{get:function(c,
-d){if(!1===b.has(c)){var e=new Sh;b.set(c,new WeakMap);b.get(c).set(d,e);c.addEventListener("dispose",a)}else!1===b.get(c).has(d)?(e=new Sh,b.get(c).set(d,e)):e=b.get(c).get(d);return e},dispose:function(){b=new WeakMap}}}function Db(a){L.call(this);this.type="MeshDepthMaterial";this.depthPacking=3200;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.fog=!1;this.setValues(a)}
-function Eb(a){L.call(this);this.type="MeshDistanceMaterial";this.referencePosition=new m;this.nearDistance=1;this.farDistance=1E3;this.morphTargets=this.skinning=!1;this.displacementMap=this.alphaMap=this.map=null;this.displacementScale=1;this.displacementBias=0;this.fog=!1;this.setValues(a)}function Th(a,b,c){function d(a,b,c){c=a<<0|b<<1|c<<2;var d=p[c];void 0===d&&(d=new Db({depthPacking:3201,morphTargets:a,skinning:b}),p[c]=d);return d}function e(a,b,c){c=a<<0|b<<1|c<<2;var d=k[c];void 0===d&&
-(d=new Eb({morphTargets:a,skinning:b}),k[c]=d);return d}function f(b,c,f,g,h,l,n){var q=d,p=b.customDepthMaterial;!0===g.isPointLight&&(q=e,p=b.customDistanceMaterial);void 0===p?(p=!1,!0===f.morphTargets&&(p=c.morphAttributes&&c.morphAttributes.position&&0<c.morphAttributes.position.length),c=!1,!0===b.isSkinnedMesh&&(!0===f.skinning?c=!0:console.warn("THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:",b)),b=q(p,c,!0===b.isInstancedMesh)):b=p;a.localClippingEnabled&&!0===
-f.clipShadows&&0!==f.clippingPlanes.length&&(p=b.uuid,q=f.uuid,c=r[p],void 0===c&&(c={},r[p]=c),p=c[q],void 0===p&&(p=b.clone(),c[q]=p),b=p);b.visible=f.visible;b.wireframe=f.wireframe;b.side=3===n?null!==f.shadowSide?f.shadowSide:f.side:null!==f.shadowSide?f.shadowSide:t[f.side];b.clipShadows=f.clipShadows;b.clippingPlanes=f.clippingPlanes;b.clipIntersection=f.clipIntersection;b.wireframeLinewidth=f.wireframeLinewidth;b.linewidth=f.linewidth;!0===g.isPointLight&&!0===b.isMeshDistanceMaterial&&(b.referencePosition.setFromMatrixPosition(g.matrixWorld),
-b.nearDistance=h,b.farDistance=l);return b}function g(c,d,e,l,n){if(!1!==c.visible){if(c.layers.test(d.layers)&&(c.isMesh||c.isLine||c.isPoints)&&(c.castShadow||c.receiveShadow&&3===n)&&(!c.frustumCulled||h.intersectsObject(c))){c.modelViewMatrix.multiplyMatrices(e.matrixWorldInverse,c.matrixWorld);var q=b.update(c),p=c.material;if(Array.isArray(p))for(var k=q.groups,z=0,r=k.length;z<r;z++){var t=k[z],m=p[t.materialIndex];m&&m.visible&&(m=f(c,q,m,l,e.near,e.far,n),a.renderBufferDirect(e,null,q,m,
-c,t))}else p.visible&&(p=f(c,q,p,l,e.near,e.far,n),a.renderBufferDirect(e,null,q,p,c,null))}c=c.children;q=0;for(p=c.length;q<p;q++)g(c[q],d,e,l,n)}}var h=new Jc,l=new u,n=new u,q=new S,p=[],k=[],r={},t={0:1,1:0,2:2},m=new ra({defines:{SAMPLE_RATE:.25,HALF_SAMPLE_RATE:.125},uniforms:{shadow_pass:{value:null},resolution:{value:new u},radius:{value:4}},vertexShader:"void main() {ntgl_Position = vec4( position, 1.0 );n}",fragmentShader:"uniform sampler2D shadow_pass;nuniform vec2 resolution;nuniform float radius;n#include <packing>nvoid main() {n float mean = 0.0;n float squared_mean = 0.0;ntfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy ) / resolution ) );n for ( float i = -1.0; i < 1.0 ; i += SAMPLE_RATE) {n #ifdef HORIZONAL_PASSn vec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( i, 0.0 ) * radius ) / resolution ) );n mean += distribution.x;n squared_mean += distribution.y * distribution.y + distribution.x * distribution.x;n #elsen float depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, i ) * radius ) / resolution ) );n mean += depth;n squared_mean += depth * depth;n #endifn }n mean = mean * HALF_SAMPLE_RATE;n squared_mean = squared_mean * HALF_SAMPLE_RATE;n float std_dev = sqrt( squared_mean - mean * mean );n gl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );n}"}),
-x=m.clone();x.defines.HORIZONAL_PASS=1;var B=new E;B.setAttribute("position",new J(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));var w=new T(B,m),ca=this;this.enabled=!1;this.autoUpdate=!0;this.needsUpdate=!1;this.type=1;this.render=function(d,e,f){if(!1!==ca.enabled&&(!1!==ca.autoUpdate||!1!==ca.needsUpdate)&&0!==d.length){var p=a.getRenderTarget(),k=a.getActiveCubeFace(),z=a.getActiveMipmapLevel(),r=a.state;r.setBlending(0);r.buffers.color.setClear(1,1,1,1);r.buffers.depth.setTest(!0);r.setScissorTest(!1);
-for(var t=0,v=d.length;t<v;t++){var B=d[t],y=B.shadow;if(!1!==y.autoUpdate||!1!==y.needsUpdate)if(void 0===y)console.warn("THREE.WebGLShadowMap:",B,"has no shadow.");else{l.copy(y.mapSize);var u=y.getFrameExtents();l.multiply(u);n.copy(y.mapSize);if(l.x>c||l.y>c)l.x>c&&(n.x=Math.floor(c/u.x),l.x=n.x*u.x,y.mapSize.x=n.x),l.y>c&&(n.y=Math.floor(c/u.y),l.y=n.y*u.y,y.mapSize.y=n.y);null!==y.map||y.isPointLightShadow||3!==this.type||(u={minFilter:1006,magFilter:1006,format:1023,stencilBuffer:!1},y.map=
-new Ga(l.x,l.y,u),y.map.texture.name=B.name+".shadowMap",y.mapPass=new Ga(l.x,l.y,u),y.camera.updateProjectionMatrix());null===y.map&&(y.map=new Ga(l.x,l.y,{minFilter:1003,magFilter:1003,format:1023,stencilBuffer:!1}),y.map.texture.name=B.name+".shadowMap",y.camera.updateProjectionMatrix());a.setRenderTarget(y.map);a.clear();u=y.getViewportCount();for(var N=0;N<u;N++){var Q=y.getViewport(N);q.set(n.x*Q.x,n.y*Q.y,n.x*Q.z,n.y*Q.w);r.viewport(q);y.updateMatrices(B,N);h=y.getFrustum();g(e,f,y.camera,
-B,this.type)}y.isPointLightShadow||3!==this.type||(B=y,u=f,N=b.update(w),m.uniforms.shadow_pass.value=B.map.texture,m.uniforms.resolution.value=B.mapSize,m.uniforms.radius.value=B.radius,a.setRenderTarget(B.mapPass),a.clear(),a.renderBufferDirect(u,null,N,m,w,null),x.uniforms.shadow_pass.value=B.mapPass.texture,x.uniforms.resolution.value=B.mapSize,x.uniforms.radius.value=B.radius,a.setRenderTarget(B.map),a.clear(),a.renderBufferDirect(u,null,N,x,w,null));y.needsUpdate=!1}}ca.needsUpdate=!1;a.setRenderTarget(p,
-k,z)}}}function Ak(a,b,c){function d(b,c,d){var e=new Uint8Array(4),f=a.createTexture();a.bindTexture(b,f);a.texParameteri(b,10241,9728);a.texParameteri(b,10240,9728);for(b=0;b<d;b++)a.texImage2D(c+b,0,6408,1,1,0,6408,5121,e);return f}function e(b){!0!==t[b]&&(a.enable(b),t[b]=!0)}function f(b){!1!==t[b]&&(a.disable(b),t[b]=!1)}function g(b,c,d,g,h,l,n,q){if(0===b)x&&(f(3042),x=!1);else if(x||(e(3042),x=!0),5!==b){if(b!==B||q!==A){if(100!==w||100!==N)a.blendEquation(32774),N=w=100;if(q)switch(b){case 1:a.blendFuncSeparate(1,
-771,1,771);break;case 2:a.blendFunc(1,1);break;case 3:a.blendFuncSeparate(0,0,769,771);break;case 4:a.blendFuncSeparate(0,768,0,770);break;default:console.error("THREE.WebGLState: Invalid blending: ",b)}else switch(b){case 1:a.blendFuncSeparate(770,771,1,771);break;case 2:a.blendFunc(770,1);break;case 3:a.blendFunc(0,769);break;case 4:a.blendFunc(0,768);break;default:console.error("THREE.WebGLState: Invalid blending: ",b)}I=y=Q=u=null;B=b;A=q}}else{h=h||c;l=l||d;n=n||g;if(c!==w||h!==N)a.blendEquationSeparate(dc[c],
-dc[h]),w=c,N=h;if(d!==u||g!==Q||l!==y||n!==I)a.blendFuncSeparate(da[d],da[g],da[l],da[n]),u=d,Q=g,y=l,I=n;B=b;A=null}}function h(b){D!==b&&(b?a.frontFace(2304):a.frontFace(2305),D=b)}function l(b){0!==b?(e(2884),b!==ha&&(1===b?a.cullFace(1029):2===b?a.cullFace(1028):a.cullFace(1032))):f(2884);ha=b}function n(b,c,d){if(b){if(e(32823),G!==c||E!==d)a.polygonOffset(c,d),G=c,E=d}else f(32823)}function q(b){void 0===b&&(b=33984+H-1);$b!==b&&(a.activeTexture(b),$b=b)}c=c.isWebGL2;var p=new function(){var b=
-!1,c=new S,d=null,e=new S(0,0,0,0);return{setMask:function(c){d===c||b||(a.colorMask(c,c,c,c),d=c)},setLocked:function(a){b=a},setClear:function(b,d,f,g,h){!0===h&&(b*=g,d*=g,f*=g);c.set(b,d,f,g);!1===e.equals(c)&&(a.clearColor(b,d,f,g),e.copy(c))},reset:function(){b=!1;d=null;e.set(-1,0,0,0)}}},k=new function(){var b=!1,c=null,d=null,g=null;return{setTest:function(a){a?e(2929):f(2929)},setMask:function(d){c===d||b||(a.depthMask(d),c=d)},setFunc:function(b){if(d!==b){if(b)switch(b){case 0:a.depthFunc(512);
-break;case 1:a.depthFunc(519);break;case 2:a.depthFunc(513);break;case 3:a.depthFunc(515);break;case 4:a.depthFunc(514);break;case 5:a.depthFunc(518);break;case 6:a.depthFunc(516);break;case 7:a.depthFunc(517);break;default:a.depthFunc(515)}else a.depthFunc(515);d=b}},setLocked:function(a){b=a},setClear:function(b){g!==b&&(a.clearDepth(b),g=b)},reset:function(){b=!1;g=d=c=null}}},r=new function(){var b=!1,c=null,d=null,g=null,h=null,l=null,n=null,q=null,p=null;return{setTest:function(a){b||(a?e(2960):
-f(2960))},setMask:function(d){c===d||b||(a.stencilMask(d),c=d)},setFunc:function(b,c,e){if(d!==b||g!==c||h!==e)a.stencilFunc(b,c,e),d=b,g=c,h=e},setOp:function(b,c,d){if(l!==b||n!==c||q!==d)a.stencilOp(b,c,d),l=b,n=c,q=d},setLocked:function(a){b=a},setClear:function(b){p!==b&&(a.clearStencil(b),p=b)},reset:function(){b=!1;p=q=n=l=h=g=d=c=null}}},t={},m=null,x=null,B=null,w=null,u=null,Q=null,N=null,y=null,I=null,A=!1,D=null,ha=null,C=null,G=null,E=null,H=a.getParameter(35661),K=!1,nb=0;nb=a.getParameter(7938);
--1!==nb.indexOf("WebGL")?(nb=parseFloat(/^WebGL ([0-9])/.exec(nb)[1]),K=1<=nb):-1!==nb.indexOf("OpenGL ES")&&(nb=parseFloat(/^OpenGL ES ([0-9])/.exec(nb)[1]),K=2<=nb);var $b=null,J={},L=new S,F=new S,P={};P[3553]=d(3553,3553,1);P[34067]=d(34067,34069,6);p.setClear(0,0,0,1);k.setClear(1);r.setClear(0);e(2929);k.setFunc(3);h(!1);l(1);e(2884);g(0);var dc={100:32774,101:32778,102:32779};c?(dc[103]=32775,dc[104]=32776):(b=b.get("EXT_blend_minmax"),null!==b&&(dc[103]=b.MIN_EXT,dc[104]=b.MAX_EXT));var da=
-{200:0,201:1,202:768,204:770,210:776,208:774,206:772,203:769,205:771,209:775,207:773};return{buffers:{color:p,depth:k,stencil:r},enable:e,disable:f,useProgram:function(b){return m!==b?(a.useProgram(b),m=b,!0):!1},setBlending:g,setMaterial:function(a,b){2===a.side?f(2884):e(2884);var c=1===a.side;b&&(c=!c);h(c);1===a.blending&&!1===a.transparent?g(0):g(a.blending,a.blendEquation,a.blendSrc,a.blendDst,a.blendEquationAlpha,a.blendSrcAlpha,a.blendDstAlpha,a.premultipliedAlpha);k.setFunc(a.depthFunc);
-k.setTest(a.depthTest);k.setMask(a.depthWrite);p.setMask(a.colorWrite);b=a.stencilWrite;r.setTest(b);b&&(r.setMask(a.stencilWriteMask),r.setFunc(a.stencilFunc,a.stencilRef,a.stencilFuncMask),r.setOp(a.stencilFail,a.stencilZFail,a.stencilZPass));n(a.polygonOffset,a.polygonOffsetFactor,a.polygonOffsetUnits)},setFlipSided:h,setCullFace:l,setLineWidth:function(b){b!==C&&(K&&a.lineWidth(b),C=b)},setPolygonOffset:n,setScissorTest:function(a){a?e(3089):f(3089)},activeTexture:q,bindTexture:function(b,c){null===
-$b&&q();var d=J[$b];void 0===d&&(d={type:void 0,texture:void 0},J[$b]=d);if(d.type!==b||d.texture!==c)a.bindTexture(b,c||P[b]),d.type=b,d.texture=c},unbindTexture:function(){var b=J[$b];void 0!==b&&void 0!==b.type&&(a.bindTexture(b.type,null),b.type=void 0,b.texture=void 0)},compressedTexImage2D:function(){try{a.compressedTexImage2D.apply(a,arguments)}catch(R){console.error("THREE.WebGLState:",R)}},texImage2D:function(){try{a.texImage2D.apply(a,arguments)}catch(R){console.error("THREE.WebGLState:",
-R)}},texImage3D:function(){try{a.texImage3D.apply(a,arguments)}catch(R){console.error("THREE.WebGLState:",R)}},scissor:function(b){!1===L.equals(b)&&(a.scissor(b.x,b.y,b.z,b.w),L.copy(b))},viewport:function(b){!1===F.equals(b)&&(a.viewport(b.x,b.y,b.z,b.w),F.copy(b))},reset:function(){t={};$b=null;J={};ha=D=B=m=null;p.reset();k.reset();r.reset()}}}function Bk(a,b,c,d,e,f,g){function h(a,b){return J?new OffscreenCanvas(a,b):document.createElementNS("http://www.w3.org/1999/xhtml","canvas")}function l(a,
-b,c,d){var e=1;if(a.width>d||a.height>d)e=d/Math.max(a.width,a.height);if(1>e||!0===b){if("undefined"!==typeof HTMLImageElement&&a instanceof HTMLImageElement||"undefined"!==typeof HTMLCanvasElement&&a instanceof HTMLCanvasElement||"undefined"!==typeof ImageBitmap&&a instanceof ImageBitmap)return d=b?P.floorPowerOfTwo:Math.floor,b=d(e*a.width),e=d(e*a.height),void 0===K&&(K=h(b,e)),c=c?h(b,e):K,c.width=b,c.height=e,c.getContext("2d").drawImage(a,0,0,b,e),console.warn("THREE.WebGLRenderer: Texture has been resized from ("+
-a.width+"x"+a.height+") to ("+b+"x"+e+")."),c;"data"in a&&console.warn("THREE.WebGLRenderer: Image in DataTexture is too big ("+a.width+"x"+a.height+").")}return a}function n(a){return P.isPowerOfTwo(a.width)&&P.isPowerOfTwo(a.height)}function q(a,b){return a.generateMipmaps&&b&&1003!==a.minFilter&&1006!==a.minFilter}function p(b,c,e,f){a.generateMipmap(b);d.get(c).__maxMipLevel=Math.log(Math.max(e,f))*Math.LOG2E}function k(c,d,e){if(!1===D)return d;if(null!==c){if(void 0!==a[c])return a[c];console.warn("THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format '"+
-c+"'")}c=d;6403===d&&(5126===e&&(c=33326),5131===e&&(c=33325),5121===e&&(c=33321));6407===d&&(5126===e&&(c=34837),5131===e&&(c=34843),5121===e&&(c=32849));6408===d&&(5126===e&&(c=34836),5131===e&&(c=34842),5121===e&&(c=32856));33325!==c&&33326!==c&&34842!==c&&34836!==c||b.get("EXT_color_buffer_float");return c}function r(a){return 1003===a||1004===a||1005===a?9728:9729}function t(b){b=b.target;b.removeEventListener("dispose",t);var c=d.get(b);void 0!==c.__webglInit&&(a.deleteTexture(c.__webglTexture),
-d.remove(b));b.isVideoTexture&&H.delete(b);g.memory.textures--}function m(b){b=b.target;b.removeEventListener("dispose",m);var c=d.get(b),e=d.get(b.texture);if(b){void 0!==e.__webglTexture&&a.deleteTexture(e.__webglTexture);b.depthTexture&&b.depthTexture.dispose();if(b.isWebGLCubeRenderTarget)for(e=0;6>e;e++)a.deleteFramebuffer(c.__webglFramebuffer[e]),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer[e]);else a.deleteFramebuffer(c.__webglFramebuffer),c.__webglDepthbuffer&&a.deleteRenderbuffer(c.__webglDepthbuffer),
-c.__webglMultisampledFramebuffer&&a.deleteFramebuffer(c.__webglMultisampledFramebuffer),c.__webglColorRenderbuffer&&a.deleteRenderbuffer(c.__webglColorRenderbuffer),c.__webglDepthRenderbuffer&&a.deleteRenderbuffer(c.__webglDepthRenderbuffer);d.remove(b.texture);d.remove(b)}g.memory.textures--}function x(a,b){var e=d.get(a);if(a.isVideoTexture){var f=g.render.frame;H.get(a)!==f&&(H.set(a,f),a.update())}if(0<a.version&&e.__version!==a.version)if(f=a.image,void 0===f)console.warn("THREE.WebGLRenderer: Texture marked for update but image is undefined");
-else if(!1===f.complete)console.warn("THREE.WebGLRenderer: Texture marked for update but image is incomplete");else{N(e,a,b);return}c.activeTexture(33984+b);c.bindTexture(3553,e.__webglTexture)}function B(b,e){if(6===b.image.length){var g=d.get(b);if(0<b.version&&g.__version!==b.version){Q(g,b);c.activeTexture(33984+e);c.bindTexture(34067,g.__webglTexture);a.pixelStorei(37440,b.flipY);var h=b&&(b.isCompressedTexture||b.image[0].isCompressedTexture),z=b.image[0]&&b.image[0].isDataTexture;e=[];for(var r=
-0;6>r;r++)e[r]=h||z?z?b.image[r].image:b.image[r]:l(b.image[r],!1,!0,C);r=e[0];var t=n(r)||D,m=f.convert(b.format),v=f.convert(b.type),x=k(b.internalFormat,m,v);u(34067,b,t);if(h){for(z=0;6>z;z++){var w=e[z].mipmaps;for(h=0;h<w.length;h++){var y=w[h];1023!==b.format&&1022!==b.format?null!==m?c.compressedTexImage2D(34069+z,h,x,y.width,y.height,0,y.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()"):c.texImage2D(34069+z,h,x,y.width,y.height,
-0,m,v,y.data)}}g.__maxMipLevel=w.length-1}else{w=b.mipmaps;for(h=0;6>h;h++)if(z)for(c.texImage2D(34069+h,0,x,e[h].width,e[h].height,0,m,v,e[h].data),y=0;y<w.length;y++){var B=w[y].image[h].image;c.texImage2D(34069+h,y+1,x,B.width,B.height,0,m,v,B.data)}else for(c.texImage2D(34069+h,0,x,m,v,e[h]),y=0;y<w.length;y++)c.texImage2D(34069+h,y+1,x,m,v,w[y].image[h]);g.__maxMipLevel=w.length}q(b,t)&&p(34067,b,r.width,r.height);g.__version=b.version;if(b.onUpdate)b.onUpdate(b)}else c.activeTexture(33984+e),
-c.bindTexture(34067,g.__webglTexture)}}function w(a,b){c.activeTexture(33984+b);c.bindTexture(34067,d.get(a).__webglTexture)}function u(c,f,g){g?(a.texParameteri(c,10242,F[f.wrapS]),a.texParameteri(c,10243,F[f.wrapT]),32879!==c&&35866!==c||a.texParameteri(c,32882,F[f.wrapR]),a.texParameteri(c,10240,U[f.magFilter]),a.texParameteri(c,10241,U[f.minFilter])):(a.texParameteri(c,10242,33071),a.texParameteri(c,10243,33071),32879!==c&&35866!==c||a.texParameteri(c,32882,33071),1001===f.wrapS&&1001===f.wrapT||
-console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping."),a.texParameteri(c,10240,r(f.magFilter)),a.texParameteri(c,10241,r(f.minFilter)),1003!==f.minFilter&&1006!==f.minFilter&&console.warn("THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter."));!(g=b.get("EXT_texture_filter_anisotropic"))||1015===f.type&&null===b.get("OES_texture_float_linear")||
-1016===f.type&&null===(D||b.get("OES_texture_half_float_linear"))||!(1<f.anisotropy||d.get(f).__currentAnisotropy)||(a.texParameterf(c,g.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(f.anisotropy,e.getMaxAnisotropy())),d.get(f).__currentAnisotropy=f.anisotropy)}function Q(b,c){void 0===b.__webglInit&&(b.__webglInit=!0,c.addEventListener("dispose",t),b.__webglTexture=a.createTexture(),g.memory.textures++)}function N(b,d,e){var g=3553;d.isDataTexture2DArray&&(g=35866);d.isDataTexture3D&&(g=32879);Q(b,d);c.activeTexture(33984+
-e);c.bindTexture(g,b.__webglTexture);a.pixelStorei(37440,d.flipY);a.pixelStorei(37441,d.premultiplyAlpha);a.pixelStorei(3317,d.unpackAlignment);e=D?!1:1001!==d.wrapS||1001!==d.wrapT||1003!==d.minFilter&&1006!==d.minFilter;e=e&&!1===n(d.image);e=l(d.image,e,!1,G);var h=n(e)||D,z=f.convert(d.format),r=f.convert(d.type),t=k(d.internalFormat,z,r);u(g,d,h);var m=d.mipmaps;if(d.isDepthTexture)t=6402,D?t=1015===d.type?36012:1014===d.type?33190:1020===d.type?35056:33189:1015===d.type&&console.error("WebGLRenderer: Floating point depth texture requires WebGL2."),
-1026===d.format&&6402===t&&1012!==d.type&&1014!==d.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture."),d.type=1012,r=f.convert(d.type)),1027===d.format&&6402===t&&(t=34041,1020!==d.type&&(console.warn("THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture."),d.type=1020,r=f.convert(d.type))),c.texImage2D(3553,0,t,e.width,e.height,0,z,r,null);else if(d.isDataTexture)if(0<m.length&&h){for(var v=0,x=m.length;v<x;v++){var w=
-m[v];c.texImage2D(3553,v,t,w.width,w.height,0,z,r,w.data)}d.generateMipmaps=!1;b.__maxMipLevel=m.length-1}else c.texImage2D(3553,0,t,e.width,e.height,0,z,r,e.data),b.__maxMipLevel=0;else if(d.isCompressedTexture){v=0;for(x=m.length;v<x;v++)w=m[v],1023!==d.format&&1022!==d.format?null!==z?c.compressedTexImage2D(3553,v,t,w.width,w.height,0,w.data):console.warn("THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()"):c.texImage2D(3553,v,t,w.width,w.height,0,z,
-r,w.data);b.__maxMipLevel=m.length-1}else if(d.isDataTexture2DArray)c.texImage3D(35866,0,t,e.width,e.height,e.depth,0,z,r,e.data),b.__maxMipLevel=0;else if(d.isDataTexture3D)c.texImage3D(32879,0,t,e.width,e.height,e.depth,0,z,r,e.data),b.__maxMipLevel=0;else if(0<m.length&&h){v=0;for(x=m.length;v<x;v++)w=m[v],c.texImage2D(3553,v,t,z,r,w);d.generateMipmaps=!1;b.__maxMipLevel=m.length-1}else c.texImage2D(3553,0,t,z,r,e),b.__maxMipLevel=0;q(d,h)&&p(g,d,e.width,e.height);b.__version=d.version;if(d.onUpdate)d.onUpdate(d)}
-function y(b,e,g,h){var l=f.convert(e.texture.format),n=f.convert(e.texture.type),q=k(e.texture.internalFormat,l,n);c.texImage2D(h,0,q,e.width,e.height,0,l,n,null);a.bindFramebuffer(36160,b);a.framebufferTexture2D(36160,g,h,d.get(e.texture).__webglTexture,0);a.bindFramebuffer(36160,null)}function I(b,c,d){a.bindRenderbuffer(36161,b);if(c.depthBuffer&&!c.stencilBuffer){var e=33189;d?((d=c.depthTexture)&&d.isDepthTexture&&(1015===d.type?e=36012:1014===d.type&&(e=33190)),d=A(c),a.renderbufferStorageMultisample(36161,
-d,e,c.width,c.height)):a.renderbufferStorage(36161,e,c.width,c.height);a.framebufferRenderbuffer(36160,36096,36161,b)}else c.depthBuffer&&c.stencilBuffer?(d?(d=A(c),a.renderbufferStorageMultisample(36161,d,35056,c.width,c.height)):a.renderbufferStorage(36161,34041,c.width,c.height),a.framebufferRenderbuffer(36160,33306,36161,b)):(b=f.convert(c.texture.format),e=f.convert(c.texture.type),b=k(c.texture.internalFormat,b,e),d?(d=A(c),a.renderbufferStorageMultisample(36161,d,b,c.width,c.height)):a.renderbufferStorage(36161,
-b,c.width,c.height));a.bindRenderbuffer(36161,null)}function A(a){return D&&a.isWebGLMultisampleRenderTarget?Math.min(E,a.samples):0}var D=e.isWebGL2,ha=e.maxTextures,C=e.maxCubemapSize,G=e.maxTextureSize,E=e.maxSamples,H=new WeakMap,K,J=!1;try{J="undefined"!==typeof OffscreenCanvas&&null!==(new OffscreenCanvas(1,1)).getContext("2d")}catch(dc){}var L=0,F={1E3:10497,1001:33071,1002:33648},U={1003:9728,1004:9984,1005:9986,1006:9729,1007:9985,1008:9987},O=!1,S=!1;this.allocateTextureUnit=function(){var a=
-L;a>=ha&&console.warn("THREE.WebGLTextures: Trying to use "+a+" texture units while this GPU supports only "+ha);L+=1;return a};this.resetTextureUnits=function(){L=0};this.setTexture2D=x;this.setTexture2DArray=function(a,b){var e=d.get(a);0<a.version&&e.__version!==a.version?N(e,a,b):(c.activeTexture(33984+b),c.bindTexture(35866,e.__webglTexture))};this.setTexture3D=function(a,b){var e=d.get(a);0<a.version&&e.__version!==a.version?N(e,a,b):(c.activeTexture(33984+b),c.bindTexture(32879,e.__webglTexture))};
-this.setTextureCube=B;this.setTextureCubeDynamic=w;this.setupRenderTarget=function(b){var e=d.get(b),h=d.get(b.texture);b.addEventListener("dispose",m);h.__webglTexture=a.createTexture();g.memory.textures++;var l=!0===b.isWebGLCubeRenderTarget,z=!0===b.isWebGLMultisampleRenderTarget,r=n(b)||D;!D||1022!==b.texture.format||1015!==b.texture.type&&1016!==b.texture.type||(b.texture.format=1023,console.warn("THREE.WebGLRenderer: Rendering to textures with RGB format is not supported. Using RGBA format instead."));
-if(l)for(e.__webglFramebuffer=[],z=0;6>z;z++)e.__webglFramebuffer[z]=a.createFramebuffer();else if(e.__webglFramebuffer=a.createFramebuffer(),z)if(D){e.__webglMultisampledFramebuffer=a.createFramebuffer();e.__webglColorRenderbuffer=a.createRenderbuffer();a.bindRenderbuffer(36161,e.__webglColorRenderbuffer);z=f.convert(b.texture.format);var t=f.convert(b.texture.type);z=k(b.texture.internalFormat,z,t);t=A(b);a.renderbufferStorageMultisample(36161,t,z,b.width,b.height);a.bindFramebuffer(36160,e.__webglMultisampledFramebuffer);
-a.framebufferRenderbuffer(36160,36064,36161,e.__webglColorRenderbuffer);a.bindRenderbuffer(36161,null);b.depthBuffer&&(e.__webglDepthRenderbuffer=a.createRenderbuffer(),I(e.__webglDepthRenderbuffer,b,!0));a.bindFramebuffer(36160,null)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.");if(l){c.bindTexture(34067,h.__webglTexture);u(34067,b.texture,r);for(h=0;6>h;h++)y(e.__webglFramebuffer[h],b,36064,34069+h);q(b.texture,r)&&p(34067,b.texture,b.width,
-b.height);c.bindTexture(34067,null)}else c.bindTexture(3553,h.__webglTexture),u(3553,b.texture,r),y(e.__webglFramebuffer,b,36064,3553),q(b.texture,r)&&p(3553,b.texture,b.width,b.height),c.bindTexture(3553,null);if(b.depthBuffer){e=d.get(b);r=!0===b.isWebGLCubeRenderTarget;if(b.depthTexture){if(r)throw Error("target.depthTexture not supported in Cube render targets");if(b&&b.isWebGLCubeRenderTarget)throw Error("Depth Texture with cube render targets is not supported");a.bindFramebuffer(36160,e.__webglFramebuffer);
-if(!b.depthTexture||!b.depthTexture.isDepthTexture)throw Error("renderTarget.depthTexture must be an instance of THREE.DepthTexture");d.get(b.depthTexture).__webglTexture&&b.depthTexture.image.width===b.width&&b.depthTexture.image.height===b.height||(b.depthTexture.image.width=b.width,b.depthTexture.image.height=b.height,b.depthTexture.needsUpdate=!0);x(b.depthTexture,0);e=d.get(b.depthTexture).__webglTexture;if(1026===b.depthTexture.format)a.framebufferTexture2D(36160,36096,3553,e,0);else if(1027===
-b.depthTexture.format)a.framebufferTexture2D(36160,33306,3553,e,0);else throw Error("Unknown depthTexture format");}else if(r)for(e.__webglDepthbuffer=[],r=0;6>r;r++)a.bindFramebuffer(36160,e.__webglFramebuffer[r]),e.__webglDepthbuffer[r]=a.createRenderbuffer(),I(e.__webglDepthbuffer[r],b,!1);else a.bindFramebuffer(36160,e.__webglFramebuffer),e.__webglDepthbuffer=a.createRenderbuffer(),I(e.__webglDepthbuffer,b,!1);a.bindFramebuffer(36160,null)}};this.updateRenderTargetMipmap=function(a){var b=a.texture,
-e=n(a)||D;if(q(b,e)){e=a.isWebGLCubeRenderTarget?34067:3553;var f=d.get(b).__webglTexture;c.bindTexture(e,f);p(e,b,a.width,a.height);c.bindTexture(e,null)}};this.updateMultisampleRenderTarget=function(b){if(b.isWebGLMultisampleRenderTarget)if(D){var c=d.get(b);a.bindFramebuffer(36008,c.__webglMultisampledFramebuffer);a.bindFramebuffer(36009,c.__webglFramebuffer);var e=b.width,f=b.height,g=16384;b.depthBuffer&&(g|=256);b.stencilBuffer&&(g|=1024);a.blitFramebuffer(0,0,e,f,0,0,e,f,g,9728);a.bindFramebuffer(36160,
-c.__webglMultisampledFramebuffer)}else console.warn("THREE.WebGLRenderer: WebGLMultisampleRenderTarget can only be used with WebGL2.")};this.safeSetTexture2D=function(a,b){a&&a.isWebGLRenderTarget&&(!1===O&&(console.warn("THREE.WebGLTextures.safeSetTexture2D: don't use render targets as textures. Use their .texture property instead."),O=!0),a=a.texture);x(a,b)};this.safeSetTextureCube=function(a,b){a&&a.isWebGLCubeRenderTarget&&(!1===S&&(console.warn("THREE.WebGLTextures.safeSetTextureCube: don't use cube render targets as textures. Use their .texture property instead."),
-S=!0),a=a.texture);a&&a.isCubeTexture||Array.isArray(a.image)&&6===a.image.length?B(a,b):w(a,b)}}function Uh(a,b,c){var d=c.isWebGL2;return{convert:function(a){if(1009===a)return 5121;if(1017===a)return 32819;if(1018===a)return 32820;if(1019===a)return 33635;if(1010===a)return 5120;if(1011===a)return 5122;if(1012===a)return 5123;if(1013===a)return 5124;if(1014===a)return 5125;if(1015===a)return 5126;if(1016===a){if(d)return 5131;var c=b.get("OES_texture_half_float");return null!==c?c.HALF_FLOAT_OES:
-null}if(1021===a)return 6406;if(1022===a)return 6407;if(1023===a)return 6408;if(1024===a)return 6409;if(1025===a)return 6410;if(1026===a)return 6402;if(1027===a)return 34041;if(1028===a)return 6403;if(1029===a)return 36244;if(1030===a)return 33319;if(1031===a)return 33320;if(1032===a)return 36248;if(1033===a)return 36249;if(33776===a||33777===a||33778===a||33779===a)if(c=b.get("WEBGL_compressed_texture_s3tc"),null!==c){if(33776===a)return c.COMPRESSED_RGB_S3TC_DXT1_EXT;if(33777===a)return c.COMPRESSED_RGBA_S3TC_DXT1_EXT;
-if(33778===a)return c.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(33779===a)return c.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(35840===a||35841===a||35842===a||35843===a)if(c=b.get("WEBGL_compressed_texture_pvrtc"),null!==c){if(35840===a)return c.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(35841===a)return c.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(35842===a)return c.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(35843===a)return c.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(36196===a)return c=b.get("WEBGL_compressed_texture_etc1"),
-null!==c?c.COMPRESSED_RGB_ETC1_WEBGL:null;if(37492===a||37496===a)if(c=b.get("WEBGL_compressed_texture_etc"),null!==c){if(37492===a)return c.COMPRESSED_RGB8_ETC2;if(37496===a)return c.COMPRESSED_RGBA8_ETC2_EAC}if(37808===a||37809===a||37810===a||37811===a||37812===a||37813===a||37814===a||37815===a||37816===a||37817===a||37818===a||37819===a||37820===a||37821===a||37840===a||37841===a||37842===a||37843===a||37844===a||37845===a||37846===a||37847===a||37848===a||37849===a||37850===a||37851===a||37852===
-a||37853===a)return c=b.get("WEBGL_compressed_texture_astc"),null!==c?a:null;if(36492===a)return c=b.get("EXT_texture_compression_bptc"),null!==c?a:null;if(1020===a){if(d)return 34042;c=b.get("WEBGL_depth_texture");return null!==c?c.UNSIGNED_INT_24_8_WEBGL:null}}}}function Ne(a){W.call(this);this.cameras=a||[]}function Gb(){C.call(this);this.type="Group"}function Md(){this._hand=this._grip=this._targetRay=null}function Vh(a,b){function c(a){var b=t.get(a.inputSource);b&&b.dispatchEvent({type:a.type})}
-function d(){t.forEach(function(a,b){a.disconnect(b)});t.clear();a.setFramebuffer(null);a.setRenderTarget(a.getRenderTarget());A.stop();h.isPresenting=!1;h.dispatchEvent({type:"sessionend"})}function e(a){q=a;A.setContext(l);A.start();h.isPresenting=!0;h.dispatchEvent({type:"sessionstart"})}function f(a){for(var b=l.inputSources,c=0;c<r.length;c++)t.set(b[c],r[c]);for(b=0;b<a.removed.length;b++){c=a.removed[b];var d=t.get(c);d&&(d.dispatchEvent({type:"disconnected",data:c}),t.delete(c))}for(b=0;b<
-a.added.length;b++)c=a.added[b],(d=t.get(c))&&d.dispatchEvent({type:"connected",data:c})}function g(a,b){null===b?a.matrixWorld.copy(a.matrix):a.matrixWorld.multiplyMatrices(b.matrixWorld,a.matrix);a.matrixWorldInverse.getInverse(a.matrixWorld)}var h=this,l=null,n=1,q=null,p="local-floor",k=null,r=[],t=new Map,v=new W;v.layers.enable(1);v.viewport=new S;var x=new W;x.layers.enable(2);x.viewport=new S;var B=[v,x],w=new Ne;w.layers.enable(1);w.layers.enable(2);var u=null,Q=null;this.isPresenting=this.enabled=
-!1;this.getController=function(a){var b=r[a];void 0===b&&(b=new Md,r[a]=b);return b.getTargetRaySpace()};this.getControllerGrip=function(a){var b=r[a];void 0===b&&(b=new Md,r[a]=b);return b.getGripSpace()};this.getHand=function(a){var b=r[a];void 0===b&&(b=new Md,r[a]=b);return b.getHandSpace()};this.setFramebufferScaleFactor=function(a){n=a;!0===h.isPresenting&&console.warn("THREE.WebXRManager: Cannot change framebuffer scale while presenting.")};this.setReferenceSpaceType=function(a){p=a;!0===h.isPresenting&&
-console.warn("THREE.WebXRManager: Cannot change reference space type while presenting.")};this.getReferenceSpace=function(){return q};this.getSession=function(){return l};this.setSession=function(a){l=a;null!==l&&(l.addEventListener("select",c),l.addEventListener("selectstart",c),l.addEventListener("selectend",c),l.addEventListener("squeeze",c),l.addEventListener("squeezestart",c),l.addEventListener("squeezeend",c),l.addEventListener("end",d),a=b.getContextAttributes(),!0!==a.xrCompatible&&b.makeXRCompatible(),
-a=new XRWebGLLayer(l,b,{antialias:a.antialias,alpha:a.alpha,depth:a.depth,stencil:a.stencil,framebufferScaleFactor:n}),l.updateRenderState({baseLayer:a}),l.requestReferenceSpace(p).then(e),l.addEventListener("inputsourceschange",f))};var N=new m,y=new m;this.getCamera=function(a){w.near=x.near=v.near=a.near;w.far=x.far=v.far=a.far;if(u!==w.near||Q!==w.far)l.updateRenderState({depthNear:w.near,depthFar:w.far}),u=w.near,Q=w.far;var b=a.parent,c=w.cameras;g(w,b);for(var d=0;d<c.length;d++)g(c[d],b);
-a.matrixWorld.copy(w.matrixWorld);a=a.children;b=0;for(d=a.length;b<d;b++)a[b].updateMatrixWorld(!0);if(2===c.length){N.setFromMatrixPosition(v.matrixWorld);y.setFromMatrixPosition(x.matrixWorld);c=N.distanceTo(y);var e=v.projectionMatrix.elements,f=x.projectionMatrix.elements,h=e[14]/(e[10]-1);a=e[14]/(e[10]+1);b=(e[9]+1)/e[5];d=(e[9]-1)/e[5];var n=(e[8]-1)/e[0],q=(f[8]+1)/f[0];f=h*n;e=h*q;q=c/(-n+q);n=q*-n;v.matrixWorld.decompose(w.position,w.quaternion,w.scale);w.translateX(n);w.translateZ(q);
-w.matrixWorld.compose(w.position,w.quaternion,w.scale);w.matrixWorldInverse.getInverse(w.matrixWorld);h+=q;q=a+q;w.projectionMatrix.makePerspective(f-n,e+(c-n),b*a/q*h,d*a/q*h,h,q)}else w.projectionMatrix.copy(v.projectionMatrix);return w};var I=null,A=new wh;A.setAnimationLoop(function(b,c){k=c.getViewerPose(q);if(null!==k){var d=k.views,e=l.renderState.baseLayer;a.setFramebuffer(e.framebuffer);var f=!1;d.length!==w.cameras.length&&(w.cameras.length=0,f=!0);for(var g=0;g<d.length;g++){var h=d[g],
-n=e.getViewport(h),p=B[g];p.matrix.fromArray(h.transform.matrix);p.projectionMatrix.fromArray(h.projectionMatrix);p.viewport.set(n.x,n.y,n.width,n.height);0===g&&w.matrix.copy(p.matrix);!0===f&&w.cameras.push(p)}}d=l.inputSources;for(e=0;e<r.length;e++)r[e].update(d[e],c,q);I&&I(b,c)});this.setAnimationLoop=function(a){I=a};this.dispose=function(){}}function Ck(a){function b(b,c,f){b.opacity.value=c.opacity;c.color&&b.diffuse.value.copy(c.color);c.emissive&&b.emissive.value.copy(c.emissive).multiplyScalar(c.emissiveIntensity);
-c.map&&(b.map.value=c.map);c.alphaMap&&(b.alphaMap.value=c.alphaMap);c.specularMap&&(b.specularMap.value=c.specularMap);if(f=c.envMap||f)b.envMap.value=f,b.flipEnvMap.value=f.isCubeTexture?-1:1,b.reflectivity.value=c.reflectivity,b.refractionRatio.value=c.refractionRatio,f=a.get(f).__maxMipLevel,void 0!==f&&(b.maxMipLevel.value=f);c.lightMap&&(b.lightMap.value=c.lightMap,b.lightMapIntensity.value=c.lightMapIntensity);c.aoMap&&(b.aoMap.value=c.aoMap,b.aoMapIntensity.value=c.aoMapIntensity);if(c.map)var d=
-c.map;else c.specularMap?d=c.specularMap:c.displacementMap?d=c.displacementMap:c.normalMap?d=c.normalMap:c.bumpMap?d=c.bumpMap:c.roughnessMap?d=c.roughnessMap:c.metalnessMap?d=c.metalnessMap:c.alphaMap?d=c.alphaMap:c.emissiveMap&&(d=c.emissiveMap);void 0!==d&&(d.isWebGLRenderTarget&&(d=d.texture),!0===d.matrixAutoUpdate&&d.updateMatrix(),b.uvTransform.value.copy(d.matrix));if(c.aoMap)var e=c.aoMap;else c.lightMap&&(e=c.lightMap);void 0!==e&&(e.isWebGLRenderTarget&&(e=e.texture),!0===e.matrixAutoUpdate&&
-e.updateMatrix(),b.uv2Transform.value.copy(e.matrix))}function c(a,b,c){a.roughness.value=b.roughness;a.metalness.value=b.metalness;b.roughnessMap&&(a.roughnessMap.value=b.roughnessMap);b.metalnessMap&&(a.metalnessMap.value=b.metalnessMap);b.emissiveMap&&(a.emissiveMap.value=b.emissiveMap);b.bumpMap&&(a.bumpMap.value=b.bumpMap,a.bumpScale.value=b.bumpScale,1===b.side&&(a.bumpScale.value*=-1));b.normalMap&&(a.normalMap.value=b.normalMap,a.normalScale.value.copy(b.normalScale),1===b.side&&a.normalScale.value.negate());
-b.displacementMap&&(a.displacementMap.value=b.displacementMap,a.displacementScale.value=b.displacementScale,a.displacementBias.value=b.displacementBias);if(b.envMap||c)a.envMapIntensity.value=b.envMapIntensity}return{refreshFogUniforms:function(a,b){a.fogColor.value.copy(b.color);b.isFog?(a.fogNear.value=b.near,a.fogFar.value=b.far):b.isFogExp2&&(a.fogDensity.value=b.density)},refreshMaterialUniforms:function(a,e,f,g,h){if(e.isMeshBasicMaterial)b(a,e);else if(e.isMeshLambertMaterial)b(a,e),e.emissiveMap&&
-(a.emissiveMap.value=e.emissiveMap);else if(e.isMeshToonMaterial)b(a,e),e.gradientMap&&(a.gradientMap.value=e.gradientMap),e.emissiveMap&&(a.emissiveMap.value=e.emissiveMap),e.bumpMap&&(a.bumpMap.value=e.bumpMap,a.bumpScale.value=e.bumpScale,1===e.side&&(a.bumpScale.value*=-1)),e.normalMap&&(a.normalMap.value=e.normalMap,a.normalScale.value.copy(e.normalScale),1===e.side&&a.normalScale.value.negate()),e.displacementMap&&(a.displacementMap.value=e.displacementMap,a.displacementScale.value=e.displacementScale,
-a.displacementBias.value=e.displacementBias);else if(e.isMeshPhongMaterial)b(a,e),a.specular.value.copy(e.specular),a.shininess.value=Math.max(e.shininess,1E-4),e.emissiveMap&&(a.emissiveMap.value=e.emissiveMap),e.bumpMap&&(a.bumpMap.value=e.bumpMap,a.bumpScale.value=e.bumpScale,1===e.side&&(a.bumpScale.value*=-1)),e.normalMap&&(a.normalMap.value=e.normalMap,a.normalScale.value.copy(e.normalScale),1===e.side&&a.normalScale.value.negate()),e.displacementMap&&(a.displacementMap.value=e.displacementMap,
-a.displacementScale.value=e.displacementScale,a.displacementBias.value=e.displacementBias);else if(e.isMeshStandardMaterial)b(a,e,f),e.isMeshPhysicalMaterial?(c(a,e,f),a.reflectivity.value=e.reflectivity,a.clearcoat.value=e.clearcoat,a.clearcoatRoughness.value=e.clearcoatRoughness,e.sheen&&a.sheen.value.copy(e.sheen),e.clearcoatMap&&(a.clearcoatMap.value=e.clearcoatMap),e.clearcoatRoughnessMap&&(a.clearcoatRoughnessMap.value=e.clearcoatRoughnessMap),e.clearcoatNormalMap&&(a.clearcoatNormalScale.value.copy(e.clearcoatNormalScale),
-a.clearcoatNormalMap.value=e.clearcoatNormalMap,1===e.side&&a.clearcoatNormalScale.value.negate()),a.transmission.value=e.transmission,e.transmissionMap&&(a.transmissionMap.value=e.transmissionMap)):c(a,e,f);else if(e.isMeshMatcapMaterial)b(a,e),e.matcap&&(a.matcap.value=e.matcap),e.bumpMap&&(a.bumpMap.value=e.bumpMap,a.bumpScale.value=e.bumpScale,1===e.side&&(a.bumpScale.value*=-1)),e.normalMap&&(a.normalMap.value=e.normalMap,a.normalScale.value.copy(e.normalScale),1===e.side&&a.normalScale.value.negate()),
-e.displacementMap&&(a.displacementMap.value=e.displacementMap,a.displacementScale.value=e.displacementScale,a.displacementBias.value=e.displacementBias);else if(e.isMeshDepthMaterial)b(a,e),e.displacementMap&&(a.displacementMap.value=e.displacementMap,a.displacementScale.value=e.displacementScale,a.displacementBias.value=e.displacementBias);else if(e.isMeshDistanceMaterial)b(a,e),e.displacementMap&&(a.displacementMap.value=e.displacementMap,a.displacementScale.value=e.displacementScale,a.displacementBias.value=
-e.displacementBias),a.referencePosition.value.copy(e.referencePosition),a.nearDistance.value=e.nearDistance,a.farDistance.value=e.farDistance;else if(e.isMeshNormalMaterial)b(a,e),e.bumpMap&&(a.bumpMap.value=e.bumpMap,a.bumpScale.value=e.bumpScale,1===e.side&&(a.bumpScale.value*=-1)),e.normalMap&&(a.normalMap.value=e.normalMap,a.normalScale.value.copy(e.normalScale),1===e.side&&a.normalScale.value.negate()),e.displacementMap&&(a.displacementMap.value=e.displacementMap,a.displacementScale.value=e.displacementScale,
-a.displacementBias.value=e.displacementBias);else if(e.isLineBasicMaterial)a.diffuse.value.copy(e.color),a.opacity.value=e.opacity,e.isLineDashedMaterial&&(a.dashSize.value=e.dashSize,a.totalSize.value=e.dashSize+e.gapSize,a.scale.value=e.scale);else if(e.isPointsMaterial){a.diffuse.value.copy(e.color);a.opacity.value=e.opacity;a.size.value=e.size*g;a.scale.value=.5*h;e.map&&(a.map.value=e.map);e.alphaMap&&(a.alphaMap.value=e.alphaMap);if(e.map)var d=e.map;else e.alphaMap&&(d=e.alphaMap);void 0!==
-d&&(!0===d.matrixAutoUpdate&&d.updateMatrix(),a.uvTransform.value.copy(d.matrix))}else if(e.isSpriteMaterial){a.diffuse.value.copy(e.color);a.opacity.value=e.opacity;a.rotation.value=e.rotation;e.map&&(a.map.value=e.map);e.alphaMap&&(a.alphaMap.value=e.alphaMap);if(e.map)var n=e.map;else e.alphaMap&&(n=e.alphaMap);void 0!==n&&(!0===n.matrixAutoUpdate&&n.updateMatrix(),a.uvTransform.value.copy(n.matrix))}else e.isShadowMaterial?(a.color.value.copy(e.color),a.opacity.value=e.opacity):e.isShaderMaterial&&
-(e.uniformsNeedUpdate=!1)}}}function Nd(a){function b(a,b){for(var c=0;c<a.length;c++){var d=r.getContext(a[c],b);if(null!==d)return d}return null}function c(){ma=new qj(M);Ha=new oj(M,ma,a);!1===Ha.isWebGL2&&(ma.get("WEBGL_depth_texture"),ma.get("OES_texture_float"),ma.get("OES_texture_half_float"),ma.get("OES_texture_half_float_linear"),ma.get("OES_standard_derivatives"),ma.get("OES_element_index_uint"),ma.get("OES_vertex_array_object"),ma.get("ANGLE_instanced_arrays"));ma.get("OES_texture_float_linear");
-sa=new Uh(M,ma,Ha);na=new Ak(M,ma,Ha);na.scissor(T.copy(ea).multiplyScalar(R).floor());na.viewport(V.copy(Z).multiplyScalar(R).floor());Y=new tj(M);Ia=new qk;ba=new Bk(M,ma,na,Ia,Ha,sa,Y);ua=new kj(M,Ha);ia=new mj(M,ma,ua,Ha);ya=new rj(M,ua,Y,ia);ta=new xj(M,ya,ua,Y);Ca=new wj(M);qa=new pk(D,ma,Ha,ia);Aa=new Ck(Ia);za=new tk(Ia);wa=new zk;ra=new lj(D,na,ta,ca);Da=new nj(M,ma,Y,Ha);Ea=new sj(M,ma,Y,Ha);Y.programs=qa.programs;D.capabilities=Ha;D.extensions=ma;D.properties=Ia;D.renderLists=za;D.state=
-na;D.info=Y}function d(a){a.preventDefault();console.log("THREE.WebGLRenderer: Context Lost.");C=!0}function e(){console.log("THREE.WebGLRenderer: Context Restored.");C=!1;c()}function f(a){a=a.target;a.removeEventListener("dispose",f);g(a);Ia.remove(a)}function g(a){a=Ia.get(a).program;void 0!==a&&qa.releaseProgram(a)}function h(a,b){a.render(function(a){D.renderBufferImmediate(a,b)})}function l(a,b,c,d){if(!1!==a.visible){if(a.layers.test(b.layers))if(a.isGroup)c=a.renderOrder;else if(a.isLOD)!0===
-a.autoUpdate&&a.update(b);else if(a.isLight)A.pushLight(a),a.castShadow&&A.pushShadow(a);else if(a.isSprite){if(!a.frustumCulled||oa.intersectsSprite(a)){d&&Fb.setFromMatrixPosition(a.matrixWorld).applyMatrix4(Ld);var e=ta.update(a),f=a.material;f.visible&&I.push(a,e,f,c,Fb.z,null)}}else if(a.isImmediateRenderObject)d&&Fb.setFromMatrixPosition(a.matrixWorld).applyMatrix4(Ld),I.push(a,null,a.material,c,Fb.z,null);else if(a.isMesh||a.isLine||a.isPoints)if(a.isSkinnedMesh&&a.skeleton.frame!==Y.render.frame&&
-(a.skeleton.update(),a.skeleton.frame=Y.render.frame),!a.frustumCulled||oa.intersectsObject(a))if(d&&Fb.setFromMatrixPosition(a.matrixWorld).applyMatrix4(Ld),e=ta.update(a),f=a.material,Array.isArray(f))for(var g=e.groups,h=0,n=g.length;h<n;h++){var q=g[h],p=f[q.materialIndex];p&&p.visible&&I.push(a,e,p,c,Fb.z,q)}else f.visible&&I.push(a,e,f,c,Fb.z,null);a=a.children;e=0;for(f=a.length;e<f;e++)l(a[e],b,c,d)}}function n(a,b,c){for(var d=!0===b.isScene?b.overrideMaterial:null,e=0,f=a.length;e<f;e++){var g=
-a[e],h=g.object,l=g.geometry,n=null===d?g.material:d;g=g.group;if(c.isArrayCamera){X=c;for(var p=c.cameras,k=0,r=p.length;k<r;k++){var z=p[k];h.layers.test(z.layers)&&(na.viewport(V.copy(z.viewport)),A.setupLights(z),q(h,b,z,l,n,g))}}else X=null,q(h,b,c,l,n,g)}}function q(a,b,c,d,e,f){a.onBeforeRender(D,b,c,d,e,f);A=wa.get(b,X||c);a.modelViewMatrix.multiplyMatrices(c.matrixWorldInverse,a.matrixWorld);a.normalMatrix.getNormalMatrix(a.modelViewMatrix);if(a.isImmediateRenderObject){var g=k(c,b,e,a);
-na.setMaterial(e);ia.reset();h(a,g)}else D.renderBufferDirect(c,b,d,e,a,f);a.onAfterRender(D,b,c,d,e,f);A=wa.get(b,X||c)}function p(a,b,c){!0!==b.isScene&&(b=ng);var d=Ia.get(a),e=A.state.lights,h=e.state.version;c=qa.getParameters(a,e.state,A.state.shadowsArray,b,W.numPlanes,W.numIntersection,c);var l=qa.getProgramCacheKey(c),n=d.program,q=!0;if(void 0===n)a.addEventListener("dispose",f);else if(n.cacheKey!==l)g(a);else{if(d.lightsStateVersion!==h)d.lightsStateVersion=h;else if(void 0!==c.shaderID)return;
-q=!1}q&&(c.uniforms=qa.getUniforms(a,c),a.onBeforeCompile(c,D),n=qa.acquireProgram(c,l),d.program=n,d.uniforms=c.uniforms,d.outputEncoding=c.outputEncoding);c=n.getAttributes();if(a.morphTargets)for(l=a.numSupportedMorphTargets=0;l<D.maxMorphTargets;l++)0<=c["morphTarget"+l]&&a.numSupportedMorphTargets++;if(a.morphNormals)for(l=a.numSupportedMorphNormals=0;l<D.maxMorphNormals;l++)0<=c["morphNormal"+l]&&a.numSupportedMorphNormals++;c=d.uniforms;if(!a.isShaderMaterial&&!a.isRawShaderMaterial||!0===
-a.clipping)d.numClippingPlanes=W.numPlanes,d.numIntersection=W.numIntersection,c.clippingPlanes=W.uniform;d.environment=a.isMeshStandardMaterial?b.environment:null;d.fog=b.fog;d.needsLights=a.isMeshLambertMaterial||a.isMeshToonMaterial||a.isMeshPhongMaterial||a.isMeshStandardMaterial||a.isShadowMaterial||a.isShaderMaterial&&!0===a.lights;d.lightsStateVersion=h;d.needsLights&&(c.ambientLightColor.value=e.state.ambient,c.lightProbe.value=e.state.probe,c.directionalLights.value=e.state.directional,c.directionalLightShadows.value=
-e.state.directionalShadow,c.spotLights.value=e.state.spot,c.spotLightShadows.value=e.state.spotShadow,c.rectAreaLights.value=e.state.rectArea,c.pointLights.value=e.state.point,c.pointLightShadows.value=e.state.pointShadow,c.hemisphereLights.value=e.state.hemi,c.directionalShadowMap.value=e.state.directionalShadowMap,c.directionalShadowMatrix.value=e.state.directionalShadowMatrix,c.spotShadowMap.value=e.state.spotShadowMap,c.spotShadowMatrix.value=e.state.spotShadowMatrix,c.pointShadowMap.value=e.state.pointShadowMap,
-c.pointShadowMatrix.value=e.state.pointShadowMatrix);a=d.program.getUniforms();a=Cb.seqWithValue(a.seq,c);d.uniformsList=a}function k(a,b,c,d){!0!==b.isScene&&(b=ng);ba.resetTextureUnits();var e=b.fog,f=c.isMeshStandardMaterial?b.environment:null,g=null===J?D.outputEncoding:J.texture.encoding,h=Ia.get(c),l=A.state.lights;!0!==pa||!0!==mg&&a===O||W.setState(c.clippingPlanes,c.clipIntersection,c.clipShadows,a,h,a===O&&c.id===F);c.version===h.__version?void 0===h.program?p(c,b,d):c.fog&&h.fog!==e?p(c,
-b,d):h.environment!==f?p(c,b,d):h.needsLights&&h.lightsStateVersion!==l.state.version?p(c,b,d):void 0===h.numClippingPlanes||h.numClippingPlanes===W.numPlanes&&h.numIntersection===W.numIntersection?h.outputEncoding!==g&&p(c,b,d):p(c,b,d):(p(c,b,d),h.__version=c.version);var n=!1,q=!1,k=!1;b=h.program;g=b.getUniforms();l=h.uniforms;na.useProgram(b.program)&&(k=q=n=!0);c.id!==F&&(F=c.id,q=!0);if(n||O!==a){g.setValue(M,"projectionMatrix",a.projectionMatrix);Ha.logarithmicDepthBuffer&&g.setValue(M,"logDepthBufFC",
-2/(Math.log(a.far+1)/Math.LN2));O!==a&&(O=a,k=q=!0);if(c.isShaderMaterial||c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshStandardMaterial||c.envMap)n=g.map.cameraPosition,void 0!==n&&n.setValue(M,Fb.setFromMatrixPosition(a.matrixWorld));(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial)&&g.setValue(M,"isOrthographic",!0===a.isOrthographicCamera);(c.isMeshPhongMaterial||c.isMeshToonMaterial||c.isMeshLambertMaterial||
-c.isMeshBasicMaterial||c.isMeshStandardMaterial||c.isShaderMaterial||c.isShadowMaterial||c.skinning)&&g.setValue(M,"viewMatrix",a.matrixWorldInverse)}if(c.skinning&&(g.setOptional(M,d,"bindMatrix"),g.setOptional(M,d,"bindMatrixInverse"),a=d.skeleton))if(n=a.bones,Ha.floatVertexTextures){if(void 0===a.boneTexture){n=Math.sqrt(4*n.length);n=P.ceilPowerOfTwo(n);n=Math.max(n,4);var r=new Float32Array(n*n*4);r.set(a.boneMatrices);var z=new bc(r,n,n,1023,1015);a.boneMatrices=r;a.boneTexture=z;a.boneTextureSize=
-n}g.setValue(M,"boneTexture",a.boneTexture,ba);g.setValue(M,"boneTextureSize",a.boneTextureSize)}else g.setOptional(M,a,"boneMatrices");if(q||h.receiveShadow!==d.receiveShadow)h.receiveShadow=d.receiveShadow,g.setValue(M,"receiveShadow",d.receiveShadow);q&&(g.setValue(M,"toneMappingExposure",D.toneMappingExposure),h.needsLights&&(q=k,l.ambientLightColor.needsUpdate=q,l.lightProbe.needsUpdate=q,l.directionalLights.needsUpdate=q,l.directionalLightShadows.needsUpdate=q,l.pointLights.needsUpdate=q,l.pointLightShadows.needsUpdate=
-q,l.spotLights.needsUpdate=q,l.spotLightShadows.needsUpdate=q,l.rectAreaLights.needsUpdate=q,l.hemisphereLights.needsUpdate=q),e&&c.fog&&Aa.refreshFogUniforms(l,e),Aa.refreshMaterialUniforms(l,c,f,R,da),void 0!==l.ltc_1&&(l.ltc_1.value=G.LTC_1),void 0!==l.ltc_2&&(l.ltc_2.value=G.LTC_2),Cb.upload(M,h.uniformsList,l,ba));c.isShaderMaterial&&!0===c.uniformsNeedUpdate&&(Cb.upload(M,h.uniformsList,l,ba),c.uniformsNeedUpdate=!1);c.isSpriteMaterial&&g.setValue(M,"center",d.center);g.setValue(M,"modelViewMatrix",
-d.modelViewMatrix);g.setValue(M,"normalMatrix",d.normalMatrix);g.setValue(M,"modelMatrix",d.matrixWorld);return b}a=a||{};var r=void 0!==a.canvas?a.canvas:document.createElementNS("http://www.w3.org/1999/xhtml","canvas"),t=void 0!==a.context?a.context:null,v=void 0!==a.alpha?a.alpha:!1,x=void 0!==a.depth?a.depth:!0,B=void 0!==a.stencil?a.stencil:!0,w=void 0!==a.antialias?a.antialias:!1,ca=void 0!==a.premultipliedAlpha?a.premultipliedAlpha:!0,Q=void 0!==a.preserveDrawingBuffer?a.preserveDrawingBuffer:
-!1,N=void 0!==a.powerPreference?a.powerPreference:"default",y=void 0!==a.failIfMajorPerformanceCaveat?a.failIfMajorPerformanceCaveat:!1,I=null,A=null;this.domElement=r;this.debug={checkShaderErrors:!0};this.sortObjects=this.autoClearStencil=this.autoClearDepth=this.autoClearColor=this.autoClear=!0;this.clippingPlanes=[];this.localClippingEnabled=!1;this.gammaFactor=2;this.outputEncoding=3E3;this.physicallyCorrectLights=!1;this.toneMapping=0;this.toneMappingExposure=1;this.maxMorphTargets=8;this.maxMorphNormals=
-4;var D=this,C=!1,E=null,H=0,K=0,J=null,L=null,F=-1,O=null,X=null,V=new S,T=new S,fa=null,aa=r.width,da=r.height,R=1,ja=null,ka=null,Z=new S(0,0,aa,da),ea=new S(0,0,aa,da),la=!1,oa=new Jc,W=new pj,pa=!1,mg=!1,Ld=new U,Fb=new m,ng={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},M=t;try{t={alpha:v,depth:x,stencil:B,antialias:w,premultipliedAlpha:ca,preserveDrawingBuffer:Q,powerPreference:N,failIfMajorPerformanceCaveat:y};r.addEventListener("webglcontextlost",d,!1);r.addEventListener("webglcontextrestored",
-e,!1);if(null===M&&(v=["webgl2","webgl","experimental-webgl"],!0===D.isWebGL1Renderer&&v.shift(),M=b(v,t),null===M)){if(b(v))throw Error("Error creating WebGL context with your selected attributes.");throw Error("Error creating WebGL context.");}void 0===M.getShaderPrecisionFormat&&(M.getShaderPrecisionFormat=function(){return{rangeMin:1,rangeMax:1,precision:1}})}catch(Wh){throw console.error("THREE.WebGLRenderer: "+Wh.message),Wh;}var ma,Ha,na,Y,Ia,ba,ua,ya,ta,qa,Aa,za,wa,ra,Ca,Da,Ea,sa,ia;c();var xa=
-new Vh(D,M);this.xr=xa;var Ga=new Th(D,ta,Ha.maxTextureSize);this.shadowMap=Ga;this.getContext=function(){return M};this.getContextAttributes=function(){return M.getContextAttributes()};this.forceContextLoss=function(){var a=ma.get("WEBGL_lose_context");a&&a.loseContext()};this.forceContextRestore=function(){var a=ma.get("WEBGL_lose_context");a&&a.restoreContext()};this.getPixelRatio=function(){return R};this.setPixelRatio=function(a){void 0!==a&&(R=a,this.setSize(aa,da,!1))};this.getSize=function(a){void 0===
-a&&(console.warn("WebGLRenderer: .getsize() now requires a Vector2 as an argument"),a=new u);return a.set(aa,da)};this.setSize=function(a,b,c){xa.isPresenting?console.warn("THREE.WebGLRenderer: Can't change size while VR device is presenting."):(aa=a,da=b,r.width=Math.floor(a*R),r.height=Math.floor(b*R),!1!==c&&(r.style.width=a+"px",r.style.height=b+"px"),this.setViewport(0,0,a,b))};this.getDrawingBufferSize=function(a){void 0===a&&(console.warn("WebGLRenderer: .getdrawingBufferSize() now requires a Vector2 as an argument"),
-a=new u);return a.set(aa*R,da*R).floor()};this.setDrawingBufferSize=function(a,b,c){aa=a;da=b;R=c;r.width=Math.floor(a*c);r.height=Math.floor(b*c);this.setViewport(0,0,a,b)};this.getCurrentViewport=function(a){void 0===a&&(console.warn("WebGLRenderer: .getCurrentViewport() now requires a Vector4 as an argument"),a=new S);return a.copy(V)};this.getViewport=function(a){return a.copy(Z)};this.setViewport=function(a,b,c,d){a.isVector4?Z.set(a.x,a.y,a.z,a.w):Z.set(a,b,c,d);na.viewport(V.copy(Z).multiplyScalar(R).floor())};
-this.getScissor=function(a){return a.copy(ea)};this.setScissor=function(a,b,c,d){a.isVector4?ea.set(a.x,a.y,a.z,a.w):ea.set(a,b,c,d);na.scissor(T.copy(ea).multiplyScalar(R).floor())};this.getScissorTest=function(){return la};this.setScissorTest=function(a){na.setScissorTest(la=a)};this.setOpaqueSort=function(a){ja=a};this.setTransparentSort=function(a){ka=a};this.getClearColor=function(){return ra.getClearColor()};this.setClearColor=function(){ra.setClearColor.apply(ra,arguments)};this.getClearAlpha=
-function(){return ra.getClearAlpha()};this.setClearAlpha=function(){ra.setClearAlpha.apply(ra,arguments)};this.clear=function(a,b,c){var d=0;if(void 0===a||a)d|=16384;if(void 0===b||b)d|=256;if(void 0===c||c)d|=1024;M.clear(d)};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(){r.removeEventListener("webglcontextlost",d,!1);r.removeEventListener("webglcontextrestored",e,!1);za.dispose();
-wa.dispose();Ia.dispose();ta.dispose();ia.dispose();xa.dispose();Ba.stop()};this.renderBufferImmediate=function(a,b){ia.initAttributes();var c=Ia.get(a);a.hasPositions&&!c.position&&(c.position=M.createBuffer());a.hasNormals&&!c.normal&&(c.normal=M.createBuffer());a.hasUvs&&!c.uv&&(c.uv=M.createBuffer());a.hasColors&&!c.color&&(c.color=M.createBuffer());b=b.getAttributes();a.hasPositions&&(M.bindBuffer(34962,c.position),M.bufferData(34962,a.positionArray,35048),ia.enableAttribute(b.position),M.vertexAttribPointer(b.position,
-3,5126,!1,0,0));a.hasNormals&&(M.bindBuffer(34962,c.normal),M.bufferData(34962,a.normalArray,35048),ia.enableAttribute(b.normal),M.vertexAttribPointer(b.normal,3,5126,!1,0,0));a.hasUvs&&(M.bindBuffer(34962,c.uv),M.bufferData(34962,a.uvArray,35048),ia.enableAttribute(b.uv),M.vertexAttribPointer(b.uv,2,5126,!1,0,0));a.hasColors&&(M.bindBuffer(34962,c.color),M.bufferData(34962,a.colorArray,35048),ia.enableAttribute(b.color),M.vertexAttribPointer(b.color,3,5126,!1,0,0));ia.disableUnusedAttributes();M.drawArrays(4,
-0,a.count);a.count=0};this.renderBufferDirect=function(a,b,c,d,e,f){null===b&&(b=ng);var g=e.isMesh&&0>e.matrixWorld.determinant();a=k(a,b,d,e);na.setMaterial(d,g);g=c.index;b=c.attributes.position;if(null===g){if(void 0===b||0===b.count)return}else if(0===g.count)return;var h=1;!0===d.wireframe&&(g=ya.getWireframeAttribute(c),h=2);(d.morphTargets||d.morphNormals)&&Ca.update(e,c,d,a);ia.setup(e,d,a,c,g);a=Da;if(null!==g){var l=ua.get(g);a=Ea;a.setIndex(l)}var n=c.drawRange.start*h,q=null!==f?f.start*
-h:0;l=Math.max(n,q);f=Math.max(0,Math.min(null!==g?g.count:b.count,n+c.drawRange.count*h,q+(null!==f?f.count*h:Infinity))-1-l+1);0!==f&&(e.isMesh?!0===d.wireframe?(na.setLineWidth(d.wireframeLinewidth*(null===J?R:1)),a.setMode(1)):a.setMode(4):e.isLine?(d=d.linewidth,void 0===d&&(d=1),na.setLineWidth(d*(null===J?R:1)),e.isLineSegments?a.setMode(1):e.isLineLoop?a.setMode(2):a.setMode(3)):e.isPoints?a.setMode(0):e.isSprite&&a.setMode(4),e.isInstancedMesh?a.renderInstances(l,f,e.count):c.isInstancedBufferGeometry?
-a.renderInstances(l,f,Math.min(c.instanceCount,c._maxInstanceCount)):a.render(l,f))};this.compile=function(a,b){A=wa.get(a,b);A.init();a.traverse(function(a){a.isLight&&(A.pushLight(a),a.castShadow&&A.pushShadow(a))});A.setupLights(b);var c=new WeakMap;a.traverse(function(b){var d=b.material;if(d)if(Array.isArray(d))for(var e=0;e<d.length;e++){var f=d[e];!1===c.has(f)&&(p(f,a,b),c.set(f))}else!1===c.has(d)&&(p(d,a,b),c.set(d))})};var Fa=null,Ba=new wh;Ba.setAnimationLoop(function(a){xa.isPresenting||
-Fa&&Fa(a)});"undefined"!==typeof window&&Ba.setContext(window);this.setAnimationLoop=function(a){Fa=a;xa.setAnimationLoop(a);null===a?Ba.stop():Ba.start()};this.render=function(a,b,c,d){if(void 0!==c){console.warn("THREE.WebGLRenderer.render(): the renderTarget argument has been removed. Use .setRenderTarget() instead.");var e=c}if(void 0!==d){console.warn("THREE.WebGLRenderer.render(): the forceClear argument has been removed. Use .clear() instead.");var f=d}if(void 0!==b&&!0!==b.isCamera)console.error("THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.");
-else if(!0!==C){ia.resetDefaultState();F=-1;O=null;!0===a.autoUpdate&&a.updateMatrixWorld();null===b.parent&&b.updateMatrixWorld();!0===xa.enabled&&!0===xa.isPresenting&&(b=xa.getCamera(b));if(!0===a.isScene)a.onBeforeRender(D,a,b,e||J);A=wa.get(a,b);A.init();Ld.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);oa.setFromProjectionMatrix(Ld);mg=this.localClippingEnabled;pa=W.init(this.clippingPlanes,mg,b);I=za.get(a,b);I.init();l(a,b,0,D.sortObjects);I.finish();!0===D.sortObjects&&I.sort(ja,
-ka);!0===pa&&W.beginShadows();Ga.render(A.state.shadowsArray,a,b);A.setupLights(b);!0===pa&&W.endShadows();!0===this.info.autoReset&&this.info.reset();void 0!==e&&this.setRenderTarget(e);ra.render(I,a,b,f);c=I.opaque;d=I.transparent;0<c.length&&n(c,a,b);0<d.length&&n(d,a,b);if(!0===a.isScene)a.onAfterRender(D,a,b);null!==J&&(ba.updateRenderTargetMipmap(J),ba.updateMultisampleRenderTarget(J));na.buffers.depth.setTest(!0);na.buffers.depth.setMask(!0);na.buffers.color.setMask(!0);na.setPolygonOffset(!1);
-A=I=null}};this.setFramebuffer=function(a){E!==a&&null===J&&M.bindFramebuffer(36160,a);E=a};this.getActiveCubeFace=function(){return H};this.getActiveMipmapLevel=function(){return K};this.getRenderTarget=function(){return J};this.setRenderTarget=function(a,b,c){J=a;H=b;K=c;a&&void 0===Ia.get(a).__webglFramebuffer&&ba.setupRenderTarget(a);var d=E,e=!1;a?(d=Ia.get(a).__webglFramebuffer,a.isWebGLCubeRenderTarget?(d=d[b||0],e=!0):d=a.isWebGLMultisampleRenderTarget?Ia.get(a).__webglMultisampledFramebuffer:
-d,V.copy(a.viewport),T.copy(a.scissor),fa=a.scissorTest):(V.copy(Z).multiplyScalar(R).floor(),T.copy(ea).multiplyScalar(R).floor(),fa=la);L!==d&&(M.bindFramebuffer(36160,d),L=d);na.viewport(V);na.scissor(T);na.setScissorTest(fa);e&&(a=Ia.get(a.texture),M.framebufferTexture2D(36160,36064,34069+(b||0),a.__webglTexture,c||0))};this.readRenderTargetPixels=function(a,b,c,d,e,f,g){if(a&&a.isWebGLRenderTarget){var h=Ia.get(a).__webglFramebuffer;a.isWebGLCubeRenderTarget&&void 0!==g&&(h=h[g]);if(h){g=!1;
-h!==L&&(M.bindFramebuffer(36160,h),g=!0);try{var l=a.texture,n=l.format,q=l.type;1023!==n&&sa.convert(n)!==M.getParameter(35739)?console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format."):1009===q||sa.convert(q)===M.getParameter(35738)||1015===q&&(Ha.isWebGL2||ma.get("OES_texture_float")||ma.get("WEBGL_color_buffer_float"))||1016===q&&(Ha.isWebGL2?ma.get("EXT_color_buffer_float"):ma.get("EXT_color_buffer_half_float"))?36053===M.checkFramebufferStatus(36160)?
-0<=b&&b<=a.width-d&&0<=c&&c<=a.height-e&&M.readPixels(b,c,d,e,sa.convert(n),sa.convert(q),f):console.error("THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete."):console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.")}finally{g&&M.bindFramebuffer(36160,L)}}}else console.error("THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.")};
-this.copyFramebufferToTexture=function(a,b,c){void 0===c&&(c=0);var d=Math.pow(2,-c),e=Math.floor(b.image.width*d);d=Math.floor(b.image.height*d);var f=sa.convert(b.format);ba.setTexture2D(b,0);M.copyTexImage2D(3553,c,f,a.x,a.y,e,d,0);na.unbindTexture()};this.copyTextureToTexture=function(a,b,c,d){void 0===d&&(d=0);var e=b.image.width,f=b.image.height,g=sa.convert(c.format),h=sa.convert(c.type);ba.setTexture2D(c,0);M.pixelStorei(37440,c.flipY);M.pixelStorei(37441,c.premultiplyAlpha);M.pixelStorei(3317,
-c.unpackAlignment);b.isDataTexture?M.texSubImage2D(3553,d,a.x,a.y,e,f,g,h,b.image.data):b.isCompressedTexture?M.compressedTexSubImage2D(3553,d,a.x,a.y,b.mipmaps[0].width,b.mipmaps[0].height,g,b.mipmaps[0].data):M.texSubImage2D(3553,d,a.x,a.y,g,h,b.image);0===d&&c.generateMipmaps&&M.generateMipmap(3553);na.unbindTexture()};this.initTexture=function(a){ba.setTexture2D(a,0);na.unbindTexture()};"undefined"!==typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("observe",{detail:this}))}
-function og(a){Nd.call(this,a)}function Oe(a,b){this.name="";this.color=new H(a);this.density=void 0!==b?b:2.5E-4}function Pe(a,b,c){this.name="";this.color=new H(a);this.near=void 0!==b?b:1;this.far=void 0!==c?c:1E3}function Ba(a,b){this.array=a;this.stride=b;this.count=void 0!==a?a.length/b:0;this.usage=35044;this.updateRange={offset:0,count:-1};this.version=0;this.uuid=P.generateUUID()}function Hb(a,b,c,d){this.name="";this.data=a;this.itemSize=b;this.offset=c;this.normalized=!0===d}function Ib(a){L.call(this);
-this.type="SpriteMaterial";this.color=new H(16777215);this.alphaMap=this.map=null;this.rotation=0;this.transparent=this.sizeAttenuation=!0;this.setValues(a)}function Od(a){C.call(this);this.type="Sprite";if(void 0===Nc){Nc=new E;var b=new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]);b=new Ba(b,5);Nc.setIndex([0,1,2,0,2,3]);Nc.setAttribute("position",new Hb(b,3,0,!1));Nc.setAttribute("uv",new Hb(b,2,3,!1))}this.geometry=Nc;this.material=void 0!==a?a:new Ib;this.center=new u(.5,
-.5)}function Qe(a,b,c,d,e,f){Oc.subVectors(a,c).addScalar(.5).multiply(d);void 0!==e?(Pd.x=f*Oc.x-e*Oc.y,Pd.y=e*Oc.x+f*Oc.y):Pd.copy(Oc);a.copy(b);a.x+=Pd.x;a.y+=Pd.y;a.applyMatrix4(Xh)}function Qd(){C.call(this);this._currentLevel=0;this.type="LOD";Object.defineProperties(this,{levels:{enumerable:!0,value:[]}});this.autoUpdate=!0}function Re(a,b){a&&a.isGeometry&&console.error("THREE.SkinnedMesh no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.");T.call(this,a,b);this.type="SkinnedMesh";
-this.bindMode="attached";this.bindMatrix=new U;this.bindMatrixInverse=new U}function Se(a,b){a=a||[];this.bones=a.slice(0);this.boneMatrices=new Float32Array(16*this.bones.length);this.frame=-1;if(void 0===b)this.calculateInverses();else if(this.bones.length===b.length)this.boneInverses=b.slice(0);else for(console.warn("THREE.Skeleton boneInverses is the wrong length."),this.boneInverses=[],a=0,b=this.bones.length;a<b;a++)this.boneInverses.push(new U)}function pg(){C.call(this);this.type="Bone"}function Te(a,
-b,c){T.call(this,a,b);this.instanceMatrix=new J(new Float32Array(16*c),16);this.count=c;this.frustumCulled=!1}function ja(a){L.call(this);this.type="LineBasicMaterial";this.color=new H(16777215);this.linewidth=1;this.linejoin=this.linecap="round";this.morphTargets=!1;this.setValues(a)}function Ja(a,b,c){1===c&&console.error("THREE.Line: parameter THREE.LinePieces no longer supported. Use THREE.LineSegments instead.");C.call(this);this.type="Line";this.geometry=void 0!==a?a:new E;this.material=void 0!==
-b?b:new ja;this.updateMorphTargets()}function ea(a,b){Ja.call(this,a,b);this.type="LineSegments"}function Ue(a,b){Ja.call(this,a,b);this.type="LineLoop"}function Va(a){L.call(this);this.type="PointsMaterial";this.color=new H(16777215);this.alphaMap=this.map=null;this.size=1;this.sizeAttenuation=!0;this.morphTargets=!1;this.setValues(a)}function Pc(a,b){C.call(this);this.type="Points";this.geometry=void 0!==a?a:new E;this.material=void 0!==b?b:new Va;this.updateMorphTargets()}function qg(a,b,c,d,e,
-f,g){var h=rg.distanceSqToPoint(a);h<c&&(c=new m,rg.closestPointToPoint(a,c),c.applyMatrix4(d),a=e.ray.origin.distanceTo(c),a<e.near||a>e.far||f.push({distance:a,distanceToRay:Math.sqrt(h),point:c,index:b,face:null,object:g}))}function sg(a,b,c,d,e,f,g,h,l){function n(){q.needsUpdate=!0;a.requestVideoFrameCallback(n)}V.call(this,a,b,c,d,e,f,g,h,l);this.format=void 0!==g?g:1022;this.minFilter=void 0!==f?f:1006;this.magFilter=void 0!==e?e:1006;this.generateMipmaps=!1;var q=this;"requestVideoFrameCallback"in
-a&&a.requestVideoFrameCallback(n)}function Qc(a,b,c,d,e,f,g,h,l,n,q,p){V.call(this,null,f,g,h,l,n,d,e,q,p);this.image={width:b,height:c};this.mipmaps=a;this.generateMipmaps=this.flipY=!1}function Rd(a,b,c,d,e,f,g,h,l){V.call(this,a,b,c,d,e,f,g,h,l);this.needsUpdate=!0}function Sd(a,b,c,d,e,f,g,h,l,n){n=void 0!==n?n:1026;if(1026!==n&&1027!==n)throw Error("DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat");void 0===c&&1026===n&&(c=1012);void 0===c&&1027===n&&(c=1020);
-V.call(this,null,d,e,f,g,h,n,c,l);this.image={width:a,height:b};this.magFilter=void 0!==g?g:1003;this.minFilter=void 0!==h?h:1003;this.generateMipmaps=this.flipY=!1}function Rc(a){E.call(this);this.type="WireframeGeometry";var b=[],c=[0,0],d={},e=["a","b","c"];if(a&&a.isGeometry){for(var f=a.faces,g=0,h=f.length;g<h;g++)for(var l=f[g],n=0;3>n;n++){var q=l[e[n]],p=l[e[(n+1)%3]];c[0]=Math.min(q,p);c[1]=Math.max(q,p);q=c[0]+","+c[1];void 0===d[q]&&(d[q]={index1:c[0],index2:c[1]})}for(var k in d)c=d[k],
-f=a.vertices[c.index1],b.push(f.x,f.y,f.z),f=a.vertices[c.index2],b.push(f.x,f.y,f.z)}else if(a&&a.isBufferGeometry)if(k=new m,null!==a.index){e=a.attributes.position;g=a.index;a=a.groups;0===a.length&&(a=[{start:0,count:g.count,materialIndex:0}]);h=0;for(l=a.length;h<l;++h)for(q=a[h],n=p=q.start,q=p+q.count;n<q;n+=3)for(p=0;3>p;p++){var r=g.getX(n+p),t=g.getX(n+(p+1)%3);c[0]=Math.min(r,t);c[1]=Math.max(r,t);r=c[0]+","+c[1];void 0===d[r]&&(d[r]={index1:c[0],index2:c[1]})}for(f in d)c=d[f],k.fromBufferAttribute(e,
-c.index1),b.push(k.x,k.y,k.z),k.fromBufferAttribute(e,c.index2),b.push(k.x,k.y,k.z)}else for(d=a.attributes.position,c=0,f=d.count/3;c<f;c++)for(a=0;3>a;a++)k.fromBufferAttribute(d,3*c+a),b.push(k.x,k.y,k.z),k.fromBufferAttribute(d,3*c+(a+1)%3),b.push(k.x,k.y,k.z);this.setAttribute("position",new A(b,3))}function Td(a,b,c){F.call(this);this.type="ParametricGeometry";this.parameters={func:a,slices:b,stacks:c};this.fromBufferGeometry(new Sc(a,b,c));this.mergeVertices()}function Sc(a,b,c){E.call(this);
-this.type="ParametricBufferGeometry";this.parameters={func:a,slices:b,stacks:c};var d=[],e=[],f=[],g=[],h=new m,l=new m,n=new m,q=new m,k=new m;3>a.length&&console.error("THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.");for(var z=b+1,r=0;r<=c;r++)for(var t=r/c,v=0;v<=b;v++){var x=v/b;a(x,t,l);e.push(l.x,l.y,l.z);0<=x-1E-5?(a(x-1E-5,t,n),q.subVectors(l,n)):(a(x+1E-5,t,n),q.subVectors(n,l));0<=t-1E-5?(a(x,t-1E-5,n),k.subVectors(l,n)):(a(x,t+1E-5,n),k.subVectors(n,l));
-h.crossVectors(q,k).normalize();f.push(h.x,h.y,h.z);g.push(x,t)}for(a=0;a<c;a++)for(h=0;h<b;h++)l=a*z+h+1,n=(a+1)*z+h+1,q=(a+1)*z+h,d.push(a*z+h,l,q),d.push(l,n,q);this.setIndex(d);this.setAttribute("position",new A(e,3));this.setAttribute("normal",new A(f,3));this.setAttribute("uv",new A(g,2))}function Ud(a,b,c,d){F.call(this);this.type="PolyhedronGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};this.fromBufferGeometry(new sa(a,b,c,d));this.mergeVertices()}function sa(a,b,c,d){function e(a){h.push(a.x,
-a.y,a.z)}function f(b,c){b*=3;c.x=a[b+0];c.y=a[b+1];c.z=a[b+2]}function g(a,b,c,d){0>d&&1===a.x&&(l[b]=a.x-1);0===c.x&&0===c.z&&(l[b]=d/2/Math.PI+.5)}E.call(this);this.type="PolyhedronBufferGeometry";this.parameters={vertices:a,indices:b,radius:c,detail:d};c=c||1;d=d||0;var h=[],l=[];(function(a){for(var c=new m,d=new m,g=new m,h=0;h<b.length;h+=3){f(b[h+0],c);f(b[h+1],d);f(b[h+2],g);for(var l=c,n=d,k=g,B=Math.pow(2,a),w=[],u=0;u<=B;u++){w[u]=[];for(var A=l.clone().lerp(k,u/B),N=n.clone().lerp(k,
-u/B),y=B-u,I=0;I<=y;I++)w[u][I]=0===I&&u===B?A:A.clone().lerp(N,I/y)}for(l=0;l<B;l++)for(n=0;n<2*(B-l)-1;n++)k=Math.floor(n/2),0===n%2?(e(w[l][k+1]),e(w[l+1][k]),e(w[l][k])):(e(w[l][k+1]),e(w[l+1][k+1]),e(w[l+1][k]))}})(d);(function(a){for(var b=new m,c=0;c<h.length;c+=3)b.x=h[c+0],b.y=h[c+1],b.z=h[c+2],b.normalize().multiplyScalar(a),h[c+0]=b.x,h[c+1]=b.y,h[c+2]=b.z})(c);(function(){for(var a=new m,b=0;b<h.length;b+=3)a.x=h[b+0],a.y=h[b+1],a.z=h[b+2],l.push(Math.atan2(a.z,-a.x)/2/Math.PI+.5,1-(Math.atan2(-a.y,
-Math.sqrt(a.x*a.x+a.z*a.z))/Math.PI+.5));a=new m;b=new m;for(var c=new m,d=new m,e=new u,f=new u,k=new u,x=0,B=0;x<h.length;x+=9,B+=6){a.set(h[x+0],h[x+1],h[x+2]);b.set(h[x+3],h[x+4],h[x+5]);c.set(h[x+6],h[x+7],h[x+8]);e.set(l[B+0],l[B+1]);f.set(l[B+2],l[B+3]);k.set(l[B+4],l[B+5]);d.copy(a).add(b).add(c).divideScalar(3);var w=Math.atan2(d.z,-d.x);g(e,B+0,a,w);g(f,B+2,b,w);g(k,B+4,c,w)}for(a=0;a<l.length;a+=6)b=l[a+0],c=l[a+2],d=l[a+4],e=Math.min(b,c,d),.9<Math.max(b,c,d)&&.1>e&&(.2>b&&(l[a+0]+=1),
-.2>c&&(l[a+2]+=1),.2>d&&(l[a+4]+=1))})();this.setAttribute("position",new A(h,3));this.setAttribute("normal",new A(h.slice(),3));this.setAttribute("uv",new A(l,2));0===d?this.computeVertexNormals():this.normalizeNormals()}function Vd(a,b){F.call(this);this.type="TetrahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Tc(a,b));this.mergeVertices()}function Tc(a,b){sa.call(this,[1,1,1,-1,-1,1,-1,1,-1,1,-1,-1],[2,1,0,0,3,2,1,3,0,2,3,1],a,b);this.type="TetrahedronBufferGeometry";
-this.parameters={radius:a,detail:b}}function Wd(a,b){F.call(this);this.type="OctahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new ec(a,b));this.mergeVertices()}function ec(a,b){sa.call(this,[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],a,b);this.type="OctahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Xd(a,b){F.call(this);this.type="IcosahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Uc(a,
-b));this.mergeVertices()}function Uc(a,b){var c=(1+Math.sqrt(5))/2;sa.call(this,[-1,c,0,1,c,0,-1,-c,0,1,-c,0,0,-1,c,0,1,c,0,-1,-c,0,1,-c,c,0,-1,c,0,1,-c,0,-1,-c,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],a,b);this.type="IcosahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Yd(a,b){F.call(this);this.type="DodecahedronGeometry";this.parameters={radius:a,detail:b};this.fromBufferGeometry(new Vc(a,
-b));this.mergeVertices()}function Vc(a,b){var c=(1+Math.sqrt(5))/2,d=1/c;sa.call(this,[-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,-d,-c,0,-d,c,0,d,-c,0,d,c,-d,-c,0,-d,c,0,d,-c,0,d,c,0,-c,0,-d,c,0,-d,-c,0,d,c,0,d],[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],a,
-b);this.type="DodecahedronBufferGeometry";this.parameters={radius:a,detail:b}}function Zd(a,b,c,d,e,f){F.call(this);this.type="TubeGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};void 0!==f&&console.warn("THREE.TubeGeometry: taper has been removed.");a=new fc(a,b,c,d,e);this.tangents=a.tangents;this.normals=a.normals;this.binormals=a.binormals;this.fromBufferGeometry(a);this.mergeVertices()}function fc(a,b,c,d,e){function f(e){q=a.getPointAt(e/b,q);var f=g.normals[e];
-e=g.binormals[e];for(var n=0;n<=d;n++){var p=n/d*Math.PI*2,r=Math.sin(p);p=-Math.cos(p);l.x=p*f.x+r*e.x;l.y=p*f.y+r*e.y;l.z=p*f.z+r*e.z;l.normalize();z.push(l.x,l.y,l.z);h.x=q.x+c*l.x;h.y=q.y+c*l.y;h.z=q.z+c*l.z;k.push(h.x,h.y,h.z)}}E.call(this);this.type="TubeBufferGeometry";this.parameters={path:a,tubularSegments:b,radius:c,radialSegments:d,closed:e};b=b||64;c=c||1;d=d||8;e=e||!1;var g=a.computeFrenetFrames(b,e);this.tangents=g.tangents;this.normals=g.normals;this.binormals=g.binormals;var h=new m,
-l=new m,n=new u,q=new m,k=[],z=[],r=[],t=[];(function(){for(var a=0;a<b;a++)f(a);f(!1===e?b:0);for(a=0;a<=b;a++)for(var c=0;c<=d;c++)n.x=a/b,n.y=c/d,r.push(n.x,n.y);for(a=1;a<=b;a++)for(c=1;c<=d;c++){var g=(d+1)*a+(c-1),h=(d+1)*a+c,l=(d+1)*(a-1)+c;t.push((d+1)*(a-1)+(c-1),g,l);t.push(g,h,l)}})();this.setIndex(t);this.setAttribute("position",new A(k,3));this.setAttribute("normal",new A(z,3));this.setAttribute("uv",new A(r,2))}function $d(a,b,c,d,e,f,g){F.call(this);this.type="TorusKnotGeometry";this.parameters=
-{radius:a,tube:b,tubularSegments:c,radialSegments:d,p:e,q:f};void 0!==g&&console.warn("THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.");this.fromBufferGeometry(new Wc(a,b,c,d,e,f));this.mergeVertices()}function Wc(a,b,c,d,e,f){function g(a,b,c,d,e){var f=Math.sin(a);b=c/b*a;c=Math.cos(b);e.x=d*(2+c)*.5*Math.cos(a);e.y=d*(2+c)*f*.5;e.z=d*Math.sin(b)*.5}E.call(this);this.type="TorusKnotBufferGeometry";this.parameters={radius:a,tube:b,tubularSegments:c,radialSegments:d,
-p:e,q:f};a=a||1;b=b||.4;c=Math.floor(c)||64;d=Math.floor(d)||8;e=e||2;f=f||3;for(var h=[],l=[],n=[],q=[],k=new m,z=new m,r=new m,t=new m,v=new m,x=new m,B=new m,w=0;w<=c;++w){var u=w/c*e*Math.PI*2;g(u,e,f,a,r);g(u+.01,e,f,a,t);x.subVectors(t,r);B.addVectors(t,r);v.crossVectors(x,B);B.crossVectors(v,x);v.normalize();B.normalize();for(u=0;u<=d;++u){var Q=u/d*Math.PI*2,N=-b*Math.cos(Q);Q=b*Math.sin(Q);k.x=r.x+(N*B.x+Q*v.x);k.y=r.y+(N*B.y+Q*v.y);k.z=r.z+(N*B.z+Q*v.z);l.push(k.x,k.y,k.z);z.subVectors(k,
-r).normalize();n.push(z.x,z.y,z.z);q.push(w/c);q.push(u/d)}}for(a=1;a<=c;a++)for(b=1;b<=d;b++)e=(d+1)*a+(b-1),f=(d+1)*a+b,k=(d+1)*(a-1)+b,h.push((d+1)*(a-1)+(b-1),e,k),h.push(e,f,k);this.setIndex(h);this.setAttribute("position",new A(l,3));this.setAttribute("normal",new A(n,3));this.setAttribute("uv",new A(q,2))}function ae(a,b,c,d,e){F.call(this);this.type="TorusGeometry";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};this.fromBufferGeometry(new Xc(a,b,c,d,e));this.mergeVertices()}
-function Xc(a,b,c,d,e){E.call(this);this.type="TorusBufferGeometry";this.parameters={radius:a,tube:b,radialSegments:c,tubularSegments:d,arc:e};a=a||1;b=b||.4;c=Math.floor(c)||8;d=Math.floor(d)||6;e=e||2*Math.PI;for(var f=[],g=[],h=[],l=[],n=new m,k=new m,p=new m,z=0;z<=c;z++)for(var r=0;r<=d;r++){var t=r/d*e,v=z/c*Math.PI*2;k.x=(a+b*Math.cos(v))*Math.cos(t);k.y=(a+b*Math.cos(v))*Math.sin(t);k.z=b*Math.sin(v);g.push(k.x,k.y,k.z);n.x=a*Math.cos(t);n.y=a*Math.sin(t);p.subVectors(k,n).normalize();h.push(p.x,
-p.y,p.z);l.push(r/d);l.push(z/c)}for(a=1;a<=c;a++)for(b=1;b<=d;b++)e=(d+1)*(a-1)+b-1,n=(d+1)*(a-1)+b,k=(d+1)*a+b,f.push((d+1)*a+b-1,e,k),f.push(e,n,k);this.setIndex(f);this.setAttribute("position",new A(g,3));this.setAttribute("normal",new A(h,3));this.setAttribute("uv",new A(l,2))}function Yh(a,b,c,d,e){for(var f,g=0,h=b,l=c-d;h<c;h+=d)g+=(a[l]-a[h])*(a[h+1]+a[l+1]),l=h;if(e===0<g)for(e=b;e<c;e+=d)f=Zh(e,a[e],a[e+1],f);else for(e=c-d;e>=b;e-=d)f=Zh(e,a[e],a[e+1],f);f&&Ve(f,f.next)&&(be(f),f=f.next);
-return f}function Jb(a,b){if(!a)return a;b||(b=a);do{var c=!1;if(a.steiner||!Ve(a,a.next)&&0!==Z(a.prev,a,a.next))a=a.next;else{be(a);a=b=a.prev;if(a===a.next)break;c=!0}}while(c||a!==b);return b}function ce(a,b,c,d,e,f,g){if(a){if(!g&&f){var h=a,l=h;do null===l.z&&(l.z=tg(l.x,l.y,d,e,f)),l.prevZ=l.prev,l=l.nextZ=l.next;while(l!==h);l.prevZ.nextZ=null;l.prevZ=null;h=l;var n,k,p,z,r=1;do{l=h;var t=h=null;for(k=0;l;){k++;var m=l;for(n=p=0;n<r&&(p++,m=m.nextZ,m);n++);for(z=r;0<p||0<z&&m;)0!==p&&(0===
-z||!m||l.z<=m.z)?(n=l,l=l.nextZ,p--):(n=m,m=m.nextZ,z--),t?t.nextZ=n:h=n,n.prevZ=t,t=n;l=m}t.nextZ=null;r*=2}while(1<k)}for(h=a;a.prev!==a.next;){l=a.prev;m=a.next;if(f)t=Dk(a,d,e,f);else a:if(t=a,k=t.prev,p=t,r=t.next,0<=Z(k,p,r))t=!1;else{for(n=t.next.next;n!==t.prev;){if(Yc(k.x,k.y,p.x,p.y,r.x,r.y,n.x,n.y)&&0<=Z(n.prev,n,n.next)){t=!1;break a}n=n.next}t=!0}if(t)b.push(l.i/c),b.push(a.i/c),b.push(m.i/c),be(a),h=a=m.next;else if(a=m,a===h){if(!g)ce(Jb(a),b,c,d,e,f,1);else if(1===g){a=Jb(a);g=b;h=
-c;l=a;do m=l.prev,t=l.next.next,!Ve(m,t)&&$h(m,l,l.next,t)&&de(m,t)&&de(t,m)&&(g.push(m.i/h),g.push(l.i/h),g.push(t.i/h),be(l),be(l.next),l=a=t),l=l.next;while(l!==a);a=Jb(l);ce(a,b,c,d,e,f,2)}else if(2===g)a:{g=a;do{for(h=g.next.next;h!==g.prev;){if(l=g.i!==h.i){l=g;m=h;if(t=l.next.i!==m.i&&l.prev.i!==m.i){b:{t=l;do{if(t.i!==l.i&&t.next.i!==l.i&&t.i!==m.i&&t.next.i!==m.i&&$h(t,t.next,l,m)){t=!0;break b}t=t.next}while(t!==l);t=!1}t=!t}if(t){if(t=de(l,m)&&de(m,l)){t=l;k=!1;p=(l.x+m.x)/2;r=(l.y+m.y)/
-2;do t.y>r!==t.next.y>r&&t.next.y!==t.y&&p<(t.next.x-t.x)*(r-t.y)/(t.next.y-t.y)+t.x&&(k=!k),t=t.next;while(t!==l);t=k}t=t&&(Z(l.prev,l,m.prev)||Z(l,m.prev,m))||Ve(l,m)&&0<Z(l.prev,l,l.next)&&0<Z(m.prev,m,m.next)}l=t}if(l){a=ai(g,h);g=Jb(g,g.next);a=Jb(a,a.next);ce(g,b,c,d,e,f);ce(a,b,c,d,e,f);break a}h=h.next}g=g.next}while(g!==a)}break}}}}function Dk(a,b,c,d){var e=a.prev,f=a.next;if(0<=Z(e,a,f))return!1;var g=e.x>a.x?e.x>f.x?e.x:f.x:a.x>f.x?a.x:f.x,h=e.y>a.y?e.y>f.y?e.y:f.y:a.y>f.y?a.y:f.y,l=tg(e.x<
-a.x?e.x<f.x?e.x:f.x:a.x<f.x?a.x:f.x,e.y<a.y?e.y<f.y?e.y:f.y:a.y<f.y?a.y:f.y,b,c,d);b=tg(g,h,b,c,d);c=a.prevZ;for(d=a.nextZ;c&&c.z>=l&&d&&d.z<=b;){if(c!==a.prev&&c!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=Z(c.prev,c,c.next))return!1;c=c.prevZ;if(d!==a.prev&&d!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=Z(d.prev,d,d.next))return!1;d=d.nextZ}for(;c&&c.z>=l;){if(c!==a.prev&&c!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,c.x,c.y)&&0<=Z(c.prev,c,c.next))return!1;c=c.prevZ}for(;d&&d.z<=b;){if(d!==
-a.prev&&d!==a.next&&Yc(e.x,e.y,a.x,a.y,f.x,f.y,d.x,d.y)&&0<=Z(d.prev,d,d.next))return!1;d=d.nextZ}return!0}function Ek(a,b){return a.x-b.x}function Fk(a,b){var c=b,d=a.x,e=a.y,f=-Infinity;do{if(e<=c.y&&e>=c.next.y&&c.next.y!==c.y){var g=c.x+(e-c.y)*(c.next.x-c.x)/(c.next.y-c.y);if(g<=d&&g>f){f=g;if(g===d){if(e===c.y)return c;if(e===c.next.y)return c.next}var h=c.x<c.next.x?c:c.next}}c=c.next}while(c!==b);if(!h)return null;if(d===f)return h;b=h;g=h.x;var l=h.y,n=Infinity;c=h;do{if(d>=c.x&&c.x>=g&&
-d!==c.x&&Yc(e<l?d:f,e,g,l,e<l?f:d,e,c.x,c.y)){var k=Math.abs(e-c.y)/(d-c.x);var p;if((p=de(c,a))&&!(p=k<n)&&(p=k===n)&&!(p=c.x>h.x)&&(p=c.x===h.x)){p=h;var m=c;p=0>Z(p.prev,p,m.prev)&&0>Z(m.next,p,p.next)}p&&(h=c,n=k)}c=c.next}while(c!==b);return h}function tg(a,b,c,d,e){a=32767*(a-c)*e;b=32767*(b-d)*e;a=(a|a<<8)&16711935;a=(a|a<<4)&252645135;a=(a|a<<2)&858993459;b=(b|b<<8)&16711935;b=(b|b<<4)&252645135;b=(b|b<<2)&858993459;return(a|a<<1)&1431655765|((b|b<<1)&1431655765)<<1}function Gk(a){var b=a,
-c=a;do{if(b.x<c.x||b.x===c.x&&b.y<c.y)c=b;b=b.next}while(b!==a);return c}function Yc(a,b,c,d,e,f,g,h){return 0<=(e-g)*(b-h)-(a-g)*(f-h)&&0<=(a-g)*(d-h)-(c-g)*(b-h)&&0<=(c-g)*(f-h)-(e-g)*(d-h)}function Z(a,b,c){return(b.y-a.y)*(c.x-b.x)-(b.x-a.x)*(c.y-b.y)}function Ve(a,b){return a.x===b.x&&a.y===b.y}function $h(a,b,c,d){var e=We(Z(a,b,c)),f=We(Z(a,b,d)),g=We(Z(c,d,a)),h=We(Z(c,d,b));return e!==f&&g!==h||0===e&&Xe(a,c,b)||0===f&&Xe(a,d,b)||0===g&&Xe(c,a,d)||0===h&&Xe(c,b,d)?!0:!1}function Xe(a,b,c){return b.x<=
-Math.max(a.x,c.x)&&b.x>=Math.min(a.x,c.x)&&b.y<=Math.max(a.y,c.y)&&b.y>=Math.min(a.y,c.y)}function We(a){return 0<a?1:0>a?-1:0}function de(a,b){return 0>Z(a.prev,a,a.next)?0<=Z(a,b,a.next)&&0<=Z(a,a.prev,b):0>Z(a,b,a.prev)||0>Z(a,a.next,b)}function ai(a,b){var c=new ug(a.i,a.x,a.y),d=new ug(b.i,b.x,b.y),e=a.next,f=b.prev;a.next=b;b.prev=a;c.next=e;e.prev=c;d.next=c;c.prev=d;f.next=d;d.prev=f;return d}function Zh(a,b,c,d){a=new ug(a,b,c);d?(a.next=d.next,a.prev=d,d.next.prev=a,d.next=a):(a.prev=a,
-a.next=a);return a}function be(a){a.next.prev=a.prev;a.prev.next=a.next;a.prevZ&&(a.prevZ.nextZ=a.nextZ);a.nextZ&&(a.nextZ.prevZ=a.prevZ)}function ug(a,b,c){this.i=a;this.x=b;this.y=c;this.nextZ=this.prevZ=this.z=this.next=this.prev=null;this.steiner=!1}function bi(a){var b=a.length;2<b&&a[b-1].equals(a[0])&&a.pop()}function ci(a,b){for(var c=0;c<b.length;c++)a.push(b[c].x),a.push(b[c].y)}function gc(a,b){F.call(this);this.type="ExtrudeGeometry";this.parameters={shapes:a,options:b};this.fromBufferGeometry(new eb(a,
-b));this.mergeVertices()}function eb(a,b){function c(a){function c(a,b,c){b||console.error("THREE.ExtrudeGeometry: vec does not exist");return b.clone().multiplyScalar(c).add(a)}function g(a,b,c){var d=a.x-b.x;var e=a.y-b.y;var f=c.x-a.x;var g=c.y-a.y,h=d*d+e*e;if(Math.abs(d*g-e*f)>Number.EPSILON){var l=Math.sqrt(h),n=Math.sqrt(f*f+g*g);h=b.x-e/l;b=b.y+d/l;g=((c.x-g/n-h)*g-(c.y+f/n-b)*f)/(d*g-e*f);f=h+d*g-a.x;d=b+e*g-a.y;e=f*f+d*d;if(2>=e)return new u(f,d);e=Math.sqrt(e/2)}else a=!1,d>Number.EPSILON?
-f>Number.EPSILON&&(a=!0):d<-Number.EPSILON?f<-Number.EPSILON&&(a=!0):Math.sign(e)===Math.sign(g)&&(a=!0),a?(f=-e,e=Math.sqrt(h)):(f=d,d=e,e=Math.sqrt(h/2));return new u(f/e,d/e)}function h(a,b){for(var c=a.length;0<=--c;){var f=c,g=c-1;0>g&&(g=a.length-1);for(var h=0,l=w+2*C;h<l;h++){var n=X*h,k=X*(h+1),q=b+g+n,p=b+g+k;k=b+f+k;t(b+f+n);t(q);t(k);t(q);t(p);t(k);n=e.length/3;n=G.generateSideWallUV(d,e,n-6,n-3,n-2,n-1);v(n[0]);v(n[1]);v(n[3]);v(n[1]);v(n[2]);v(n[3])}}}function l(a,b,c){x.push(a);x.push(b);
-x.push(c)}function k(a,b,c){t(a);t(b);t(c);a=e.length/3;a=G.generateTopUV(d,e,a-3,a-2,a-1);v(a[0]);v(a[1]);v(a[2])}function t(a){e.push(x[3*a]);e.push(x[3*a+1]);e.push(x[3*a+2])}function v(a){f.push(a.x);f.push(a.y)}var x=[],B=void 0!==b.curveSegments?b.curveSegments:12,w=void 0!==b.steps?b.steps:1,A=void 0!==b.depth?b.depth:100,Q=void 0!==b.bevelEnabled?b.bevelEnabled:!0,N=void 0!==b.bevelThickness?b.bevelThickness:6,y=void 0!==b.bevelSize?b.bevelSize:N-2,I=void 0!==b.bevelOffset?b.bevelOffset:0,
-C=void 0!==b.bevelSegments?b.bevelSegments:3,D=b.extrudePath,G=void 0!==b.UVGenerator?b.UVGenerator:Hk;void 0!==b.amount&&(console.warn("THREE.ExtrudeBufferGeometry: amount has been renamed to depth."),A=b.amount);var E=!1;if(D){var H=D.getSpacedPoints(w);E=!0;Q=!1;var J=D.computeFrenetFrames(w,!1);var K=new m;var L=new m;var F=new m}Q||(I=y=N=C=0);a=a.extractPoints(B);D=a.shape;var P=a.holes;if(!pb.isClockWise(D))for(D=D.reverse(),a=0,B=P.length;a<B;a++){var O=P[a];pb.isClockWise(O)&&(P[a]=O.reverse())}var U=
-pb.triangulateShape(D,P),V=D;a=0;for(B=P.length;a<B;a++)D=D.concat(P[a]);var X=D.length,aa=U.length;a=[];B=0;O=V.length;for(var da=O-1,R=B+1;B<O;B++,da++,R++)da===O&&(da=0),R===O&&(R=0),a[B]=g(V[B],V[da],V[R]);B=[];O=a.concat();R=0;for(var S=P.length;R<S;R++){var T=P[R];da=[];for(var W=0,Y=T.length,ba=Y-1,Z=W+1;W<Y;W++,ba++,Z++)ba===Y&&(ba=0),Z===Y&&(Z=0),da[W]=g(T[W],T[ba],T[Z]);B.push(da);O=O.concat(da)}for(R=0;R<C;R++){da=R/C;S=N*Math.cos(da*Math.PI/2);T=y*Math.sin(da*Math.PI/2)+I;da=0;for(W=V.length;da<
-W;da++)Y=c(V[da],a[da],T),l(Y.x,Y.y,-S);W=0;for(Y=P.length;W<Y;W++){ba=P[W];da=B[W];Z=0;for(var fa=ba.length;Z<fa;Z++){var ea=c(ba[Z],da[Z],T);l(ea.x,ea.y,-S)}}}da=y+I;for(R=0;R<X;R++)S=Q?c(D[R],O[R],da):D[R],E?(L.copy(J.normals[0]).multiplyScalar(S.x),K.copy(J.binormals[0]).multiplyScalar(S.y),F.copy(H[0]).add(L).add(K),l(F.x,F.y,F.z)):l(S.x,S.y,0);for(R=1;R<=w;R++)for(S=0;S<X;S++)T=Q?c(D[S],O[S],da):D[S],E?(L.copy(J.normals[R]).multiplyScalar(T.x),K.copy(J.binormals[R]).multiplyScalar(T.y),F.copy(H[R]).add(L).add(K),
-l(F.x,F.y,F.z)):l(T.x,T.y,A/w*R);for(J=C-1;0<=J;J--){L=J/C;K=N*Math.cos(L*Math.PI/2);L=y*Math.sin(L*Math.PI/2)+I;F=0;for(D=V.length;F<D;F++)O=c(V[F],a[F],L),l(O.x,O.y,A+K);F=0;for(D=P.length;F<D;F++)for(O=P[F],da=B[F],R=0,S=O.length;R<S;R++)T=c(O[R],da[R],L),E?l(T.x,T.y+H[w-1].y,H[w-1].x+K):l(T.x,T.y,A+K)}(function(){var a=e.length/3;if(Q){for(var b=0*X,c=0;c<aa;c++){var f=U[c];k(f[2]+b,f[1]+b,f[0]+b)}b=X*(w+2*C);for(c=0;c<aa;c++)f=U[c],k(f[0]+b,f[1]+b,f[2]+b)}else{for(b=0;b<aa;b++)c=U[b],k(c[2],
-c[1],c[0]);for(b=0;b<aa;b++)c=U[b],k(c[0]+X*w,c[1]+X*w,c[2]+X*w)}d.addGroup(a,e.length/3-a,0)})();(function(){var a=e.length/3,b=0;h(V,b);b+=V.length;for(var c=0,f=P.length;c<f;c++){var g=P[c];h(g,b);b+=g.length}d.addGroup(a,e.length/3-a,1)})()}E.call(this);this.type="ExtrudeBufferGeometry";this.parameters={shapes:a,options:b};a=Array.isArray(a)?a:[a];for(var d=this,e=[],f=[],g=0,h=a.length;g<h;g++)c(a[g]);this.setAttribute("position",new A(e,3));this.setAttribute("uv",new A(f,2));this.computeVertexNormals()}
-function di(a,b,c){c.shapes=[];if(Array.isArray(a))for(var d=0,e=a.length;d<e;d++)c.shapes.push(a[d].uuid);else c.shapes.push(a.uuid);void 0!==b.extrudePath&&(c.options.extrudePath=b.extrudePath.toJSON());return c}function ee(a,b){F.call(this);this.type="TextGeometry";this.parameters={text:a,parameters:b};this.fromBufferGeometry(new Zc(a,b));this.mergeVertices()}function Zc(a,b){b=b||{};var c=b.font;if(!c||!c.isFont)return console.error("THREE.TextGeometry: font parameter is not an instance of THREE.Font."),
-new F;a=c.generateShapes(a,b.size);b.depth=void 0!==b.height?b.height:50;void 0===b.bevelThickness&&(b.bevelThickness=10);void 0===b.bevelSize&&(b.bevelSize=8);void 0===b.bevelEnabled&&(b.bevelEnabled=!1);eb.call(this,a,b);this.type="TextBufferGeometry"}function fe(a,b,c,d,e,f,g){F.call(this);this.type="SphereGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};this.fromBufferGeometry(new hc(a,b,c,d,e,f,g));this.mergeVertices()}function hc(a,
-b,c,d,e,f,g){E.call(this);this.type="SphereBufferGeometry";this.parameters={radius:a,widthSegments:b,heightSegments:c,phiStart:d,phiLength:e,thetaStart:f,thetaLength:g};a=a||1;b=Math.max(3,Math.floor(b)||8);c=Math.max(2,Math.floor(c)||6);d=void 0!==d?d:0;e=void 0!==e?e:2*Math.PI;f=void 0!==f?f:0;g=void 0!==g?g:Math.PI;for(var h=Math.min(f+g,Math.PI),l=0,n=[],k=new m,p=new m,z=[],r=[],t=[],v=[],x=0;x<=c;x++){var B=[],w=x/c,u=0;0==x&&0==f?u=.5/b:x==c&&h==Math.PI&&(u=-.5/b);for(var Q=0;Q<=b;Q++){var N=
-Q/b;k.x=-a*Math.cos(d+N*e)*Math.sin(f+w*g);k.y=a*Math.cos(f+w*g);k.z=a*Math.sin(d+N*e)*Math.sin(f+w*g);r.push(k.x,k.y,k.z);p.copy(k).normalize();t.push(p.x,p.y,p.z);v.push(N+u,1-w);B.push(l++)}n.push(B)}for(a=0;a<c;a++)for(d=0;d<b;d++)e=n[a][d+1],g=n[a][d],l=n[a+1][d],k=n[a+1][d+1],(0!==a||0<f)&&z.push(e,g,k),(a!==c-1||h<Math.PI)&&z.push(g,l,k);this.setIndex(z);this.setAttribute("position",new A(r,3));this.setAttribute("normal",new A(t,3));this.setAttribute("uv",new A(v,2))}function ge(a,b,c,d,e,
-f){F.call(this);this.type="RingGeometry";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};this.fromBufferGeometry(new $c(a,b,c,d,e,f));this.mergeVertices()}function $c(a,b,c,d,e,f){E.call(this);this.type="RingBufferGeometry";this.parameters={innerRadius:a,outerRadius:b,thetaSegments:c,phiSegments:d,thetaStart:e,thetaLength:f};a=a||.5;b=b||1;e=void 0!==e?e:0;f=void 0!==f?f:2*Math.PI;c=void 0!==c?Math.max(3,c):8;d=void 0!==d?Math.max(1,d):1;var g=
-[],h=[],l=[],n=[],k=a;a=(b-a)/d;for(var p=new m,z=new u,r=0;r<=d;r++){for(var t=0;t<=c;t++){var v=e+t/c*f;p.x=k*Math.cos(v);p.y=k*Math.sin(v);h.push(p.x,p.y,p.z);l.push(0,0,1);z.x=(p.x/b+1)/2;z.y=(p.y/b+1)/2;n.push(z.x,z.y)}k+=a}for(b=0;b<d;b++)for(e=b*(c+1),f=0;f<c;f++)k=f+e,a=k+c+1,p=k+c+2,z=k+1,g.push(k,a,z),g.push(a,p,z);this.setIndex(g);this.setAttribute("position",new A(h,3));this.setAttribute("normal",new A(l,3));this.setAttribute("uv",new A(n,2))}function he(a,b,c,d){F.call(this);this.type=
-"LatheGeometry";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};this.fromBufferGeometry(new ad(a,b,c,d));this.mergeVertices()}function ad(a,b,c,d){E.call(this);this.type="LatheBufferGeometry";this.parameters={points:a,segments:b,phiStart:c,phiLength:d};b=Math.floor(b)||12;c=c||0;d=d||2*Math.PI;d=P.clamp(d,0,2*Math.PI);for(var e=[],f=[],g=[],h=1/b,l=new m,n=new u,k=0;k<=b;k++){var p=c+k*h*d,z=Math.sin(p);p=Math.cos(p);for(var r=0;r<=a.length-1;r++)l.x=a[r].x*z,l.y=a[r].y,l.z=a[r].x*p,
-f.push(l.x,l.y,l.z),n.x=k/b,n.y=r/(a.length-1),g.push(n.x,n.y)}for(c=0;c<b;c++)for(h=0;h<a.length-1;h++)l=h+c*a.length,n=l+a.length,k=l+a.length+1,z=l+1,e.push(l,n,z),e.push(n,k,z);this.setIndex(e);this.setAttribute("position",new A(f,3));this.setAttribute("uv",new A(g,2));this.computeVertexNormals();if(d===2*Math.PI)for(d=this.attributes.normal.array,e=new m,f=new m,g=new m,b=b*a.length*3,h=c=0;c<a.length;c++,h+=3)e.x=d[h+0],e.y=d[h+1],e.z=d[h+2],f.x=d[b+h+0],f.y=d[b+h+1],f.z=d[b+h+2],g.addVectors(e,
-f).normalize(),d[h+0]=d[b+h+0]=g.x,d[h+1]=d[b+h+1]=g.y,d[h+2]=d[b+h+2]=g.z}function ic(a,b){F.call(this);this.type="ShapeGeometry";"object"===typeof b&&(console.warn("THREE.ShapeGeometry: Options parameter has been removed."),b=b.curveSegments);this.parameters={shapes:a,curveSegments:b};this.fromBufferGeometry(new jc(a,b));this.mergeVertices()}function jc(a,b){function c(a){var c=e.length/3,h=a.extractPoints(b);a=h.shape;var n=h.holes;!1===pb.isClockWise(a)&&(a=a.reverse());h=0;for(var k=n.length;h<
-k;h++){var q=n[h];!0===pb.isClockWise(q)&&(n[h]=q.reverse())}h=pb.triangulateShape(a,n);k=0;for(q=n.length;k<q;k++)a=a.concat(n[k]);n=0;for(k=a.length;n<k;n++)q=a[n],e.push(q.x,q.y,0),f.push(0,0,1),g.push(q.x,q.y);a=0;for(n=h.length;a<n;a++)k=h[a],d.push(k[0]+c,k[1]+c,k[2]+c),l+=3}E.call(this);this.type="ShapeBufferGeometry";this.parameters={shapes:a,curveSegments:b};b=b||12;var d=[],e=[],f=[],g=[],h=0,l=0;if(!1===Array.isArray(a))c(a);else for(var n=0;n<a.length;n++)c(a[n]),this.addGroup(h,l,n),
-h+=l,l=0;this.setIndex(d);this.setAttribute("position",new A(e,3));this.setAttribute("normal",new A(f,3));this.setAttribute("uv",new A(g,2))}function ei(a,b){b.shapes=[];if(Array.isArray(a))for(var c=0,d=a.length;c<d;c++)b.shapes.push(a[c].uuid);else b.shapes.push(a.uuid);return b}function bd(a,b){E.call(this);this.type="EdgesGeometry";this.parameters={thresholdAngle:b};var c=[];b=Math.cos(P.DEG2RAD*(void 0!==b?b:1));var d=[0,0],e={},f=["a","b","c"];if(a.isBufferGeometry){var g=new F;g.fromBufferGeometry(a)}else g=
-a.clone();g.mergeVertices();g.computeFaceNormals();a=g.vertices;g=g.faces;for(var h=0,l=g.length;h<l;h++)for(var n=g[h],k=0;3>k;k++){var p=n[f[k]];var m=n[f[(k+1)%3]];d[0]=Math.min(p,m);d[1]=Math.max(p,m);p=d[0]+","+d[1];void 0===e[p]?e[p]={index1:d[0],index2:d[1],face1:h,face2:void 0}:e[p].face2=h}for(p in e)if(d=e[p],void 0===d.face2||g[d.face1].normal.dot(g[d.face2].normal)<=b)f=a[d.index1],c.push(f.x,f.y,f.z),f=a[d.index2],c.push(f.x,f.y,f.z);this.setAttribute("position",new A(c,3))}function kc(a,
-b,c,d,e,f,g,h){F.call(this);this.type="CylinderGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};this.fromBufferGeometry(new qb(a,b,c,d,e,f,g,h));this.mergeVertices()}function qb(a,b,c,d,e,f,g,h){function l(c){var e,f=new u,l=new m,q=0,v=!0===c?a:b,w=!0===c?1:-1;var A=t;for(e=1;e<=d;e++)p.push(0,x*w,0),z.push(0,w,0),r.push(.5,.5),t++;e=t;for(var C=0;C<=d;C++){var E=C/d*h+g,F=Math.cos(E);E=Math.sin(E);l.x=v*E;l.y=
-x*w;l.z=v*F;p.push(l.x,l.y,l.z);z.push(0,w,0);f.x=.5*F+.5;f.y=.5*E*w+.5;r.push(f.x,f.y);t++}for(f=0;f<d;f++)l=A+f,v=e+f,!0===c?k.push(v,v+1,l):k.push(v+1,v,l),q+=3;n.addGroup(B,q,!0===c?1:2);B+=q}E.call(this);this.type="CylinderBufferGeometry";this.parameters={radiusTop:a,radiusBottom:b,height:c,radialSegments:d,heightSegments:e,openEnded:f,thetaStart:g,thetaLength:h};var n=this;a=void 0!==a?a:1;b=void 0!==b?b:1;c=c||1;d=Math.floor(d)||8;e=Math.floor(e)||1;f=void 0!==f?f:!1;g=void 0!==g?g:0;h=void 0!==
-h?h:2*Math.PI;var k=[],p=[],z=[],r=[],t=0,v=[],x=c/2,B=0;(function(){for(var f=new m,l=new m,q=0,u=(b-a)/c,y=0;y<=e;y++){for(var A=[],C=y/e,D=C*(b-a)+a,E=0;E<=d;E++){var F=E/d,G=F*h+g,H=Math.sin(G);G=Math.cos(G);l.x=D*H;l.y=-C*c+x;l.z=D*G;p.push(l.x,l.y,l.z);f.set(H,u,G).normalize();z.push(f.x,f.y,f.z);r.push(F,1-C);A.push(t++)}v.push(A)}for(f=0;f<d;f++)for(l=0;l<e;l++)u=v[l+1][f],y=v[l+1][f+1],A=v[l][f+1],k.push(v[l][f],u,A),k.push(u,y,A),q+=6;n.addGroup(B,q,0);B+=q})();!1===f&&(0<a&&l(!0),0<b&&
-l(!1));this.setIndex(k);this.setAttribute("position",new A(p,3));this.setAttribute("normal",new A(z,3));this.setAttribute("uv",new A(r,2))}function ie(a,b,c,d,e,f,g){kc.call(this,0,a,b,c,d,e,f,g);this.type="ConeGeometry";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,thetaLength:g}}function je(a,b,c,d,e,f,g){qb.call(this,0,a,b,c,d,e,f,g);this.type="ConeBufferGeometry";this.parameters={radius:a,height:b,radialSegments:c,heightSegments:d,openEnded:e,thetaStart:f,
-thetaLength:g}}function ke(a,b,c,d){F.call(this);this.type="CircleGeometry";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};this.fromBufferGeometry(new cd(a,b,c,d));this.mergeVertices()}function cd(a,b,c,d){E.call(this);this.type="CircleBufferGeometry";this.parameters={radius:a,segments:b,thetaStart:c,thetaLength:d};a=a||1;b=void 0!==b?Math.max(3,b):8;c=void 0!==c?c:0;d=void 0!==d?d:2*Math.PI;var e=[],f=[],g=[],h=[],l=new m,n=new u;f.push(0,0,0);g.push(0,0,1);h.push(.5,.5);for(var k=
-0,p=3;k<=b;k++,p+=3){var z=c+k/b*d;l.x=a*Math.cos(z);l.y=a*Math.sin(z);f.push(l.x,l.y,l.z);g.push(0,0,1);n.x=(f[p]/a+1)/2;n.y=(f[p+1]/a+1)/2;h.push(n.x,n.y)}for(a=1;a<=b;a++)e.push(a,a+1,0);this.setIndex(e);this.setAttribute("position",new A(f,3));this.setAttribute("normal",new A(g,3));this.setAttribute("uv",new A(h,2))}function lc(a){L.call(this);this.type="ShadowMaterial";this.color=new H(0);this.transparent=!0;this.setValues(a)}function rb(a){ra.call(this,a);this.type="RawShaderMaterial"}function fb(a){L.call(this);
-this.defines={STANDARD:""};this.type="MeshStandardMaterial";this.color=new H(16777215);this.roughness=1;this.metalness=0;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new H(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new u(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.metalnessMap=this.roughnessMap=
-null;this.envMapIntensity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.vertexTangents=this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function Kb(a){fb.call(this);this.defines={STANDARD:"",PHYSICAL:""};this.type="MeshPhysicalMaterial";this.clearcoat=0;this.clearcoatMap=null;this.clearcoatRoughness=0;this.clearcoatRoughnessMap=null;this.clearcoatNormalScale=new u(1,1);this.clearcoatNormalMap=
-null;this.reflectivity=.5;this.sheen=null;this.transmission=0;this.transmissionMap=null;this.setValues(a)}function Lb(a){L.call(this);this.type="MeshPhongMaterial";this.color=new H(16777215);this.specular=new H(1118481);this.shininess=30;this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new H(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new u(1,1);this.displacementMap=
-null;this.displacementScale=1;this.displacementBias=0;this.envMap=this.alphaMap=this.specularMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function mc(a){L.call(this);this.defines={TOON:""};this.type="MeshToonMaterial";this.color=new H(16777215);this.lightMap=this.gradientMap=this.map=null;this.lightMapIntensity=
-1;this.aoMap=null;this.aoMapIntensity=1;this.emissive=new H(0);this.emissiveIntensity=1;this.bumpMap=this.emissiveMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new u(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.alphaMap=null;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function nc(a){L.call(this);this.type=
-"MeshNormalMaterial";this.bumpMap=null;this.bumpScale=1;this.normalMap=null;this.normalMapType=0;this.normalScale=new u(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.wireframe=!1;this.wireframeLinewidth=1;this.morphNormals=this.morphTargets=this.skinning=this.fog=!1;this.setValues(a)}function oc(a){L.call(this);this.type="MeshLambertMaterial";this.color=new H(16777215);this.lightMap=this.map=null;this.lightMapIntensity=1;this.aoMap=null;this.aoMapIntensity=1;
-this.emissive=new H(0);this.emissiveIntensity=1;this.envMap=this.alphaMap=this.specularMap=this.emissiveMap=null;this.combine=0;this.reflectivity=1;this.refractionRatio=.98;this.wireframe=!1;this.wireframeLinewidth=1;this.wireframeLinejoin=this.wireframeLinecap="round";this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function pc(a){L.call(this);this.defines={MATCAP:""};this.type="MeshMatcapMaterial";this.color=new H(16777215);this.bumpMap=this.map=this.matcap=null;this.bumpScale=
-1;this.normalMap=null;this.normalMapType=0;this.normalScale=new u(1,1);this.displacementMap=null;this.displacementScale=1;this.displacementBias=0;this.alphaMap=null;this.morphNormals=this.morphTargets=this.skinning=!1;this.setValues(a)}function qc(a){ja.call(this);this.type="LineDashedMaterial";this.scale=1;this.dashSize=3;this.gapSize=1;this.setValues(a)}function Ka(a,b,c,d){this.parameterPositions=a;this._cachedIndex=0;this.resultBuffer=void 0!==d?d:new b.constructor(c);this.sampleValues=b;this.valueSize=
-c}function Ye(a,b,c,d){Ka.call(this,a,b,c,d);this._offsetNext=this._weightNext=this._offsetPrev=this._weightPrev=-0}function le(a,b,c,d){Ka.call(this,a,b,c,d)}function Ze(a,b,c,d){Ka.call(this,a,b,c,d)}function ya(a,b,c,d){if(void 0===a)throw Error("THREE.KeyframeTrack: track name is undefined");if(void 0===b||0===b.length)throw Error("THREE.KeyframeTrack: no keyframes in track named "+a);this.name=a;this.times=ka.convertArray(b,this.TimeBufferType);this.values=ka.convertArray(c,this.ValueBufferType);
-this.setInterpolation(d||this.DefaultInterpolation)}function $e(a,b,c){ya.call(this,a,b,c)}function af(a,b,c,d){ya.call(this,a,b,c,d)}function dd(a,b,c,d){ya.call(this,a,b,c,d)}function bf(a,b,c,d){Ka.call(this,a,b,c,d)}function me(a,b,c,d){ya.call(this,a,b,c,d)}function cf(a,b,c,d){ya.call(this,a,b,c,d)}function ed(a,b,c,d){ya.call(this,a,b,c,d)}function Pa(a,b,c,d){this.name=a;this.tracks=c;this.duration=void 0!==b?b:-1;this.blendMode=void 0!==d?d:2500;this.uuid=P.generateUUID();0>this.duration&&
-this.resetDuration()}function Ik(a){switch(a.toLowerCase()){case "scalar":case "double":case "float":case "number":case "integer":return dd;case "vector":case "vector2":case "vector3":case "vector4":return ed;case "color":return af;case "quaternion":return me;case "bool":case "boolean":return $e;case "string":return cf}throw Error("THREE.KeyframeTrack: Unsupported typeName: "+a);}function Jk(a){if(void 0===a.type)throw Error("THREE.KeyframeTrack: track type undefined, can not parse");var b=Ik(a.type);
-if(void 0===a.times){var c=[],d=[];ka.flattenJSON(a.keys,c,d,"value");a.times=c;a.values=d}return void 0!==b.parse?b.parse(a):new b(a.name,a.times,a.values,a.interpolation)}function vg(a,b,c){var d=this,e=!1,f=0,g=0,h=void 0,l=[];this.onStart=void 0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(a){g++;if(!1===e&&void 0!==d.onStart)d.onStart(a,f,g);e=!0};this.itemEnd=function(a){f++;if(void 0!==d.onProgress)d.onProgress(a,f,g);if(f===g&&(e=!1,void 0!==d.onLoad))d.onLoad()};
-this.itemError=function(a){if(void 0!==d.onError)d.onError(a)};this.resolveURL=function(a){return h?h(a):a};this.setURLModifier=function(a){h=a;return this};this.addHandler=function(a,b){l.push(a,b);return this};this.removeHandler=function(a){a=l.indexOf(a);-1!==a&&l.splice(a,2);return this};this.getHandler=function(a){for(var b=0,c=l.length;b<c;b+=2){var d=l[b],e=l[b+1];d.global&&(d.lastIndex=0);if(d.test(a))return e}return null}}function X(a){this.manager=void 0!==a?a:fi;this.crossOrigin="anonymous";
-this.resourcePath=this.path="";this.requestHeader={}}function Qa(a){X.call(this,a)}function wg(a){X.call(this,a)}function xg(a){X.call(this,a)}function df(a){X.call(this,a)}function fd(a){X.call(this,a)}function ef(a){X.call(this,a)}function ff(a){X.call(this,a)}function K(){this.type="Curve";this.arcLengthDivisions=200}function La(a,b,c,d,e,f,g,h){K.call(this);this.type="EllipseCurve";this.aX=a||0;this.aY=b||0;this.xRadius=c||1;this.yRadius=d||1;this.aStartAngle=e||0;this.aEndAngle=f||2*Math.PI;
-this.aClockwise=g||!1;this.aRotation=h||0}function gd(a,b,c,d,e,f){La.call(this,a,b,c,c,d,e,f);this.type="ArcCurve"}function yg(){var a=0,b=0,c=0,d=0;return{initCatmullRom:function(e,f,g,h,l){e=l*(g-e);h=l*(h-f);a=f;b=e;c=-3*f+3*g-2*e-h;d=2*f-2*g+e+h},initNonuniformCatmullRom:function(e,f,g,h,l,n,k){e=((f-e)/l-(g-e)/(l+n)+(g-f)/n)*n;h=((g-f)/n-(h-f)/(n+k)+(h-g)/k)*n;a=f;b=e;c=-3*f+3*g-2*e-h;d=2*f-2*g+e+h},calc:function(e){var f=e*e;return a+b*e+c*f+d*f*e}}}function za(a,b,c,d){K.call(this);this.type=
-"CatmullRomCurve3";this.points=a||[];this.closed=b||!1;this.curveType=c||"centripetal";this.tension=void 0!==d?d:.5}function gi(a,b,c,d,e){b=.5*(d-b);e=.5*(e-c);var f=a*a;return(2*c-2*d+b+e)*a*f+(-3*c+3*d-2*b-e)*f+b*a+c}function ne(a,b,c,d){var e=1-a;return e*e*b+2*(1-a)*a*c+a*a*d}function oe(a,b,c,d,e){var f=1-a,g=1-a;return f*f*f*b+3*g*g*a*c+3*(1-a)*a*a*d+a*a*a*e}function Wa(a,b,c,d){K.call(this);this.type="CubicBezierCurve";this.v0=a||new u;this.v1=b||new u;this.v2=c||new u;this.v3=d||new u}function gb(a,
-b,c,d){K.call(this);this.type="CubicBezierCurve3";this.v0=a||new m;this.v1=b||new m;this.v2=c||new m;this.v3=d||new m}function ia(a,b){K.call(this);this.type="LineCurve";this.v1=a||new u;this.v2=b||new u}function Xa(a,b){K.call(this);this.type="LineCurve3";this.v1=a||new m;this.v2=b||new m}function Ya(a,b,c){K.call(this);this.type="QuadraticBezierCurve";this.v0=a||new u;this.v1=b||new u;this.v2=c||new u}function hb(a,b,c){K.call(this);this.type="QuadraticBezierCurve3";this.v0=a||new m;this.v1=b||
-new m;this.v2=c||new m}function Za(a){K.call(this);this.type="SplineCurve";this.points=a||[]}function sb(){K.call(this);this.type="CurvePath";this.curves=[];this.autoClose=!1}function $a(a){sb.call(this);this.type="Path";this.currentPoint=new u;a&&this.setFromPoints(a)}function Mb(a){$a.call(this,a);this.uuid=P.generateUUID();this.type="Shape";this.holes=[]}function fa(a,b){C.call(this);this.type="Light";this.color=new H(a);this.intensity=void 0!==b?b:1;this.receiveShadow=void 0}function gf(a,b,c){fa.call(this,
-a,c);this.type="HemisphereLight";this.castShadow=void 0;this.position.copy(C.DefaultUp);this.updateMatrix();this.groundColor=new H(b)}function ib(a){this.camera=a;this.normalBias=this.bias=0;this.radius=1;this.mapSize=new u(512,512);this.mapPass=this.map=null;this.matrix=new U;this.autoUpdate=!0;this.needsUpdate=!1;this._frustum=new Jc;this._frameExtents=new u(1,1);this._viewportCount=1;this._viewports=[new S(0,0,1,1)]}function hf(){ib.call(this,new W(50,1,.5,500))}function jf(a,b,c,d,e,f){fa.call(this,
-a,b);this.type="SpotLight";this.position.copy(C.DefaultUp);this.updateMatrix();this.target=new C;Object.defineProperty(this,"power",{get:function(){return this.intensity*Math.PI},set:function(a){this.intensity=a/Math.PI}});this.distance=void 0!==c?c:0;this.angle=void 0!==d?d:Math.PI/3;this.penumbra=void 0!==e?e:0;this.decay=void 0!==f?f:1;this.shadow=new hf}function zg(){ib.call(this,new W(90,1,.5,500));this._frameExtents=new u(4,2);this._viewportCount=6;this._viewports=[new S(2,1,1,1),new S(0,1,
-1,1),new S(3,1,1,1),new S(1,1,1,1),new S(3,0,1,1),new S(1,0,1,1)];this._cubeDirections=[new m(1,0,0),new m(-1,0,0),new m(0,0,1),new m(0,0,-1),new m(0,1,0),new m(0,-1,0)];this._cubeUps=[new m(0,1,0),new m(0,1,0),new m(0,1,0),new m(0,1,0),new m(0,0,1),new m(0,0,-1)]}function kf(a,b,c,d){fa.call(this,a,b);this.type="PointLight";Object.defineProperty(this,"power",{get:function(){return 4*this.intensity*Math.PI},set:function(a){this.intensity=a/(4*Math.PI)}});this.distance=void 0!==c?c:0;this.decay=void 0!==
-d?d:1;this.shadow=new zg}function hd(a,b,c,d,e,f){db.call(this);this.type="OrthographicCamera";this.zoom=1;this.view=null;this.left=void 0!==a?a:-1;this.right=void 0!==b?b:1;this.top=void 0!==c?c:1;this.bottom=void 0!==d?d:-1;this.near=void 0!==e?e:.1;this.far=void 0!==f?f:2E3;this.updateProjectionMatrix()}function lf(){ib.call(this,new hd(-5,5,5,-5,.5,500))}function mf(a,b){fa.call(this,a,b);this.type="DirectionalLight";this.position.copy(C.DefaultUp);this.updateMatrix();this.target=new C;this.shadow=
-new lf}function nf(a,b){fa.call(this,a,b);this.type="AmbientLight";this.castShadow=void 0}function of(a,b,c,d){fa.call(this,a,b);this.type="RectAreaLight";this.width=void 0!==c?c:10;this.height=void 0!==d?d:10}function pf(){this.coefficients=[];for(var a=0;9>a;a++)this.coefficients.push(new m)}function Ra(a,b){fa.call(this,void 0,b);this.type="LightProbe";this.sh=void 0!==a?a:new pf}function qf(a){X.call(this,a);this.textures={}}function pe(){E.call(this);this.type="InstancedBufferGeometry";this.instanceCount=
-Infinity}function rf(a,b,c,d){"number"===typeof c&&(d=c,c=!1,console.error("THREE.InstancedBufferAttribute: The constructor now expects normalized as the third argument."));J.call(this,a,b,c);this.meshPerAttribute=d||1}function sf(a){X.call(this,a)}function tf(a){X.call(this,a)}function Ag(a){"undefined"===typeof createImageBitmap&&console.warn("THREE.ImageBitmapLoader: createImageBitmap() not supported.");"undefined"===typeof fetch&&console.warn("THREE.ImageBitmapLoader: fetch() not supported.");
-X.call(this,a);this.options={premultiplyAlpha:"none"}}function Bg(){this.type="ShapePath";this.color=new H;this.subPaths=[];this.currentPath=null}function Cg(a){this.type="Font";this.data=a}function Dg(a){X.call(this,a)}function uf(a){X.call(this,a)}function Eg(a,b,c){Ra.call(this,void 0,c);a=(new H).set(a);c=(new H).set(b);b=new m(a.r,a.g,a.b);a=new m(c.r,c.g,c.b);c=Math.sqrt(Math.PI);var d=c*Math.sqrt(.75);this.sh.coefficients[0].copy(b).add(a).multiplyScalar(c);this.sh.coefficients[1].copy(b).sub(a).multiplyScalar(d)}
-function Fg(a,b){Ra.call(this,void 0,b);a=(new H).set(a);this.sh.coefficients[0].set(a.r,a.g,a.b).multiplyScalar(2*Math.sqrt(Math.PI))}function hi(){this.type="StereoCamera";this.aspect=1;this.eyeSep=.064;this.cameraL=new W;this.cameraL.layers.enable(1);this.cameraL.matrixAutoUpdate=!1;this.cameraR=new W;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}}function Gg(a){this.autoStart=void 0!==a?a:!0;
-this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}function Hg(){C.call(this);this.type="AudioListener";this.context=Ig.getContext();this.gain=this.context.createGain();this.gain.connect(this.context.destination);this.filter=null;this.timeDelta=0;this._clock=new Gg}function id(a){C.call(this);this.type="Audio";this.listener=a;this.context=a.context;this.gain=this.context.createGain();this.gain.connect(a.getInput());this.autoplay=!1;this.buffer=null;this.detune=0;this.loop=!1;this.offset=
-this.loopEnd=this.loopStart=0;this.duration=void 0;this.playbackRate=1;this.isPlaying=!1;this.hasPlaybackControl=!0;this.sourceType="empty";this._progress=this._startedAt=0;this.filters=[]}function Jg(a){id.call(this,a);this.panner=this.context.createPanner();this.panner.panningModel="HRTF";this.panner.connect(this.gain)}function Kg(a,b){this.analyser=a.context.createAnalyser();this.analyser.fftSize=void 0!==b?b:2048;this.data=new Uint8Array(this.analyser.frequencyBinCount);a.getOutput().connect(this.analyser)}
-function Lg(a,b,c){this.binding=a;this.valueSize=c;switch(b){case "quaternion":a=this._slerp;b=this._slerpAdditive;var d=this._setAdditiveIdentityQuaternion;this.buffer=new Float64Array(6*c);this._workIndex=5;break;case "string":case "bool":b=a=this._select;d=this._setAdditiveIdentityOther;this.buffer=Array(5*c);break;default:a=this._lerp,b=this._lerpAdditive,d=this._setAdditiveIdentityNumeric,this.buffer=new Float64Array(5*c)}this._mixBufferRegion=a;this._mixBufferRegionAdditive=b;this._setIdentity=
-d;this._origIndex=3;this._addIndex=4;this.referenceCount=this.useCount=this.cumulativeWeightAdditive=this.cumulativeWeight=0}function ii(a,b,c){c=c||wa.parseTrackName(b);this._targetGroup=a;this._bindings=a.subscribe_(b,c)}function wa(a,b,c){this.path=b;this.parsedPath=c||wa.parseTrackName(b);this.node=wa.findNode(a,this.parsedPath.nodeName)||a;this.rootNode=a}function ji(){this.uuid=P.generateUUID();this._objects=Array.prototype.slice.call(arguments);this.nCachedObjects_=0;var a={};this._indicesByUUID=
-a;for(var b=0,c=arguments.length;b!==c;++b)a[arguments[b].uuid]=b;this._paths=[];this._parsedPaths=[];this._bindings=[];this._bindingsIndicesByPath={};var d=this;this.stats={objects:{get total(){return d._objects.length},get inUse(){return this.total-d.nCachedObjects_}},get bindingsPerObject(){return d._bindings.length}}}function ki(a,b,c,d){this._mixer=a;this._clip=b;this._localRoot=c||null;this.blendMode=d||b.blendMode;a=b.tracks;b=a.length;c=Array(b);d={endingStart:2400,endingEnd:2400};for(var e=
-0;e!==b;++e){var f=a[e].createInterpolant(null);c[e]=f;f.settings=d}this._interpolantSettings=d;this._interpolants=c;this._propertyBindings=Array(b);this._weightInterpolant=this._timeScaleInterpolant=this._byClipCacheIndex=this._cacheIndex=null;this.loop=2201;this._loopCount=-1;this._startTime=null;this.time=0;this._effectiveWeight=this.weight=this._effectiveTimeScale=this.timeScale=1;this.repetitions=Infinity;this.paused=!1;this.enabled=!0;this.clampWhenFinished=!1;this.zeroSlopeAtEnd=this.zeroSlopeAtStart=
-!0}function Mg(a){this._root=a;this._initMemoryManager();this.time=this._accuIndex=0;this.timeScale=1}function vf(a,b){"string"===typeof a&&(console.warn("THREE.Uniform: Type parameter is no longer needed."),a=b);this.value=a}function Ng(a,b,c){Ba.call(this,a,b);this.meshPerAttribute=c||1}function Og(a,b,c,d){this.ray=new Xb(a,b);this.near=c||0;this.far=d||Infinity;this.camera=null;this.layers=new He;this.params={Mesh:{},Line:{threshold:1},LOD:{},Points:{threshold:1},Sprite:{}};Object.defineProperties(this.params,
-{PointCloud:{get:function(){console.warn("THREE.Raycaster: params.PointCloud has been renamed to params.Points.");return this.Points}}})}function li(a,b){return a.distance-b.distance}function Pg(a,b,c,d){a.layers.test(b.layers)&&a.raycast(b,c);if(!0===d){a=a.children;d=0;for(var e=a.length;d<e;d++)Pg(a[d],b,c,!0)}}function mi(a,b,c){this.radius=void 0!==a?a:1;this.theta=void 0!==b?b:0;this.y=void 0!==c?c:0;return this}function Qg(a,b){this.min=void 0!==a?a:new u(Infinity,Infinity);this.max=void 0!==
-b?b:new u(-Infinity,-Infinity)}function Rg(a,b){this.start=void 0!==a?a:new m;this.end=void 0!==b?b:new m}function qe(a){C.call(this);this.material=a;this.render=function(){};this.hasUvs=this.hasColors=this.hasNormals=this.hasPositions=!1;this.uvArray=this.colorArray=this.normalArray=this.positionArray=null;this.count=0}function jd(a,b){C.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.color=b;a=new E;b=[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(var c=0,d=1;32>c;c++,d++){var e=c/32*Math.PI*2,f=d/32*Math.PI*2;b.push(Math.cos(e),Math.sin(e),1,Math.cos(f),Math.sin(f),1)}a.setAttribute("position",new A(b,3));b=new ja({fog:!1,toneMapped:!1});this.cone=new ea(a,b);this.add(this.cone);this.update()}function ni(a){var b=[];a&&a.isBone&&b.push(a);for(var c=0;c<a.children.length;c++)b.push.apply(b,ni(a.children[c]));return b}function rc(a){for(var b=ni(a),c=new E,d=[],e=[],f=new H(0,0,1),g=new H(0,1,0),h=0;h<b.length;h++){var l=
-b[h];l.parent&&l.parent.isBone&&(d.push(0,0,0),d.push(0,0,0),e.push(f.r,f.g,f.b),e.push(g.r,g.g,g.b))}c.setAttribute("position",new A(d,3));c.setAttribute("color",new A(e,3));d=new ja({vertexColors:!0,depthTest:!1,depthWrite:!1,toneMapped:!1,transparent:!0});ea.call(this,c,d);this.type="SkeletonHelper";this.root=a;this.bones=b;this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1}function kd(a,b,c){this.light=a;this.light.updateMatrixWorld();this.color=c;a=new hc(b,4,2);b=new Na({wireframe:!0,fog:!1,
-toneMapped:!1});T.call(this,a,b);this.type="PointLightHelper";this.matrix=this.light.matrixWorld;this.matrixAutoUpdate=!1;this.update()}function ld(a,b,c){C.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.color=c;a=new ec(b);a.rotateY(.5*Math.PI);this.material=new Na({wireframe:!0,fog:!1,toneMapped:!1});void 0===this.color&&(this.material.vertexColors=!0);b=a.getAttribute("position");b=new Float32Array(3*b.count);a.setAttribute("color",
-new J(b,3));this.add(new T(a,this.material));this.update()}function re(a,b,c,d){a=a||10;b=b||10;c=new H(void 0!==c?c:4473924);d=new H(void 0!==d?d:8947848);var e=b/2,f=a/b,g=a/2;a=[];for(var h=[],l=0,n=0,k=-g;l<=b;l++,k+=f){a.push(-g,0,k,g,0,k);a.push(k,0,-g,k,0,g);var p=l===e?c:d;p.toArray(h,n);n+=3;p.toArray(h,n);n+=3;p.toArray(h,n);n+=3;p.toArray(h,n);n+=3}b=new E;b.setAttribute("position",new A(a,3));b.setAttribute("color",new A(h,3));c=new ja({vertexColors:!0,toneMapped:!1});ea.call(this,b,c);
-this.type="GridHelper"}function wf(a,b,c,d,e,f){a=a||10;b=b||16;c=c||8;d=d||64;e=new H(void 0!==e?e:4473924);f=new H(void 0!==f?f:8947848);for(var g=[],h=[],l=0;l<=b;l++){var n=l/b*2*Math.PI,k=Math.sin(n)*a;n=Math.cos(n)*a;g.push(0,0,0);g.push(k,0,n);k=l&1?e:f;h.push(k.r,k.g,k.b);h.push(k.r,k.g,k.b)}for(b=0;b<=c;b++)for(l=b&1?e:f,k=a-a/c*b,n=0;n<d;n++){var p=n/d*2*Math.PI,m=Math.sin(p)*k;p=Math.cos(p)*k;g.push(m,0,p);h.push(l.r,l.g,l.b);p=(n+1)/d*2*Math.PI;m=Math.sin(p)*k;p=Math.cos(p)*k;g.push(m,
-0,p);h.push(l.r,l.g,l.b)}a=new E;a.setAttribute("position",new A(g,3));a.setAttribute("color",new A(h,3));g=new ja({vertexColors:!0,toneMapped:!1});ea.call(this,a,g);this.type="PolarGridHelper"}function md(a,b,c){C.call(this);this.light=a;this.light.updateMatrixWorld();this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.color=c;void 0===b&&(b=1);a=new E;a.setAttribute("position",new A([-b,b,0,b,b,0,b,-b,0,-b,-b,0,-b,b,0],3));b=new ja({fog:!1,toneMapped:!1});this.lightPlane=new Ja(a,b);this.add(this.lightPlane);
-a=new E;a.setAttribute("position",new A([0,0,0,0,0,1],3));this.targetLine=new Ja(a,b);this.add(this.targetLine);this.update()}function se(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){f.push(0,0,0);g.push(b.r,b.g,b.b);void 0===h[a]&&(h[a]=[]);h[a].push(f.length/3-1)}var d=new E,e=new ja({color:16777215,vertexColors:!0,toneMapped:!1}),f=[],g=[],h={},l=new H(16755200),n=new H(16711680),k=new H(43775),p=new H(16777215),m=new H(3355443);b("n1","n2",l);b("n2","n4",l);b("n4","n3",l);b("n3","n1",l);
-b("f1","f2",l);b("f2","f4",l);b("f4","f3",l);b("f3","f1",l);b("n1","f1",l);b("n2","f2",l);b("n3","f3",l);b("n4","f4",l);b("p","n1",n);b("p","n2",n);b("p","n3",n);b("p","n4",n);b("u1","u2",k);b("u2","u3",k);b("u3","u1",k);b("c","t",p);b("p","c",m);b("cn1","cn2",m);b("cn3","cn4",m);b("cf1","cf2",m);b("cf3","cf4",m);d.setAttribute("position",new A(f,3));d.setAttribute("color",new A(g,3));ea.call(this,d,e);this.type="CameraHelper";this.camera=a;this.camera.updateProjectionMatrix&&this.camera.updateProjectionMatrix();
-this.matrix=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=h;this.update()}function oa(a,b,c,d,e,f,g){xf.set(e,f,g).unproject(d);a=b[a];if(void 0!==a)for(c=c.getAttribute("position"),b=0,d=a.length;b<d;b++)c.setXYZ(a[b],xf.x,xf.y,xf.z)}function Nb(a,b){this.object=a;void 0===b&&(b=16776960);a=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]);var c=new Float32Array(24),d=new E;d.setIndex(new J(a,1));d.setAttribute("position",new J(c,3));ea.call(this,d,new ja({color:b,toneMapped:!1}));
-this.type="BoxHelper";this.matrixAutoUpdate=!1;this.update()}function te(a,b){this.type="Box3Helper";this.box=a;void 0===b&&(b=16776960);a=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]);var c=new E;c.setIndex(new J(a,1));c.setAttribute("position",new A([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));ea.call(this,c,new ja({color:b,toneMapped:!1}));this.type="Box3Helper";this.geometry.computeBoundingSphere()}function ue(a,b,c){this.plane=a;this.size=void 0===b?
-1:b;a=void 0!==c?c:16776960;b=new E;b.setAttribute("position",new A([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));b.computeBoundingSphere();Ja.call(this,b,new ja({color:a,toneMapped:!1}));this.type="PlaneHelper";b=new E;b.setAttribute("position",new A([1,1,1,-1,1,1,-1,-1,1,1,1,1,-1,-1,1,1,-1,1],3));b.computeBoundingSphere();this.add(new T(b,new Na({color:a,opacity:.2,transparent:!0,depthWrite:!1,toneMapped:!1})))}function Ob(a,b,c,d,e,f){C.call(this);this.type="ArrowHelper";
-void 0===a&&(a=new m(0,0,1));void 0===b&&(b=new m(0,0,0));void 0===c&&(c=1);void 0===d&&(d=16776960);void 0===e&&(e=.2*c);void 0===f&&(f=.2*e);void 0===yf&&(yf=new E,yf.setAttribute("position",new A([0,0,0,0,1,0],3)),Sg=new qb(0,.5,1,5,1),Sg.translate(0,-.5,0));this.position.copy(b);this.line=new Ja(yf,new ja({color:d,toneMapped:!1}));this.line.matrixAutoUpdate=!1;this.add(this.line);this.cone=new T(Sg,new Na({color:d,toneMapped:!1}));this.cone.matrixAutoUpdate=!1;this.add(this.cone);this.setDirection(a);
-this.setLength(c,e,f)}function ve(a){a=a||1;var b=[0,0,0,a,0,0,0,0,0,0,a,0,0,0,0,0,0,a];a=new E;a.setAttribute("position",new A(b,3));a.setAttribute("color",new A([1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],3));b=new ja({vertexColors:!0,toneMapped:!1});ea.call(this,a,b);this.type="AxesHelper"}function Tg(a){this._renderer=a;this._pingPongRenderTarget=null;a=new Float32Array(20);var b=new m(0,1,0);this._blurMaterial=new rb({name:"SphericalGaussianBlur",defines:{n:20},uniforms:{envMap:{value:null},samples:{value:1},
-weights:{value:a},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:b},inputEncoding:{value:jb[3E3]},outputEncoding:{value:jb[3E3]}},vertexShader:Ug(),fragmentShader:"nntttprecision mediump float;ntttprecision mediump int;nntttvarying vec3 vOutputDirection;nntttuniform sampler2D envMap;ntttuniform int samples;ntttuniform float weights[ n ];ntttuniform bool latitudinal;ntttuniform float dTheta;ntttuniform float mipInt;ntttuniform vec3 poleAxis;nnttt"+
-Vg()+"nnttt#define ENVMAP_TYPE_CUBE_UVnttt#include <cube_uv_reflection_fragment>nntttvec3 getSample( float theta, vec3 axis ) {nnttttfloat cosTheta = cos( theta );ntttt// Rodrigues' axis-angle rotationnttttvec3 sampleDirection = vOutputDirection * cosThetanttttt+ cross( axis, vOutputDirection ) * sin( theta )nttttt+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );nnttttreturn bilinearCubeUV( envMap, sampleDirection, mipInt );nnttt}nntttvoid main() {nnttttvec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );nnttttif ( all( equal( axis, vec3( 0.0 ) ) ) ) {nntttttaxis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );nntttt}nnttttaxis = normalize( axis );nnttttgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );nttttgl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );nnttttfor ( int i = 1; i < n; i++ ) {nntttttif ( i >= samples ) {nnttttttbreak;nnttttt}nntttttfloat theta = dTheta * float( i );ntttttgl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );ntttttgl_FragColor.rgb += weights[ i ] * getSample( theta, axis );nntttt}nnttttgl_FragColor = linearToOutputTexel( gl_FragColor );nnttt}ntt",
-blending:0,depthTest:!1,depthWrite:!1});this._cubemapShader=this._equirectShader=null;this._compileMaterial(this._blurMaterial)}function oi(a){a=new Ga(3*kb,3*kb,a);a.texture.mapping=306;a.texture.name="PMREM.cubeUv";a.scissorTest=!0;return a}function zf(a,b,c,d,e){a.viewport.set(b,c,d,e);a.scissor.set(b,c,d,e)}function pi(){var a=new u(1,1);return new rb({name:"EquirectangularToCubeUV",uniforms:{envMap:{value:null},texelSize:{value:a},inputEncoding:{value:jb[3E3]},outputEncoding:{value:jb[3E3]}},
-vertexShader:Ug(),fragmentShader:"nntttprecision mediump float;ntttprecision mediump int;nntttvarying vec3 vOutputDirection;nntttuniform sampler2D envMap;ntttuniform vec2 texelSize;nnttt"+Vg()+"nnttt#include <common>nntttvoid main() {nnttttgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );nnttttvec3 outputDirection = normalize( vOutputDirection );nttttvec2 uv = equirectUv( outputDirection );nnttttvec2 f = fract( uv / texelSize - 0.5 );nttttuv -= f * texelSize;nttttvec3 tl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;nttttuv.x += texelSize.x;nttttvec3 tr = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;nttttuv.y += texelSize.y;nttttvec3 br = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;nttttuv.x -= texelSize.x;nttttvec3 bl = envMapTexelToLinear( texture2D ( envMap, uv ) ).rgb;nnttttvec3 tm = mix( tl, tr, f.x );nttttvec3 bm = mix( bl, br, f.x );nttttgl_FragColor.rgb = mix( tm, bm, f.y );nnttttgl_FragColor = linearToOutputTexel( gl_FragColor );nnttt}ntt",
-blending:0,depthTest:!1,depthWrite:!1})}function qi(){return new rb({name:"CubemapToCubeUV",uniforms:{envMap:{value:null},inputEncoding:{value:jb[3E3]},outputEncoding:{value:jb[3E3]}},vertexShader:Ug(),fragmentShader:"nntttprecision mediump float;ntttprecision mediump int;nntttvarying vec3 vOutputDirection;nntttuniform samplerCube envMap;nnttt"+Vg()+"nntttvoid main() {nnttttgl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );nttttgl_FragColor.rgb = envMapTexelToLinear( textureCube( envMap, vec3( - vOutputDirection.x, vOutputDirection.yz ) ) ).rgb;nttttgl_FragColor = linearToOutputTexel( gl_FragColor );nnttt}ntt",
-blending:0,depthTest:!1,depthWrite:!1})}function Ug(){return"nnttprecision mediump float;nttprecision mediump int;nnttattribute vec3 position;nttattribute vec2 uv;nttattribute float faceIndex;nnttvarying vec3 vOutputDirection;nntt// RH coordinate system; PMREM face-indexing conventionnttvec3 getDirection( vec2 uv, float face ) {nntttuv = 2.0 * uv - 1.0;nntttvec3 direction = vec3( uv, 1.0 );nntttif ( face == 0.0 ) {nnttttdirection = direction.zyx; // ( 1, v, u ) pos xnnttt} else if ( face == 1.0 ) {nnttttdirection = direction.xzy;nttttdirection.xz *= -1.0; // ( -u, 1, -v ) pos ynnttt} else if ( face == 2.0 ) {nnttttdirection.x *= -1.0; // ( -u, v, 1 ) pos znnttt} else if ( face == 3.0 ) {nnttttdirection = direction.zyx;nttttdirection.xz *= -1.0; // ( -1, v, -u ) neg xnnttt} else if ( face == 4.0 ) {nnttttdirection = direction.xzy;nttttdirection.xy *= -1.0; // ( -u, -1, v ) neg ynnttt} else if ( face == 5.0 ) {nnttttdirection.z *= -1.0; // ( u, v, -1 ) neg znnttt}nntttreturn direction;nntt}nnttvoid main() {nntttvOutputDirection = getDirection( uv, faceIndex );ntttgl_Position = vec4( position, 1.0 );nntt}nt"}
-function Vg(){return"nnttuniform int inputEncoding;nttuniform int outputEncoding;nntt#include <encodings_pars_fragment>nnttvec4 inputTexelToLinear( vec4 value ) {nntttif ( inputEncoding == 0 ) {nnttttreturn value;nnttt} else if ( inputEncoding == 1 ) {nnttttreturn sRGBToLinear( value );nnttt} else if ( inputEncoding == 2 ) {nnttttreturn RGBEToLinear( value );nnttt} else if ( inputEncoding == 3 ) {nnttttreturn RGBMToLinear( value, 7.0 );nnttt} else if ( inputEncoding == 4 ) {nnttttreturn RGBMToLinear( value, 16.0 );nnttt} else if ( inputEncoding == 5 ) {nnttttreturn RGBDToLinear( value, 256.0 );nnttt} else {nnttttreturn GammaToLinear( value, 2.2 );nnttt}nntt}nnttvec4 linearToOutputTexel( vec4 value ) {nntttif ( outputEncoding == 0 ) {nnttttreturn value;nnttt} else if ( outputEncoding == 1 ) {nnttttreturn LinearTosRGB( value );nnttt} else if ( outputEncoding == 2 ) {nnttttreturn LinearToRGBE( value );nnttt} else if ( outputEncoding == 3 ) {nnttttreturn LinearToRGBM( value, 7.0 );nnttt} else if ( outputEncoding == 4 ) {nnttttreturn LinearToRGBM( value, 16.0 );nnttt} else if ( outputEncoding == 5 ) {nnttttreturn LinearToRGBD( value, 256.0 );nnttt} else {nnttttreturn LinearToGamma( value, 2.2 );nnttt}nntt}nnttvec4 envMapTexelToLinear( vec4 color ) {nntttreturn inputTexelToLinear( color );nntt}nt"}
-function ri(a){console.warn("THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");za.call(this,a);this.type="catmullrom";this.closed=!0}function si(a){console.warn("THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.");za.call(this,a);this.type="catmullrom"}function Wg(a){console.warn("THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.");za.call(this,a);this.type="catmullrom"}void 0===Number.EPSILON&&(Number.EPSILON=Math.pow(2,
--52));void 0===Number.isInteger&&(Number.isInteger=function(a){return"number"===typeof a&&isFinite(a)&&Math.floor(a)===a});void 0===Math.sign&&(Math.sign=function(a){return 0>a?-1:0<a?1:+a});!1==="name"in Function.prototype&&Object.defineProperty(Function.prototype,"name",{get:function(){return this.toString().match(/^s*functions*([^(s]*)/)[1]}});void 0===Object.assign&&(Object.assign=function(a){if(void 0===a||null===a)throw new TypeError("Cannot convert undefined or null to object");for(var b=
-Object(a),c=1;c<arguments.length;c++){var d=arguments[c];if(void 0!==d&&null!==d)for(var e in d)Object.prototype.hasOwnProperty.call(d,e)&&(b[e]=d[e])}return b});Object.assign(Ea.prototype,{addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&&c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)},removeEventListener:function(a,
-b){void 0!==this._listeners&&(a=this._listeners[a],void 0!==a&&(b=a.indexOf(b),-1!==b&&a.splice(b,1)))},dispatchEvent:function(a){if(void 0!==this._listeners){var b=this._listeners[a.type];if(void 0!==b){a.target=this;b=b.slice(0);for(var c=0,d=b.length;c<d;c++)b[c].call(this,a)}}}});for(var ta=[],we=0;256>we;we++)ta[we]=(16>we?"0":"")+we.toString(16);var Af=1234567,P={DEG2RAD:Math.PI/180,RAD2DEG:180/Math.PI,generateUUID:function(){var a=4294967295*Math.random()|0,b=4294967295*Math.random()|0,c=4294967295*
-Math.random()|0,d=4294967295*Math.random()|0;return(ta[a&255]+ta[a>>8&255]+ta[a>>16&255]+ta[a>>24&255]+"-"+ta[b&255]+ta[b>>8&255]+"-"+ta[b>>16&15|64]+ta[b>>24&255]+"-"+ta[c&63|128]+ta[c>>8&255]+"-"+ta[c>>16&255]+ta[c>>24&255]+ta[d&255]+ta[d>>8&255]+ta[d>>16&255]+ta[d>>24&255]).toUpperCase()},clamp:function(a,b,c){return Math.max(b,Math.min(c,a))},euclideanModulo:function(a,b){return(a%b+b)%b},mapLinear:function(a,b,c,d,e){return d+(a-b)*(e-d)/(c-b)},lerp:function(a,b,c){return(1-c)*a+c*b},smoothstep:function(a,
-b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(.5-Math.random())},seededRandom:function(a){void 0!==a&&(Af=a%2147483647);Af=16807*Af%2147483647;return(Af-1)/2147483646},degToRad:function(a){return a*P.DEG2RAD},
-radToDeg:function(a){return a*P.RAD2DEG},isPowerOfTwo:function(a){return 0===(a&a-1)&&0!==a},ceilPowerOfTwo:function(a){return Math.pow(2,Math.ceil(Math.log(a)/Math.LN2))},floorPowerOfTwo:function(a){return Math.pow(2,Math.floor(Math.log(a)/Math.LN2))},setQuaternionFromProperEuler:function(a,b,c,d,e){var f=Math.cos,g=Math.sin,h=f(c/2);c=g(c/2);var l=f((b+d)/2),n=g((b+d)/2),k=f((b-d)/2),p=g((b-d)/2);f=f((d-b)/2);b=g((d-b)/2);switch(e){case "XYX":a.set(h*n,c*k,c*p,h*l);break;case "YZY":a.set(c*p,h*
-n,c*k,h*l);break;case "ZXZ":a.set(c*k,c*p,h*n,h*l);break;case "XZX":a.set(h*n,c*b,c*f,h*l);break;case "YXY":a.set(c*f,h*n,c*b,h*l);break;case "ZYZ":a.set(c*b,c*f,h*n,h*l);break;default:console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: "+e)}}};Object.defineProperties(u.prototype,{width:{get:function(){return this.x},set:function(a){this.x=a}},height:{get:function(){return this.y},set:function(a){this.y=a}}});Object.assign(u.prototype,{isVector2:!0,set:function(a,
-b){this.x=a;this.y=b;return this},setScalar:function(a){this.y=this.x=a;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y)},copy:function(a){this.x=
-a.x;this.y=a.y;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),
-this.subVectors(a,b);this.x-=a.x;this.y-=a.y;return this},subScalar:function(a){this.x-=a;this.y-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiply:function(a){this.x*=a.x;this.y*=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divide:function(a){this.x/=a.x;this.y/=a.y;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},applyMatrix3:function(a){var b=this.x,c=this.y;a=a.elements;this.x=a[0]*b+a[3]*c+a[6];this.y=
-a[1]*b+a[4]*c+a[7];return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||
-1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);return this},negate:function(){this.x=-this.x;this.y=-this.y;return this},dot:function(a){return this.x*
-a.x+this.y*a.y},cross:function(a){return this.x*a.y-this.y*a.x},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)},normalize:function(){return this.divideScalar(this.length()||1)},angle:function(){return Math.atan2(-this.y,-this.x)+Math.PI},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x;a=this.y-
-a.y;return b*b+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];return this},toArray:function(a,b){void 0===a&&
-(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector2: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);return this},rotateAround:function(a,b){var c=Math.cos(b);b=Math.sin(b);var d=this.x-a.x,e=this.y-a.y;this.x=d*c-e*b+a.x;this.y=d*b+e*c+a.y;return this},random:function(){this.x=Math.random();this.y=Math.random();return this}});Object.assign(qa.prototype,{isMatrix3:!0,set:function(a,
-b,c,d,e,f,g,h,l){var n=this.elements;n[0]=a;n[1]=d;n[2]=g;n[3]=b;n[4]=e;n[5]=h;n[6]=c;n[7]=f;n[8]=l;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},clone:function(){return(new this.constructor).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];return this},extractBasis:function(a,b,c){a.setFromMatrix3Column(this,0);b.setFromMatrix3Column(this,1);c.setFromMatrix3Column(this,
-2);return this},setFromMatrix4:function(a){a=a.elements;this.set(a[0],a[4],a[8],a[1],a[5],a[9],a[2],a[6],a[10]);return this},multiply:function(a){return this.multiplyMatrices(this,a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[3],f=c[6],g=c[1],h=c[4],l=c[7],n=c[2],k=c[5];c=c[8];var p=d[0],m=d[3],r=d[6],t=d[1],v=d[4],x=d[7],u=d[2],w=d[5];d=d[8];b[0]=a*p+e*t+f*u;b[3]=a*m+e*v+f*w;b[6]=a*r+e*
-x+f*d;b[1]=g*p+h*t+l*u;b[4]=g*m+h*v+l*w;b[7]=g*r+h*x+l*d;b[2]=n*p+k*t+c*u;b[5]=n*m+k*v+c*w;b[8]=n*r+k*x+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[3]*=a;b[6]*=a;b[1]*=a;b[4]*=a;b[7]*=a;b[2]*=a;b[5]*=a;b[8]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[1],d=a[2],e=a[3],f=a[4],g=a[5],h=a[6],l=a[7];a=a[8];return b*f*a-b*g*l-c*e*a+c*g*h+d*e*l-d*f*h},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix3: .getInverse() can no longer be configured to throw on degenerate.");
-var c=a.elements;a=this.elements;b=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],n=c[7];c=c[8];var k=c*g-h*n,p=h*l-c*f,m=n*f-g*l,r=b*k+d*p+e*m;if(0===r)return this.set(0,0,0,0,0,0,0,0,0);r=1/r;a[0]=k*r;a[1]=(e*n-c*d)*r;a[2]=(h*d-e*g)*r;a[3]=p*r;a[4]=(c*b-e*l)*r;a[5]=(e*f-h*b)*r;a[6]=m*r;a[7]=(d*l-n*b)*r;a[8]=(g*b-d*f)*r;return this},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[3];a[3]=b;b=a[2];a[2]=a[6];a[6]=b;b=a[5];a[5]=a[7];a[7]=b;return this},getNormalMatrix:function(a){return this.setFromMatrix4(a).getInverse(this).transpose()},
-transposeIntoArray:function(a){var b=this.elements;a[0]=b[0];a[1]=b[3];a[2]=b[6];a[3]=b[1];a[4]=b[4];a[5]=b[7];a[6]=b[2];a[7]=b[5];a[8]=b[8];return this},setUvTransform:function(a,b,c,d,e,f,g){var h=Math.cos(e);e=Math.sin(e);this.set(c*h,c*e,-c*(h*f+e*g)+f+a,-d*e,d*h,-d*(-e*f+h*g)+g+b,0,0,1)},scale:function(a,b){var c=this.elements;c[0]*=a;c[3]*=a;c[6]*=a;c[1]*=b;c[4]*=b;c[7]*=b;return this},rotate:function(a){var b=Math.cos(a);a=Math.sin(a);var c=this.elements,d=c[0],e=c[3],f=c[6],g=c[1],h=c[4],
-l=c[7];c[0]=b*d+a*g;c[3]=b*e+a*h;c[6]=b*f+a*l;c[1]=-a*d+b*g;c[4]=-a*e+b*h;c[7]=-a*f+b*l;return this},translate:function(a,b){var c=this.elements;c[0]+=a*c[2];c[3]+=a*c[5];c[6]+=a*c[8];c[1]+=b*c[2];c[4]+=b*c[5];c[7]+=b*c[8];return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;9>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;9>c;c++)this.elements[c]=a[c+b];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=
-this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];return a}});var nd,Pb={getDataURL:function(a){if(/^data:/i.test(a.src)||"undefined"==typeof HTMLCanvasElement)return a.src;if(!(a instanceof HTMLCanvasElement)){void 0===nd&&(nd=document.createElementNS("http://www.w3.org/1999/xhtml","canvas"));nd.width=a.width;nd.height=a.height;var b=nd.getContext("2d");a instanceof ImageData?b.putImageData(a,0,0):b.drawImage(a,0,0,a.width,a.height);
-a=nd}return 2048<a.width||2048<a.height?a.toDataURL("image/jpeg",.6):a.toDataURL("image/png")}},ej=0;V.DEFAULT_IMAGE=void 0;V.DEFAULT_MAPPING=300;V.prototype=Object.assign(Object.create(Ea.prototype),{constructor:V,isTexture:!0,updateMatrix:function(){this.matrix.setUvTransform(this.offset.x,this.offset.y,this.repeat.x,this.repeat.y,this.rotation,this.center.x,this.center.y)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name;this.image=a.image;this.mipmaps=
-a.mipmaps.slice(0);this.mapping=a.mapping;this.wrapS=a.wrapS;this.wrapT=a.wrapT;this.magFilter=a.magFilter;this.minFilter=a.minFilter;this.anisotropy=a.anisotropy;this.format=a.format;this.internalFormat=a.internalFormat;this.type=a.type;this.offset.copy(a.offset);this.repeat.copy(a.repeat);this.center.copy(a.center);this.rotation=a.rotation;this.matrixAutoUpdate=a.matrixAutoUpdate;this.matrix.copy(a.matrix);this.generateMipmaps=a.generateMipmaps;this.premultiplyAlpha=a.premultiplyAlpha;this.flipY=
-a.flipY;this.unpackAlignment=a.unpackAlignment;this.encoding=a.encoding;return this},toJSON:function(a){var b=void 0===a||"string"===typeof a;if(!b&&void 0!==a.textures[this.uuid])return a.textures[this.uuid];var c={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){var d=this.image;void 0===d.uuid&&(d.uuid=P.generateUUID());if(!b&&void 0===a.images[d.uuid]){if(Array.isArray(d)){var e=[];for(var f=0,g=d.length;f<g;f++)e.push(Pb.getDataURL(d[f]))}else e=Pb.getDataURL(d);a.images[d.uuid]={uuid:d.uuid,url:e}}c.image=d.uuid}b||(a.textures[this.uuid]=
-c);return c},dispose:function(){this.dispatchEvent({type:"dispose"})},transformUv:function(a){if(300!==this.mapping)return a;a.applyMatrix3(this.matrix);if(0>a.x||1<a.x)switch(this.wrapS){case 1E3:a.x-=Math.floor(a.x);break;case 1001:a.x=0>a.x?0:1;break;case 1002:a.x=1===Math.abs(Math.floor(a.x)%2)?Math.ceil(a.x)-a.x:a.x-Math.floor(a.x)}if(0>a.y||1<a.y)switch(this.wrapT){case 1E3:a.y-=Math.floor(a.y);break;case 1001:a.y=0>a.y?0:1;break;case 1002:a.y=1===Math.abs(Math.floor(a.y)%2)?Math.ceil(a.y)-
-a.y:a.y-Math.floor(a.y)}this.flipY&&(a.y=1-a.y);return a}});Object.defineProperty(V.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.defineProperties(S.prototype,{width:{get:function(){return this.z},set:function(a){this.z=a}},height:{get:function(){return this.w},set:function(a){this.w=a}}});Object.assign(S.prototype,{isVector4:!0,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setScalar:function(a){this.w=this.z=this.y=this.x=a;return this},setX:function(a){this.x=
-a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,
-this.y,this.z,this.w)},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},
-addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;this.w+=a.w*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;this.w-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=
-a;this.y*=a;this.z*=a;this.w*=a;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b,this.y=a.y/b,this.z=a.z/
-b);return this},setAxisAngleFromRotationMatrix:function(a){a=a.elements;var b=a[0];var c=a[4];var d=a[8],e=a[1],f=a[5],g=a[9];var h=a[2];var l=a[6];var n=a[10];if(.01>Math.abs(c-e)&&.01>Math.abs(d-h)&&.01>Math.abs(g-l)){if(.1>Math.abs(c+e)&&.1>Math.abs(d+h)&&.1>Math.abs(g+l)&&.1>Math.abs(b+f+n-3))return this.set(1,0,0,0),this;a=Math.PI;b=(b+1)/2;f=(f+1)/2;n=(n+1)/2;c=(c+e)/4;d=(d+h)/4;g=(g+l)/4;b>f&&b>n?.01>b?(l=0,c=h=.707106781):(l=Math.sqrt(b),h=c/l,c=d/l):f>n?.01>f?(l=.707106781,h=0,c=.707106781):
-(h=Math.sqrt(f),l=c/h,c=g/h):.01>n?(h=l=.707106781,c=0):(c=Math.sqrt(n),l=d/c,h=g/c);this.set(l,h,c,a);return this}a=Math.sqrt((l-g)*(l-g)+(d-h)*(d-h)+(e-c)*(e-c));.001>Math.abs(a)&&(a=1);this.x=(l-g)/a;this.y=(d-h)/a;this.z=(e-c)/a;this.w=Math.acos((b+f+n-1)/2);return this},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);this.w=Math.min(this.w,a.w);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,
-a.z);this.w=Math.max(this.w,a.w);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));this.w=Math.max(a.w,Math.min(b.w,this.w));return this},clampScalar:function(a,b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));this.w=Math.max(a,Math.min(b,this.w));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||
-1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);this.w=Math.floor(this.w);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);this.w=Math.ceil(this.w);return this},round:function(){this.x=Math.round(this.x);this.y=Math.round(this.y);this.z=Math.round(this.z);this.w=Math.round(this.w);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);
-this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);this.w=0>this.w?Math.ceil(this.w):Math.floor(this.w);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;this.w=-this.w;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},
-manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;this.w=a.w+(b.w-a.w)*c;return this},equals:function(a){return a.x===
-this.x&&a.y===this.y&&a.z===this.z&&a.w===this.w},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];this.w=a[b+3];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;a[b+3]=this.w;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector4: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);this.w=a.getW(b);return this},random:function(){this.x=
-Math.random();this.y=Math.random();this.z=Math.random();this.w=Math.random();return this}});Ga.prototype=Object.assign(Object.create(Ea.prototype),{constructor:Ga,isWebGLRenderTarget:!0,setSize:function(a,b){if(this.width!==a||this.height!==b)this.width=a,this.height=b,this.texture.image.width=a,this.texture.image.height=b,this.dispose();this.viewport.set(0,0,a,b);this.scissor.set(0,0,a,b)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.width=a.width;this.height=a.height;
-this.viewport.copy(a.viewport);this.texture=a.texture.clone();this.depthBuffer=a.depthBuffer;this.stencilBuffer=a.stencilBuffer;this.depthTexture=a.depthTexture;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});ag.prototype=Object.assign(Object.create(Ga.prototype),{constructor:ag,isWebGLMultisampleRenderTarget:!0,copy:function(a){Ga.prototype.copy.call(this,a);this.samples=a.samples;return this}});Object.assign(Y,{slerp:function(a,b,c,d){return c.copy(a).slerp(b,d)},slerpFlat:function(a,
-b,c,d,e,f,g){var h=c[d+0],l=c[d+1],n=c[d+2];c=c[d+3];d=e[f+0];var k=e[f+1],p=e[f+2];e=e[f+3];if(c!==e||h!==d||l!==k||n!==p){f=1-g;var m=h*d+l*k+n*p+c*e,r=0<=m?1:-1,t=1-m*m;t>Number.EPSILON&&(t=Math.sqrt(t),m=Math.atan2(t,m*r),f=Math.sin(f*m)/t,g=Math.sin(g*m)/t);r*=g;h=h*f+d*r;l=l*f+k*r;n=n*f+p*r;c=c*f+e*r;f===1-g&&(g=1/Math.sqrt(h*h+l*l+n*n+c*c),h*=g,l*=g,n*=g,c*=g)}a[b]=h;a[b+1]=l;a[b+2]=n;a[b+3]=c},multiplyQuaternionsFlat:function(a,b,c,d,e,f){var g=c[d],h=c[d+1],l=c[d+2];c=c[d+3];d=e[f];var n=
-e[f+1],k=e[f+2];e=e[f+3];a[b]=g*e+c*d+h*k-l*n;a[b+1]=h*e+c*n+l*d-g*k;a[b+2]=l*e+c*k+g*n-h*d;a[b+3]=c*e-g*d-h*n-l*k;return a}});Object.defineProperties(Y.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},w:{get:function(){return this._w},set:function(a){this._w=a;this._onChangeCallback()}}});
-Object.assign(Y.prototype,{isQuaternion:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._w=d;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._w)},copy:function(a){this._x=a.x;this._y=a.y;this._z=a.z;this._w=a.w;this._onChangeCallback();return this},setFromEuler:function(a,b){if(!a||!a.isEuler)throw Error("THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.");var c=a._x,d=a._y,e=
-a._z;a=a.order;var f=Math.cos,g=Math.sin,h=f(c/2),l=f(d/2);f=f(e/2);c=g(c/2);d=g(d/2);e=g(e/2);switch(a){case "XYZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "YXZ":this._x=c*l*f+h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "ZXY":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f-c*d*e;break;case "ZYX":this._x=c*l*f-h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f+c*d*e;break;case "YZX":this._x=
-c*l*f+h*d*e;this._y=h*d*f+c*l*e;this._z=h*l*e-c*d*f;this._w=h*l*f-c*d*e;break;case "XZY":this._x=c*l*f-h*d*e;this._y=h*d*f-c*l*e;this._z=h*l*e+c*d*f;this._w=h*l*f+c*d*e;break;default:console.warn("THREE.Quaternion: .setFromEuler() encountered an unknown order: "+a)}!1!==b&&this._onChangeCallback();return this},setFromAxisAngle:function(a,b){b/=2;var c=Math.sin(b);this._x=a.x*c;this._y=a.y*c;this._z=a.z*c;this._w=Math.cos(b);this._onChangeCallback();return this},setFromRotationMatrix:function(a){var b=
-a.elements,c=b[0];a=b[4];var d=b[8],e=b[1],f=b[5],g=b[9],h=b[2],l=b[6];b=b[10];var n=c+f+b;0<n?(c=.5/Math.sqrt(n+1),this._w=.25/c,this._x=(l-g)*c,this._y=(d-h)*c,this._z=(e-a)*c):c>f&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(l-g)/c,this._x=.25*c,this._y=(a+e)/c,this._z=(d+h)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-h)/c,this._x=(a+e)/c,this._y=.25*c,this._z=(g+l)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+h)/c,this._y=(g+l)/c,this._z=.25*c);this._onChangeCallback();return this},setFromUnitVectors:function(a,
-b){var c=a.dot(b)+1;1E-6>c?(c=0,Math.abs(a.x)>Math.abs(a.z)?(this._x=-a.y,this._y=a.x,this._z=0):(this._x=0,this._y=-a.z,this._z=a.y)):(this._x=a.y*b.z-a.z*b.y,this._y=a.z*b.x-a.x*b.z,this._z=a.x*b.y-a.y*b.x);this._w=c;return this.normalize()},angleTo:function(a){return 2*Math.acos(Math.abs(P.clamp(this.dot(a),-1,1)))},rotateTowards:function(a,b){var c=this.angleTo(a);if(0===c)return this;this.slerp(a,Math.min(1,b/c));return this},identity:function(){return this.set(0,0,0,1)},inverse:function(){return this.conjugate()},
-conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this._onChangeCallback();return this},dot:function(a){return this._x*a._x+this._y*a._y+this._z*a._z+this._w*a._w},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);
-this._onChangeCallback();return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},premultiply:function(a){return this.multiplyQuaternions(a,this)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z;a=a._w;var f=b._x,g=b._y,h=b._z;b=b._w;this._x=c*b+a*f+d*h-e*g;this._y=d*b+a*g+e*f-c*h;this._z=e*b+a*h+c*g-d*f;this._w=
-a*b-c*f-d*g-e*h;this._onChangeCallback();return this},slerp:function(a,b){if(0===b)return this;if(1===b)return this.copy(a);var c=this._x,d=this._y,e=this._z,f=this._w,g=f*a._w+c*a._x+d*a._y+e*a._z;0>g?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z=-a._z,g=-g):this.copy(a);if(1<=g)return this._w=f,this._x=c,this._y=d,this._z=e,this;a=1-g*g;if(a<=Number.EPSILON)return g=1-b,this._w=g*f+b*this._w,this._x=g*c+b*this._x,this._y=g*d+b*this._y,this._z=g*e+b*this._z,this.normalize(),this._onChangeCallback(),
-this;a=Math.sqrt(a);var h=Math.atan2(a,g);g=Math.sin((1-b)*h)/a;b=Math.sin(b*h)/a;this._w=f*g+this._w*b;this._x=c*g+this._x*b;this._y=d*g+this._y*b;this._z=e*g+this._z*b;this._onChangeCallback();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w},fromArray:function(a,b){void 0===b&&(b=0);this._x=a[b];this._y=a[b+1];this._z=a[b+2];this._w=a[b+3];this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;
-a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._w;return a},fromBufferAttribute:function(a,b){this._x=a.getX(b);this._y=a.getY(b);this._z=a.getZ(b);this._w=a.getW(b);return this},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});var Xg=new m,ti=new Y;Object.assign(m.prototype,{isVector3:!0,set:function(a,b,c){void 0===c&&(c=this.z);this.x=a;this.y=b;this.z=c;return this},setScalar:function(a){this.z=this.y=this.x=a;return this},setX:function(a){this.x=a;return this},
-setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}return this},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+a);}},clone:function(){return new this.constructor(this.x,this.y,this.z)},copy:function(a){this.x=a.x;this.y=a.y;
-this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addScaledVector:function(a,b){this.x+=a.x*b;this.y+=a.y*b;this.z+=a.z*b;return this},sub:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),
-this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subScalar:function(a){this.x-=a;this.y-=a;this.z-=a;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=
-a;return this},multiplyVectors:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyEuler:function(a){a&&a.isEuler||console.error("THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.");return this.applyQuaternion(ti.setFromEuler(a))},applyAxisAngle:function(a,b){return this.applyQuaternion(ti.setFromAxisAngle(a,b))},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*
-d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyNormalMatrix:function(a){return this.applyMatrix3(a).normalize()},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;var e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]);this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,g=a.z;a=a.w;var h=a*b+f*d-g*c,l=a*c+g*b-e*d,n=a*d+e*c-f*b;b=-e*b-f*c-g*d;this.x=h*
-a+b*-e+l*-g-n*-f;this.y=l*a+b*-f+n*-e-h*-g;this.z=n*a+b*-g+h*-f-l*-e;return this},project:function(a){return this.applyMatrix4(a.matrixWorldInverse).applyMatrix4(a.projectionMatrix)},unproject:function(a){return this.applyMatrix4(a.projectionMatrixInverse).applyMatrix4(a.matrixWorld)},transformDirection:function(a){var b=this.x,c=this.y,d=this.z;a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]*b+a[6]*c+a[10]*d;return this.normalize()},divide:function(a){this.x/=a.x;
-this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){return this.multiplyScalar(1/a)},min:function(a){this.x=Math.min(this.x,a.x);this.y=Math.min(this.y,a.y);this.z=Math.min(this.z,a.z);return this},max:function(a){this.x=Math.max(this.x,a.x);this.y=Math.max(this.y,a.y);this.z=Math.max(this.z,a.z);return this},clamp:function(a,b){this.x=Math.max(a.x,Math.min(b.x,this.x));this.y=Math.max(a.y,Math.min(b.y,this.y));this.z=Math.max(a.z,Math.min(b.z,this.z));return this},clampScalar:function(a,
-b){this.x=Math.max(a,Math.min(b,this.x));this.y=Math.max(a,Math.min(b,this.y));this.z=Math.max(a,Math.min(b,this.z));return this},clampLength:function(a,b){var c=this.length();return this.divideScalar(c||1).multiplyScalar(Math.max(a,Math.min(b,c)))},floor:function(){this.x=Math.floor(this.x);this.y=Math.floor(this.y);this.z=Math.floor(this.z);return this},ceil:function(){this.x=Math.ceil(this.x);this.y=Math.ceil(this.y);this.z=Math.ceil(this.z);return this},round:function(){this.x=Math.round(this.x);
-this.y=Math.round(this.y);this.z=Math.round(this.z);return this},roundToZero:function(){this.x=0>this.x?Math.ceil(this.x):Math.floor(this.x);this.y=0>this.y?Math.ceil(this.y):Math.floor(this.y);this.z=0>this.z?Math.ceil(this.z):Math.floor(this.z);return this},negate:function(){this.x=-this.x;this.y=-this.y;this.z=-this.z;return this},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*
-this.x+this.y*this.y+this.z*this.z)},manhattanLength:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length()||1)},setLength:function(a){return this.normalize().multiplyScalar(a)},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},lerpVectors:function(a,b,c){this.x=a.x+(b.x-a.x)*c;this.y=a.y+(b.y-a.y)*c;this.z=a.z+(b.z-a.z)*c;return this},cross:function(a,b){return void 0!==b?
-(console.warn("THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b)):this.crossVectors(this,a)},crossVectors:function(a,b){var c=a.x,d=a.y;a=a.z;var e=b.x,f=b.y;b=b.z;this.x=d*b-a*f;this.y=a*e-c*b;this.z=c*f-d*e;return this},projectOnVector:function(a){var b=a.lengthSq();if(0===b)return this.set(0,0,0);b=a.dot(this)/b;return this.copy(a).multiplyScalar(b)},projectOnPlane:function(a){Xg.copy(this).projectOnVector(a);return this.sub(Xg)},
-reflect:function(a){return this.sub(Xg.copy(a).multiplyScalar(2*this.dot(a)))},angleTo:function(a){var b=Math.sqrt(this.lengthSq()*a.lengthSq());if(0===b)return Math.PI/2;a=this.dot(a)/b;return Math.acos(P.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y;a=this.z-a.z;return b*b+c*c+a*a},manhattanDistanceTo:function(a){return Math.abs(this.x-a.x)+Math.abs(this.y-a.y)+Math.abs(this.z-a.z)},setFromSpherical:function(a){return this.setFromSphericalCoords(a.radius,
-a.phi,a.theta)},setFromSphericalCoords:function(a,b,c){var d=Math.sin(b)*a;this.x=d*Math.sin(c);this.y=Math.cos(b)*a;this.z=d*Math.cos(c);return this},setFromCylindrical:function(a){return this.setFromCylindricalCoords(a.radius,a.theta,a.y)},setFromCylindricalCoords:function(a,b,c){this.x=a*Math.sin(b);this.y=c;this.z=a*Math.cos(b);return this},setFromMatrixPosition:function(a){a=a.elements;this.x=a[12];this.y=a[13];this.z=a[14];return this},setFromMatrixScale:function(a){var b=this.setFromMatrixColumn(a,
-0).length(),c=this.setFromMatrixColumn(a,1).length();a=this.setFromMatrixColumn(a,2).length();this.x=b;this.y=c;this.z=a;return this},setFromMatrixColumn:function(a,b){return this.fromArray(a.elements,4*b)},setFromMatrix3Column:function(a,b){return this.fromArray(a.elements,3*b)},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a,b){void 0===b&&(b=0);this.x=a[b];this.y=a[b+1];this.z=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);
-a[b]=this.x;a[b+1]=this.y;a[b+2]=this.z;return a},fromBufferAttribute:function(a,b,c){void 0!==c&&console.warn("THREE.Vector3: offset has been removed from .fromBufferAttribute().");this.x=a.getX(b);this.y=a.getY(b);this.z=a.getZ(b);return this},random:function(){this.x=Math.random();this.y=Math.random();this.z=Math.random();return this}});var od=new m,pa=new U,Kk=new m(0,0,0),Lk=new m(1,1,1),Qb=new m,Bf=new m,Ca=new m;Object.assign(U.prototype,{isMatrix4:!0,set:function(a,b,c,d,e,f,g,h,l,n,k,p,m,
-r,t,v){var q=this.elements;q[0]=a;q[4]=b;q[8]=c;q[12]=d;q[1]=e;q[5]=f;q[9]=g;q[13]=h;q[2]=l;q[6]=n;q[10]=k;q[14]=p;q[3]=m;q[7]=r;q[11]=t;q[15]=v;return this},identity:function(){this.set(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1);return this},clone:function(){return(new U).fromArray(this.elements)},copy:function(a){var b=this.elements;a=a.elements;b[0]=a[0];b[1]=a[1];b[2]=a[2];b[3]=a[3];b[4]=a[4];b[5]=a[5];b[6]=a[6];b[7]=a[7];b[8]=a[8];b[9]=a[9];b[10]=a[10];b[11]=a[11];b[12]=a[12];b[13]=a[13];b[14]=a[14];b[15]=
-a[15];return this},copyPosition:function(a){var b=this.elements;a=a.elements;b[12]=a[12];b[13]=a[13];b[14]=a[14];return this},extractBasis:function(a,b,c){a.setFromMatrixColumn(this,0);b.setFromMatrixColumn(this,1);c.setFromMatrixColumn(this,2);return this},makeBasis:function(a,b,c){this.set(a.x,b.x,c.x,0,a.y,b.y,c.y,0,a.z,b.z,c.z,0,0,0,0,1);return this},extractRotation:function(a){var b=this.elements,c=a.elements,d=1/od.setFromMatrixColumn(a,0).length(),e=1/od.setFromMatrixColumn(a,1).length();a=
-1/od.setFromMatrixColumn(a,2).length();b[0]=c[0]*d;b[1]=c[1]*d;b[2]=c[2]*d;b[3]=0;b[4]=c[4]*e;b[5]=c[5]*e;b[6]=c[6]*e;b[7]=0;b[8]=c[8]*a;b[9]=c[9]*a;b[10]=c[10]*a;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromEuler:function(a){a&&a.isEuler||console.error("THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.");var b=this.elements,c=a.x,d=a.y,e=a.z,f=Math.cos(c);c=Math.sin(c);var g=Math.cos(d);d=Math.sin(d);var h=Math.cos(e);e=
-Math.sin(e);if("XYZ"===a.order){a=f*h;var l=f*e,n=c*h,k=c*e;b[0]=g*h;b[4]=-g*e;b[8]=d;b[1]=l+n*d;b[5]=a-k*d;b[9]=-c*g;b[2]=k-a*d;b[6]=n+l*d;b[10]=f*g}else"YXZ"===a.order?(a=g*h,l=g*e,n=d*h,k=d*e,b[0]=a+k*c,b[4]=n*c-l,b[8]=f*d,b[1]=f*e,b[5]=f*h,b[9]=-c,b[2]=l*c-n,b[6]=k+a*c,b[10]=f*g):"ZXY"===a.order?(a=g*h,l=g*e,n=d*h,k=d*e,b[0]=a-k*c,b[4]=-f*e,b[8]=n+l*c,b[1]=l+n*c,b[5]=f*h,b[9]=k-a*c,b[2]=-f*d,b[6]=c,b[10]=f*g):"ZYX"===a.order?(a=f*h,l=f*e,n=c*h,k=c*e,b[0]=g*h,b[4]=n*d-l,b[8]=a*d+k,b[1]=g*e,b[5]=
-k*d+a,b[9]=l*d-n,b[2]=-d,b[6]=c*g,b[10]=f*g):"YZX"===a.order?(a=f*g,l=f*d,n=c*g,k=c*d,b[0]=g*h,b[4]=k-a*e,b[8]=n*e+l,b[1]=e,b[5]=f*h,b[9]=-c*h,b[2]=-d*h,b[6]=l*e+n,b[10]=a-k*e):"XZY"===a.order&&(a=f*g,l=f*d,n=c*g,k=c*d,b[0]=g*h,b[4]=-e,b[8]=d*h,b[1]=a*e+k,b[5]=f*h,b[9]=l*e-n,b[2]=n*e-l,b[6]=c*h,b[10]=k*e+a);b[3]=0;b[7]=0;b[11]=0;b[12]=0;b[13]=0;b[14]=0;b[15]=1;return this},makeRotationFromQuaternion:function(a){return this.compose(Kk,a,Lk)},lookAt:function(a,b,c){var d=this.elements;Ca.subVectors(a,
-b);0===Ca.lengthSq()&&(Ca.z=1);Ca.normalize();Qb.crossVectors(c,Ca);0===Qb.lengthSq()&&(1===Math.abs(c.z)?Ca.x+=1E-4:Ca.z+=1E-4,Ca.normalize(),Qb.crossVectors(c,Ca));Qb.normalize();Bf.crossVectors(Ca,Qb);d[0]=Qb.x;d[4]=Bf.x;d[8]=Ca.x;d[1]=Qb.y;d[5]=Bf.y;d[9]=Ca.y;d[2]=Qb.z;d[6]=Bf.z;d[10]=Ca.z;return this},multiply:function(a,b){return void 0!==b?(console.warn("THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead."),this.multiplyMatrices(a,b)):this.multiplyMatrices(this,
-a)},premultiply:function(a){return this.multiplyMatrices(a,this)},multiplyMatrices:function(a,b){var c=a.elements,d=b.elements;b=this.elements;a=c[0];var e=c[4],f=c[8],g=c[12],h=c[1],l=c[5],k=c[9],q=c[13],p=c[2],m=c[6],r=c[10],t=c[14],v=c[3],x=c[7],u=c[11];c=c[15];var w=d[0],A=d[4],C=d[8],N=d[12],y=d[1],I=d[5],E=d[9],D=d[13],F=d[2],G=d[6],H=d[10],J=d[14],K=d[3],L=d[7],O=d[11];d=d[15];b[0]=a*w+e*y+f*F+g*K;b[4]=a*A+e*I+f*G+g*L;b[8]=a*C+e*E+f*H+g*O;b[12]=a*N+e*D+f*J+g*d;b[1]=h*w+l*y+k*F+q*K;b[5]=h*A+
-l*I+k*G+q*L;b[9]=h*C+l*E+k*H+q*O;b[13]=h*N+l*D+k*J+q*d;b[2]=p*w+m*y+r*F+t*K;b[6]=p*A+m*I+r*G+t*L;b[10]=p*C+m*E+r*H+t*O;b[14]=p*N+m*D+r*J+t*d;b[3]=v*w+x*y+u*F+c*K;b[7]=v*A+x*I+u*G+c*L;b[11]=v*C+x*E+u*H+c*O;b[15]=v*N+x*D+u*J+c*d;return this},multiplyScalar:function(a){var b=this.elements;b[0]*=a;b[4]*=a;b[8]*=a;b[12]*=a;b[1]*=a;b[5]*=a;b[9]*=a;b[13]*=a;b[2]*=a;b[6]*=a;b[10]*=a;b[14]*=a;b[3]*=a;b[7]*=a;b[11]*=a;b[15]*=a;return this},determinant:function(){var a=this.elements,b=a[0],c=a[4],d=a[8],e=a[12],
-f=a[1],g=a[5],h=a[9],l=a[13],k=a[2],q=a[6],p=a[10],m=a[14];return a[3]*(+e*h*q-d*l*q-e*g*p+c*l*p+d*g*m-c*h*m)+a[7]*(+b*h*m-b*l*p+e*f*p-d*f*m+d*l*k-e*h*k)+a[11]*(+b*l*q-b*g*m-e*f*q+c*f*m+e*g*k-c*l*k)+a[15]*(-d*g*k-b*h*q+b*g*p+d*f*q-c*f*p+c*h*k)},transpose:function(){var a=this.elements;var b=a[1];a[1]=a[4];a[4]=b;b=a[2];a[2]=a[8];a[8]=b;b=a[6];a[6]=a[9];a[9]=b;b=a[3];a[3]=a[12];a[12]=b;b=a[7];a[7]=a[13];a[13]=b;b=a[11];a[11]=a[14];a[14]=b;return this},setPosition:function(a,b,c){var d=this.elements;
-a.isVector3?(d[12]=a.x,d[13]=a.y,d[14]=a.z):(d[12]=a,d[13]=b,d[14]=c);return this},getInverse:function(a,b){void 0!==b&&console.warn("THREE.Matrix4: .getInverse() can no longer be configured to throw on degenerate.");b=this.elements;var c=a.elements;a=c[0];var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],k=c[7],q=c[8],p=c[9],m=c[10],r=c[11],t=c[12],v=c[13],x=c[14];c=c[15];var u=p*x*k-v*m*k+v*l*r-h*x*r-p*l*c+h*m*c,w=t*m*k-q*x*k-t*l*r+g*x*r+q*l*c-g*m*c,A=q*v*k-t*p*k+t*h*r-g*v*r-q*h*c+g*p*c,C=t*p*l-q*v*
-l-t*h*m+g*v*m+q*h*x-g*p*x,N=a*u+d*w+e*A+f*C;if(0===N)return this.set(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0);N=1/N;b[0]=u*N;b[1]=(v*m*f-p*x*f-v*e*r+d*x*r+p*e*c-d*m*c)*N;b[2]=(h*x*f-v*l*f+v*e*k-d*x*k-h*e*c+d*l*c)*N;b[3]=(p*l*f-h*m*f-p*e*k+d*m*k+h*e*r-d*l*r)*N;b[4]=w*N;b[5]=(q*x*f-t*m*f+t*e*r-a*x*r-q*e*c+a*m*c)*N;b[6]=(t*l*f-g*x*f-t*e*k+a*x*k+g*e*c-a*l*c)*N;b[7]=(g*m*f-q*l*f+q*e*k-a*m*k-g*e*r+a*l*r)*N;b[8]=A*N;b[9]=(t*p*f-q*v*f-t*d*r+a*v*r+q*d*c-a*p*c)*N;b[10]=(g*v*f-t*h*f+t*d*k-a*v*k-g*d*c+a*h*c)*N;b[11]=
-(q*h*f-g*p*f-q*d*k+a*p*k+g*d*r-a*h*r)*N;b[12]=C*N;b[13]=(q*v*e-t*p*e+t*d*m-a*v*m-q*d*x+a*p*x)*N;b[14]=(t*h*e-g*v*e-t*d*l+a*v*l+g*d*x-a*h*x)*N;b[15]=(g*p*e-q*h*e+q*d*l-a*p*l-g*d*m+a*h*m)*N;return this},scale:function(a){var b=this.elements,c=a.x,d=a.y;a=a.z;b[0]*=c;b[4]*=d;b[8]*=a;b[1]*=c;b[5]*=d;b[9]*=a;b[2]*=c;b[6]*=d;b[10]*=a;b[3]*=c;b[7]*=d;b[11]*=a;return this},getMaxScaleOnAxis:function(){var a=this.elements;return Math.sqrt(Math.max(a[0]*a[0]+a[1]*a[1]+a[2]*a[2],a[4]*a[4]+a[5]*a[5]+a[6]*a[6],
-a[8]*a[8]+a[9]*a[9]+a[10]*a[10]))},makeTranslation:function(a,b,c){this.set(1,0,0,a,0,1,0,b,0,0,1,c,0,0,0,1);return this},makeRotationX:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(1,0,0,0,0,b,-a,0,0,a,b,0,0,0,0,1);return this},makeRotationY:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,0,a,0,0,1,0,0,-a,0,b,0,0,0,0,1);return this},makeRotationZ:function(a){var b=Math.cos(a);a=Math.sin(a);this.set(b,-a,0,0,a,b,0,0,0,0,1,0,0,0,0,1);return this},makeRotationAxis:function(a,b){var c=
-Math.cos(b);b=Math.sin(b);var d=1-c,e=a.x,f=a.y;a=a.z;var g=d*e,h=d*f;this.set(g*e+c,g*f-b*a,g*a+b*f,0,g*f+b*a,h*f+c,h*a-b*e,0,g*a-b*f,h*a+b*e,d*a*a+c,0,0,0,0,1);return this},makeScale:function(a,b,c){this.set(a,0,0,0,0,b,0,0,0,0,c,0,0,0,0,1);return this},makeShear:function(a,b,c){this.set(1,b,c,0,a,1,c,0,a,b,1,0,0,0,0,1);return this},compose:function(a,b,c){var d=this.elements,e=b._x,f=b._y,g=b._z,h=b._w,l=e+e,k=f+f,q=g+g;b=e*l;var p=e*k;e*=q;var m=f*k;f*=q;g*=q;l*=h;k*=h;h*=q;q=c.x;var r=c.y;c=
-c.z;d[0]=(1-(m+g))*q;d[1]=(p+h)*q;d[2]=(e-k)*q;d[3]=0;d[4]=(p-h)*r;d[5]=(1-(b+g))*r;d[6]=(f+l)*r;d[7]=0;d[8]=(e+k)*c;d[9]=(f-l)*c;d[10]=(1-(b+m))*c;d[11]=0;d[12]=a.x;d[13]=a.y;d[14]=a.z;d[15]=1;return this},decompose:function(a,b,c){var d=this.elements,e=od.set(d[0],d[1],d[2]).length(),f=od.set(d[4],d[5],d[6]).length(),g=od.set(d[8],d[9],d[10]).length();0>this.determinant()&&(e=-e);a.x=d[12];a.y=d[13];a.z=d[14];pa.copy(this);a=1/e;d=1/f;var h=1/g;pa.elements[0]*=a;pa.elements[1]*=a;pa.elements[2]*=
-a;pa.elements[4]*=d;pa.elements[5]*=d;pa.elements[6]*=d;pa.elements[8]*=h;pa.elements[9]*=h;pa.elements[10]*=h;b.setFromRotationMatrix(pa);c.x=e;c.y=f;c.z=g;return this},makePerspective:function(a,b,c,d,e,f){void 0===f&&console.warn("THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.");var g=this.elements;g[0]=2*e/(b-a);g[4]=0;g[8]=(b+a)/(b-a);g[12]=0;g[1]=0;g[5]=2*e/(c-d);g[9]=(c+d)/(c-d);g[13]=0;g[2]=0;g[6]=0;g[10]=-(f+e)/(f-e);g[14]=-2*f*e/(f-e);
-g[3]=0;g[7]=0;g[11]=-1;g[15]=0;return this},makeOrthographic:function(a,b,c,d,e,f){var g=this.elements,h=1/(b-a),l=1/(c-d),k=1/(f-e);g[0]=2*h;g[4]=0;g[8]=0;g[12]=-((b+a)*h);g[1]=0;g[5]=2*l;g[9]=0;g[13]=-((c+d)*l);g[2]=0;g[6]=0;g[10]=-2*k;g[14]=-((f+e)*k);g[3]=0;g[7]=0;g[11]=0;g[15]=1;return this},equals:function(a){var b=this.elements;a=a.elements;for(var c=0;16>c;c++)if(b[c]!==a[c])return!1;return!0},fromArray:function(a,b){void 0===b&&(b=0);for(var c=0;16>c;c++)this.elements[c]=a[c+b];return this},
-toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);var c=this.elements;a[b]=c[0];a[b+1]=c[1];a[b+2]=c[2];a[b+3]=c[3];a[b+4]=c[4];a[b+5]=c[5];a[b+6]=c[6];a[b+7]=c[7];a[b+8]=c[8];a[b+9]=c[9];a[b+10]=c[10];a[b+11]=c[11];a[b+12]=c[12];a[b+13]=c[13];a[b+14]=c[14];a[b+15]=c[15];return a}});var ui=new U,vi=new Y;Vb.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");Vb.DefaultOrder="XYZ";Object.defineProperties(Vb.prototype,{x:{get:function(){return this._x},set:function(a){this._x=a;this._onChangeCallback()}},
-y:{get:function(){return this._y},set:function(a){this._y=a;this._onChangeCallback()}},z:{get:function(){return this._z},set:function(a){this._z=a;this._onChangeCallback()}},order:{get:function(){return this._order},set:function(a){this._order=a;this._onChangeCallback()}}});Object.assign(Vb.prototype,{isEuler:!0,set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._onChangeCallback();return this},clone:function(){return new this.constructor(this._x,this._y,this._z,this._order)},
-copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._onChangeCallback();return this},setFromRotationMatrix:function(a,b,c){var d=P.clamp,e=a.elements;a=e[0];var f=e[4],g=e[8],h=e[1],l=e[5],k=e[9],q=e[2],p=e[6];e=e[10];b=b||this._order;switch(b){case "XYZ":this._y=Math.asin(d(g,-1,1));.9999999>Math.abs(g)?(this._x=Math.atan2(-k,e),this._z=Math.atan2(-f,a)):(this._x=Math.atan2(p,l),this._z=0);break;case "YXZ":this._x=Math.asin(-d(k,-1,1));.9999999>Math.abs(k)?(this._y=
-Math.atan2(g,e),this._z=Math.atan2(h,l)):(this._y=Math.atan2(-q,a),this._z=0);break;case "ZXY":this._x=Math.asin(d(p,-1,1));.9999999>Math.abs(p)?(this._y=Math.atan2(-q,e),this._z=Math.atan2(-f,l)):(this._y=0,this._z=Math.atan2(h,a));break;case "ZYX":this._y=Math.asin(-d(q,-1,1));.9999999>Math.abs(q)?(this._x=Math.atan2(p,e),this._z=Math.atan2(h,a)):(this._x=0,this._z=Math.atan2(-f,l));break;case "YZX":this._z=Math.asin(d(h,-1,1));.9999999>Math.abs(h)?(this._x=Math.atan2(-k,l),this._y=Math.atan2(-q,
-a)):(this._x=0,this._y=Math.atan2(g,e));break;case "XZY":this._z=Math.asin(-d(f,-1,1));.9999999>Math.abs(f)?(this._x=Math.atan2(p,l),this._y=Math.atan2(g,a)):(this._x=Math.atan2(-k,e),this._y=0);break;default:console.warn("THREE.Euler: .setFromRotationMatrix() encountered an unknown order: "+b)}this._order=b;!1!==c&&this._onChangeCallback();return this},setFromQuaternion:function(a,b,c){ui.makeRotationFromQuaternion(a);return this.setFromRotationMatrix(ui,b,c)},setFromVector3:function(a,b){return this.set(a.x,
-a.y,a.z,b||this._order)},reorder:function(a){vi.setFromEuler(this);return this.setFromQuaternion(vi,a)},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._onChangeCallback();return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this._x;a[b+1]=this._y;a[b+2]=this._z;a[b+3]=this._order;return a},toVector3:function(a){return a?a.set(this._x,
-this._y,this._z):new m(this._x,this._y,this._z)},_onChange:function(a){this._onChangeCallback=a;return this},_onChangeCallback:function(){}});Object.assign(He.prototype,{set:function(a){this.mask=1<<a|0},enable:function(a){this.mask=this.mask|1<<a|0},enableAll:function(){this.mask=-1},toggle:function(a){this.mask^=1<<a|0},disable:function(a){this.mask&=~(1<<a|0)},disableAll:function(){this.mask=0},test:function(a){return 0!==(this.mask&a.mask)}});var fj=0,wi=new m,pd=new Y,tb=new U,Cf=new m,xe=new m,
-Mk=new m,Nk=new Y,xi=new m(1,0,0),yi=new m(0,1,0),zi=new m(0,0,1),Ok={type:"added"},Pk={type:"removed"};C.DefaultUp=new m(0,1,0);C.DefaultMatrixAutoUpdate=!0;C.prototype=Object.assign(Object.create(Ea.prototype),{constructor:C,isObject3D:!0,onBeforeRender:function(){},onAfterRender:function(){},applyMatrix4:function(a){this.matrixAutoUpdate&&this.updateMatrix();this.matrix.premultiply(a);this.matrix.decompose(this.position,this.quaternion,this.scale)},applyQuaternion:function(a){this.quaternion.premultiply(a);
-return this},setRotationFromAxisAngle:function(a,b){this.quaternion.setFromAxisAngle(a,b)},setRotationFromEuler:function(a){this.quaternion.setFromEuler(a,!0)},setRotationFromMatrix:function(a){this.quaternion.setFromRotationMatrix(a)},setRotationFromQuaternion:function(a){this.quaternion.copy(a)},rotateOnAxis:function(a,b){pd.setFromAxisAngle(a,b);this.quaternion.multiply(pd);return this},rotateOnWorldAxis:function(a,b){pd.setFromAxisAngle(a,b);this.quaternion.premultiply(pd);return this},rotateX:function(a){return this.rotateOnAxis(xi,
-a)},rotateY:function(a){return this.rotateOnAxis(yi,a)},rotateZ:function(a){return this.rotateOnAxis(zi,a)},translateOnAxis:function(a,b){wi.copy(a).applyQuaternion(this.quaternion);this.position.add(wi.multiplyScalar(b));return this},translateX:function(a){return this.translateOnAxis(xi,a)},translateY:function(a){return this.translateOnAxis(yi,a)},translateZ:function(a){return this.translateOnAxis(zi,a)},localToWorld:function(a){return a.applyMatrix4(this.matrixWorld)},worldToLocal:function(a){return a.applyMatrix4(tb.getInverse(this.matrixWorld))},
-lookAt:function(a,b,c){a.isVector3?Cf.copy(a):Cf.set(a,b,c);a=this.parent;this.updateWorldMatrix(!0,!1);xe.setFromMatrixPosition(this.matrixWorld);this.isCamera||this.isLight?tb.lookAt(xe,Cf,this.up):tb.lookAt(Cf,xe,this.up);this.quaternion.setFromRotationMatrix(tb);a&&(tb.extractRotation(a.matrixWorld),pd.setFromRotationMatrix(tb),this.quaternion.premultiply(pd.inverse()))},add:function(a){if(1<arguments.length){for(var b=0;b<arguments.length;b++)this.add(arguments[b]);return this}if(a===this)return console.error("THREE.Object3D.add: object can't be added as a child of itself.",
-a),this;a&&a.isObject3D?(null!==a.parent&&a.parent.remove(a),a.parent=this,this.children.push(a),a.dispatchEvent(Ok)):console.error("THREE.Object3D.add: object not an instance of THREE.Object3D.",a);return this},remove:function(a){if(1<arguments.length){for(var b=0;b<arguments.length;b++)this.remove(arguments[b]);return this}b=this.children.indexOf(a);-1!==b&&(a.parent=null,this.children.splice(b,1),a.dispatchEvent(Pk));return this},attach:function(a){this.updateWorldMatrix(!0,!1);tb.getInverse(this.matrixWorld);
-null!==a.parent&&(a.parent.updateWorldMatrix(!0,!1),tb.multiply(a.parent.matrixWorld));a.applyMatrix4(tb);a.updateWorldMatrix(!1,!1);this.add(a);return this},getObjectById:function(a){return this.getObjectByProperty("id",a)},getObjectByName:function(a){return this.getObjectByProperty("name",a)},getObjectByProperty:function(a,b){if(this[a]===b)return this;for(var c=0,d=this.children.length;c<d;c++){var e=this.children[c].getObjectByProperty(a,b);if(void 0!==e)return e}},getWorldPosition:function(a){void 0===
-a&&(console.warn("THREE.Object3D: .getWorldPosition() target is now required"),a=new m);this.updateMatrixWorld(!0);return a.setFromMatrixPosition(this.matrixWorld)},getWorldQuaternion:function(a){void 0===a&&(console.warn("THREE.Object3D: .getWorldQuaternion() target is now required"),a=new Y);this.updateMatrixWorld(!0);this.matrixWorld.decompose(xe,a,Mk);return a},getWorldScale:function(a){void 0===a&&(console.warn("THREE.Object3D: .getWorldScale() target is now required"),a=new m);this.updateMatrixWorld(!0);
-this.matrixWorld.decompose(xe,Nk,a);return a},getWorldDirection:function(a){void 0===a&&(console.warn("THREE.Object3D: .getWorldDirection() target is now required"),a=new m);this.updateMatrixWorld(!0);var b=this.matrixWorld.elements;return a.set(b[8],b[9],b[10]).normalize()},raycast:function(){},traverse:function(a){a(this);for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverse(a)},traverseVisible:function(a){if(!1!==this.visible){a(this);for(var b=this.children,c=0,d=b.length;c<d;c++)b[c].traverseVisible(a)}},
-traverseAncestors:function(a){var b=this.parent;null!==b&&(a(b),b.traverseAncestors(a))},updateMatrix:function(){this.matrix.compose(this.position,this.quaternion,this.scale);this.matrixWorldNeedsUpdate=!0},updateMatrixWorld:function(a){this.matrixAutoUpdate&&this.updateMatrix();if(this.matrixWorldNeedsUpdate||a)null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix),this.matrixWorldNeedsUpdate=!1,a=!0;for(var b=this.children,c=
-0,d=b.length;c<d;c++)b[c].updateMatrixWorld(a)},updateWorldMatrix:function(a,b){var c=this.parent;!0===a&&null!==c&&c.updateWorldMatrix(!0,!1);this.matrixAutoUpdate&&this.updateMatrix();null===this.parent?this.matrixWorld.copy(this.matrix):this.matrixWorld.multiplyMatrices(this.parent.matrixWorld,this.matrix);if(!0===b)for(a=this.children,b=0,c=a.length;b<c;b++)a[b].updateWorldMatrix(!1,!0)},toJSON:function(a){function b(b,c){void 0===b[c.uuid]&&(b[c.uuid]=c.toJSON(a));return c.uuid}function c(a){var b=
-[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var d=void 0===a||"string"===typeof a,e={};d&&(a={geometries:{},materials:{},textures:{},images:{},shapes:{}},e.metadata={version:4.5,type:"Object",generator:"Object3D.toJSON"});var f={};f.uuid=this.uuid;f.type=this.type;""!==this.name&&(f.name=this.name);!0===this.castShadow&&(f.castShadow=!0);!0===this.receiveShadow&&(f.receiveShadow=!0);!1===this.visible&&(f.visible=!1);!1===this.frustumCulled&&(f.frustumCulled=!1);0!==this.renderOrder&&
-(f.renderOrder=this.renderOrder);"{}"!==JSON.stringify(this.userData)&&(f.userData=this.userData);f.layers=this.layers.mask;f.matrix=this.matrix.toArray();!1===this.matrixAutoUpdate&&(f.matrixAutoUpdate=!1);this.isInstancedMesh&&(f.type="InstancedMesh",f.count=this.count,f.instanceMatrix=this.instanceMatrix.toJSON());if(this.isMesh||this.isLine||this.isPoints){f.geometry=b(a.geometries,this.geometry);var g=this.geometry.parameters;if(void 0!==g&&void 0!==g.shapes)if(g=g.shapes,Array.isArray(g))for(var h=
-0,l=g.length;h<l;h++)b(a.shapes,g[h]);else b(a.shapes,g)}if(void 0!==this.material)if(Array.isArray(this.material)){g=[];h=0;for(l=this.material.length;h<l;h++)g.push(b(a.materials,this.material[h]));f.material=g}else f.material=b(a.materials,this.material);if(0<this.children.length)for(f.children=[],g=0;g<this.children.length;g++)f.children.push(this.children[g].toJSON(a).object);if(d){d=c(a.geometries);g=c(a.materials);h=c(a.textures);l=c(a.images);var k=c(a.shapes);0<d.length&&(e.geometries=d);
-0<g.length&&(e.materials=g);0<h.length&&(e.textures=h);0<l.length&&(e.images=l);0<k.length&&(e.shapes=k)}e.object=f;return e},clone:function(a){return(new this.constructor).copy(this,a)},copy:function(a,b){void 0===b&&(b=!0);this.name=a.name;this.up.copy(a.up);this.position.copy(a.position);this.rotation.order=a.rotation.order;this.quaternion.copy(a.quaternion);this.scale.copy(a.scale);this.matrix.copy(a.matrix);this.matrixWorld.copy(a.matrixWorld);this.matrixAutoUpdate=a.matrixAutoUpdate;this.matrixWorldNeedsUpdate=
-a.matrixWorldNeedsUpdate;this.layers.mask=a.layers.mask;this.visible=a.visible;this.castShadow=a.castShadow;this.receiveShadow=a.receiveShadow;this.frustumCulled=a.frustumCulled;this.renderOrder=a.renderOrder;this.userData=JSON.parse(JSON.stringify(a.userData));if(!0===b)for(b=0;b<a.children.length;b++)this.add(a.children[b].clone());return this}});Ad.prototype=Object.assign(Object.create(C.prototype),{constructor:Ad,isScene:!0,copy:function(a,b){C.prototype.copy.call(this,a,b);null!==a.background&&
-(this.background=a.background.clone());null!==a.environment&&(this.environment=a.environment.clone());null!==a.fog&&(this.fog=a.fog.clone());null!==a.overrideMaterial&&(this.overrideMaterial=a.overrideMaterial.clone());this.autoUpdate=a.autoUpdate;this.matrixAutoUpdate=a.matrixAutoUpdate;return this},toJSON:function(a){var b=C.prototype.toJSON.call(this,a);null!==this.background&&(b.object.background=this.background.toJSON(a));null!==this.environment&&(b.object.environment=this.environment.toJSON(a));
-null!==this.fog&&(b.object.fog=this.fog.toJSON());return b},dispose:function(){this.dispatchEvent({type:"dispose"})}});var ub=[new m,new m,new m,new m,new m,new m,new m,new m],ye=new m,Yg=new Sa,qd=new m,rd=new m,sd=new m,Rb=new m,Sb=new m,sc=new m,ze=new m,Df=new m,Ef=new m,Wb=new m;Object.assign(Sa.prototype,{isBox3:!0,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromArray:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.length;h<
-l;h+=3){var k=a[h],q=a[h+1],p=a[h+2];k<b&&(b=k);q<c&&(c=q);p<d&&(d=p);k>e&&(e=k);q>f&&(f=q);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromBufferAttribute:function(a){for(var b=Infinity,c=Infinity,d=Infinity,e=-Infinity,f=-Infinity,g=-Infinity,h=0,l=a.count;h<l;h++){var k=a.getX(h),q=a.getY(h),p=a.getZ(h);k<b&&(b=k);q<c&&(c=q);p<d&&(d=p);k>e&&(e=k);q>f&&(f=q);p>g&&(g=p)}this.min.set(b,c,d);this.max.set(e,f,g);return this},setFromPoints:function(a){this.makeEmpty();for(var b=
-0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(a,b){b=ye.copy(b).multiplyScalar(.5);this.min.copy(a).sub(b);this.max.copy(a).add(b);return this},setFromObject:function(a){this.makeEmpty();return this.expandByObject(a)},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=this.min.z=Infinity;this.max.x=this.max.y=this.max.z=-Infinity;return this},
-isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y||this.max.z<this.min.z},getCenter:function(a){void 0===a&&(console.warn("THREE.Box3: .getCenter() target is now required"),a=new m);return this.isEmpty()?a.set(0,0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){void 0===a&&(console.warn("THREE.Box3: .getSize() target is now required"),a=new m);return this.isEmpty()?a.set(0,0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);
-this.max.max(a);return this},expandByVector:function(a){this.min.sub(a);this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},expandByObject:function(a){a.updateWorldMatrix(!1,!1);var b=a.geometry;void 0!==b&&(null===b.boundingBox&&b.computeBoundingBox(),Yg.copy(b.boundingBox),Yg.applyMatrix4(a.matrixWorld),this.union(Yg));a=a.children;b=0;for(var c=a.length;b<c;b++)this.expandByObject(a[b]);return this},containsPoint:function(a){return a.x<
-this.min.x||a.x>this.max.x||a.y<this.min.y||a.y>this.max.y||a.z<this.min.z||a.z>this.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box3: .getParameter() target is now required"),b=new m);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},
-intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y||a.max.z<this.min.z||a.min.z>this.max.z?!1:!0},intersectsSphere:function(a){this.clampPoint(a.center,ye);return ye.distanceToSquared(a.center)<=a.radius*a.radius},intersectsPlane:function(a){if(0<a.normal.x){var b=a.normal.x*this.min.x;var c=a.normal.x*this.max.x}else b=a.normal.x*this.max.x,c=a.normal.x*this.min.x;0<a.normal.y?(b+=a.normal.y*this.min.y,c+=a.normal.y*this.max.y):(b+=a.normal.y*
-this.max.y,c+=a.normal.y*this.min.y);0<a.normal.z?(b+=a.normal.z*this.min.z,c+=a.normal.z*this.max.z):(b+=a.normal.z*this.max.z,c+=a.normal.z*this.min.z);return b<=-a.constant&&c>=-a.constant},intersectsTriangle:function(a){if(this.isEmpty())return!1;this.getCenter(ze);Df.subVectors(this.max,ze);qd.subVectors(a.a,ze);rd.subVectors(a.b,ze);sd.subVectors(a.c,ze);Rb.subVectors(rd,qd);Sb.subVectors(sd,rd);sc.subVectors(qd,sd);a=[0,-Rb.z,Rb.y,0,-Sb.z,Sb.y,0,-sc.z,sc.y,Rb.z,0,-Rb.x,Sb.z,0,-Sb.x,sc.z,0,
--sc.x,-Rb.y,Rb.x,0,-Sb.y,Sb.x,0,-sc.y,sc.x,0];if(!bg(a,qd,rd,sd,Df))return!1;a=[1,0,0,0,1,0,0,0,1];if(!bg(a,qd,rd,sd,Df))return!1;Ef.crossVectors(Rb,Sb);a=[Ef.x,Ef.y,Ef.z];return bg(a,qd,rd,sd,Df)},clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box3: .clampPoint() target is now required"),b=new m);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return ye.copy(a).clamp(this.min,this.max).sub(a).length()},getBoundingSphere:function(a){void 0===a&&console.error("THREE.Box3: .getBoundingSphere() target is now required");
-this.getCenter(a.center);a.radius=.5*this.getSize(ye).length();return a},intersect:function(a){this.min.max(a.min);this.max.min(a.max);this.isEmpty()&&this.makeEmpty();return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(a){if(this.isEmpty())return this;ub[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(a);ub[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(a);ub[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(a);ub[3].set(this.min.x,
-this.max.y,this.max.z).applyMatrix4(a);ub[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(a);ub[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(a);ub[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(a);ub[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(a);this.setFromPoints(ub);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)}});var Qk=new Sa;Object.assign(cb.prototype,{set:function(a,
-b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(a,b){var c=this.center;void 0!==b?c.copy(b):Qk.setFromPoints(a).getCenter(c);for(var d=b=0,e=a.length;d<e;d++)b=Math.max(b,c.distanceToSquared(a[d]));this.radius=Math.sqrt(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.center.copy(a.center);this.radius=a.radius;return this},isEmpty:function(){return 0>this.radius},makeEmpty:function(){this.center.set(0,0,0);this.radius=-1;return this},
-containsPoint:function(a){return a.distanceToSquared(this.center)<=this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},intersectsBox:function(a){return a.intersectsSphere(this)},intersectsPlane:function(a){return Math.abs(a.distanceToPoint(this.center))<=this.radius},clampPoint:function(a,b){var c=this.center.distanceToSquared(a);void 0===b&&(console.warn("THREE.Sphere: .clampPoint() target is now required"),
-b=new m);b.copy(a);c>this.radius*this.radius&&(b.sub(this.center).normalize(),b.multiplyScalar(this.radius).add(this.center));return b},getBoundingBox:function(a){void 0===a&&(console.warn("THREE.Sphere: .getBoundingBox() target is now required"),a=new Sa);if(this.isEmpty())return a.makeEmpty(),a;a.set(this.center,this.center);a.expandByScalar(this.radius);return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);
-return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius}});var vb=new m,Zg=new m,Ff=new m,Tb=new m,$g=new m,Gf=new m,ah=new m;Object.assign(Xb.prototype,{set:function(a,b){this.origin.copy(a);this.direction.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.origin.copy(a.origin);this.direction.copy(a.direction);return this},at:function(a,b){void 0===b&&(console.warn("THREE.Ray: .at() target is now required"),b=new m);
-return b.copy(this.direction).multiplyScalar(a).add(this.origin)},lookAt:function(a){this.direction.copy(a).sub(this.origin).normalize();return this},recast:function(a){this.origin.copy(this.at(a,vb));return this},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Ray: .closestPointToPoint() target is now required"),b=new m);b.subVectors(a,this.origin);a=b.dot(this.direction);return 0>a?b.copy(this.origin):b.copy(this.direction).multiplyScalar(a).add(this.origin)},distanceToPoint:function(a){return Math.sqrt(this.distanceSqToPoint(a))},
-distanceSqToPoint:function(a){var b=vb.subVectors(a,this.origin).dot(this.direction);if(0>b)return this.origin.distanceToSquared(a);vb.copy(this.direction).multiplyScalar(b).add(this.origin);return vb.distanceToSquared(a)},distanceSqToSegment:function(a,b,c,d){Zg.copy(a).add(b).multiplyScalar(.5);Ff.copy(b).sub(a).normalize();Tb.copy(this.origin).sub(Zg);var e=.5*a.distanceTo(b),f=-this.direction.dot(Ff),g=Tb.dot(this.direction),h=-Tb.dot(Ff),l=Tb.lengthSq(),k=Math.abs(1-f*f);if(0<k){a=f*h-g;b=f*
-g-h;var q=e*k;0<=a?b>=-q?b<=q?(e=1/k,a*=e,b*=e,f=a*(a+f*b+2*g)+b*(f*a+b+2*h)+l):(b=e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):(b=-e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l):b<=-q?(a=Math.max(0,-(-f*e+g)),b=0<a?-e:Math.min(Math.max(-e,-h),e),f=-a*a+b*(b+2*h)+l):b<=q?(a=0,b=Math.min(Math.max(-e,-h),e),f=b*(b+2*h)+l):(a=Math.max(0,-(f*e+g)),b=0<a?e:Math.min(Math.max(-e,-h),e),f=-a*a+b*(b+2*h)+l)}else b=0<f?-e:e,a=Math.max(0,-(f*b+g)),f=-a*a+b*(b+2*h)+l;c&&c.copy(this.direction).multiplyScalar(a).add(this.origin);
-d&&d.copy(Ff).multiplyScalar(b).add(Zg);return f},intersectSphere:function(a,b){vb.subVectors(a.center,this.origin);var c=vb.dot(this.direction),d=vb.dot(vb)-c*c;a=a.radius*a.radius;if(d>a)return null;a=Math.sqrt(a-d);d=c-a;c+=a;return 0>d&&0>c?null:0>d?this.at(c,b):this.at(d,b)},intersectsSphere:function(a){return this.distanceSqToPoint(a.center)<=a.radius*a.radius},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0===b)return 0===a.distanceToPoint(this.origin)?0:null;a=-(this.origin.dot(a.normal)+
-a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){a=this.distanceToPlane(a);return null===a?null:this.at(a,b)},intersectsPlane:function(a){var b=a.distanceToPoint(this.origin);return 0===b||0>a.normal.dot(this.direction)*b?!0:!1},intersectBox:function(a,b){var c=1/this.direction.x;var d=1/this.direction.y;var e=1/this.direction.z,f=this.origin;if(0<=c){var g=(a.min.x-f.x)*c;c*=a.max.x-f.x}else g=(a.max.x-f.x)*c,c*=a.min.x-f.x;if(0<=d){var h=(a.min.y-f.y)*d;d*=a.max.y-f.y}else h=(a.max.y-
-f.y)*d,d*=a.min.y-f.y;if(g>d||h>c)return null;if(h>g||g!==g)g=h;if(d<c||c!==c)c=d;0<=e?(h=(a.min.z-f.z)*e,a=(a.max.z-f.z)*e):(h=(a.max.z-f.z)*e,a=(a.min.z-f.z)*e);if(g>a||h>c)return null;if(h>g||g!==g)g=h;if(a<c||c!==c)c=a;return 0>c?null:this.at(0<=g?g:c,b)},intersectsBox:function(a){return null!==this.intersectBox(a,vb)},intersectTriangle:function(a,b,c,d,e){$g.subVectors(b,a);Gf.subVectors(c,a);ah.crossVectors($g,Gf);b=this.direction.dot(ah);if(0<b){if(d)return null;d=1}else if(0>b)d=-1,b=-b;else return null;
-Tb.subVectors(this.origin,a);a=d*this.direction.dot(Gf.crossVectors(Tb,Gf));if(0>a)return null;c=d*this.direction.dot($g.cross(Tb));if(0>c||a+c>b)return null;a=-d*Tb.dot(ah);return 0>a?null:this.at(a/b,e)},applyMatrix4:function(a){this.origin.applyMatrix4(a);this.direction.transformDirection(a);return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}});var bh=new m,Rk=new m,Sk=new qa;Object.assign(Ta.prototype,{isPlane:!0,set:function(a,b){this.normal.copy(a);
-this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(a,b,c){b=bh.subVectors(c,b).cross(Rk.subVectors(a,b)).normalize();this.setFromNormalAndCoplanarPoint(b,a);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;
-return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){void 0===b&&(console.warn("THREE.Plane: .projectPoint() target is now required"),b=new m);return b.copy(this.normal).multiplyScalar(-this.distanceToPoint(a)).add(a)},
-intersectLine:function(a,b){void 0===b&&(console.warn("THREE.Plane: .intersectLine() target is now required"),b=new m);var c=a.delta(bh),d=this.normal.dot(c);if(0===d){if(0===this.distanceToPoint(a.start))return b.copy(a.start)}else if(d=-(a.start.dot(this.normal)+this.constant)/d,!(0>d||1<d))return b.copy(c).multiplyScalar(d).add(a.start)},intersectsLine:function(a){var b=this.distanceToPoint(a.start);a=this.distanceToPoint(a.end);return 0>b&&0<a||0>a&&0<b},intersectsBox:function(a){return a.intersectsPlane(this)},
-intersectsSphere:function(a){return a.intersectsPlane(this)},coplanarPoint:function(a){void 0===a&&(console.warn("THREE.Plane: .coplanarPoint() target is now required"),a=new m);return a.copy(this.normal).multiplyScalar(-this.constant)},applyMatrix4:function(a,b){b=b||Sk.getNormalMatrix(a);a=this.coplanarPoint(bh).applyMatrix4(a);b=this.normal.applyMatrix3(b).normalize();this.constant=-a.dot(b);return this},translate:function(a){this.constant-=a.dot(this.normal);return this},equals:function(a){return a.normal.equals(this.normal)&&
-a.constant===this.constant}});var ab=new m,wb=new m,ch=new m,xb=new m,td=new m,ud=new m,Ai=new m,dh=new m,eh=new m,fh=new m;Object.assign(ba,{getNormal:function(a,b,c,d){void 0===d&&(console.warn("THREE.Triangle: .getNormal() target is now required"),d=new m);d.subVectors(c,b);ab.subVectors(a,b);d.cross(ab);a=d.lengthSq();return 0<a?d.multiplyScalar(1/Math.sqrt(a)):d.set(0,0,0)},getBarycoord:function(a,b,c,d,e){ab.subVectors(d,b);wb.subVectors(c,b);ch.subVectors(a,b);a=ab.dot(ab);b=ab.dot(wb);c=ab.dot(ch);
-var f=wb.dot(wb);d=wb.dot(ch);var g=a*f-b*b;void 0===e&&(console.warn("THREE.Triangle: .getBarycoord() target is now required"),e=new m);if(0===g)return e.set(-2,-1,-1);g=1/g;f=(f*c-b*d)*g;a=(a*d-b*c)*g;return e.set(1-f-a,a,f)},containsPoint:function(a,b,c,d){ba.getBarycoord(a,b,c,d,xb);return 0<=xb.x&&0<=xb.y&&1>=xb.x+xb.y},getUV:function(a,b,c,d,e,f,g,h){this.getBarycoord(a,b,c,d,xb);h.set(0,0);h.addScaledVector(e,xb.x);h.addScaledVector(f,xb.y);h.addScaledVector(g,xb.z);return h},isFrontFacing:function(a,
-b,c,d){ab.subVectors(c,b);wb.subVectors(a,b);return 0>ab.cross(wb).dot(d)?!0:!1}});Object.assign(ba.prototype,{set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},getArea:function(){ab.subVectors(this.c,this.b);wb.subVectors(this.a,
-this.b);return.5*ab.cross(wb).length()},getMidpoint:function(a){void 0===a&&(console.warn("THREE.Triangle: .getMidpoint() target is now required"),a=new m);return a.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},getNormal:function(a){return ba.getNormal(this.a,this.b,this.c,a)},getPlane:function(a){void 0===a&&(console.warn("THREE.Triangle: .getPlane() target is now required"),a=new Ta);return a.setFromCoplanarPoints(this.a,this.b,this.c)},getBarycoord:function(a,b){return ba.getBarycoord(a,
-this.a,this.b,this.c,b)},getUV:function(a,b,c,d,e){return ba.getUV(a,this.a,this.b,this.c,b,c,d,e)},containsPoint:function(a){return ba.containsPoint(a,this.a,this.b,this.c)},isFrontFacing:function(a){return ba.isFrontFacing(this.a,this.b,this.c,a)},intersectsBox:function(a){return a.intersectsTriangle(this)},closestPointToPoint:function(a,b){void 0===b&&(console.warn("THREE.Triangle: .closestPointToPoint() target is now required"),b=new m);var c=this.a,d=this.b,e=this.c;td.subVectors(d,c);ud.subVectors(e,
-c);dh.subVectors(a,c);var f=td.dot(dh),g=ud.dot(dh);if(0>=f&&0>=g)return b.copy(c);eh.subVectors(a,d);var h=td.dot(eh),l=ud.dot(eh);if(0<=h&&l<=h)return b.copy(d);var k=f*l-h*g;if(0>=k&&0<=f&&0>=h)return d=f/(f-h),b.copy(c).addScaledVector(td,d);fh.subVectors(a,e);a=td.dot(fh);var q=ud.dot(fh);if(0<=q&&a<=q)return b.copy(e);f=a*g-f*q;if(0>=f&&0<=g&&0>=q)return k=g/(g-q),b.copy(c).addScaledVector(ud,k);g=h*q-a*l;if(0>=g&&0<=l-h&&0<=a-q)return Ai.subVectors(e,d),k=(l-h)/(l-h+(a-q)),b.copy(d).addScaledVector(Ai,
-k);e=1/(g+f+k);d=f*e;k*=e;return b.copy(c).addScaledVector(td,d).addScaledVector(ud,k)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}});var Bi={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},xa={h:0,s:0,l:0},Hf={h:0,s:0,l:0};Object.assign(H.prototype,{isColor:!0,r:1,g:1,b:1,set:function(a){a&&a.isColor?this.copy(a):"number"===typeof a?this.setHex(a):"string"===
-typeof a&&this.setStyle(a);return this},setScalar:function(a){this.b=this.g=this.r=a;return this},setHex:function(a){a=Math.floor(a);this.r=(a>>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){a=P.euclideanModulo(a,1);b=P.clamp(b,0,1);c=P.clamp(c,0,1);0===b?this.r=this.g=this.b=c:(b=.5>=c?c*(1+b):c+b-c*b,c=2*c-b,this.r=cg(c,b,a+1/3),this.g=cg(c,b,a),this.b=cg(c,b,a-1/3));return this},setStyle:function(a){function b(b){void 0!==
-b&&1>parseFloat(b)&&console.warn("THREE.Color: Alpha component of "+a+" will be ignored.")}var c;if(c=/^((?:rgb|hsl)a?)(s*([^)]*))/.exec(a)){var d=c[2];switch(c[1]){case "rgb":case "rgba":if(c=/^(d+)s*,s*(d+)s*,s*(d+)s*(,s*([0-9]*.?[0-9]+)s*)?$/.exec(d))return this.r=Math.min(255,parseInt(c[1],10))/255,this.g=Math.min(255,parseInt(c[2],10))/255,this.b=Math.min(255,parseInt(c[3],10))/255,b(c[5]),this;if(c=/^(d+)%s*,s*(d+)%s*,s*(d+)%s*(,s*([0-9]*.?[0-9]+)s*)?$/.exec(d))return this.r=
-Math.min(100,parseInt(c[1],10))/100,this.g=Math.min(100,parseInt(c[2],10))/100,this.b=Math.min(100,parseInt(c[3],10))/100,b(c[5]),this;break;case "hsl":case "hsla":if(c=/^([0-9]*.?[0-9]+)s*,s*(d+)%s*,s*(d+)%s*(,s*([0-9]*.?[0-9]+)s*)?$/.exec(d)){d=parseFloat(c[1])/360;var e=parseInt(c[2],10)/100,f=parseInt(c[3],10)/100;b(c[5]);return this.setHSL(d,e,f)}}}else if(c=/^#([A-Fa-f0-9]+)$/.exec(a)){c=c[1];d=c.length;if(3===d)return this.r=parseInt(c.charAt(0)+c.charAt(0),16)/255,this.g=parseInt(c.charAt(1)+
-c.charAt(1),16)/255,this.b=parseInt(c.charAt(2)+c.charAt(2),16)/255,this;if(6===d)return this.r=parseInt(c.charAt(0)+c.charAt(1),16)/255,this.g=parseInt(c.charAt(2)+c.charAt(3),16)/255,this.b=parseInt(c.charAt(4)+c.charAt(5),16)/255,this}return a&&0<a.length?this.setColorName(a):this},setColorName:function(a){var b=Bi[a];void 0!==b?this.setHex(b):console.warn("THREE.Color: Unknown color "+a);return this},clone:function(){return new this.constructor(this.r,this.g,this.b)},copy:function(a){this.r=a.r;
-this.g=a.g;this.b=a.b;return this},copyGammaToLinear:function(a,b){void 0===b&&(b=2);this.r=Math.pow(a.r,b);this.g=Math.pow(a.g,b);this.b=Math.pow(a.b,b);return this},copyLinearToGamma:function(a,b){void 0===b&&(b=2);b=0<b?1/b:1;this.r=Math.pow(a.r,b);this.g=Math.pow(a.g,b);this.b=Math.pow(a.b,b);return this},convertGammaToLinear:function(a){this.copyGammaToLinear(this,a);return this},convertLinearToGamma:function(a){this.copyLinearToGamma(this,a);return this},copySRGBToLinear:function(a){this.r=
-dg(a.r);this.g=dg(a.g);this.b=dg(a.b);return this},copyLinearToSRGB:function(a){this.r=eg(a.r);this.g=eg(a.g);this.b=eg(a.b);return this},convertSRGBToLinear:function(){this.copySRGBToLinear(this);return this},convertLinearToSRGB:function(){this.copyLinearToSRGB(this);return this},getHex:function(){return 255*this.r<<16^255*this.g<<8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(a){void 0===a&&(console.warn("THREE.Color: .getHSL() target is now required"),
-a={h:0,s:0,l:0});var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),g,h=(f+e)/2;if(f===e)f=g=0;else{var l=e-f;f=.5>=h?l/(e+f):l/(2-e-f);switch(e){case b:g=(c-d)/l+(c<d?6:0);break;case c:g=(d-b)/l+2;break;case d:g=(b-c)/l+4}g/=6}a.h=g;a.s=f;a.l=h;return a},getStyle:function(){return"rgb("+(255*this.r|0)+","+(255*this.g|0)+","+(255*this.b|0)+")"},offsetHSL:function(a,b,c){this.getHSL(xa);xa.h+=a;xa.s+=b;xa.l+=c;this.setHSL(xa.h,xa.s,xa.l);return this},add:function(a){this.r+=a.r;this.g+=
-a.g;this.b+=a.b;return this},addColors:function(a,b){this.r=a.r+b.r;this.g=a.g+b.g;this.b=a.b+b.b;return this},addScalar:function(a){this.r+=a;this.g+=a;this.b+=a;return this},sub:function(a){this.r=Math.max(0,this.r-a.r);this.g=Math.max(0,this.g-a.g);this.b=Math.max(0,this.b-a.b);return this},multiply:function(a){this.r*=a.r;this.g*=a.g;this.b*=a.b;return this},multiplyScalar:function(a){this.r*=a;this.g*=a;this.b*=a;return this},lerp:function(a,b){this.r+=(a.r-this.r)*b;this.g+=(a.g-this.g)*b;this.b+=
-(a.b-this.b)*b;return this},lerpHSL:function(a,b){this.getHSL(xa);a.getHSL(Hf);a=P.lerp(xa.h,Hf.h,b);var c=P.lerp(xa.s,Hf.s,b);b=P.lerp(xa.l,Hf.l,b);this.setHSL(a,c,b);return this},equals:function(a){return a.r===this.r&&a.g===this.g&&a.b===this.b},fromArray:function(a,b){void 0===b&&(b=0);this.r=a[b];this.g=a[b+1];this.b=a[b+2];return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&(b=0);a[b]=this.r;a[b+1]=this.g;a[b+2]=this.b;return a},fromBufferAttribute:function(a,b){this.r=a.getX(b);
-this.g=a.getY(b);this.b=a.getZ(b);!0===a.normalized&&(this.r/=255,this.g/=255,this.b/=255);return this},toJSON:function(){return this.getHex()}});H.NAMES=Bi;Object.assign(Cc.prototype,{clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.a=a.a;this.b=a.b;this.c=a.c;this.normal.copy(a.normal);this.color.copy(a.color);this.materialIndex=a.materialIndex;for(var b=0,c=a.vertexNormals.length;b<c;b++)this.vertexNormals[b]=a.vertexNormals[b].clone();b=0;for(c=a.vertexColors.length;b<
-c;b++)this.vertexColors[b]=a.vertexColors[b].clone();return this}});var gj=0;L.prototype=Object.assign(Object.create(Ea.prototype),{constructor:L,isMaterial:!0,onBeforeCompile:function(){},customProgramCacheKey:function(){return this.onBeforeCompile.toString()},setValues:function(a){if(void 0!==a)for(var b in a){var c=a[b];if(void 0===c)console.warn("THREE.Material: '"+b+"' parameter is undefined.");else if("shading"===b)console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead."),
-this.flatShading=1===c?!0:!1;else{var d=this[b];void 0===d?console.warn("THREE."+this.type+": '"+b+"' is not a property of this material."):d&&d.isColor?d.set(c):d&&d.isVector3&&c&&c.isVector3?d.copy(c):this[b]=c}}},toJSON:function(a){function b(a){var b=[],c;for(c in a){var d=a[c];delete d.metadata;b.push(d)}return b}var c=void 0===a||"string"===typeof a;c&&(a={textures:{},images:{}});var d={metadata:{version:4.5,type:"Material",generator:"Material.toJSON"}};d.uuid=this.uuid;d.type=this.type;""!==
-this.name&&(d.name=this.name);this.color&&this.color.isColor&&(d.color=this.color.getHex());void 0!==this.roughness&&(d.roughness=this.roughness);void 0!==this.metalness&&(d.metalness=this.metalness);this.sheen&&this.sheen.isColor&&(d.sheen=this.sheen.getHex());this.emissive&&this.emissive.isColor&&(d.emissive=this.emissive.getHex());this.emissiveIntensity&&1!==this.emissiveIntensity&&(d.emissiveIntensity=this.emissiveIntensity);this.specular&&this.specular.isColor&&(d.specular=this.specular.getHex());
-void 0!==this.shininess&&(d.shininess=this.shininess);void 0!==this.clearcoat&&(d.clearcoat=this.clearcoat);void 0!==this.clearcoatRoughness&&(d.clearcoatRoughness=this.clearcoatRoughness);this.clearcoatMap&&this.clearcoatMap.isTexture&&(d.clearcoatMap=this.clearcoatMap.toJSON(a).uuid);this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(d.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(a).uuid);this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(d.clearcoatNormalMap=
-this.clearcoatNormalMap.toJSON(a).uuid,d.clearcoatNormalScale=this.clearcoatNormalScale.toArray());this.map&&this.map.isTexture&&(d.map=this.map.toJSON(a).uuid);this.matcap&&this.matcap.isTexture&&(d.matcap=this.matcap.toJSON(a).uuid);this.alphaMap&&this.alphaMap.isTexture&&(d.alphaMap=this.alphaMap.toJSON(a).uuid);this.lightMap&&this.lightMap.isTexture&&(d.lightMap=this.lightMap.toJSON(a).uuid);this.aoMap&&this.aoMap.isTexture&&(d.aoMap=this.aoMap.toJSON(a).uuid,d.aoMapIntensity=this.aoMapIntensity);
-this.bumpMap&&this.bumpMap.isTexture&&(d.bumpMap=this.bumpMap.toJSON(a).uuid,d.bumpScale=this.bumpScale);this.normalMap&&this.normalMap.isTexture&&(d.normalMap=this.normalMap.toJSON(a).uuid,d.normalMapType=this.normalMapType,d.normalScale=this.normalScale.toArray());this.displacementMap&&this.displacementMap.isTexture&&(d.displacementMap=this.displacementMap.toJSON(a).uuid,d.displacementScale=this.displacementScale,d.displacementBias=this.displacementBias);this.roughnessMap&&this.roughnessMap.isTexture&&
-(d.roughnessMap=this.roughnessMap.toJSON(a).uuid);this.metalnessMap&&this.metalnessMap.isTexture&&(d.metalnessMap=this.metalnessMap.toJSON(a).uuid);this.emissiveMap&&this.emissiveMap.isTexture&&(d.emissiveMap=this.emissiveMap.toJSON(a).uuid);this.specularMap&&this.specularMap.isTexture&&(d.specularMap=this.specularMap.toJSON(a).uuid);this.envMap&&this.envMap.isTexture&&(d.envMap=this.envMap.toJSON(a).uuid,d.reflectivity=this.reflectivity,d.refractionRatio=this.refractionRatio,void 0!==this.combine&&
-(d.combine=this.combine),void 0!==this.envMapIntensity&&(d.envMapIntensity=this.envMapIntensity));this.gradientMap&&this.gradientMap.isTexture&&(d.gradientMap=this.gradientMap.toJSON(a).uuid);void 0!==this.size&&(d.size=this.size);void 0!==this.sizeAttenuation&&(d.sizeAttenuation=this.sizeAttenuation);1!==this.blending&&(d.blending=this.blending);!0===this.flatShading&&(d.flatShading=this.flatShading);0!==this.side&&(d.side=this.side);this.vertexColors&&(d.vertexColors=!0);1>this.opacity&&(d.opacity=
-this.opacity);!0===this.transparent&&(d.transparent=this.transparent);d.depthFunc=this.depthFunc;d.depthTest=this.depthTest;d.depthWrite=this.depthWrite;d.stencilWrite=this.stencilWrite;d.stencilWriteMask=this.stencilWriteMask;d.stencilFunc=this.stencilFunc;d.stencilRef=this.stencilRef;d.stencilFuncMask=this.stencilFuncMask;d.stencilFail=this.stencilFail;d.stencilZFail=this.stencilZFail;d.stencilZPass=this.stencilZPass;this.rotation&&0!==this.rotation&&(d.rotation=this.rotation);!0===this.polygonOffset&&
-(d.polygonOffset=!0);0!==this.polygonOffsetFactor&&(d.polygonOffsetFactor=this.polygonOffsetFactor);0!==this.polygonOffsetUnits&&(d.polygonOffsetUnits=this.polygonOffsetUnits);this.linewidth&&1!==this.linewidth&&(d.linewidth=this.linewidth);void 0!==this.dashSize&&(d.dashSize=this.dashSize);void 0!==this.gapSize&&(d.gapSize=this.gapSize);void 0!==this.scale&&(d.scale=this.scale);!0===this.dithering&&(d.dithering=!0);0<this.alphaTest&&(d.alphaTest=this.alphaTest);!0===this.premultipliedAlpha&&(d.premultipliedAlpha=
-this.premultipliedAlpha);!0===this.wireframe&&(d.wireframe=this.wireframe);1<this.wireframeLinewidth&&(d.wireframeLinewidth=this.wireframeLinewidth);"round"!==this.wireframeLinecap&&(d.wireframeLinecap=this.wireframeLinecap);"round"!==this.wireframeLinejoin&&(d.wireframeLinejoin=this.wireframeLinejoin);!0===this.morphTargets&&(d.morphTargets=!0);!0===this.morphNormals&&(d.morphNormals=!0);!0===this.skinning&&(d.skinning=!0);!1===this.visible&&(d.visible=!1);!1===this.toneMapped&&(d.toneMapped=!1);
-"{}"!==JSON.stringify(this.userData)&&(d.userData=this.userData);c&&(c=b(a.textures),a=b(a.images),0<c.length&&(d.textures=c),0<a.length&&(d.images=a));return d},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.name=a.name;this.fog=a.fog;this.blending=a.blending;this.side=a.side;this.flatShading=a.flatShading;this.vertexColors=a.vertexColors;this.opacity=a.opacity;this.transparent=a.transparent;this.blendSrc=a.blendSrc;this.blendDst=a.blendDst;this.blendEquation=a.blendEquation;
-this.blendSrcAlpha=a.blendSrcAlpha;this.blendDstAlpha=a.blendDstAlpha;this.blendEquationAlpha=a.blendEquationAlpha;this.depthFunc=a.depthFunc;this.depthTest=a.depthTest;this.depthWrite=a.depthWrite;this.stencilWriteMask=a.stencilWriteMask;this.stencilFunc=a.stencilFunc;this.stencilRef=a.stencilRef;this.stencilFuncMask=a.stencilFuncMask;this.stencilFail=a.stencilFail;this.stencilZFail=a.stencilZFail;this.stencilZPass=a.stencilZPass;this.stencilWrite=a.stencilWrite;var b=a.clippingPlanes,c=null;if(null!==
-b){var d=b.length;c=Array(d);for(var e=0;e!==d;++e)c[e]=b[e].clone()}this.clippingPlanes=c;this.clipIntersection=a.clipIntersection;this.clipShadows=a.clipShadows;this.shadowSide=a.shadowSide;this.colorWrite=a.colorWrite;this.precision=a.precision;this.polygonOffset=a.polygonOffset;this.polygonOffsetFactor=a.polygonOffsetFactor;this.polygonOffsetUnits=a.polygonOffsetUnits;this.dithering=a.dithering;this.alphaTest=a.alphaTest;this.premultipliedAlpha=a.premultipliedAlpha;this.visible=a.visible;this.toneMapped=
-a.toneMapped;this.userData=JSON.parse(JSON.stringify(a.userData));return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Object.defineProperty(L.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Na.prototype=Object.create(L.prototype);Na.prototype.constructor=Na;Na.prototype.isMeshBasicMaterial=!0;Na.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;
-this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;return this};var aa=new m,If=new u;Object.defineProperty(J.prototype,
-"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(J.prototype,{isBufferAttribute:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=a;return this},copy:function(a){this.name=a.name;this.array=new a.array.constructor(a.array);this.itemSize=a.itemSize;this.count=a.count;this.normalized=a.normalized;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.itemSize;c*=b.itemSize;for(var d=0,e=this.itemSize;d<e;d++)this.array[a+d]=b.array[c+d];return this},copyArray:function(a){this.array.set(a);
-return this},copyColorsArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyColorsArray(): color is undefined",d),f=new H);b[c++]=f.r;b[c++]=f.g;b[c++]=f.b}return this},copyVector2sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyVector2sArray(): vector is undefined",d),f=new u);b[c++]=f.x;b[c++]=f.y}return this},copyVector3sArray:function(a){for(var b=
-this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyVector3sArray(): vector is undefined",d),f=new m);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z}return this},copyVector4sArray:function(a){for(var b=this.array,c=0,d=0,e=a.length;d<e;d++){var f=a[d];void 0===f&&(console.warn("THREE.BufferAttribute.copyVector4sArray(): vector is undefined",d),f=new S);b[c++]=f.x;b[c++]=f.y;b[c++]=f.z;b[c++]=f.w}return this},applyMatrix3:function(a){if(2===this.itemSize)for(var b=
-0,c=this.count;b<c;b++)If.fromBufferAttribute(this,b),If.applyMatrix3(a),this.setXY(b,If.x,If.y);else if(3===this.itemSize)for(b=0,c=this.count;b<c;b++)aa.fromBufferAttribute(this,b),aa.applyMatrix3(a),this.setXYZ(b,aa.x,aa.y,aa.z);return this},applyMatrix4:function(a){for(var b=0,c=this.count;b<c;b++)aa.x=this.getX(b),aa.y=this.getY(b),aa.z=this.getZ(b),aa.applyMatrix4(a),this.setXYZ(b,aa.x,aa.y,aa.z);return this},applyNormalMatrix:function(a){for(var b=0,c=this.count;b<c;b++)aa.x=this.getX(b),aa.y=
-this.getY(b),aa.z=this.getZ(b),aa.applyNormalMatrix(a),this.setXYZ(b,aa.x,aa.y,aa.z);return this},transformDirection:function(a){for(var b=0,c=this.count;b<c;b++)aa.x=this.getX(b),aa.y=this.getY(b),aa.z=this.getZ(b),aa.transformDirection(a),this.setXYZ(b,aa.x,aa.y,aa.z);return this},set:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},getX:function(a){return this.array[a*this.itemSize]},setX:function(a,b){this.array[a*this.itemSize]=b;return this},getY:function(a){return this.array[a*
-this.itemSize+1]},setY:function(a,b){this.array[a*this.itemSize+1]=b;return this},getZ:function(a){return this.array[a*this.itemSize+2]},setZ:function(a,b){this.array[a*this.itemSize+2]=b;return this},getW:function(a){return this.array[a*this.itemSize+3]},setW:function(a,b){this.array[a*this.itemSize+3]=b;return this},setXY:function(a,b,c){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=
-d;return this},setXYZW:function(a,b,c,d,e){a*=this.itemSize;this.array[a+0]=b;this.array[a+1]=c;this.array[a+2]=d;this.array[a+3]=e;return this},onUpload:function(a){this.onUploadCallback=a;return this},clone:function(){return(new this.constructor(this.array,this.itemSize)).copy(this)},toJSON:function(){return{itemSize:this.itemSize,type:this.array.constructor.name,array:Array.prototype.slice.call(this.array),normalized:this.normalized}}});Bd.prototype=Object.create(J.prototype);Bd.prototype.constructor=
-Bd;Cd.prototype=Object.create(J.prototype);Cd.prototype.constructor=Cd;Dd.prototype=Object.create(J.prototype);Dd.prototype.constructor=Dd;Ed.prototype=Object.create(J.prototype);Ed.prototype.constructor=Ed;Yb.prototype=Object.create(J.prototype);Yb.prototype.constructor=Yb;Fd.prototype=Object.create(J.prototype);Fd.prototype.constructor=Fd;Zb.prototype=Object.create(J.prototype);Zb.prototype.constructor=Zb;A.prototype=Object.create(J.prototype);A.prototype.constructor=A;Gd.prototype=Object.create(J.prototype);
-Gd.prototype.constructor=Gd;Object.assign(th.prototype,{computeGroups:function(a){var b=[],c=void 0,d=a.faces;for(a=0;a<d.length;a++){var e=d[a];if(e.materialIndex!==c){c=e.materialIndex;void 0!==f&&(f.count=3*a-f.start,b.push(f));var f={start:3*a,materialIndex:c}}}void 0!==f&&(f.count=3*a-f.start,b.push(f));this.groups=b},fromGeometry:function(a){var b=a.faces,c=a.vertices,d=a.faceVertexUvs,e=d[0]&&0<d[0].length,f=d[1]&&0<d[1].length,g=a.morphTargets,h=g.length;if(0<h){var l=[];for(var k=0;k<h;k++)l[k]=
-{name:g[k].name,data:[]};this.morphTargets.position=l}k=a.morphNormals;var q=k.length;if(0<q){var p=[];for(var m=0;m<q;m++)p[m]={name:k[m].name,data:[]};this.morphTargets.normal=p}m=a.skinIndices;var r=a.skinWeights,t=m.length===c.length,v=r.length===c.length;0<c.length&&0===b.length&&console.error("THREE.DirectGeometry: Faceless geometries are not supported.");for(var x=0;x<b.length;x++){var B=b[x];this.vertices.push(c[B.a],c[B.b],c[B.c]);var w=B.vertexNormals;3===w.length?this.normals.push(w[0],
-w[1],w[2]):(w=B.normal,this.normals.push(w,w,w));w=B.vertexColors;3===w.length?this.colors.push(w[0],w[1],w[2]):(w=B.color,this.colors.push(w,w,w));!0===e&&(w=d[0][x],void 0!==w?this.uvs.push(w[0],w[1],w[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ",x),this.uvs.push(new u,new u,new u)));!0===f&&(w=d[1][x],void 0!==w?this.uvs2.push(w[0],w[1],w[2]):(console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ",x),this.uvs2.push(new u,new u,new u)));for(w=0;w<
-h;w++){var A=g[w].vertices;l[w].data.push(A[B.a],A[B.b],A[B.c])}for(w=0;w<q;w++)A=k[w].vertexNormals[x],p[w].data.push(A.a,A.b,A.c);t&&this.skinIndices.push(m[B.a],m[B.b],m[B.c]);v&&this.skinWeights.push(r[B.a],r[B.b],r[B.c])}this.computeGroups(a);this.verticesNeedUpdate=a.verticesNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());
-null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());return this}});var hj=1,lb=new U,gh=new C,vd=new m,Ma=new Sa,Ae=new Sa,ua=new m;E.prototype=Object.assign(Object.create(Ea.prototype),{constructor:E,isBufferGeometry:!0,getIndex:function(){return this.index},setIndex:function(a){Array.isArray(a)?this.index=new (65535<uh(a)?Zb:Yb)(a,1):this.index=a},getAttribute:function(a){return this.attributes[a]},setAttribute:function(a,b){this.attributes[a]=b;return this},deleteAttribute:function(a){delete this.attributes[a];
-return this},addGroup:function(a,b,c){this.groups.push({start:a,count:b,materialIndex:void 0!==c?c:0})},clearGroups:function(){this.groups=[]},setDrawRange:function(a,b){this.drawRange.start=a;this.drawRange.count=b},applyMatrix4:function(a){var b=this.attributes.position;void 0!==b&&(b.applyMatrix4(a),b.needsUpdate=!0);b=this.attributes.normal;if(void 0!==b){var c=(new qa).getNormalMatrix(a);b.applyNormalMatrix(c);b.needsUpdate=!0}b=this.attributes.tangent;void 0!==b&&(b.transformDirection(a),b.needsUpdate=
-!0);null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();return this},rotateX:function(a){lb.makeRotationX(a);this.applyMatrix4(lb);return this},rotateY:function(a){lb.makeRotationY(a);this.applyMatrix4(lb);return this},rotateZ:function(a){lb.makeRotationZ(a);this.applyMatrix4(lb);return this},translate:function(a,b,c){lb.makeTranslation(a,b,c);this.applyMatrix4(lb);return this},scale:function(a,b,c){lb.makeScale(a,b,c);this.applyMatrix4(lb);
-return this},lookAt:function(a){gh.lookAt(a);gh.updateMatrix();this.applyMatrix4(gh.matrix);return this},center:function(){this.computeBoundingBox();this.boundingBox.getCenter(vd).negate();this.translate(vd.x,vd.y,vd.z);return this},setFromObject:function(a){var b=a.geometry;if(a.isPoints||a.isLine){a=new A(3*b.vertices.length,3);var c=new A(3*b.colors.length,3);this.setAttribute("position",a.copyVector3sArray(b.vertices));this.setAttribute("color",c.copyColorsArray(b.colors));b.lineDistances&&b.lineDistances.length===
-b.vertices.length&&(a=new A(b.lineDistances.length,1),this.setAttribute("lineDistance",a.copyArray(b.lineDistances)));null!==b.boundingSphere&&(this.boundingSphere=b.boundingSphere.clone());null!==b.boundingBox&&(this.boundingBox=b.boundingBox.clone())}else a.isMesh&&b&&b.isGeometry&&this.fromGeometry(b);return this},setFromPoints:function(a){for(var b=[],c=0,d=a.length;c<d;c++){var e=a[c];b.push(e.x,e.y,e.z||0)}this.setAttribute("position",new A(b,3));return this},updateFromObject:function(a){var b=
-a.geometry;if(a.isMesh){var c=b.__directGeometry;!0===b.elementsNeedUpdate&&(c=void 0,b.elementsNeedUpdate=!1);if(void 0===c)return this.fromGeometry(b);c.verticesNeedUpdate=b.verticesNeedUpdate;c.normalsNeedUpdate=b.normalsNeedUpdate;c.colorsNeedUpdate=b.colorsNeedUpdate;c.uvsNeedUpdate=b.uvsNeedUpdate;c.groupsNeedUpdate=b.groupsNeedUpdate;b.verticesNeedUpdate=!1;b.normalsNeedUpdate=!1;b.colorsNeedUpdate=!1;b.uvsNeedUpdate=!1;b.groupsNeedUpdate=!1;b=c}!0===b.verticesNeedUpdate&&(c=this.attributes.position,
-void 0!==c&&(c.copyVector3sArray(b.vertices),c.needsUpdate=!0),b.verticesNeedUpdate=!1);!0===b.normalsNeedUpdate&&(c=this.attributes.normal,void 0!==c&&(c.copyVector3sArray(b.normals),c.needsUpdate=!0),b.normalsNeedUpdate=!1);!0===b.colorsNeedUpdate&&(c=this.attributes.color,void 0!==c&&(c.copyColorsArray(b.colors),c.needsUpdate=!0),b.colorsNeedUpdate=!1);b.uvsNeedUpdate&&(c=this.attributes.uv,void 0!==c&&(c.copyVector2sArray(b.uvs),c.needsUpdate=!0),b.uvsNeedUpdate=!1);b.lineDistancesNeedUpdate&&
-(c=this.attributes.lineDistance,void 0!==c&&(c.copyArray(b.lineDistances),c.needsUpdate=!0),b.lineDistancesNeedUpdate=!1);b.groupsNeedUpdate&&(b.computeGroups(a.geometry),this.groups=b.groups,b.groupsNeedUpdate=!1);return this},fromGeometry:function(a){a.__directGeometry=(new th).fromGeometry(a);return this.fromDirectGeometry(a.__directGeometry)},fromDirectGeometry:function(a){var b=new Float32Array(3*a.vertices.length);this.setAttribute("position",(new J(b,3)).copyVector3sArray(a.vertices));0<a.normals.length&&
-(b=new Float32Array(3*a.normals.length),this.setAttribute("normal",(new J(b,3)).copyVector3sArray(a.normals)));0<a.colors.length&&(b=new Float32Array(3*a.colors.length),this.setAttribute("color",(new J(b,3)).copyColorsArray(a.colors)));0<a.uvs.length&&(b=new Float32Array(2*a.uvs.length),this.setAttribute("uv",(new J(b,2)).copyVector2sArray(a.uvs)));0<a.uvs2.length&&(b=new Float32Array(2*a.uvs2.length),this.setAttribute("uv2",(new J(b,2)).copyVector2sArray(a.uvs2)));this.groups=a.groups;for(var c in a.morphTargets){b=
-[];for(var d=a.morphTargets[c],e=0,f=d.length;e<f;e++){var g=d[e],h=new A(3*g.data.length,3);h.name=g.name;b.push(h.copyVector3sArray(g.data))}this.morphAttributes[c]=b}0<a.skinIndices.length&&(c=new A(4*a.skinIndices.length,4),this.setAttribute("skinIndex",c.copyVector4sArray(a.skinIndices)));0<a.skinWeights.length&&(c=new A(4*a.skinWeights.length,4),this.setAttribute("skinWeight",c.copyVector4sArray(a.skinWeights)));null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());null!==
-a.boundingBox&&(this.boundingBox=a.boundingBox.clone());return this},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Sa);var a=this.attributes.position,b=this.morphAttributes.position;if(void 0!==a){if(this.boundingBox.setFromBufferAttribute(a),b){a=0;for(var c=b.length;a<c;a++)Ma.setFromBufferAttribute(b[a]),this.morphTargetsRelative?(ua.addVectors(this.boundingBox.min,Ma.min),this.boundingBox.expandByPoint(ua),ua.addVectors(this.boundingBox.max,Ma.max),this.boundingBox.expandByPoint(ua)):
-(this.boundingBox.expandByPoint(Ma.min),this.boundingBox.expandByPoint(Ma.max))}}else this.boundingBox.makeEmpty();(isNaN(this.boundingBox.min.x)||isNaN(this.boundingBox.min.y)||isNaN(this.boundingBox.min.z))&&console.error('THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The "position" attribute is likely to have NaN values.',this)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new cb);var a=this.attributes.position,b=this.morphAttributes.position;
-if(a){var c=this.boundingSphere.center;Ma.setFromBufferAttribute(a);if(b)for(var d=0,e=b.length;d<e;d++)Ae.setFromBufferAttribute(b[d]),this.morphTargetsRelative?(ua.addVectors(Ma.min,Ae.min),Ma.expandByPoint(ua),ua.addVectors(Ma.max,Ae.max),Ma.expandByPoint(ua)):(Ma.expandByPoint(Ae.min),Ma.expandByPoint(Ae.max));Ma.getCenter(c);e=d=0;for(var f=a.count;e<f;e++)ua.fromBufferAttribute(a,e),d=Math.max(d,c.distanceToSquared(ua));if(b)for(e=0,f=b.length;e<f;e++)for(var g=b[e],h=this.morphTargetsRelative,
-l=0,k=g.count;l<k;l++)ua.fromBufferAttribute(g,l),h&&(vd.fromBufferAttribute(a,l),ua.add(vd)),d=Math.max(d,c.distanceToSquared(ua));this.boundingSphere.radius=Math.sqrt(d);isNaN(this.boundingSphere.radius)&&console.error('THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.',this)}},computeFaceNormals:function(){},computeVertexNormals:function(){var a=this.index,b=this.getAttribute("position");if(void 0!==b){var c=this.getAttribute("normal");
-if(void 0===c)c=new J(new Float32Array(3*b.count),3),this.setAttribute("normal",c);else for(var d=0,e=c.count;d<e;d++)c.setXYZ(d,0,0,0);d=new m;e=new m;var f=new m,g=new m,h=new m,l=new m,k=new m,q=new m;if(a)for(var p=0,z=a.count;p<z;p+=3){var r=a.getX(p+0),t=a.getX(p+1),v=a.getX(p+2);d.fromBufferAttribute(b,r);e.fromBufferAttribute(b,t);f.fromBufferAttribute(b,v);k.subVectors(f,e);q.subVectors(d,e);k.cross(q);g.fromBufferAttribute(c,r);h.fromBufferAttribute(c,t);l.fromBufferAttribute(c,v);g.add(k);
-h.add(k);l.add(k);c.setXYZ(r,g.x,g.y,g.z);c.setXYZ(t,h.x,h.y,h.z);c.setXYZ(v,l.x,l.y,l.z)}else for(a=0,g=b.count;a<g;a+=3)d.fromBufferAttribute(b,a+0),e.fromBufferAttribute(b,a+1),f.fromBufferAttribute(b,a+2),k.subVectors(f,e),q.subVectors(d,e),k.cross(q),c.setXYZ(a+0,k.x,k.y,k.z),c.setXYZ(a+1,k.x,k.y,k.z),c.setXYZ(a+2,k.x,k.y,k.z);this.normalizeNormals();c.needsUpdate=!0}},merge:function(a,b){if(a&&a.isBufferGeometry){void 0===b&&(b=0,console.warn("THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge."));
-var c=this.attributes,d;for(d in c)if(void 0!==a.attributes[d]){var e=c[d].array,f=a.attributes[d],g=f.array,h=f.itemSize*b;f=Math.min(g.length,e.length-h);for(var l=0;l<f;l++,h++)e[h]=g[l]}return this}console.error("THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.",a)},normalizeNormals:function(){for(var a=this.attributes.normal,b=0,c=a.count;b<c;b++)ua.fromBufferAttribute(a,b),ua.normalize(),a.setXYZ(b,ua.x,ua.y,ua.z)},toNonIndexed:function(){function a(a,b){var c=
-a.array,d=a.itemSize;a=a.normalized;for(var e=new c.constructor(b.length*d),f,g=0,h=0,l=b.length;h<l;h++){f=b[h]*d;for(var k=0;k<d;k++)e[g++]=c[f++]}return new J(e,d,a)}if(null===this.index)return console.warn("THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed."),this;var b=new E,c=this.index.array,d=this.attributes;for(g in d){var e=a(d[g],c);b.setAttribute(g,e)}d=this.morphAttributes;for(var f in d){var g=[];e=d[f];for(var h=0,l=e.length;h<l;h++){var k=a(e[h],c);g.push(k)}b.morphAttributes[f]=
-g}b.morphTargetsRelative=this.morphTargetsRelative;c=this.groups;f=0;for(d=c.length;f<d;f++)g=c[f],b.addGroup(g.start,g.count,g.materialIndex);return b},toJSON:function(){var a={metadata:{version:4.5,type:"BufferGeometry",generator:"BufferGeometry.toJSON"}};a.uuid=this.uuid;a.type=this.type;""!==this.name&&(a.name=this.name);0<Object.keys(this.userData).length&&(a.userData=this.userData);if(void 0!==this.parameters){var b=this.parameters;for(c in b)void 0!==b[c]&&(a[c]=b[c]);return a}a.data={attributes:{}};
-var c=this.index;null!==c&&(a.data.index={type:c.array.constructor.name,array:Array.prototype.slice.call(c.array)});c=this.attributes;for(var d in c){var e=c[d],f=e.toJSON(a.data);""!==e.name&&(f.name=e.name);a.data.attributes[d]=f}d={};c=!1;for(b in this.morphAttributes){e=this.morphAttributes[b];f=[];for(var g=0,h=e.length;g<h;g++){var l=e[g],k=l.toJSON(a.data);""!==l.name&&(k.name=l.name);f.push(k)}0<f.length&&(d[b]=f,c=!0)}c&&(a.data.morphAttributes=d,a.data.morphTargetsRelative=this.morphTargetsRelative);
-b=this.groups;0<b.length&&(a.data.groups=JSON.parse(JSON.stringify(b)));b=this.boundingSphere;null!==b&&(a.data.boundingSphere={center:b.center.toArray(),radius:b.radius});return a},clone:function(){return(new E).copy(this)},copy:function(a){this.index=null;this.attributes={};this.morphAttributes={};this.groups=[];this.boundingSphere=this.boundingBox=null;var b={};this.name=a.name;var c=a.index;null!==c&&this.setIndex(c.clone(b));c=a.attributes;for(var d in c)this.setAttribute(d,c[d].clone(b));d=
-a.morphAttributes;for(var e in d){c=[];for(var f=d[e],g=0,h=f.length;g<h;g++)c.push(f[g].clone(b));this.morphAttributes[e]=c}this.morphTargetsRelative=a.morphTargetsRelative;b=a.groups;e=0;for(d=b.length;e<d;e++)c=b[e],this.addGroup(c.start,c.count,c.materialIndex);b=a.boundingBox;null!==b&&(this.boundingBox=b.clone());b=a.boundingSphere;null!==b&&(this.boundingSphere=b.clone());this.drawRange.start=a.drawRange.start;this.drawRange.count=a.drawRange.count;this.userData=a.userData;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});
-var Ci=new U,tc=new Xb,hh=new cb,yb=new m,zb=new m,Ab=new m,fg=new m,gg=new m,hg=new m,Ke=new m,Le=new m,Me=new m,Dc=new u,Ec=new u,Fc=new u,Hd=new m,Ie=new m;T.prototype=Object.assign(Object.create(C.prototype),{constructor:T,isMesh:!0,copy:function(a){C.prototype.copy.call(this,a);void 0!==a.morphTargetInfluences&&(this.morphTargetInfluences=a.morphTargetInfluences.slice());void 0!==a.morphTargetDictionary&&(this.morphTargetDictionary=Object.assign({},a.morphTargetDictionary));this.material=a.material;
-this.geometry=a.geometry;return this},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0<b.length&&(a=a[b[0]],void 0!==a)){this.morphTargetInfluences=[];this.morphTargetDictionary={};b=0;for(var c=a.length;b<c;b++){var d=a[b].name||String(b);this.morphTargetInfluences.push(0);this.morphTargetDictionary[d]=b}}}else a=a.morphTargets,void 0!==a&&0<a.length&&console.error("THREE.Mesh.updateMorphTargets() no longer supports THREE.Geometry. Use THREE.BufferGeometry instead.")},
-raycast:function(a,b){var c=this.geometry,d=this.material,e=this.matrixWorld;if(void 0!==d&&(null===c.boundingSphere&&c.computeBoundingSphere(),hh.copy(c.boundingSphere),hh.applyMatrix4(e),!1!==a.ray.intersectsSphere(hh)&&(Ci.getInverse(e),tc.copy(a.ray).applyMatrix4(Ci),null===c.boundingBox||!1!==tc.intersectsBox(c.boundingBox))))if(c.isBufferGeometry){var f=c.index,g=c.attributes.position;e=c.morphAttributes.position;var h=c.morphTargetsRelative,l=c.attributes.uv,k=c.attributes.uv2,q=c.groups,p=
-c.drawRange;if(null!==f)if(Array.isArray(d))for(var m=0,r=q.length;m<r;m++)for(var t=q[m],v=d[t.materialIndex],x=Math.max(t.start,p.start),B=Math.min(t.start+t.count,p.start+p.count);x<B;x+=3){c=f.getX(x);var w=f.getX(x+1),A=f.getX(x+2);if(c=Je(this,v,a,tc,g,e,h,l,k,c,w,A))c.faceIndex=Math.floor(x/3),c.face.materialIndex=t.materialIndex,b.push(c)}else for(q=Math.max(0,p.start),p=Math.min(f.count,p.start+p.count);q<p;q+=3){if(c=f.getX(q),m=f.getX(q+1),r=f.getX(q+2),c=Je(this,d,a,tc,g,e,h,l,k,c,m,r))c.faceIndex=
-Math.floor(q/3),b.push(c)}else if(void 0!==g)if(Array.isArray(d))for(f=0,m=q.length;f<m;f++)for(r=q[f],t=d[r.materialIndex],v=Math.max(r.start,p.start),x=Math.min(r.start+r.count,p.start+p.count);v<x;v+=3){if(c=Je(this,t,a,tc,g,e,h,l,k,v,v+1,v+2))c.faceIndex=Math.floor(v/3),c.face.materialIndex=r.materialIndex,b.push(c)}else for(q=Math.max(0,p.start),p=Math.min(g.count,p.start+p.count);q<p;q+=3)if(c=Je(this,d,a,tc,g,e,h,l,k,q,q+1,q+2))c.faceIndex=Math.floor(q/3),b.push(c)}else if(c.isGeometry)for(e=
-Array.isArray(d),h=c.vertices,l=c.faces,c=c.faceVertexUvs[0],0<c.length&&(g=c),k=0,p=l.length;k<p;k++)if(q=l[k],c=e?d[q.materialIndex]:d,void 0!==c&&(f=h[q.a],m=h[q.b],r=h[q.c],c=vh(this,c,a,tc,f,m,r,Hd)))g&&g[k]&&(t=g[k],Dc.copy(t[0]),Ec.copy(t[1]),Fc.copy(t[2]),c.uv=ba.getUV(Hd,f,m,r,Dc,Ec,Fc,new u)),c.face=q,c.faceIndex=k,b.push(c)}});var ij=0,mb=new U,ih=new C,Jf=new m;F.prototype=Object.assign(Object.create(Ea.prototype),{constructor:F,isGeometry:!0,applyMatrix4:function(a){for(var b=(new qa).getNormalMatrix(a),
-c=0,d=this.vertices.length;c<d;c++)this.vertices[c].applyMatrix4(a);a=0;for(c=this.faces.length;a<c;a++){d=this.faces[a];d.normal.applyMatrix3(b).normalize();for(var e=0,f=d.vertexNormals.length;e<f;e++)d.vertexNormals[e].applyMatrix3(b).normalize()}null!==this.boundingBox&&this.computeBoundingBox();null!==this.boundingSphere&&this.computeBoundingSphere();this.normalsNeedUpdate=this.verticesNeedUpdate=!0;return this},rotateX:function(a){mb.makeRotationX(a);this.applyMatrix4(mb);return this},rotateY:function(a){mb.makeRotationY(a);
-this.applyMatrix4(mb);return this},rotateZ:function(a){mb.makeRotationZ(a);this.applyMatrix4(mb);return this},translate:function(a,b,c){mb.makeTranslation(a,b,c);this.applyMatrix4(mb);return this},scale:function(a,b,c){mb.makeScale(a,b,c);this.applyMatrix4(mb);return this},lookAt:function(a){ih.lookAt(a);ih.updateMatrix();this.applyMatrix4(ih.matrix);return this},fromBufferGeometry:function(a){function b(a,b,d,e){var f=void 0===h?[]:[c.colors[a].clone(),c.colors[b].clone(),c.colors[d].clone()],n=
-void 0===g?[]:[(new m).fromBufferAttribute(g,a),(new m).fromBufferAttribute(g,b),(new m).fromBufferAttribute(g,d)];e=new Cc(a,b,d,n,f,e);c.faces.push(e);void 0!==l&&c.faceVertexUvs[0].push([(new u).fromBufferAttribute(l,a),(new u).fromBufferAttribute(l,b),(new u).fromBufferAttribute(l,d)]);void 0!==k&&c.faceVertexUvs[1].push([(new u).fromBufferAttribute(k,a),(new u).fromBufferAttribute(k,b),(new u).fromBufferAttribute(k,d)])}var c=this,d=null!==a.index?a.index:void 0,e=a.attributes;if(void 0===e.position)return console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."),
-this;var f=e.position,g=e.normal,h=e.color,l=e.uv,k=e.uv2;void 0!==k&&(this.faceVertexUvs[1]=[]);for(e=0;e<f.count;e++)c.vertices.push((new m).fromBufferAttribute(f,e)),void 0!==h&&c.colors.push((new H).fromBufferAttribute(h,e));e=a.groups;if(0<e.length)for(f=0;f<e.length;f++){var q=e[f],p=q.start,z=p;for(p+=q.count;z<p;z+=3)void 0!==d?b(d.getX(z),d.getX(z+1),d.getX(z+2),q.materialIndex):b(z,z+1,z+2,q.materialIndex)}else if(void 0!==d)for(e=0;e<d.count;e+=3)b(d.getX(e),d.getX(e+1),d.getX(e+2));else for(d=
-0;d<f.count;d+=3)b(d,d+1,d+2);this.computeFaceNormals();null!==a.boundingBox&&(this.boundingBox=a.boundingBox.clone());null!==a.boundingSphere&&(this.boundingSphere=a.boundingSphere.clone());return this},center:function(){this.computeBoundingBox();this.boundingBox.getCenter(Jf).negate();this.translate(Jf.x,Jf.y,Jf.z);return this},normalize:function(){this.computeBoundingSphere();var a=this.boundingSphere.center,b=this.boundingSphere.radius;b=0===b?1:1/b;var c=new U;c.set(b,0,0,-b*a.x,0,b,0,-b*a.y,
-0,0,b,-b*a.z,0,0,0,1);this.applyMatrix4(c);return this},computeFaceNormals:function(){for(var a=new m,b=new m,c=0,d=this.faces.length;c<d;c++){var e=this.faces[c],f=this.vertices[e.a],g=this.vertices[e.b];a.subVectors(this.vertices[e.c],g);b.subVectors(f,g);a.cross(b);a.normalize();e.normal.copy(a)}},computeVertexNormals:function(a){void 0===a&&(a=!0);for(var b=Array(this.vertices.length),c=0,d=this.vertices.length;c<d;c++)b[c]=new m;if(a){a=new m;c=new m;d=0;for(var e=this.faces.length;d<e;d++){var f=
-this.faces[d],g=this.vertices[f.a],h=this.vertices[f.b];a.subVectors(this.vertices[f.c],h);c.subVectors(g,h);a.cross(c);b[f.a].add(a);b[f.b].add(a);b[f.c].add(a)}}else for(this.computeFaceNormals(),a=0,c=this.faces.length;a<c;a++)d=this.faces[a],b[d.a].add(d.normal),b[d.b].add(d.normal),b[d.c].add(d.normal);a=0;for(c=this.vertices.length;a<c;a++)b[a].normalize();a=0;for(c=this.faces.length;a<c;a++)d=this.faces[a],e=d.vertexNormals,3===e.length?(e[0].copy(b[d.a]),e[1].copy(b[d.b]),e[2].copy(b[d.c])):
-(e[0]=b[d.a].clone(),e[1]=b[d.b].clone(),e[2]=b[d.c].clone());0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeFlatVertexNormals:function(){this.computeFaceNormals();for(var a=0,b=this.faces.length;a<b;a++){var c=this.faces[a],d=c.vertexNormals;3===d.length?(d[0].copy(c.normal),d[1].copy(c.normal),d[2].copy(c.normal)):(d[0]=c.normal.clone(),d[1]=c.normal.clone(),d[2]=c.normal.clone())}0<this.faces.length&&(this.normalsNeedUpdate=!0)},computeMorphNormals:function(){for(var a=0,b=this.faces.length;a<
-b;a++){var c=this.faces[a];c.__originalFaceNormal?c.__originalFaceNormal.copy(c.normal):c.__originalFaceNormal=c.normal.clone();c.__originalVertexNormals||(c.__originalVertexNormals=[]);for(var d=0,e=c.vertexNormals.length;d<e;d++)c.__originalVertexNormals[d]?c.__originalVertexNormals[d].copy(c.vertexNormals[d]):c.__originalVertexNormals[d]=c.vertexNormals[d].clone()}a=new F;a.faces=this.faces;b=0;for(c=this.morphTargets.length;b<c;b++){if(!this.morphNormals[b]){this.morphNormals[b]={};this.morphNormals[b].faceNormals=
-[];this.morphNormals[b].vertexNormals=[];d=this.morphNormals[b].faceNormals;e=this.morphNormals[b].vertexNormals;for(var f=0,g=this.faces.length;f<g;f++){var h=new m,l={a:new m,b:new m,c:new m};d.push(h);e.push(l)}}d=this.morphNormals[b];a.vertices=this.morphTargets[b].vertices;a.computeFaceNormals();a.computeVertexNormals();e=0;for(f=this.faces.length;e<f;e++)g=this.faces[e],h=d.vertexNormals[e],d.faceNormals[e].copy(g.normal),h.a.copy(g.vertexNormals[0]),h.b.copy(g.vertexNormals[1]),h.c.copy(g.vertexNormals[2])}a=
-0;for(b=this.faces.length;a<b;a++)c=this.faces[a],c.normal=c.__originalFaceNormal,c.vertexNormals=c.__originalVertexNormals},computeBoundingBox:function(){null===this.boundingBox&&(this.boundingBox=new Sa);this.boundingBox.setFromPoints(this.vertices)},computeBoundingSphere:function(){null===this.boundingSphere&&(this.boundingSphere=new cb);this.boundingSphere.setFromPoints(this.vertices)},merge:function(a,b,c){if(a&&a.isGeometry){var d,e=this.vertices.length,f=this.vertices,g=a.vertices,h=this.faces,
-l=a.faces,k=this.colors,q=a.colors;void 0===c&&(c=0);void 0!==b&&(d=(new qa).getNormalMatrix(b));for(var p=0,m=g.length;p<m;p++){var r=g[p].clone();void 0!==b&&r.applyMatrix4(b);f.push(r)}b=0;for(f=q.length;b<f;b++)k.push(q[b].clone());k=0;for(q=l.length;k<q;k++){b=l[k];m=b.vertexNormals;g=b.vertexColors;f=new Cc(b.a+e,b.b+e,b.c+e);f.normal.copy(b.normal);void 0!==d&&f.normal.applyMatrix3(d).normalize();r=0;for(var t=m.length;r<t;r++)p=m[r].clone(),void 0!==d&&p.applyMatrix3(d).normalize(),f.vertexNormals.push(p);
-f.color.copy(b.color);m=0;for(r=g.length;m<r;m++)p=g[m],f.vertexColors.push(p.clone());f.materialIndex=b.materialIndex+c;h.push(f)}c=0;for(d=a.faceVertexUvs.length;c<d;c++)for(e=a.faceVertexUvs[c],void 0===this.faceVertexUvs[c]&&(this.faceVertexUvs[c]=[]),h=0,l=e.length;h<l;h++){k=e[h];q=[];b=0;for(f=k.length;b<f;b++)q.push(k[b].clone());this.faceVertexUvs[c].push(q)}}else console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.",a)},mergeMesh:function(a){a&&a.isMesh?(a.matrixAutoUpdate&&
-a.updateMatrix(),this.merge(a.geometry,a.matrix)):console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.",a)},mergeVertices:function(){for(var a={},b=[],c=[],d=Math.pow(10,4),e=0,f=this.vertices.length;e<f;e++){var g=this.vertices[e];g=Math.round(g.x*d)+"_"+Math.round(g.y*d)+"_"+Math.round(g.z*d);void 0===a[g]?(a[g]=e,b.push(this.vertices[e]),c[e]=b.length-1):c[e]=c[a[g]]}a=[];d=0;for(e=this.faces.length;d<e;d++)for(f=this.faces[d],f.a=c[f.a],f.b=c[f.b],f.c=c[f.c],f=[f.a,f.b,
-f.c],g=0;3>g;g++)if(f[g]===f[(g+1)%3]){a.push(d);break}for(c=a.length-1;0<=c;c--)for(d=a[c],this.faces.splice(d,1),e=0,f=this.faceVertexUvs.length;e<f;e++)this.faceVertexUvs[e].splice(d,1);c=this.vertices.length-b.length;this.vertices=b;return c},setFromPoints:function(a){this.vertices=[];for(var b=0,c=a.length;b<c;b++){var d=a[b];this.vertices.push(new m(d.x,d.y,d.z||0))}return this},sortFacesByMaterialIndex:function(){for(var a=this.faces,b=a.length,c=0;c<b;c++)a[c]._id=c;a.sort(function(a,b){return a.materialIndex-
-b.materialIndex});c=this.faceVertexUvs[0];var d=this.faceVertexUvs[1],e,f;c&&c.length===b&&(e=[]);d&&d.length===b&&(f=[]);for(var g=0;g<b;g++){var h=a[g]._id;e&&e.push(c[h]);f&&f.push(d[h])}e&&(this.faceVertexUvs[0]=e);f&&(this.faceVertexUvs[1]=f)},toJSON:function(){function a(a,b,c){return c?a|1<<b:a&~(1<<b)}function b(a){var b=a.x.toString()+a.y.toString()+a.z.toString();if(void 0!==k[b])return k[b];k[b]=l.length/3;l.push(a.x,a.y,a.z);return k[b]}function c(a){var b=a.r.toString()+a.g.toString()+
-a.b.toString();if(void 0!==p[b])return p[b];p[b]=q.length;q.push(a.getHex());return p[b]}function d(a){var b=a.x.toString()+a.y.toString();if(void 0!==r[b])return r[b];r[b]=m.length/2;m.push(a.x,a.y);return r[b]}var e={metadata:{version:4.5,type:"Geometry",generator:"Geometry.toJSON"}};e.uuid=this.uuid;e.type=this.type;""!==this.name&&(e.name=this.name);if(void 0!==this.parameters){var f=this.parameters,g;for(g in f)void 0!==f[g]&&(e[g]=f[g]);return e}f=[];for(g=0;g<this.vertices.length;g++){var h=
-this.vertices[g];f.push(h.x,h.y,h.z)}g=[];var l=[],k={},q=[],p={},m=[],r={};for(h=0;h<this.faces.length;h++){var t=this.faces[h],v=void 0!==this.faceVertexUvs[0][h],x=0<t.normal.length(),u=0<t.vertexNormals.length,w=1!==t.color.r||1!==t.color.g||1!==t.color.b,A=0<t.vertexColors.length,C=0;C=a(C,0,0);C=a(C,1,!0);C=a(C,2,!1);C=a(C,3,v);C=a(C,4,x);C=a(C,5,u);C=a(C,6,w);C=a(C,7,A);g.push(C);g.push(t.a,t.b,t.c);g.push(t.materialIndex);v&&(v=this.faceVertexUvs[0][h],g.push(d(v[0]),d(v[1]),d(v[2])));x&&
-g.push(b(t.normal));u&&(x=t.vertexNormals,g.push(b(x[0]),b(x[1]),b(x[2])));w&&g.push(c(t.color));A&&(t=t.vertexColors,g.push(c(t[0]),c(t[1]),c(t[2])))}e.data={};e.data.vertices=f;e.data.normals=l;0<q.length&&(e.data.colors=q);0<m.length&&(e.data.uvs=[m]);e.data.faces=g;return e},clone:function(){return(new F).copy(this)},copy:function(a){this.vertices=[];this.colors=[];this.faces=[];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphNormals=[];this.skinWeights=[];this.skinIndices=[];this.lineDistances=
-[];this.boundingSphere=this.boundingBox=null;this.name=a.name;for(var b=a.vertices,c=0,d=b.length;c<d;c++)this.vertices.push(b[c].clone());b=a.colors;c=0;for(d=b.length;c<d;c++)this.colors.push(b[c].clone());b=a.faces;c=0;for(d=b.length;c<d;c++)this.faces.push(b[c].clone());b=0;for(c=a.faceVertexUvs.length;b<c;b++){d=a.faceVertexUvs[b];void 0===this.faceVertexUvs[b]&&(this.faceVertexUvs[b]=[]);for(var e=0,f=d.length;e<f;e++){for(var g=d[e],h=[],l=0,k=g.length;l<k;l++)h.push(g[l].clone());this.faceVertexUvs[b].push(h)}}b=
-a.morphTargets;c=0;for(d=b.length;c<d;c++){e={};e.name=b[c].name;if(void 0!==b[c].vertices)for(e.vertices=[],f=0,g=b[c].vertices.length;f<g;f++)e.vertices.push(b[c].vertices[f].clone());if(void 0!==b[c].normals)for(e.normals=[],f=0,g=b[c].normals.length;f<g;f++)e.normals.push(b[c].normals[f].clone());this.morphTargets.push(e)}b=a.morphNormals;c=0;for(d=b.length;c<d;c++){e={};if(void 0!==b[c].vertexNormals)for(e.vertexNormals=[],f=0,g=b[c].vertexNormals.length;f<g;f++)h=b[c].vertexNormals[f],l={},
-l.a=h.a.clone(),l.b=h.b.clone(),l.c=h.c.clone(),e.vertexNormals.push(l);if(void 0!==b[c].faceNormals)for(e.faceNormals=[],f=0,g=b[c].faceNormals.length;f<g;f++)e.faceNormals.push(b[c].faceNormals[f].clone());this.morphNormals.push(e)}b=a.skinWeights;c=0;for(d=b.length;c<d;c++)this.skinWeights.push(b[c].clone());b=a.skinIndices;c=0;for(d=b.length;c<d;c++)this.skinIndices.push(b[c].clone());b=a.lineDistances;c=0;for(d=b.length;c<d;c++)this.lineDistances.push(b[c]);b=a.boundingBox;null!==b&&(this.boundingBox=
-b.clone());b=a.boundingSphere;null!==b&&(this.boundingSphere=b.clone());this.elementsNeedUpdate=a.elementsNeedUpdate;this.verticesNeedUpdate=a.verticesNeedUpdate;this.uvsNeedUpdate=a.uvsNeedUpdate;this.normalsNeedUpdate=a.normalsNeedUpdate;this.colorsNeedUpdate=a.colorsNeedUpdate;this.lineDistancesNeedUpdate=a.lineDistancesNeedUpdate;this.groupsNeedUpdate=a.groupsNeedUpdate;return this},dispose:function(){this.dispatchEvent({type:"dispose"})}});Gc.prototype=Object.create(F.prototype);Gc.prototype.constructor=
-Gc;Bb.prototype=Object.create(E.prototype);Bb.prototype.constructor=Bb;var Qh={clone:Hc,merge:Aa};ra.prototype=Object.create(L.prototype);ra.prototype.constructor=ra;ra.prototype.isShaderMaterial=!0;ra.prototype.copy=function(a){L.prototype.copy.call(this,a);this.fragmentShader=a.fragmentShader;this.vertexShader=a.vertexShader;this.uniforms=Hc(a.uniforms);this.defines=Object.assign({},a.defines);this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.lights=a.lights;this.clipping=
-a.clipping;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.extensions=Object.assign({},a.extensions);return this};ra.prototype.toJSON=function(a){var b=L.prototype.toJSON.call(this,a);b.uniforms={};for(var c in this.uniforms){var d=this.uniforms[c].value;b.uniforms[c]=d&&d.isTexture?{type:"t",value:d.toJSON(a).uuid}:d&&d.isColor?{type:"c",value:d.getHex()}:d&&d.isVector2?{type:"v2",value:d.toArray()}:d&&d.isVector3?{type:"v3",value:d.toArray()}:d&&d.isVector4?
-{type:"v4",value:d.toArray()}:d&&d.isMatrix3?{type:"m3",value:d.toArray()}:d&&d.isMatrix4?{type:"m4",value:d.toArray()}:{value:d}}0<Object.keys(this.defines).length&&(b.defines=this.defines);b.vertexShader=this.vertexShader;b.fragmentShader=this.fragmentShader;a={};for(var e in this.extensions)!0===this.extensions[e]&&(a[e]=!0);0<Object.keys(a).length&&(b.extensions=a);return b};db.prototype=Object.assign(Object.create(C.prototype),{constructor:db,isCamera:!0,copy:function(a,b){C.prototype.copy.call(this,
-a,b);this.matrixWorldInverse.copy(a.matrixWorldInverse);this.projectionMatrix.copy(a.projectionMatrix);this.projectionMatrixInverse.copy(a.projectionMatrixInverse);return this},getWorldDirection:function(a){void 0===a&&(console.warn("THREE.Camera: .getWorldDirection() target is now required"),a=new m);this.updateMatrixWorld(!0);var b=this.matrixWorld.elements;return a.set(-b[8],-b[9],-b[10]).normalize()},updateMatrixWorld:function(a){C.prototype.updateMatrixWorld.call(this,a);this.matrixWorldInverse.getInverse(this.matrixWorld)},
-updateWorldMatrix:function(a,b){C.prototype.updateWorldMatrix.call(this,a,b);this.matrixWorldInverse.getInverse(this.matrixWorld)},clone:function(){return(new this.constructor).copy(this)}});W.prototype=Object.assign(Object.create(db.prototype),{constructor:W,isPerspectiveCamera:!0,copy:function(a,b){db.prototype.copy.call(this,a,b);this.fov=a.fov;this.zoom=a.zoom;this.near=a.near;this.far=a.far;this.focus=a.focus;this.aspect=a.aspect;this.view=null===a.view?null:Object.assign({},a.view);this.filmGauge=
-a.filmGauge;this.filmOffset=a.filmOffset;return this},setFocalLength:function(a){a=.5*this.getFilmHeight()/a;this.fov=2*P.RAD2DEG*Math.atan(a);this.updateProjectionMatrix()},getFocalLength:function(){var a=Math.tan(.5*P.DEG2RAD*this.fov);return.5*this.getFilmHeight()/a},getEffectiveFOV:function(){return 2*P.RAD2DEG*Math.atan(Math.tan(.5*P.DEG2RAD*this.fov)/this.zoom)},getFilmWidth:function(){return this.filmGauge*Math.min(this.aspect,1)},getFilmHeight:function(){return this.filmGauge/Math.max(this.aspect,
-1)},setViewOffset:function(a,b,c,d,e,f){this.aspect=a/b;null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1});this.view.enabled=!0;this.view.fullWidth=a;this.view.fullHeight=b;this.view.offsetX=c;this.view.offsetY=d;this.view.width=e;this.view.height=f;this.updateProjectionMatrix()},clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1);this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=this.near,b=a*Math.tan(.5*P.DEG2RAD*
-this.fov)/this.zoom,c=2*b,d=this.aspect*c,e=-.5*d,f=this.view;if(null!==this.view&&this.view.enabled){var g=f.fullWidth,h=f.fullHeight;e+=f.offsetX*d/g;b-=f.offsetY*c/h;d*=f.width/g;c*=f.height/h}f=this.filmOffset;0!==f&&(e+=a*f/this.getFilmWidth());this.projectionMatrix.makePerspective(e,e+d,b,b-c,a,this.far);this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(a){a=C.prototype.toJSON.call(this,a);a.object.fov=this.fov;a.object.zoom=this.zoom;a.object.near=this.near;a.object.far=
-this.far;a.object.focus=this.focus;a.object.aspect=this.aspect;null!==this.view&&(a.object.view=Object.assign({},this.view));a.object.filmGauge=this.filmGauge;a.object.filmOffset=this.filmOffset;return a}});Ic.prototype=Object.create(C.prototype);Ic.prototype.constructor=Ic;ac.prototype=Object.create(Ga.prototype);ac.prototype.constructor=ac;ac.prototype.isWebGLCubeRenderTarget=!0;ac.prototype.fromEquirectangularTexture=function(a,b){this.texture.type=b.type;this.texture.format=1023;this.texture.encoding=
-b.encoding;this.texture.generateMipmaps=b.generateMipmaps;this.texture.minFilter=b.minFilter;this.texture.magFilter=b.magFilter;var c=new Ad,d=new ra({name:"CubemapFromEquirect",uniforms:Hc({tEquirect:{value:null}}),vertexShader:"nntttvarying vec3 vWorldDirection;nntttvec3 transformDirection( in vec3 dir, in mat4 matrix ) {nnttttreturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );nnttt}nntttvoid main() {nnttttvWorldDirection = transformDirection( position, modelMatrix );nntttt#include <begin_vertex>ntttt#include <project_vertex>nnttt}ntt",
-fragmentShader:"nntttuniform sampler2D tEquirect;nntttvarying vec3 vWorldDirection;nnttt#include <common>nntttvoid main() {nnttttvec3 direction = normalize( vWorldDirection );nnttttvec2 sampleUV = equirectUv( direction );nnttttgl_FragColor = texture2D( tEquirect, sampleUV );nnttt}ntt",side:1,blending:0});d.uniforms.tEquirect.value=b;b=new T(new Bb(5,5,5),d);c.add(b);(new Ic(1,10,this)).update(a,c);b.geometry.dispose();b.material.dispose();return this};
-bc.prototype=Object.create(V.prototype);bc.prototype.constructor=bc;bc.prototype.isDataTexture=!0;var wd=new cb,Kf=new m;Object.assign(Jc.prototype,{set:function(a,b,c,d,e,f){var g=this.planes;g[0].copy(a);g[1].copy(b);g[2].copy(c);g[3].copy(d);g[4].copy(e);g[5].copy(f);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromProjectionMatrix:function(a){var b=this.planes,c=a.elements;a=c[0];
-var d=c[1],e=c[2],f=c[3],g=c[4],h=c[5],l=c[6],k=c[7],q=c[8],p=c[9],m=c[10],r=c[11],t=c[12],v=c[13],x=c[14];c=c[15];b[0].setComponents(f-a,k-g,r-q,c-t).normalize();b[1].setComponents(f+a,k+g,r+q,c+t).normalize();b[2].setComponents(f+d,k+h,r+p,c+v).normalize();b[3].setComponents(f-d,k-h,r-p,c-v).normalize();b[4].setComponents(f-e,k-l,r-m,c-x).normalize();b[5].setComponents(f+e,k+l,r+m,c+x).normalize();return this},intersectsObject:function(a){var b=a.geometry;null===b.boundingSphere&&b.computeBoundingSphere();
-wd.copy(b.boundingSphere).applyMatrix4(a.matrixWorld);return this.intersectsSphere(wd)},intersectsSprite:function(a){wd.center.set(0,0,0);wd.radius=.7071067811865476;wd.applyMatrix4(a.matrixWorld);return this.intersectsSphere(wd)},intersectsSphere:function(a){var b=this.planes,c=a.center;a=-a.radius;for(var d=0;6>d;d++)if(b[d].distanceToPoint(c)<a)return!1;return!0},intersectsBox:function(a){for(var b=this.planes,c=0;6>c;c++){var d=b[c];Kf.x=0<d.normal.x?a.max.x:a.min.x;Kf.y=0<d.normal.y?a.max.y:
-a.min.y;Kf.z=0<d.normal.z?a.max.z:a.min.z;if(0>d.distanceToPoint(Kf))return!1}return!0},containsPoint:function(a){for(var b=this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0}});var G={common:{diffuse:{value:new H(15658734)},opacity:{value:1},map:{value:null},uvTransform:{value:new qa},uv2Transform:{value:new qa},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 u(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:2.5E-4},
-fogNear:{value:1},fogFar:{value:2E3},fogColor:{value:new H(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:{}}}},points:{diffuse:{value:new H(15658734)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},uvTransform:{value:new qa}},sprite:{diffuse:{value:new H(15658734)},opacity:{value:1},center:{value:new u(.5,.5)},rotation:{value:0},map:{value:null},alphaMap:{value:null},uvTransform:{value:new qa}}};Id.prototype=Object.create(F.prototype);Id.prototype.constructor=Id;cc.prototype=Object.create(E.prototype);cc.prototype.constructor=
-cc;var O={alphamap_fragment:"#ifdef USE_ALPHAMAPntdiffuseColor.a *= texture2D( alphaMap, vUv ).g;n#endif",alphamap_pars_fragment:"#ifdef USE_ALPHAMAPntuniform sampler2D alphaMap;n#endif",alphatest_fragment:"#ifdef ALPHATESTntif ( diffuseColor.a < ALPHATEST ) discard;n#endif",aomap_fragment:"#ifdef USE_AOMAPntfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;ntreflectedLight.indirectDiffuse *= ambientOcclusion;nt#if defined( USE_ENVMAP ) && defined( STANDARD )nttfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );nttreflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );nt#endifn#endif",
-aomap_pars_fragment:"#ifdef USE_AOMAPntuniform sampler2D aoMap;ntuniform float aoMapIntensity;n#endif",begin_vertex:"vec3 transformed = vec3( position );",beginnormal_vertex:"vec3 objectNormal = vec3( normal );n#ifdef USE_TANGENTntvec3 objectTangent = vec3( tangent.xyz );n#endif",bsdfs:"vec2 integrateSpecularBRDF( const in float dotNV, const in float roughness ) {ntconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );ntconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );ntvec4 r = roughness * c0 + c1;ntfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;ntreturn 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 )ntfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );ntif( cutoffDistance > 0.0 ) {nttdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );nt}ntreturn distanceFalloff;n#elsentif( cutoffDistance > 0.0 && decayExponent > 0.0 ) {nttreturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );nt}ntreturn 1.0;n#endifn}nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {ntreturn RECIPROCAL_PI * diffuseColor;n}nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {ntfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );ntreturn ( 1.0 - specularColor ) * fresnel + specularColor;n}nvec3 F_Schlick_RoughnessDependent( const in vec3 F0, const in float dotNV, const in float roughness ) {ntfloat fresnel = exp2( ( -5.55473 * dotNV - 6.98316 ) * dotNV );ntvec3 Fr = max( vec3( 1.0 - roughness ), F0 ) - F0;ntreturn Fr * fresnel + F0;n}nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {ntfloat a2 = pow2( alpha );ntfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );ntfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );ntreturn 1.0 / ( gl * gv );n}nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {ntfloat a2 = pow2( alpha );ntfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );ntfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );ntreturn 0.5 / max( gv + gl, EPSILON );n}nfloat D_GGX( const in float alpha, const in float dotNH ) {ntfloat a2 = pow2( alpha );ntfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;ntreturn 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 ) {ntfloat alpha = pow2( roughness );ntvec3 halfDir = normalize( incidentLight.direction + viewDir );ntfloat dotNL = saturate( dot( normal, incidentLight.direction ) );ntfloat dotNV = saturate( dot( normal, viewDir ) );ntfloat dotNH = saturate( dot( normal, halfDir ) );ntfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );ntvec3 F = F_Schlick( specularColor, dotLH );ntfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );ntfloat D = D_GGX( alpha, dotNH );ntreturn F * ( G * D );n}nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {ntconst float LUT_SIZE = 64.0;ntconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;ntconst float LUT_BIAS = 0.5 / LUT_SIZE;ntfloat dotNV = saturate( dot( N, V ) );ntvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );ntuv = uv * LUT_SCALE + LUT_BIAS;ntreturn uv;n}nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {ntfloat l = length( f );ntreturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );n}nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {ntfloat x = dot( v1, v2 );ntfloat y = abs( x );ntfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;ntfloat b = 3.4175940 + ( 4.1616724 + y ) * y;ntfloat v = a / b;ntfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;ntreturn 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 ] ) {ntvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];ntvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];ntvec3 lightNormal = cross( v1, v2 );ntif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );ntvec3 T1, T2;ntT1 = normalize( V - N * dot( V, N ) );ntT2 = - cross( N, T1 );ntmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );ntvec3 coords[ 4 ];ntcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );ntcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );ntcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );ntcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );ntcoords[ 0 ] = normalize( coords[ 0 ] );ntcoords[ 1 ] = normalize( coords[ 1 ] );ntcoords[ 2 ] = normalize( coords[ 2 ] );ntcoords[ 3 ] = normalize( coords[ 3 ] );ntvec3 vectorFormFactor = vec3( 0.0 );ntvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );ntvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );ntvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );ntvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );ntfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );ntreturn vec3( result );n}nvec3 BRDF_Specular_GGX_Environment( const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float roughness ) {ntfloat dotNV = saturate( dot( normal, viewDir ) );ntvec2 brdf = integrateSpecularBRDF( dotNV, roughness );ntreturn 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 ) {ntfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );ntvec3 F = F_Schlick_RoughnessDependent( specularColor, dotNV, roughness );ntvec2 brdf = integrateSpecularBRDF( dotNV, roughness );ntvec3 FssEss = F * brdf.x + brdf.y;ntfloat Ess = brdf.x + brdf.y;ntfloat Ems = 1.0 - Ess;ntvec3 Favg = specularColor + ( 1.0 - specularColor ) * 0.047619;tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );ntsingleScatter += FssEss;ntmultiScatter += Fms * Ems;n}nfloat G_BlinnPhong_Implicit( ) {ntreturn 0.25;n}nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {ntreturn 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 ) {ntvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );ntfloat dotNH = saturate( dot( geometry.normal, halfDir ) );ntfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );ntvec3 F = F_Schlick( specularColor, dotLH );ntfloat G = G_BlinnPhong_Implicit( );ntfloat D = D_BlinnPhong( shininess, dotNH );ntreturn F * ( G * D );n}nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {ntreturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );n}nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {ntreturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );n}n#if defined( USE_SHEEN )nfloat D_Charlie(float roughness, float NoH) {ntfloat invAlpha = 1.0 / roughness;ntfloat cos2h = NoH * NoH;ntfloat 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) {ntreturn 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 ) {ntvec3 N = geometry.normal;ntvec3 V = geometry.viewDir;ntvec3 H = normalize( V + L );ntfloat dotNH = saturate( dot( N, H ) );ntreturn specularColor * D_Charlie( roughness, dotNH ) * V_Neubelt( dot(N, V), dot(N, L) );n}n#endif",
-bumpmap_pars_fragment:"#ifdef USE_BUMPMAPntuniform sampler2D bumpMap;ntuniform float bumpScale;ntvec2 dHdxy_fwd() {nttvec2 dSTdx = dFdx( vUv );nttvec2 dSTdy = dFdy( vUv );nttfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;nttfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;nttfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;nttreturn vec2( dBx, dBy );nt}ntvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {nttvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );nttvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );nttvec3 vN = surf_norm;nttvec3 R1 = cross( vSigmaY, vN );nttvec3 R2 = cross( vN, vSigmaX );nttfloat fDet = dot( vSigmaX, R1 );nttfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );nttvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );nttreturn normalize( abs( fDet ) * surf_norm - vGrad );nt}n#endif",
-clipping_planes_fragment:"#if NUM_CLIPPING_PLANES > 0ntvec4 plane;nt#pragma unroll_loop_startntfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {nttplane = clippingPlanes[ i ];nttif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;nt}nt#pragma unroll_loop_endnt#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANESnttbool clipped = true;ntt#pragma unroll_loop_startnttfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {ntttplane = clippingPlanes[ i ];ntttclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;ntt}ntt#pragma unroll_loop_endnttif ( clipped ) discard;nt#endifn#endif",
-clipping_planes_pars_fragment:"#if NUM_CLIPPING_PLANES > 0ntvarying vec3 vClipPosition;ntuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];n#endif",clipping_planes_pars_vertex:"#if NUM_CLIPPING_PLANES > 0ntvarying vec3 vClipPosition;n#endif",clipping_planes_vertex:"#if NUM_CLIPPING_PLANES > 0ntvClipPosition = - mvPosition.xyz;n#endif",color_fragment:"#ifdef USE_COLORntdiffuseColor.rgb *= vColor;n#endif",color_pars_fragment:"#ifdef USE_COLORntvarying vec3 vColor;n#endif",color_pars_vertex:"#ifdef USE_COLORntvarying vec3 vColor;n#endif",
-color_vertex:"#ifdef USE_COLORntvColor.xyz = color.xyz;n#endif",common:"#define PI 3.141592653589793n#define PI2 6.283185307179586n#define PI_HALF 1.5707963267948966n#define RECIPROCAL_PI 0.3183098861837907n#define RECIPROCAL_PI2 0.15915494309189535n#define EPSILON 1e-6n#ifndef saturaten#define saturate(a) clamp( a, 0.0, 1.0 )n#endifn#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 ) {ntconst highp float a = 12.9898, b = 78.233, c = 43758.5453;nthighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );ntreturn fract(sin(sn) * c);n}n#ifdef HIGH_PRECISIONntfloat precisionSafeLength( vec3 v ) { return length( v ); }n#elsentfloat max3( vec3 v ) { return max( max( v.x, v.y ), v.z ); }ntfloat precisionSafeLength( vec3 v ) {nttfloat maxComponent = max3( abs( v ) );nttreturn length( v / maxComponent ) * maxComponent;nt}n#endifnstruct IncidentLight {ntvec3 color;ntvec3 direction;ntbool visible;n};nstruct ReflectedLight {ntvec3 directDiffuse;ntvec3 directSpecular;ntvec3 indirectDiffuse;ntvec3 indirectSpecular;n};nstruct GeometricContext {ntvec3 position;ntvec3 normal;ntvec3 viewDir;n#ifdef CLEARCOATntvec3 clearcoatNormal;n#endifn};nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {ntreturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );n}nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {ntreturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );n}nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {ntfloat distance = dot( planeNormal, point - pointOnPlane );ntreturn - distance * planeNormal + point;n}nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {ntreturn sign( dot( point - pointOnPlane, planeNormal ) );n}nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {ntreturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;n}nmat3 transposeMat3( const in mat3 m ) {ntmat3 tmp;nttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );nttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );nttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );ntreturn tmp;n}nfloat linearToRelativeLuminance( const in vec3 color ) {ntvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );ntreturn dot( weights, color.rgb );n}nbool isPerspectiveMatrix( mat4 m ) {ntreturn m[ 2 ][ 3 ] == - 1.0;n}nvec2 equirectUv( in vec3 dir ) {ntfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;ntfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;ntreturn vec2( u, v );n}",
-cube_uv_reflection_fragment:"#ifdef ENVMAP_TYPE_CUBE_UVn#define cubeUV_maxMipLevel 8.0n#define cubeUV_minMipLevel 4.0n#define cubeUV_maxTileSize 256.0n#define cubeUV_minTileSize 16.0nfloat getFace(vec3 direction) {n vec3 absDirection = abs(direction);n float face = -1.0;n if (absDirection.x > absDirection.z) {n if (absDirection.x > absDirection.y)n face = direction.x > 0.0 ? 0.0 : 3.0;n elsen face = direction.y > 0.0 ? 1.0 : 4.0;n } else {n if (absDirection.z > absDirection.y)n face = direction.z > 0.0 ? 2.0 : 5.0;n elsen face = direction.y > 0.0 ? 1.0 : 4.0;n }n return face;n}nvec2 getUV(vec3 direction, float face) {n vec2 uv;n if (face == 0.0) {n uv = vec2(direction.z, direction.y) / abs(direction.x); } else if (face == 1.0) {n uv = vec2(-direction.x, -direction.z) / abs(direction.y); } else if (face == 2.0) {n uv = vec2(-direction.x, direction.y) / abs(direction.z); } else if (face == 3.0) {n uv = vec2(-direction.z, direction.y) / abs(direction.x); } else if (face == 4.0) {n uv = vec2(-direction.x, direction.z) / abs(direction.y); } else {n uv = vec2(direction.x, direction.y) / abs(direction.z); }n return 0.5 * (uv + 1.0);n}nvec3 bilinearCubeUV(sampler2D envMap, vec3 direction, float mipInt) {n float face = getFace(direction);n float filterInt = max(cubeUV_minMipLevel - mipInt, 0.0);n mipInt = max(mipInt, cubeUV_minMipLevel);n float faceSize = exp2(mipInt);n float texelSize = 1.0 / (3.0 * cubeUV_maxTileSize);n vec2 uv = getUV(direction, face) * (faceSize - 1.0);n vec2 f = fract(uv);n uv += 0.5 - f;n if (face > 2.0) {n uv.y += faceSize;n face -= 3.0;n }n uv.x += face * faceSize;n if(mipInt < cubeUV_maxMipLevel){n uv.y += 2.0 * cubeUV_maxTileSize;n }n uv.y += filterInt * 2.0 * cubeUV_minTileSize;n uv.x += 3.0 * max(0.0, cubeUV_maxTileSize - 2.0 * faceSize);n uv *= texelSize;n vec3 tl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;n uv.x += texelSize;n vec3 tr = envMapTexelToLinear(texture2D(envMap, uv)).rgb;n uv.y += texelSize;n vec3 br = envMapTexelToLinear(texture2D(envMap, uv)).rgb;n uv.x -= texelSize;n vec3 bl = envMapTexelToLinear(texture2D(envMap, uv)).rgb;n vec3 tm = mix(tl, tr, f.x);n vec3 bm = mix(bl, br, f.x);n return mix(tm, bm, f.y);n}n#define r0 1.0n#define v0 0.339n#define m0 -2.0n#define r1 0.8n#define v1 0.276n#define m1 -1.0n#define r4 0.4n#define v4 0.046n#define m4 2.0n#define r5 0.305n#define v5 0.016n#define m5 3.0n#define r6 0.21n#define v6 0.0038n#define m6 4.0nfloat roughnessToMip(float roughness) {n float mip = 0.0;n if (roughness >= r1) {n mip = (r0 - roughness) * (m1 - m0) / (r0 - r1) + m0;n } else if (roughness >= r4) {n mip = (r1 - roughness) * (m4 - m1) / (r1 - r4) + m1;n } else if (roughness >= r5) {n mip = (r4 - roughness) * (m5 - m4) / (r4 - r5) + m4;n } else if (roughness >= r6) {n mip = (r5 - roughness) * (m6 - m5) / (r5 - r6) + m5;n } else {n mip = -2.0 * log2(1.16 * roughness); }n return mip;n}nvec4 textureCubeUV(sampler2D envMap, vec3 sampleDir, float roughness) {n float mip = clamp(roughnessToMip(roughness), m0, cubeUV_maxMipLevel);n float mipF = fract(mip);n float mipInt = floor(mip);n vec3 color0 = bilinearCubeUV(envMap, sampleDir, mipInt);n if (mipF == 0.0) {n return vec4(color0, 1.0);n } else {n vec3 color1 = bilinearCubeUV(envMap, sampleDir, mipInt + 1.0);n return vec4(mix(color0, color1, mipF), 1.0);n }n}n#endif",
-defaultnormal_vertex:"vec3 transformedNormal = objectNormal;n#ifdef USE_INSTANCINGntmat3 m = mat3( instanceMatrix );nttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );nttransformedNormal = m * transformedNormal;n#endifntransformedNormal = normalMatrix * transformedNormal;n#ifdef FLIP_SIDEDnttransformedNormal = - transformedNormal;n#endifn#ifdef USE_TANGENTntvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;nt#ifdef FLIP_SIDEDntttransformedTangent = - transformedTangent;nt#endifn#endif",
-displacementmap_pars_vertex:"#ifdef USE_DISPLACEMENTMAPntuniform sampler2D displacementMap;ntuniform float displacementScale;ntuniform float displacementBias;n#endif",displacementmap_vertex:"#ifdef USE_DISPLACEMENTMAPnttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vUv ).x * displacementScale + displacementBias );n#endif",emissivemap_fragment:"#ifdef USE_EMISSIVEMAPntvec4 emissiveColor = texture2D( emissiveMap, vUv );ntemissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;nttotalEmissiveRadiance *= emissiveColor.rgb;n#endif",
-emissivemap_pars_fragment:"#ifdef USE_EMISSIVEMAPntuniform sampler2D emissiveMap;n#endif",encodings_fragment:"gl_FragColor = linearToOutputTexel( gl_FragColor );",encodings_pars_fragment:"nvec4 LinearToLinear( in vec4 value ) {ntreturn value;n}nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {ntreturn vec4( pow( value.rgb, vec3( gammaFactor ) ), value.a );n}nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {ntreturn vec4( pow( value.rgb, vec3( 1.0 / gammaFactor ) ), value.a );n}nvec4 sRGBToLinear( in vec4 value ) {ntreturn 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 ) {ntreturn 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 ) {ntreturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );n}nvec4 LinearToRGBE( in vec4 value ) {ntfloat maxComponent = max( max( value.r, value.g ), value.b );ntfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );ntreturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );n}nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {ntreturn vec4( value.rgb * value.a * maxRange, 1.0 );n}nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {ntfloat maxRGB = max( value.r, max( value.g, value.b ) );ntfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );ntM = ceil( M * 255.0 ) / 255.0;ntreturn vec4( value.rgb / ( M * maxRange ), M );n}nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {ntreturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );n}nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {ntfloat maxRGB = max( value.r, max( value.g, value.b ) );ntfloat D = max( maxRange / maxRGB, 1.0 );ntD = clamp( floor( D ) / 255.0, 0.0, 1.0 );ntreturn 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 ) {ntvec3 Xp_Y_XYZp = cLogLuvM * value.rgb;ntXp_Y_XYZp = max( Xp_Y_XYZp, vec3( 1e-6, 1e-6, 1e-6 ) );ntvec4 vResult;ntvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;ntfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;ntvResult.w = fract( Le );ntvResult.z = ( Le - ( floor( vResult.w * 255.0 ) ) / 255.0 ) / 255.0;ntreturn 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 ) {ntfloat Le = value.z * 255.0 + value.w;ntvec3 Xp_Y_XYZp;ntXp_Y_XYZp.y = exp2( ( Le - 127.0 ) / 2.0 );ntXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;ntXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;ntvec3 vRGB = cLogLuvInverseM * Xp_Y_XYZp.rgb;ntreturn vec4( max( vRGB, 0.0 ), 1.0 );n}",
-envmap_fragment:"#ifdef USE_ENVMAPnt#ifdef ENV_WORLDPOSnttvec3 cameraToFrag;nttnttif ( isOrthographic ) {ntttcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );ntt} else {ntttcameraToFrag = normalize( vWorldPosition - cameraPosition );ntt}nttvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );ntt#ifdef ENVMAP_MODE_REFLECTIONntttvec3 reflectVec = reflect( cameraToFrag, worldNormal );ntt#elsentttvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );ntt#endifnt#elsenttvec3 reflectVec = vReflect;nt#endifnt#ifdef ENVMAP_TYPE_CUBEnttvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );nt#elif defined( ENVMAP_TYPE_CUBE_UV )nttvec4 envColor = textureCubeUV( envMap, reflectVec, 0.0 );nt#elif defined( ENVMAP_TYPE_EQUIREC )nttreflectVec = normalize( reflectVec );nttvec2 sampleUV = equirectUv( reflectVec );nttvec4 envColor = texture2D( envMap, sampleUV );nt#elsenttvec4 envColor = vec4( 0.0 );nt#endifnt#ifndef ENVMAP_TYPE_CUBE_UVnttenvColor = envMapTexelToLinear( envColor );nt#endifnt#ifdef ENVMAP_BLENDING_MULTIPLYnttoutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );nt#elif defined( ENVMAP_BLENDING_MIX )nttoutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );nt#elif defined( ENVMAP_BLENDING_ADD )nttoutgoingLight += envColor.xyz * specularStrength * reflectivity;nt#endifn#endif",
-envmap_common_pars_fragment:"#ifdef USE_ENVMAPntuniform float envMapIntensity;ntuniform float flipEnvMap;ntuniform int maxMipLevel;nt#ifdef ENVMAP_TYPE_CUBEnttuniform samplerCube envMap;nt#elsenttuniform sampler2D envMap;nt#endifntn#endif",envmap_pars_fragment:"#ifdef USE_ENVMAPntuniform float reflectivity;nt#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )ntt#define ENV_WORLDPOSnt#endifnt#ifdef ENV_WORLDPOSnttvarying vec3 vWorldPosition;nttuniform float refractionRatio;nt#elsenttvarying vec3 vReflect;nt#endifn#endif",
-envmap_pars_vertex:"#ifdef USE_ENVMAPnt#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) ||defined( PHONG )ntt#define ENV_WORLDPOSnt#endifnt#ifdef ENV_WORLDPOSnttnttvarying vec3 vWorldPosition;nt#elsenttvarying vec3 vReflect;nttuniform float refractionRatio;nt#endifn#endif",envmap_physical_pars_fragment:"#if defined( USE_ENVMAP )nt#ifdef ENVMAP_MODE_REFRACTIONnttuniform float refractionRatio;nt#endifntvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {nttvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );ntt#ifdef ENVMAP_TYPE_CUBEntttvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );nttt#ifdef TEXTURE_LOD_EXTnttttvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );nttt#elsenttttvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );nttt#endifntttenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;ntt#elif defined( ENVMAP_TYPE_CUBE_UV )ntttvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );ntt#elsentttvec4 envMapColor = vec4( 0.0 );ntt#endifnttreturn PI * envMapColor.rgb * envMapIntensity;nt}ntfloat getSpecularMIPLevel( const in float roughness, const in int maxMIPLevel ) {nttfloat maxMIPLevelScalar = float( maxMIPLevel );nttfloat sigma = PI * roughness * roughness / ( 1.0 + roughness );nttfloat desiredMIPLevel = maxMIPLevelScalar + log2( sigma );nttreturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );nt}ntvec3 getLightProbeIndirectRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in int maxMIPLevel ) {ntt#ifdef ENVMAP_MODE_REFLECTIONntt vec3 reflectVec = reflect( -viewDir, normal );ntt reflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );ntt#elsentt vec3 reflectVec = refract( -viewDir, normal, refractionRatio );ntt#endifnttreflectVec = inverseTransformDirection( reflectVec, viewMatrix );nttfloat specularMIPLevel = getSpecularMIPLevel( roughness, maxMIPLevel );ntt#ifdef ENVMAP_TYPE_CUBEntttvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );nttt#ifdef TEXTURE_LOD_EXTnttttvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );nttt#elsenttttvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );nttt#endifntttenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;ntt#elif defined( ENVMAP_TYPE_CUBE_UV )ntttvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );ntt#elif defined( ENVMAP_TYPE_EQUIREC )ntttvec2 sampleUV = equirectUv( reflectVec );nttt#ifdef TEXTURE_LOD_EXTnttttvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );nttt#elsenttttvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );nttt#endifntttenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;ntt#endifnttreturn envMapColor.rgb * envMapIntensity;nt}n#endif",
-envmap_vertex:"#ifdef USE_ENVMAPnt#ifdef ENV_WORLDPOSnttvWorldPosition = worldPosition.xyz;nt#elsenttvec3 cameraToVertex;nttif ( isOrthographic ) {ntttcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );ntt} else {ntttcameraToVertex = normalize( worldPosition.xyz - cameraPosition );ntt}nttvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );ntt#ifdef ENVMAP_MODE_REFLECTIONntttvReflect = reflect( cameraToVertex, worldNormal );ntt#elsentttvReflect = refract( cameraToVertex, worldNormal, refractionRatio );ntt#endifnt#endifn#endif",
-fog_vertex:"#ifdef USE_FOGntfogDepth = - mvPosition.z;n#endif",fog_pars_vertex:"#ifdef USE_FOGntvarying float fogDepth;n#endif",fog_fragment:"#ifdef USE_FOGnt#ifdef FOG_EXP2nttfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * fogDepth * fogDepth );nt#elsenttfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );nt#endifntgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );n#endif",fog_pars_fragment:"#ifdef USE_FOGntuniform vec3 fogColor;ntvarying float fogDepth;nt#ifdef FOG_EXP2nttuniform float fogDensity;nt#elsenttuniform float fogNear;nttuniform float fogFar;nt#endifn#endif",
-gradientmap_pars_fragment:"#ifdef USE_GRADIENTMAPntuniform sampler2D gradientMap;n#endifnvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {ntfloat dotNL = dot( normal, lightDirection );ntvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );nt#ifdef USE_GRADIENTMAPnttreturn texture2D( gradientMap, coord ).rgb;nt#elsenttreturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );nt#endifn}",lightmap_fragment:"#ifdef USE_LIGHTMAPntvec4 lightMapTexel= texture2D( lightMap, vUv2 );ntreflectedLight.indirectDiffuse += PI * lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;n#endif",
-lightmap_pars_fragment:"#ifdef USE_LIGHTMAPntuniform sampler2D lightMap;ntuniform 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_SIDEDntvLightBack = vec3( 0.0 );ntvIndirectBack = vec3( 0.0 );n#endifnIncidentLight directLight;nfloat dotNL;nvec3 directLightColor_Diffuse;nvIndirectFront += getAmbientLightIrradiance( ambientLightColor );nvIndirectFront += getLightProbeIrradiance( lightProbe, geometry );n#ifdef DOUBLE_SIDEDntvIndirectBack += getAmbientLightIrradiance( ambientLightColor );ntvIndirectBack += getLightProbeIrradiance( lightProbe, backGeometry );n#endifn#if NUM_POINT_LIGHTS > 0nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {nttgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );nttdotNL = dot( geometry.normal, directLight.direction );nttdirectLightColor_Diffuse = PI * directLight.color;nttvLightFront += saturate( dotNL ) * directLightColor_Diffuse;ntt#ifdef DOUBLE_SIDEDntttvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;ntt#endifnt}nt#pragma unroll_loop_endn#endifn#if NUM_SPOT_LIGHTS > 0nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {nttgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );nttdotNL = dot( geometry.normal, directLight.direction );nttdirectLightColor_Diffuse = PI * directLight.color;nttvLightFront += saturate( dotNL ) * directLightColor_Diffuse;ntt#ifdef DOUBLE_SIDEDntttvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;ntt#endifnt}nt#pragma unroll_loop_endn#endifn#if NUM_DIR_LIGHTS > 0nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {nttgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );nttdotNL = dot( geometry.normal, directLight.direction );nttdirectLightColor_Diffuse = PI * directLight.color;nttvLightFront += saturate( dotNL ) * directLightColor_Diffuse;ntt#ifdef DOUBLE_SIDEDntttvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;ntt#endifnt}nt#pragma unroll_loop_endn#endifn#if NUM_HEMI_LIGHTS > 0nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {nttvIndirectFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );ntt#ifdef DOUBLE_SIDEDntttvIndirectBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );ntt#endifnt}nt#pragma unroll_loop_endn#endif",
-lights_pars_begin:"uniform bool receiveShadow;nuniform vec3 ambientLightColor;nuniform vec3 lightProbe[ 9 ];nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {ntfloat x = normal.x, y = normal.y, z = normal.z;ntvec3 result = shCoefficients[ 0 ] * 0.886227;ntresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;ntresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;ntresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;ntresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;ntresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;ntresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );ntresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;ntresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );ntreturn result;n}nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in GeometricContext geometry ) {ntvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );ntvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );ntreturn irradiance;n}nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {ntvec3 irradiance = ambientLightColor;nt#ifndef PHYSICALLY_CORRECT_LIGHTSnttirradiance *= PI;nt#endifntreturn irradiance;n}n#if NUM_DIR_LIGHTS > 0ntstruct DirectionalLight {nttvec3 direction;nttvec3 color;nt};ntuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];ntvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {nttdirectLight.color = directionalLight.color;nttdirectLight.direction = directionalLight.direction;nttdirectLight.visible = true;nt}n#endifn#if NUM_POINT_LIGHTS > 0ntstruct PointLight {nttvec3 position;nttvec3 color;nttfloat distance;nttfloat decay;nt};ntuniform PointLight pointLights[ NUM_POINT_LIGHTS ];ntvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {nttvec3 lVector = pointLight.position - geometry.position;nttdirectLight.direction = normalize( lVector );nttfloat lightDistance = length( lVector );nttdirectLight.color = pointLight.color;nttdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );nttdirectLight.visible = ( directLight.color != vec3( 0.0 ) );nt}n#endifn#if NUM_SPOT_LIGHTS > 0ntstruct SpotLight {nttvec3 position;nttvec3 direction;nttvec3 color;nttfloat distance;nttfloat decay;nttfloat coneCos;nttfloat penumbraCos;nt};ntuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];ntvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {nttvec3 lVector = spotLight.position - geometry.position;nttdirectLight.direction = normalize( lVector );nttfloat lightDistance = length( lVector );nttfloat angleCos = dot( directLight.direction, spotLight.direction );nttif ( angleCos > spotLight.coneCos ) {ntttfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );ntttdirectLight.color = spotLight.color;ntttdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );ntttdirectLight.visible = true;ntt} else {ntttdirectLight.color = vec3( 0.0 );ntttdirectLight.visible = false;ntt}nt}n#endifn#if NUM_RECT_AREA_LIGHTS > 0ntstruct RectAreaLight {nttvec3 color;nttvec3 position;nttvec3 halfWidth;nttvec3 halfHeight;nt};ntuniform sampler2D ltc_1;tuniform sampler2D ltc_2;ntuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];n#endifn#if NUM_HEMI_LIGHTS > 0ntstruct HemisphereLight {nttvec3 direction;nttvec3 skyColor;nttvec3 groundColor;nt};ntuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];ntvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {nttfloat dotNL = dot( geometry.normal, hemiLight.direction );nttfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;nttvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );ntt#ifndef PHYSICALLY_CORRECT_LIGHTSntttirradiance *= PI;ntt#endifnttreturn irradiance;nt}n#endif",
-lights_toon_fragment:"ToonMaterial material;nmaterial.diffuseColor = diffuseColor.rgb;",lights_toon_pars_fragment:"varying vec3 vViewPosition;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;n#endifnstruct ToonMaterial {ntvec3 diffuseColor;n};nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {ntvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;nt#ifndef PHYSICALLY_CORRECT_LIGHTSnttirradiance *= PI;nt#endifntreflectedLight.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 ) {ntreflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );n}n#define RE_DirectttttRE_Direct_Toonn#define RE_IndirectDiffusettRE_IndirectDiffuse_Toonn#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_SHADEDntvarying vec3 vNormal;n#endifnstruct BlinnPhongMaterial {ntvec3 diffuseColor;ntvec3 specularColor;ntfloat specularShininess;ntfloat specularStrength;n};nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {ntfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );ntvec3 irradiance = dotNL * directLight.color;nt#ifndef PHYSICALLY_CORRECT_LIGHTSnttirradiance *= PI;nt#endifntreflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );ntreflectedLight.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 ) {ntreflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );n}n#define RE_DirectttttRE_Direct_BlinnPhongn#define RE_IndirectDiffusettRE_IndirectDiffuse_BlinnPhongn#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 REFLECTIVITYntmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );n#elsentmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );n#endifn#ifdef CLEARCOATntmaterial.clearcoat = clearcoat;ntmaterial.clearcoatRoughness = clearcoatRoughness;nt#ifdef USE_CLEARCOATMAPnttmaterial.clearcoat *= texture2D( clearcoatMap, vUv ).x;nt#endifnt#ifdef USE_CLEARCOAT_ROUGHNESSMAPnttmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vUv ).y;nt#endifntmaterial.clearcoat = saturate( material.clearcoat );tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );ntmaterial.clearcoatRoughness += geometryRoughness;ntmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );n#endifn#ifdef USE_SHEENntmaterial.sheenColor = sheen;n#endif",
-lights_physical_pars_fragment:"struct PhysicalMaterial {ntvec3 diffuseColor;ntfloat specularRoughness;ntvec3 specularColor;n#ifdef CLEARCOATntfloat clearcoat;ntfloat clearcoatRoughness;n#endifn#ifdef USE_SHEENntvec3 sheenColor;n#endifn};n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16n#define DEFAULT_SPECULAR_COEFFICIENT 0.04nfloat clearcoatDHRApprox( const in float roughness, const in float dotNL ) {ntreturn 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 > 0ntvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {nttvec3 normal = geometry.normal;nttvec3 viewDir = geometry.viewDir;nttvec3 position = geometry.position;nttvec3 lightPos = rectAreaLight.position;nttvec3 halfWidth = rectAreaLight.halfWidth;nttvec3 halfHeight = rectAreaLight.halfHeight;nttvec3 lightColor = rectAreaLight.color;nttfloat roughness = material.specularRoughness;nttvec3 rectCoords[ 4 ];nttrectCoords[ 0 ] = lightPos + halfWidth - halfHeight;ttrectCoords[ 1 ] = lightPos - halfWidth - halfHeight;nttrectCoords[ 2 ] = lightPos - halfWidth + halfHeight;nttrectCoords[ 3 ] = lightPos + halfWidth + halfHeight;nttvec2 uv = LTC_Uv( normal, viewDir, roughness );nttvec4 t1 = texture2D( ltc_1, uv );nttvec4 t2 = texture2D( ltc_2, uv );nttmat3 mInv = mat3(ntttvec3( t1.x, 0, t1.y ),ntttvec3( 0, 1, 0 ),ntttvec3( t1.z, 0, t1.w )ntt);nttvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );nttreflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );nttreflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );nt}n#endifnvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {ntfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );ntvec3 irradiance = dotNL * directLight.color;nt#ifndef PHYSICALLY_CORRECT_LIGHTSnttirradiance *= PI;nt#endifnt#ifdef CLEARCOATnttfloat ccDotNL = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );nttvec3 ccIrradiance = ccDotNL * directLight.color;ntt#ifndef PHYSICALLY_CORRECT_LIGHTSntttccIrradiance *= PI;ntt#endifnttfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );nttreflectedLight.directSpecular += ccIrradiance * material.clearcoat * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );nt#elsenttfloat clearcoatDHR = 0.0;nt#endifnt#ifdef USE_SHEENnttreflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_Sheen(ntttmaterial.specularRoughness,ntttdirectLight.direction,ntttgeometry,ntttmaterial.sheenColorntt);nt#elsenttreflectedLight.directSpecular += ( 1.0 - clearcoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry.viewDir, geometry.normal, material.specularColor, material.specularRoughness);nt#endifntreflectedLight.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 ) {ntreflectedLight.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) {nt#ifdef CLEARCOATnttfloat ccDotNV = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );nttreflectedLight.indirectSpecular += clearcoatRadiance * material.clearcoat * BRDF_Specular_GGX_Environment( geometry.viewDir, geometry.clearcoatNormal, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearcoatRoughness );nttfloat ccDotNL = ccDotNV;nttfloat clearcoatDHR = material.clearcoat * clearcoatDHRApprox( material.clearcoatRoughness, ccDotNL );nt#elsenttfloat clearcoatDHR = 0.0;nt#endifntfloat clearcoatInv = 1.0 - clearcoatDHR;ntvec3 singleScattering = vec3( 0.0 );ntvec3 multiScattering = vec3( 0.0 );ntvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;ntBRDF_Specular_Multiscattering_Environment( geometry, material.specularColor, material.specularRoughness, singleScattering, multiScattering );ntvec3 diffuse = material.diffuseColor * ( 1.0 - ( singleScattering + multiScattering ) );ntreflectedLight.indirectSpecular += clearcoatInv * radiance * singleScattering;ntreflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;ntreflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;n}n#define RE_DirectttttRE_Direct_Physicaln#define RE_Direct_RectAreattRE_Direct_RectArea_Physicaln#define RE_IndirectDiffusettRE_IndirectDiffuse_Physicaln#define RE_IndirectSpecularttRE_IndirectSpecular_Physicalnfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {ntreturn 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 CLEARCOATntgeometry.clearcoatNormal = clearcoatNormal;n#endifnIncidentLight directLight;n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )ntPointLight pointLight;nt#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0ntPointLightShadow pointLightShadow;nt#endifnt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {nttpointLight = pointLights[ i ];nttgetPointDirectLightIrradiance( pointLight, geometry, directLight );ntt#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )nttpointLightShadow = pointLightShadows[ i ];nttdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;ntt#endifnttRE_Direct( directLight, geometry, material, reflectedLight );nt}nt#pragma unroll_loop_endn#endifn#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )ntSpotLight spotLight;nt#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0ntSpotLightShadow spotLightShadow;nt#endifnt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {nttspotLight = spotLights[ i ];nttgetSpotDirectLightIrradiance( spotLight, geometry, directLight );ntt#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )nttspotLightShadow = spotLightShadows[ i ];nttdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;ntt#endifnttRE_Direct( directLight, geometry, material, reflectedLight );nt}nt#pragma unroll_loop_endn#endifn#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )ntDirectionalLight directionalLight;nt#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0ntDirectionalLightShadow directionalLightShadow;nt#endifnt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {nttdirectionalLight = directionalLights[ i ];nttgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );ntt#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )nttdirectionalLightShadow = directionalLightShadows[ i ];nttdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;ntt#endifnttRE_Direct( directLight, geometry, material, reflectedLight );nt}nt#pragma unroll_loop_endn#endifn#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )ntRectAreaLight rectAreaLight;nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {nttrectAreaLight = rectAreaLights[ i ];nttRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );nt}nt#pragma unroll_loop_endn#endifn#if defined( RE_IndirectDiffuse )ntvec3 iblIrradiance = vec3( 0.0 );ntvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );ntirradiance += getLightProbeIrradiance( lightProbe, geometry );nt#if ( NUM_HEMI_LIGHTS > 0 )ntt#pragma unroll_loop_startnttfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {ntttirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );ntt}ntt#pragma unroll_loop_endnt#endifn#endifn#if defined( RE_IndirectSpecular )ntvec3 radiance = vec3( 0.0 );ntvec3 clearcoatRadiance = vec3( 0.0 );n#endif",
-lights_fragment_maps:"#if defined( RE_IndirectDiffuse )nt#ifdef USE_LIGHTMAPnttvec4 lightMapTexel= texture2D( lightMap, vUv2 );nttvec3 lightMapIrradiance = lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;ntt#ifndef PHYSICALLY_CORRECT_LIGHTSntttlightMapIrradiance *= PI;ntt#endifnttirradiance += lightMapIrradiance;nt#endifnt#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )nttiblIrradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );nt#endifn#endifn#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )ntradiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.normal, material.specularRoughness, maxMipLevel );nt#ifdef CLEARCOATnttclearcoatRadiance += getLightProbeIndirectRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness, maxMipLevel );nt#endifn#endif",
-lights_fragment_end:"#if defined( RE_IndirectDiffuse )ntRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );n#endifn#if defined( RE_IndirectSpecular )ntRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );n#endif",logdepthbuf_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )ntgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;n#endif",logdepthbuf_pars_fragment:"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )ntuniform float logDepthBufFC;ntvarying float vFragDepth;ntvarying float vIsPerspective;n#endif",
-logdepthbuf_pars_vertex:"#ifdef USE_LOGDEPTHBUFnt#ifdef USE_LOGDEPTHBUF_EXTnttvarying float vFragDepth;nttvarying float vIsPerspective;nt#elsenttuniform float logDepthBufFC;nt#endifn#endif",logdepthbuf_vertex:"#ifdef USE_LOGDEPTHBUFnt#ifdef USE_LOGDEPTHBUF_EXTnttvFragDepth = 1.0 + gl_Position.w;nttvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );nt#elsenttif ( isPerspectiveMatrix( projectionMatrix ) ) {ntttgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;ntttgl_Position.z *= gl_Position.w;ntt}nt#endifn#endif",
-map_fragment:"#ifdef USE_MAPntvec4 texelColor = texture2D( map, vUv );nttexelColor = mapTexelToLinear( texelColor );ntdiffuseColor *= texelColor;n#endif",map_pars_fragment:"#ifdef USE_MAPntuniform sampler2D map;n#endif",map_particle_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )ntvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;n#endifn#ifdef USE_MAPntvec4 mapTexel = texture2D( map, uv );ntdiffuseColor *= mapTexelToLinear( mapTexel );n#endifn#ifdef USE_ALPHAMAPntdiffuseColor.a *= texture2D( alphaMap, uv ).g;n#endif",
-map_particle_pars_fragment:"#if defined( USE_MAP ) || defined( USE_ALPHAMAP )ntuniform mat3 uvTransform;n#endifn#ifdef USE_MAPntuniform sampler2D map;n#endifn#ifdef USE_ALPHAMAPntuniform sampler2D alphaMap;n#endif",metalnessmap_fragment:"float metalnessFactor = metalness;n#ifdef USE_METALNESSMAPntvec4 texelMetalness = texture2D( metalnessMap, vUv );ntmetalnessFactor *= texelMetalness.b;n#endif",metalnessmap_pars_fragment:"#ifdef USE_METALNESSMAPntuniform sampler2D metalnessMap;n#endif",
-morphnormal_vertex:"#ifdef USE_MORPHNORMALSntobjectNormal *= morphTargetBaseInfluence;ntobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];ntobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];ntobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];ntobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETSntuniform float morphTargetBaseInfluence;nt#ifndef USE_MORPHNORMALSnttuniform float morphTargetInfluences[ 8 ];nt#elsenttuniform float morphTargetInfluences[ 4 ];nt#endifn#endif",
-morphtarget_vertex:"#ifdef USE_MORPHTARGETSnttransformed *= morphTargetBaseInfluence;nttransformed += morphTarget0 * morphTargetInfluences[ 0 ];nttransformed += morphTarget1 * morphTargetInfluences[ 1 ];nttransformed += morphTarget2 * morphTargetInfluences[ 2 ];nttransformed += morphTarget3 * morphTargetInfluences[ 3 ];nt#ifndef USE_MORPHNORMALSntttransformed += morphTarget4 * morphTargetInfluences[ 4 ];ntttransformed += morphTarget5 * morphTargetInfluences[ 5 ];ntttransformed += morphTarget6 * morphTargetInfluences[ 6 ];ntttransformed += morphTarget7 * morphTargetInfluences[ 7 ];nt#endifn#endif",
-normal_fragment_begin:"#ifdef FLAT_SHADEDntvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );ntvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );ntvec3 normal = normalize( cross( fdx, fdy ) );n#elsentvec3 normal = normalize( vNormal );nt#ifdef DOUBLE_SIDEDnttnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );nt#endifnt#ifdef USE_TANGENTnttvec3 tangent = normalize( vTangent );nttvec3 bitangent = normalize( vBitangent );ntt#ifdef DOUBLE_SIDEDnttttangent = tangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );ntttbitangent = bitangent * ( float( gl_FrontFacing ) * 2.0 - 1.0 );ntt#endifntt#if defined( TANGENTSPACE_NORMALMAP ) || defined( USE_CLEARCOAT_NORMALMAP )ntttmat3 vTBN = mat3( tangent, bitangent, normal );ntt#endifnt#endifn#endifnvec3 geometryNormal = normal;",
-normal_fragment_maps:"#ifdef OBJECTSPACE_NORMALMAPntnormal = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;nt#ifdef FLIP_SIDEDnttnormal = - normal;nt#endifnt#ifdef DOUBLE_SIDEDnttnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );nt#endifntnormal = normalize( normalMatrix * normal );n#elif defined( TANGENTSPACE_NORMALMAP )ntvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;ntmapN.xy *= normalScale;nt#ifdef USE_TANGENTnttnormal = normalize( vTBN * mapN );nt#elsenttnormal = perturbNormal2Arb( -vViewPosition, normal, mapN );nt#endifn#elif defined( USE_BUMPMAP )ntnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );n#endif",
-normalmap_pars_fragment:"#ifdef USE_NORMALMAPntuniform sampler2D normalMap;ntuniform vec2 normalScale;n#endifn#ifdef OBJECTSPACE_NORMALMAPntuniform mat3 normalMatrix;n#endifn#if ! defined ( USE_TANGENT ) && ( defined ( TANGENTSPACE_NORMALMAP ) || defined ( USE_CLEARCOAT_NORMALMAP ) )ntvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm, vec3 mapN ) {nttvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );nttvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );nttvec2 st0 = dFdx( vUv.st );nttvec2 st1 = dFdy( vUv.st );nttfloat scale = sign( st1.t * st0.s - st0.t * st1.s );nttvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );nttvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );nttvec3 N = normalize( surf_norm );nttmat3 tsn = mat3( S, T, N );nttmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );nttreturn normalize( tsn * mapN );nt}n#endif",
-clearcoat_normal_fragment_begin:"#ifdef CLEARCOATntvec3 clearcoatNormal = geometryNormal;n#endif",clearcoat_normal_fragment_maps:"#ifdef USE_CLEARCOAT_NORMALMAPntvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vUv ).xyz * 2.0 - 1.0;ntclearcoatMapN.xy *= clearcoatNormalScale;nt#ifdef USE_TANGENTnttclearcoatNormal = normalize( vTBN * clearcoatMapN );nt#elsenttclearcoatNormal = perturbNormal2Arb( - vViewPosition, clearcoatNormal, clearcoatMapN );nt#endifn#endif",clearcoat_pars_fragment:"#ifdef USE_CLEARCOATMAPntuniform sampler2D clearcoatMap;n#endifn#ifdef USE_CLEARCOAT_ROUGHNESSMAPntuniform sampler2D clearcoatRoughnessMap;n#endifn#ifdef USE_CLEARCOAT_NORMALMAPntuniform sampler2D clearcoatNormalMap;ntuniform vec2 clearcoatNormalScale;n#endif",
-packing:"vec3 packNormalToRGB( const in vec3 normal ) {ntreturn normalize( normal ) * 0.5 + 0.5;n}nvec3 unpackRGBToNormal( const in vec3 rgb ) {ntreturn 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 ) {ntvec4 r = vec4( fract( v * PackFactors ), v );ntr.yzw -= r.xyz * ShiftRight8;treturn r * PackUpscale;n}nfloat unpackRGBAToDepth( const in vec4 v ) {ntreturn dot( v, UnpackFactors );n}nvec4 pack2HalfToRGBA( vec2 v ) {ntvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ));ntreturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w);n}nvec2 unpackRGBATo2Half( vec4 v ) {ntreturn 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 ) {ntreturn ( viewZ + near ) / ( near - far );n}nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {ntreturn linearClipZ * ( near - far ) - near;n}nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {ntreturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );n}nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {ntreturn ( near * far ) / ( ( far - near ) * invClipZ - far );n}",
-premultiplied_alpha_fragment:"#ifdef PREMULTIPLIED_ALPHAntgl_FragColor.rgb *= gl_FragColor.a;n#endif",project_vertex:"vec4 mvPosition = vec4( transformed, 1.0 );n#ifdef USE_INSTANCINGntmvPosition = instanceMatrix * mvPosition;n#endifnmvPosition = modelViewMatrix * mvPosition;ngl_Position = projectionMatrix * mvPosition;",dithering_fragment:"#ifdef DITHERINGntgl_FragColor.rgb = dithering( gl_FragColor.rgb );n#endif",dithering_pars_fragment:"#ifdef DITHERINGntvec3 dithering( vec3 color ) {nttfloat grid_position = rand( gl_FragCoord.xy );nttvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );nttdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );nttreturn color + dither_shift_RGB;nt}n#endif",
-roughnessmap_fragment:"float roughnessFactor = roughness;n#ifdef USE_ROUGHNESSMAPntvec4 texelRoughness = texture2D( roughnessMap, vUv );ntroughnessFactor *= texelRoughness.g;n#endif",roughnessmap_pars_fragment:"#ifdef USE_ROUGHNESSMAPntuniform sampler2D roughnessMap;n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAPnt#if NUM_DIR_LIGHT_SHADOWS > 0nttuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];nttvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];nttstruct DirectionalLightShadow {ntttfloat shadowBias;ntttfloat shadowNormalBias;ntttfloat shadowRadius;ntttvec2 shadowMapSize;ntt};nttuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];nt#endifnt#if NUM_SPOT_LIGHT_SHADOWS > 0nttuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];nttvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];nttstruct SpotLightShadow {ntttfloat shadowBias;ntttfloat shadowNormalBias;ntttfloat shadowRadius;ntttvec2 shadowMapSize;ntt};nttuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];nt#endifnt#if NUM_POINT_LIGHT_SHADOWS > 0nttuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];nttvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];nttstruct PointLightShadow {ntttfloat shadowBias;ntttfloat shadowNormalBias;ntttfloat shadowRadius;ntttvec2 shadowMapSize;ntttfloat shadowCameraNear;ntttfloat shadowCameraFar;ntt};nttuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];nt#endifntfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {nttreturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );nt}ntvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {nttreturn unpackRGBATo2Half( texture2D( shadow, uv ) );nt}ntfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){nttfloat occlusion = 1.0;nttvec2 distribution = texture2DDistribution( shadow, uv );nttfloat hard_shadow = step( compare , distribution.x );nttif (hard_shadow != 1.0 ) {ntttfloat distance = compare - distribution.x ;ntttfloat variance = max( 0.00000, distribution.y * distribution.y );ntttfloat softness_probability = variance / (variance + distance * distance );tttsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );tttocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );ntt}nttreturn occlusion;nt}ntfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {nttfloat shadow = 1.0;nttshadowCoord.xyz /= shadowCoord.w;nttshadowCoord.z += shadowBias;nttbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );nttbool inFrustum = all( inFrustumVec );nttbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );nttbool frustumTest = all( frustumTestVec );nttif ( frustumTest ) {ntt#if defined( SHADOWMAP_TYPE_PCF )ntttvec2 texelSize = vec2( 1.0 ) / shadowMapSize;ntttfloat dx0 = - texelSize.x * shadowRadius;ntttfloat dy0 = - texelSize.y * shadowRadius;ntttfloat dx1 = + texelSize.x * shadowRadius;ntttfloat dy1 = + texelSize.y * shadowRadius;ntttfloat dx2 = dx0 / 2.0;ntttfloat dy2 = dy0 / 2.0;ntttfloat dx3 = dx1 / 2.0;ntttfloat dy3 = dy1 / 2.0;ntttshadow = (ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )nttt) * ( 1.0 / 17.0 );ntt#elif defined( SHADOWMAP_TYPE_PCF_SOFT )ntttvec2 texelSize = vec2( 1.0 ) / shadowMapSize;ntttfloat dx = texelSize.x;ntttfloat dy = texelSize.y;ntttvec2 uv = shadowCoord.xy;ntttvec2 f = fract( uv * shadowMapSize + 0.5 );ntttuv -= f * texelSize;ntttshadow = (ntttttexture2DCompare( shadowMap, uv, shadowCoord.z ) +ntttttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +ntttttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +nttttmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ), nttttt texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),nttttt f.x ) +nttttmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ), nttttt texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),nttttt f.x ) +nttttmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ), nttttt texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),nttttt f.y ) +nttttmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ), nttttt texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),nttttt f.y ) +nttttmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ), ntttttt texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),ntttttt f.x ),nttttt mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ), ntttttt texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),ntttttt f.x ),nttttt f.y )nttt) * ( 1.0 / 9.0 );ntt#elif defined( SHADOWMAP_TYPE_VSM )ntttshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );ntt#elsentttshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );ntt#endifntt}nttreturn shadow;nt}ntvec2 cubeToUV( vec3 v, float texelSizeY ) {nttvec3 absV = abs( v );nttfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );nttabsV *= scaleToCube;nttv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );nttvec2 planar = v.xy;nttfloat almostATexel = 1.5 * texelSizeY;nttfloat almostOne = 1.0 - almostATexel;nttif ( absV.z >= almostOne ) {ntttif ( v.z > 0.0 )nttttplanar.x = 4.0 - v.x;ntt} else if ( absV.x >= almostOne ) {ntttfloat signX = sign( v.x );ntttplanar.x = v.z * signX + 2.0 * signX;ntt} else if ( absV.y >= almostOne ) {ntttfloat signY = sign( v.y );ntttplanar.x = v.x + 2.0 * signY + 2.0;ntttplanar.y = v.z * signY - 2.0;ntt}nttreturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );nt}ntfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {nttvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );nttvec3 lightToPosition = shadowCoord.xyz;nttfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );ttdp += shadowBias;nttvec3 bd3D = normalize( lightToPosition );ntt#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )ntttvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;ntttreturn (ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +ntttttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )nttt) * ( 1.0 / 9.0 );ntt#elsentttreturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );ntt#endifnt}n#endif",
-shadowmap_pars_vertex:"#ifdef USE_SHADOWMAPnt#if NUM_DIR_LIGHT_SHADOWS > 0nttuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];nttvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];nttstruct DirectionalLightShadow {ntttfloat shadowBias;ntttfloat shadowNormalBias;ntttfloat shadowRadius;ntttvec2 shadowMapSize;ntt};nttuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];nt#endifnt#if NUM_SPOT_LIGHT_SHADOWS > 0nttuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHT_SHADOWS ];nttvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHT_SHADOWS ];nttstruct SpotLightShadow {ntttfloat shadowBias;ntttfloat shadowNormalBias;ntttfloat shadowRadius;ntttvec2 shadowMapSize;ntt};nttuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];nt#endifnt#if NUM_POINT_LIGHT_SHADOWS > 0nttuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];nttvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];nttstruct PointLightShadow {ntttfloat shadowBias;ntttfloat shadowNormalBias;ntttfloat shadowRadius;ntttvec2 shadowMapSize;ntttfloat shadowCameraNear;ntttfloat shadowCameraFar;ntt};nttuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];nt#endifn#endif",
-shadowmap_vertex:"#ifdef USE_SHADOWMAPnt#if NUM_DIR_LIGHT_SHADOWS > 0 || NUM_SPOT_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0nttvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );nttvec4 shadowWorldPosition;nt#endifnt#if NUM_DIR_LIGHT_SHADOWS > 0nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {nttshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );nttvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;nt}nt#pragma unroll_loop_endnt#endifnt#if NUM_SPOT_LIGHT_SHADOWS > 0nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {nttshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias, 0 );nttvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * shadowWorldPosition;nt}nt#pragma unroll_loop_endnt#endifnt#if NUM_POINT_LIGHT_SHADOWS > 0nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {nttshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );nttvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;nt}nt#pragma unroll_loop_endnt#endifn#endif",
-shadowmask_pars_fragment:"float getShadowMask() {ntfloat shadow = 1.0;nt#ifdef USE_SHADOWMAPnt#if NUM_DIR_LIGHT_SHADOWS > 0ntDirectionalLightShadow directionalLight;nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {nttdirectionalLight = directionalLightShadows[ i ];nttshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;nt}nt#pragma unroll_loop_endnt#endifnt#if NUM_SPOT_LIGHT_SHADOWS > 0ntSpotLightShadow spotLight;nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {nttspotLight = spotLightShadows[ i ];nttshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;nt}nt#pragma unroll_loop_endnt#endifnt#if NUM_POINT_LIGHT_SHADOWS > 0ntPointLightShadow pointLight;nt#pragma unroll_loop_startntfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {nttpointLight = pointLightShadows[ i ];nttshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;nt}nt#pragma unroll_loop_endnt#endifnt#endifntreturn shadow;n}",
-skinbase_vertex:"#ifdef USE_SKINNINGntmat4 boneMatX = getBoneMatrix( skinIndex.x );ntmat4 boneMatY = getBoneMatrix( skinIndex.y );ntmat4 boneMatZ = getBoneMatrix( skinIndex.z );ntmat4 boneMatW = getBoneMatrix( skinIndex.w );n#endif",skinning_pars_vertex:"#ifdef USE_SKINNINGntuniform mat4 bindMatrix;ntuniform mat4 bindMatrixInverse;nt#ifdef BONE_TEXTUREnttuniform highp sampler2D boneTexture;nttuniform int boneTextureSize;nttmat4 getBoneMatrix( const in float i ) {ntttfloat j = i * 4.0;ntttfloat x = mod( j, float( boneTextureSize ) );ntttfloat y = floor( j / float( boneTextureSize ) );ntttfloat dx = 1.0 / float( boneTextureSize );ntttfloat dy = 1.0 / float( boneTextureSize );nttty = dy * ( y + 0.5 );ntttvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );ntttvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );ntttvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );ntttvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );ntttmat4 bone = mat4( v1, v2, v3, v4 );ntttreturn bone;ntt}nt#elsenttuniform mat4 boneMatrices[ MAX_BONES ];nttmat4 getBoneMatrix( const in float i ) {ntttmat4 bone = boneMatrices[ int(i) ];ntttreturn bone;ntt}nt#endifn#endif",
-skinning_vertex:"#ifdef USE_SKINNINGntvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );ntvec4 skinned = vec4( 0.0 );ntskinned += boneMatX * skinVertex * skinWeight.x;ntskinned += boneMatY * skinVertex * skinWeight.y;ntskinned += boneMatZ * skinVertex * skinWeight.z;ntskinned += boneMatW * skinVertex * skinWeight.w;nttransformed = ( bindMatrixInverse * skinned ).xyz;n#endif",skinnormal_vertex:"#ifdef USE_SKINNINGntmat4 skinMatrix = mat4( 0.0 );ntskinMatrix += skinWeight.x * boneMatX;ntskinMatrix += skinWeight.y * boneMatY;ntskinMatrix += skinWeight.z * boneMatZ;ntskinMatrix += skinWeight.w * boneMatW;ntskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;ntobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;nt#ifdef USE_TANGENTnttobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;nt#endifn#endif",
-specularmap_fragment:"float specularStrength;n#ifdef USE_SPECULARMAPntvec4 texelSpecular = texture2D( specularMap, vUv );ntspecularStrength = texelSpecular.r;n#elsentspecularStrength = 1.0;n#endif",specularmap_pars_fragment:"#ifdef USE_SPECULARMAPntuniform sampler2D specularMap;n#endif",tonemapping_fragment:"#if defined( TONE_MAPPING )ntgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );n#endif",tonemapping_pars_fragment:"#ifndef saturaten#define saturate(a) clamp( a, 0.0, 1.0 )n#endifnuniform float toneMappingExposure;nvec3 LinearToneMapping( vec3 color ) {ntreturn toneMappingExposure * color;n}nvec3 ReinhardToneMapping( vec3 color ) {ntcolor *= toneMappingExposure;ntreturn saturate( color / ( vec3( 1.0 ) + color ) );n}nvec3 OptimizedCineonToneMapping( vec3 color ) {ntcolor *= toneMappingExposure;ntcolor = max( vec3( 0.0 ), color - 0.004 );ntreturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );n}nvec3 RRTAndODTFit( vec3 v ) {ntvec3 a = v * ( v + 0.0245786 ) - 0.000090537;ntvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;ntreturn a / b;n}nvec3 ACESFilmicToneMapping( vec3 color ) {ntconst mat3 ACESInputMat = mat3(nttvec3( 0.59719, 0.07600, 0.02840 ),ttvec3( 0.35458, 0.90834, 0.13383 ),nttvec3( 0.04823, 0.01566, 0.83777 )nt);ntconst mat3 ACESOutputMat = mat3(nttvec3( 1.60475, -0.10208, -0.00327 ),ttvec3( -0.53108, 1.10813, -0.07276 ),nttvec3( -0.07367, -0.00605, 1.07602 )nt);ntcolor *= toneMappingExposure / 0.6;ntcolor = ACESInputMat * color;ntcolor = RRTAndODTFit( color );ntcolor = ACESOutputMat * color;ntreturn saturate( color );n}nvec3 CustomToneMapping( vec3 color ) { return color; }",
-transmissionmap_fragment:"#ifdef USE_TRANSMISSIONMAPnttotalTransmission *= texture2D( transmissionMap, vUv ).r;n#endif",transmissionmap_pars_fragment:"#ifdef USE_TRANSMISSIONMAPntuniform sampler2D transmissionMap;n#endif",uv_pars_fragment:"#if ( defined( USE_UV ) && ! defined( UVS_VERTEX_ONLY ) )ntvarying vec2 vUv;n#endif",uv_pars_vertex:"#ifdef USE_UVnt#ifdef UVS_VERTEX_ONLYnttvec2 vUv;nt#elsenttvarying vec2 vUv;nt#endifntuniform mat3 uvTransform;n#endif",uv_vertex:"#ifdef USE_UVntvUv = ( uvTransform * vec3( uv, 1 ) ).xy;n#endif",
-uv2_pars_fragment:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )ntvarying vec2 vUv2;n#endif",uv2_pars_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )ntattribute vec2 uv2;ntvarying vec2 vUv2;ntuniform mat3 uv2Transform;n#endif",uv2_vertex:"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )ntvUv2 = ( uv2Transform * vec3( uv2, 1 ) ).xy;n#endif",worldpos_vertex:"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )ntvec4 worldPosition = vec4( transformed, 1.0 );nt#ifdef USE_INSTANCINGnttworldPosition = instanceMatrix * worldPosition;nt#endifntworldPosition = modelMatrix * worldPosition;n#endif",
-background_frag:"uniform sampler2D t2D;nvarying vec2 vUv;nvoid main() {ntvec4 texColor = texture2D( t2D, vUv );ntgl_FragColor = mapTexelToLinear( texColor );nt#include <tonemapping_fragment>nt#include <encodings_fragment>n}",background_vert:"varying vec2 vUv;nuniform mat3 uvTransform;nvoid main() {ntvUv = ( uvTransform * vec3( uv, 1 ) ).xy;ntgl_Position = vec4( position.xy, 1.0, 1.0 );n}",cube_frag:"#include <envmap_common_pars_fragment>nuniform float opacity;nvarying vec3 vWorldDirection;n#include <cube_uv_reflection_fragment>nvoid main() {ntvec3 vReflect = vWorldDirection;nt#include <envmap_fragment>ntgl_FragColor = envColor;ntgl_FragColor.a *= opacity;nt#include <tonemapping_fragment>nt#include <encodings_fragment>n}",
-cube_vert:"varying vec3 vWorldDirection;n#include <common>nvoid main() {ntvWorldDirection = transformDirection( position, modelMatrix );nt#include <begin_vertex>nt#include <project_vertex>ntgl_Position.z = gl_Position.w;n}",depth_frag:"#if DEPTH_PACKING == 3200ntuniform float opacity;n#endifn#include <common>n#include <packing>n#include <uv_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvarying vec2 vHighPrecisionZW;nvoid main() {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( 1.0 );nt#if DEPTH_PACKING == 3200nttdiffuseColor.a = opacity;nt#endifnt#include <map_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>nt#include <logdepthbuf_fragment>ntfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;nt#if DEPTH_PACKING == 3200nttgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );nt#elif DEPTH_PACKING == 3201nttgl_FragColor = packDepthToRGBA( fragCoordZ );nt#endifn}",
-depth_vert:"#include <common>n#include <uv_pars_vertex>n#include <displacementmap_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvarying vec2 vHighPrecisionZW;nvoid main() {nt#include <uv_vertex>nt#include <skinbase_vertex>nt#ifdef USE_DISPLACEMENTMAPntt#include <beginnormal_vertex>ntt#include <morphnormal_vertex>ntt#include <skinnormal_vertex>nt#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <displacementmap_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>ntvHighPrecisionZW = gl_Position.zw;n}",
-distanceRGBA_frag:"#define DISTANCEnuniform vec3 referencePosition;nuniform float nearDistance;nuniform float farDistance;nvarying vec3 vWorldPosition;n#include <common>n#include <packing>n#include <uv_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main () {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( 1.0 );nt#include <map_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>ntfloat dist = length( vWorldPosition - referencePosition );ntdist = ( dist - nearDistance ) / ( farDistance - nearDistance );ntdist = saturate( dist );ntgl_FragColor = packDepthToRGBA( dist );n}",
-distanceRGBA_vert:"#define DISTANCEnvarying vec3 vWorldPosition;n#include <common>n#include <uv_pars_vertex>n#include <displacementmap_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <skinbase_vertex>nt#ifdef USE_DISPLACEMENTMAPntt#include <beginnormal_vertex>ntt#include <morphnormal_vertex>ntt#include <skinnormal_vertex>nt#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <displacementmap_vertex>nt#include <project_vertex>nt#include <worldpos_vertex>nt#include <clipping_planes_vertex>ntvWorldPosition = worldPosition.xyz;n}",
-equirect_frag:"uniform sampler2D tEquirect;nvarying vec3 vWorldDirection;n#include <common>nvoid main() {ntvec3 direction = normalize( vWorldDirection );ntvec2 sampleUV = equirectUv( direction );ntvec4 texColor = texture2D( tEquirect, sampleUV );ntgl_FragColor = mapTexelToLinear( texColor );nt#include <tonemapping_fragment>nt#include <encodings_fragment>n}",equirect_vert:"varying vec3 vWorldDirection;n#include <common>nvoid main() {ntvWorldDirection = transformDirection( position, modelMatrix );nt#include <begin_vertex>nt#include <project_vertex>n}",
-linedashed_frag:"uniform vec3 diffuse;nuniform float opacity;nuniform float dashSize;nuniform float totalSize;nvarying float vLineDistance;n#include <common>n#include <color_pars_fragment>n#include <fog_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntif ( mod( vLineDistance, totalSize ) > dashSize ) {nttdiscard;nt}ntvec3 outgoingLight = vec3( 0.0 );ntvec4 diffuseColor = vec4( diffuse, opacity );nt#include <logdepthbuf_fragment>nt#include <color_fragment>ntoutgoingLight = diffuseColor.rgb;ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>n}",
-linedashed_vert:"uniform float scale;nattribute float lineDistance;nvarying float vLineDistance;n#include <common>n#include <color_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {ntvLineDistance = scale * lineDistance;nt#include <color_vertex>nt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>nt#include <fog_vertex>n}",
-meshbasic_frag:"uniform vec3 diffuse;nuniform float opacity;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;n#endifn#include <common>n#include <dithering_pars_fragment>n#include <color_pars_fragment>n#include <uv_pars_fragment>n#include <uv2_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <aomap_pars_fragment>n#include <lightmap_pars_fragment>n#include <envmap_common_pars_fragment>n#include <envmap_pars_fragment>n#include <cube_uv_reflection_fragment>n#include <fog_pars_fragment>n#include <specularmap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( diffuse, opacity );nt#include <logdepthbuf_fragment>nt#include <map_fragment>nt#include <color_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>nt#include <specularmap_fragment>ntReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );nt#ifdef USE_LIGHTMAPntnttvec4 lightMapTexel= texture2D( lightMap, vUv2 );nttreflectedLight.indirectDiffuse += lightMapTexelToLinear( lightMapTexel ).rgb * lightMapIntensity;nt#elsenttreflectedLight.indirectDiffuse += vec3( 1.0 );nt#endifnt#include <aomap_fragment>ntreflectedLight.indirectDiffuse *= diffuseColor.rgb;ntvec3 outgoingLight = reflectedLight.indirectDiffuse;nt#include <envmap_fragment>ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>nt#include <dithering_fragment>n}",
-meshbasic_vert:"#include <common>n#include <uv_pars_vertex>n#include <uv2_pars_vertex>n#include <envmap_pars_vertex>n#include <color_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <uv2_vertex>nt#include <color_vertex>nt#include <skinbase_vertex>nt#ifdef USE_ENVMAPnt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>nt#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <worldpos_vertex>nt#include <clipping_planes_vertex>nt#include <envmap_vertex>nt#include <fog_vertex>n}",
-meshlambert_frag:"uniform vec3 diffuse;nuniform vec3 emissive;nuniform float opacity;nvarying vec3 vLightFront;nvarying vec3 vIndirectFront;n#ifdef DOUBLE_SIDEDntvarying vec3 vLightBack;ntvarying vec3 vIndirectBack;n#endifn#include <common>n#include <packing>n#include <dithering_pars_fragment>n#include <color_pars_fragment>n#include <uv_pars_fragment>n#include <uv2_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <aomap_pars_fragment>n#include <lightmap_pars_fragment>n#include <emissivemap_pars_fragment>n#include <envmap_common_pars_fragment>n#include <envmap_pars_fragment>n#include <cube_uv_reflection_fragment>n#include <bsdfs>n#include <lights_pars_begin>n#include <fog_pars_fragment>n#include <shadowmap_pars_fragment>n#include <shadowmask_pars_fragment>n#include <specularmap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( diffuse, opacity );ntReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );ntvec3 totalEmissiveRadiance = emissive;nt#include <logdepthbuf_fragment>nt#include <map_fragment>nt#include <color_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>nt#include <specularmap_fragment>nt#include <emissivemap_fragment>nt#ifdef DOUBLE_SIDEDnttreflectedLight.indirectDiffuse += ( gl_FrontFacing ) ? vIndirectFront : vIndirectBack;nt#elsenttreflectedLight.indirectDiffuse += vIndirectFront;nt#endifnt#include <lightmap_fragment>ntreflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );nt#ifdef DOUBLE_SIDEDnttreflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;nt#elsenttreflectedLight.directDiffuse = vLightFront;nt#endifntreflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();nt#include <aomap_fragment>ntvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;nt#include <envmap_fragment>ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>nt#include <dithering_fragment>n}",
-meshlambert_vert:"#define LAMBERTnvarying vec3 vLightFront;nvarying vec3 vIndirectFront;n#ifdef DOUBLE_SIDEDntvarying vec3 vLightBack;ntvarying vec3 vIndirectBack;n#endifn#include <common>n#include <uv_pars_vertex>n#include <uv2_pars_vertex>n#include <envmap_pars_vertex>n#include <bsdfs>n#include <lights_pars_begin>n#include <color_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <shadowmap_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <uv2_vertex>nt#include <color_vertex>nt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinbase_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>nt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>nt#include <worldpos_vertex>nt#include <envmap_vertex>nt#include <lights_lambert_vertex>nt#include <shadowmap_vertex>nt#include <fog_vertex>n}",
-meshmatcap_frag:"#define MATCAPnuniform vec3 diffuse;nuniform float opacity;nuniform sampler2D matcap;nvarying vec3 vViewPosition;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;n#endifn#include <common>n#include <dithering_pars_fragment>n#include <color_pars_fragment>n#include <uv_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <fog_pars_fragment>n#include <bumpmap_pars_fragment>n#include <normalmap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( diffuse, opacity );nt#include <logdepthbuf_fragment>nt#include <map_fragment>nt#include <color_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>nt#include <normal_fragment_begin>nt#include <normal_fragment_maps>ntvec3 viewDir = normalize( vViewPosition );ntvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );ntvec3 y = cross( viewDir, x );ntvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;nt#ifdef USE_MATCAPnttvec4 matcapColor = texture2D( matcap, uv );nttmatcapColor = matcapTexelToLinear( matcapColor );nt#elsenttvec4 matcapColor = vec4( 1.0 );nt#endifntvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>nt#include <dithering_fragment>n}",
-meshmatcap_vert:"#define MATCAPnvarying vec3 vViewPosition;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;n#endifn#include <common>n#include <uv_pars_vertex>n#include <color_pars_vertex>n#include <displacementmap_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <color_vertex>nt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinbase_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>nt#ifndef FLAT_SHADEDnttvNormal = normalize( transformedNormal );nt#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <displacementmap_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>nt#include <fog_vertex>ntvViewPosition = - mvPosition.xyz;n}",
-meshtoon_frag:"#define TOONnuniform vec3 diffuse;nuniform vec3 emissive;nuniform float opacity;n#include <common>n#include <packing>n#include <dithering_pars_fragment>n#include <color_pars_fragment>n#include <uv_pars_fragment>n#include <uv2_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <aomap_pars_fragment>n#include <lightmap_pars_fragment>n#include <emissivemap_pars_fragment>n#include <gradientmap_pars_fragment>n#include <fog_pars_fragment>n#include <bsdfs>n#include <lights_pars_begin>n#include <lights_toon_pars_fragment>n#include <shadowmap_pars_fragment>n#include <bumpmap_pars_fragment>n#include <normalmap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( diffuse, opacity );ntReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );ntvec3 totalEmissiveRadiance = emissive;nt#include <logdepthbuf_fragment>nt#include <map_fragment>nt#include <color_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>nt#include <normal_fragment_begin>nt#include <normal_fragment_maps>nt#include <emissivemap_fragment>nt#include <lights_toon_fragment>nt#include <lights_fragment_begin>nt#include <lights_fragment_maps>nt#include <lights_fragment_end>nt#include <aomap_fragment>ntvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>nt#include <dithering_fragment>n}",
-meshtoon_vert:"#define TOONnvarying vec3 vViewPosition;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;n#endifn#include <common>n#include <uv_pars_vertex>n#include <uv2_pars_vertex>n#include <displacementmap_pars_vertex>n#include <color_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <shadowmap_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <uv2_vertex>nt#include <color_vertex>nt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinbase_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>n#ifndef FLAT_SHADEDntvNormal = normalize( transformedNormal );n#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <displacementmap_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>ntvViewPosition = - mvPosition.xyz;nt#include <worldpos_vertex>nt#include <shadowmap_vertex>nt#include <fog_vertex>n}",
-meshphong_frag:"#define PHONGnuniform vec3 diffuse;nuniform vec3 emissive;nuniform vec3 specular;nuniform float shininess;nuniform float opacity;n#include <common>n#include <packing>n#include <dithering_pars_fragment>n#include <color_pars_fragment>n#include <uv_pars_fragment>n#include <uv2_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <aomap_pars_fragment>n#include <lightmap_pars_fragment>n#include <emissivemap_pars_fragment>n#include <envmap_common_pars_fragment>n#include <envmap_pars_fragment>n#include <cube_uv_reflection_fragment>n#include <fog_pars_fragment>n#include <bsdfs>n#include <lights_pars_begin>n#include <lights_phong_pars_fragment>n#include <shadowmap_pars_fragment>n#include <bumpmap_pars_fragment>n#include <normalmap_pars_fragment>n#include <specularmap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( diffuse, opacity );ntReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );ntvec3 totalEmissiveRadiance = emissive;nt#include <logdepthbuf_fragment>nt#include <map_fragment>nt#include <color_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>nt#include <specularmap_fragment>nt#include <normal_fragment_begin>nt#include <normal_fragment_maps>nt#include <emissivemap_fragment>nt#include <lights_phong_fragment>nt#include <lights_fragment_begin>nt#include <lights_fragment_maps>nt#include <lights_fragment_end>nt#include <aomap_fragment>ntvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;nt#include <envmap_fragment>ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>nt#include <dithering_fragment>n}",
-meshphong_vert:"#define PHONGnvarying vec3 vViewPosition;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;n#endifn#include <common>n#include <uv_pars_vertex>n#include <uv2_pars_vertex>n#include <displacementmap_pars_vertex>n#include <envmap_pars_vertex>n#include <color_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <shadowmap_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <uv2_vertex>nt#include <color_vertex>nt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinbase_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>n#ifndef FLAT_SHADEDntvNormal = normalize( transformedNormal );n#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <displacementmap_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>ntvViewPosition = - mvPosition.xyz;nt#include <worldpos_vertex>nt#include <envmap_vertex>nt#include <shadowmap_vertex>nt#include <fog_vertex>n}",
-meshphysical_frag:"#define STANDARDn#ifdef PHYSICALnt#define REFLECTIVITYnt#define CLEARCOATnt#define TRANSMISSIONn#endifnuniform vec3 diffuse;nuniform vec3 emissive;nuniform float roughness;nuniform float metalness;nuniform float opacity;n#ifdef TRANSMISSIONntuniform float transmission;n#endifn#ifdef REFLECTIVITYntuniform float reflectivity;n#endifn#ifdef CLEARCOATntuniform float clearcoat;ntuniform float clearcoatRoughness;n#endifn#ifdef USE_SHEENntuniform vec3 sheen;n#endifnvarying vec3 vViewPosition;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;nt#ifdef USE_TANGENTnttvarying vec3 vTangent;nttvarying vec3 vBitangent;nt#endifn#endifn#include <common>n#include <packing>n#include <dithering_pars_fragment>n#include <color_pars_fragment>n#include <uv_pars_fragment>n#include <uv2_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <aomap_pars_fragment>n#include <lightmap_pars_fragment>n#include <emissivemap_pars_fragment>n#include <transmissionmap_pars_fragment>n#include <bsdfs>n#include <cube_uv_reflection_fragment>n#include <envmap_common_pars_fragment>n#include <envmap_physical_pars_fragment>n#include <fog_pars_fragment>n#include <lights_pars_begin>n#include <lights_physical_pars_fragment>n#include <shadowmap_pars_fragment>n#include <bumpmap_pars_fragment>n#include <normalmap_pars_fragment>n#include <clearcoat_pars_fragment>n#include <roughnessmap_pars_fragment>n#include <metalnessmap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec4 diffuseColor = vec4( diffuse, opacity );ntReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );ntvec3 totalEmissiveRadiance = emissive;nt#ifdef TRANSMISSIONnttfloat totalTransmission = transmission;nt#endifnt#include <logdepthbuf_fragment>nt#include <map_fragment>nt#include <color_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>nt#include <roughnessmap_fragment>nt#include <metalnessmap_fragment>nt#include <normal_fragment_begin>nt#include <normal_fragment_maps>nt#include <clearcoat_normal_fragment_begin>nt#include <clearcoat_normal_fragment_maps>nt#include <emissivemap_fragment>nt#include <transmissionmap_fragment>nt#include <lights_physical_fragment>nt#include <lights_fragment_begin>nt#include <lights_fragment_maps>nt#include <lights_fragment_end>nt#include <aomap_fragment>ntvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;nt#ifdef TRANSMISSIONnttdiffuseColor.a *= saturate( 1. - totalTransmission + linearToRelativeLuminance( reflectedLight.directSpecular + reflectedLight.indirectSpecular ) );nt#endifntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>nt#include <dithering_fragment>n}",
-meshphysical_vert:"#define STANDARDnvarying vec3 vViewPosition;n#ifndef FLAT_SHADEDntvarying vec3 vNormal;nt#ifdef USE_TANGENTnttvarying vec3 vTangent;nttvarying vec3 vBitangent;nt#endifn#endifn#include <common>n#include <uv_pars_vertex>n#include <uv2_pars_vertex>n#include <displacementmap_pars_vertex>n#include <color_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <shadowmap_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <uv2_vertex>nt#include <color_vertex>nt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinbase_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>n#ifndef FLAT_SHADEDntvNormal = normalize( transformedNormal );nt#ifdef USE_TANGENTnttvTangent = normalize( transformedTangent );nttvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );nt#endifn#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <displacementmap_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>ntvViewPosition = - mvPosition.xyz;nt#include <worldpos_vertex>nt#include <shadowmap_vertex>nt#include <fog_vertex>n}",
-normal_frag:"#define NORMALnuniform float opacity;n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )ntvarying vec3 vViewPosition;n#endifn#ifndef FLAT_SHADEDntvarying vec3 vNormal;nt#ifdef USE_TANGENTnttvarying vec3 vTangent;nttvarying vec3 vBitangent;nt#endifn#endifn#include <packing>n#include <uv_pars_fragment>n#include <bumpmap_pars_fragment>n#include <normalmap_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>nt#include <logdepthbuf_fragment>nt#include <normal_fragment_begin>nt#include <normal_fragment_maps>ntgl_FragColor = vec4( packNormalToRGB( normal ), opacity );n}",
-normal_vert:"#define NORMALn#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )ntvarying vec3 vViewPosition;n#endifn#ifndef FLAT_SHADEDntvarying vec3 vNormal;nt#ifdef USE_TANGENTnttvarying vec3 vTangent;nttvarying vec3 vBitangent;nt#endifn#endifn#include <common>n#include <uv_pars_vertex>n#include <displacementmap_pars_vertex>n#include <morphtarget_pars_vertex>n#include <skinning_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>nt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinbase_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>n#ifndef FLAT_SHADEDntvNormal = normalize( transformedNormal );nt#ifdef USE_TANGENTnttvTangent = normalize( transformedTangent );nttvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );nt#endifn#endifnt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <skinning_vertex>nt#include <displacementmap_vertex>nt#include <project_vertex>nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( TANGENTSPACE_NORMALMAP )ntvViewPosition = - mvPosition.xyz;n#endifn}",
-points_frag:"uniform vec3 diffuse;nuniform float opacity;n#include <common>n#include <color_pars_fragment>n#include <map_particle_pars_fragment>n#include <fog_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec3 outgoingLight = vec3( 0.0 );ntvec4 diffuseColor = vec4( diffuse, opacity );nt#include <logdepthbuf_fragment>nt#include <map_particle_fragment>nt#include <color_fragment>nt#include <alphatest_fragment>ntoutgoingLight = diffuseColor.rgb;ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>nt#include <premultiplied_alpha_fragment>n}",
-points_vert:"uniform float size;nuniform float scale;n#include <common>n#include <color_pars_vertex>n#include <fog_pars_vertex>n#include <morphtarget_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <color_vertex>nt#include <begin_vertex>nt#include <morphtarget_vertex>nt#include <project_vertex>ntgl_PointSize = size;nt#ifdef USE_SIZEATTENUATIONnttbool isPerspective = isPerspectiveMatrix( projectionMatrix );nttif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );nt#endifnt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>nt#include <worldpos_vertex>nt#include <fog_vertex>n}",
-shadow_frag:"uniform vec3 color;nuniform float opacity;n#include <common>n#include <packing>n#include <fog_pars_fragment>n#include <bsdfs>n#include <lights_pars_begin>n#include <shadowmap_pars_fragment>n#include <shadowmask_pars_fragment>nvoid main() {ntgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>n}",shadow_vert:"#include <common>n#include <fog_pars_vertex>n#include <shadowmap_pars_vertex>nvoid main() {nt#include <begin_vertex>nt#include <project_vertex>nt#include <worldpos_vertex>nt#include <beginnormal_vertex>nt#include <morphnormal_vertex>nt#include <skinbase_vertex>nt#include <skinnormal_vertex>nt#include <defaultnormal_vertex>nt#include <shadowmap_vertex>nt#include <fog_vertex>n}",
-sprite_frag:"uniform vec3 diffuse;nuniform float opacity;n#include <common>n#include <uv_pars_fragment>n#include <map_pars_fragment>n#include <alphamap_pars_fragment>n#include <fog_pars_fragment>n#include <logdepthbuf_pars_fragment>n#include <clipping_planes_pars_fragment>nvoid main() {nt#include <clipping_planes_fragment>ntvec3 outgoingLight = vec3( 0.0 );ntvec4 diffuseColor = vec4( diffuse, opacity );nt#include <logdepthbuf_fragment>nt#include <map_fragment>nt#include <alphamap_fragment>nt#include <alphatest_fragment>ntoutgoingLight = diffuseColor.rgb;ntgl_FragColor = vec4( outgoingLight, diffuseColor.a );nt#include <tonemapping_fragment>nt#include <encodings_fragment>nt#include <fog_fragment>n}",
-sprite_vert:"uniform float rotation;nuniform vec2 center;n#include <common>n#include <uv_pars_vertex>n#include <fog_pars_vertex>n#include <logdepthbuf_pars_vertex>n#include <clipping_planes_pars_vertex>nvoid main() {nt#include <uv_vertex>ntvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );ntvec2 scale;ntscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );ntscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );nt#ifndef USE_SIZEATTENUATIONnttbool isPerspective = isPerspectiveMatrix( projectionMatrix );nttif ( isPerspective ) scale *= - mvPosition.z;nt#endifntvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;ntvec2 rotatedPosition;ntrotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;ntrotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;ntmvPosition.xy += rotatedPosition;ntgl_Position = projectionMatrix * mvPosition;nt#include <logdepthbuf_vertex>nt#include <clipping_planes_vertex>nt#include <fog_vertex>n}"},
-Ua={basic:{uniforms:Aa([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.fog]),vertexShader:O.meshbasic_vert,fragmentShader:O.meshbasic_frag},lambert:{uniforms:Aa([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.fog,G.lights,{emissive:{value:new H(0)}}]),vertexShader:O.meshlambert_vert,fragmentShader:O.meshlambert_frag},phong:{uniforms:Aa([G.common,G.specularmap,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.bumpmap,G.normalmap,G.displacementmap,G.fog,G.lights,{emissive:{value:new H(0)},
-specular:{value:new H(1118481)},shininess:{value:30}}]),vertexShader:O.meshphong_vert,fragmentShader:O.meshphong_frag},standard:{uniforms:Aa([G.common,G.envmap,G.aomap,G.lightmap,G.emissivemap,G.bumpmap,G.normalmap,G.displacementmap,G.roughnessmap,G.metalnessmap,G.fog,G.lights,{emissive:{value:new H(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:O.meshphysical_vert,fragmentShader:O.meshphysical_frag},toon:{uniforms:Aa([G.common,G.aomap,G.lightmap,G.emissivemap,
-G.bumpmap,G.normalmap,G.displacementmap,G.gradientmap,G.fog,G.lights,{emissive:{value:new H(0)}}]),vertexShader:O.meshtoon_vert,fragmentShader:O.meshtoon_frag},matcap:{uniforms:Aa([G.common,G.bumpmap,G.normalmap,G.displacementmap,G.fog,{matcap:{value:null}}]),vertexShader:O.meshmatcap_vert,fragmentShader:O.meshmatcap_frag},points:{uniforms:Aa([G.points,G.fog]),vertexShader:O.points_vert,fragmentShader:O.points_frag},dashed:{uniforms:Aa([G.common,G.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),
-vertexShader:O.linedashed_vert,fragmentShader:O.linedashed_frag},depth:{uniforms:Aa([G.common,G.displacementmap]),vertexShader:O.depth_vert,fragmentShader:O.depth_frag},normal:{uniforms:Aa([G.common,G.bumpmap,G.normalmap,G.displacementmap,{opacity:{value:1}}]),vertexShader:O.normal_vert,fragmentShader:O.normal_frag},sprite:{uniforms:Aa([G.sprite,G.fog]),vertexShader:O.sprite_vert,fragmentShader:O.sprite_frag},background:{uniforms:{uvTransform:{value:new qa},t2D:{value:null}},vertexShader:O.background_vert,
-fragmentShader:O.background_frag},cube:{uniforms:Aa([G.envmap,{opacity:{value:1}}]),vertexShader:O.cube_vert,fragmentShader:O.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:O.equirect_vert,fragmentShader:O.equirect_frag},distanceRGBA:{uniforms:Aa([G.common,G.displacementmap,{referencePosition:{value:new m},nearDistance:{value:1},farDistance:{value:1E3}}]),vertexShader:O.distanceRGBA_vert,fragmentShader:O.distanceRGBA_frag},shadow:{uniforms:Aa([G.lights,G.fog,{color:{value:new H(0)},
-opacity:{value:1}}]),vertexShader:O.shadow_vert,fragmentShader:O.shadow_frag}};Ua.physical={uniforms:Aa([Ua.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatNormalScale:{value:new u(1,1)},clearcoatNormalMap:{value:null},sheen:{value:new H(0)},transmission:{value:0},transmissionMap:{value:null}}]),vertexShader:O.meshphysical_vert,fragmentShader:O.meshphysical_frag};ob.prototype=Object.create(V.prototype);ob.prototype.constructor=
-ob;ob.prototype.isCubeTexture=!0;Object.defineProperty(ob.prototype,"images",{get:function(){return this.image},set:function(a){this.image=a}});Kc.prototype=Object.create(V.prototype);Kc.prototype.constructor=Kc;Kc.prototype.isDataTexture2DArray=!0;Lc.prototype=Object.create(V.prototype);Lc.prototype.constructor=Lc;Lc.prototype.isDataTexture3D=!0;var Dh=new V,Hj=new Kc,Jj=new Lc,Eh=new ob,xh=[],zh=[],Ch=new Float32Array(16),Bh=new Float32Array(9),Ah=new Float32Array(4);Fh.prototype.updateCache=function(a){var b=
-this.cache;a instanceof Float32Array&&b.length!==a.length&&(this.cache=new Float32Array(a.length));Fa(b,a)};Gh.prototype.setValue=function(a,b,c){for(var d=this.seq,e=0,f=d.length;e!==f;++e){var g=d[e];g.setValue(a,b[g.id],c)}};var ig=/([wd_]+)(])?([|.)?/g;Cb.prototype.setValue=function(a,b,c,d){b=this.map[b];void 0!==b&&b.setValue(a,c,d)};Cb.prototype.setOptional=function(a,b,c){b=b[c];void 0!==b&&this.setValue(a,c,b)};Cb.upload=function(a,b,c,d){for(var e=0,f=b.length;e!==f;++e){var g=b[e],
-h=c[g.id];!1!==h.needsUpdate&&g.setValue(a,h.value,d)}};Cb.seqWithValue=function(a,b){for(var c=[],d=0,e=a.length;d!==e;++d){var f=a[d];f.id in b&&c.push(f)}return c};var ok=0,kg=/^[ t]*#include +<([wd./]+)>/gm,Ph=/#pragma unroll_loop[s]+?for ( int i = (d+); i < (d+); i ++ ) {([sS]+?)(?=})}/g,Oh=/#pragma unroll_loop_start[s]+?for ( int i = (d+); i < (d+); i ++ ) {([sS]+?)(?=})}[s]+?#pragma unroll_loop_end/g,yk=0;Db.prototype=Object.create(L.prototype);Db.prototype.constructor=
-Db;Db.prototype.isMeshDepthMaterial=!0;Db.prototype.copy=function(a){L.prototype.copy.call(this,a);this.depthPacking=a.depthPacking;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;return this};Eb.prototype=Object.create(L.prototype);Eb.prototype.constructor=
-Eb;Eb.prototype.isMeshDistanceMaterial=!0;Eb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.referencePosition.copy(a.referencePosition);this.nearDistance=a.nearDistance;this.farDistance=a.farDistance;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.map=a.map;this.alphaMap=a.alphaMap;this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;return this};Ne.prototype=Object.assign(Object.create(W.prototype),
-{constructor:Ne,isArrayCamera:!0});Gb.prototype=Object.assign(Object.create(C.prototype),{constructor:Gb,isGroup:!0});Object.assign(Md.prototype,{constructor:Md,getHandSpace:function(){if(null===this._hand&&(this._hand=new Gb,this._hand.matrixAutoUpdate=!1,this._hand.visible=!1,this._hand.joints=[],this._hand.inputState={pinching:!1},window.XRHand))for(var a=0;a<=window.XRHand.LITTLE_PHALANX_TIP;a++){var b=new Gb;b.matrixAutoUpdate=!1;b.visible=!1;this._hand.joints.push(b);this._hand.add(b)}return this._hand},
-getTargetRaySpace:function(){null===this._targetRay&&(this._targetRay=new Gb,this._targetRay.matrixAutoUpdate=!1,this._targetRay.visible=!1);return this._targetRay},getGripSpace:function(){null===this._grip&&(this._grip=new Gb,this._grip.matrixAutoUpdate=!1,this._grip.visible=!1);return this._grip},dispatchEvent:function(a){null!==this._targetRay&&this._targetRay.dispatchEvent(a);null!==this._grip&&this._grip.dispatchEvent(a);null!==this._hand&&this._hand.dispatchEvent(a);return this},disconnect:function(a){this.dispatchEvent({type:"disconnected",
-data:a});null!==this._targetRay&&(this._targetRay.visible=!1);null!==this._grip&&(this._grip.visible=!1);null!==this._hand&&(this._hand.visible=!1);return this},update:function(a,b,c){var d=null,e=null,f=null,g=this._targetRay,h=this._grip,l=this._hand;if(a)if(a.hand){f=!0;for(var k=0;k<=window.XRHand.LITTLE_PHALANX_TIP;k++)if(a.hand[k]){var q=b.getJointPose(a.hand[k],c),p=l.joints[k];null!==q&&(p.matrix.fromArray(q.transform.matrix),p.matrix.decompose(p.position,p.rotation,p.scale),p.jointRadius=
-q.radius);p.visible=null!==q;q=l.joints[window.XRHand.INDEX_PHALANX_TIP].position.distanceTo(l.joints[window.XRHand.THUMB_PHALANX_TIP].position);l.inputState.pinching&&.025<q?(l.inputState.pinching=!1,this.dispatchEvent({type:"pinchend",handedness:a.handedness,target:this})):!l.inputState.pinching&&.015>=q&&(l.inputState.pinching=!0,this.dispatchEvent({type:"pinchstart",handedness:a.handedness,target:this}))}}else null!==g&&(d=b.getPose(a.targetRaySpace,c),null!==d&&(g.matrix.fromArray(d.transform.matrix),
-g.matrix.decompose(g.position,g.rotation,g.scale))),null!==h&&a.gripSpace&&(e=b.getPose(a.gripSpace,c),null!==e&&(h.matrix.fromArray(e.transform.matrix),h.matrix.decompose(h.position,h.rotation,h.scale)));null!==g&&(g.visible=null!==d);null!==h&&(h.visible=null!==e);null!==l&&(l.visible=null!==f);return this}});Object.assign(Vh.prototype,Ea.prototype);og.prototype=Object.assign(Object.create(Nd.prototype),{constructor:og,isWebGL1Renderer:!0});Object.assign(Oe.prototype,{isFogExp2:!0,clone:function(){return new Oe(this.color,
-this.density)},toJSON:function(){return{type:"FogExp2",color:this.color.getHex(),density:this.density}}});Object.assign(Pe.prototype,{isFog:!0,clone:function(){return new Pe(this.color,this.near,this.far)},toJSON:function(){return{type:"Fog",color:this.color.getHex(),near:this.near,far:this.far}}});Object.defineProperty(Ba.prototype,"needsUpdate",{set:function(a){!0===a&&this.version++}});Object.assign(Ba.prototype,{isInterleavedBuffer:!0,onUploadCallback:function(){},setUsage:function(a){this.usage=
-a;return this},copy:function(a){this.array=new a.array.constructor(a.array);this.count=a.count;this.stride=a.stride;this.usage=a.usage;return this},copyAt:function(a,b,c){a*=this.stride;c*=b.stride;for(var d=0,e=this.stride;d<e;d++)this.array[a+d]=b.array[c+d];return this},set:function(a,b){void 0===b&&(b=0);this.array.set(a,b);return this},clone:function(a){void 0===a.arrayBuffers&&(a.arrayBuffers={});void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=P.generateUUID());void 0===a.arrayBuffers[this.array.buffer._uuid]&&
-(a.arrayBuffers[this.array.buffer._uuid]=this.array.slice(0).buffer);a=new this.array.constructor(a.arrayBuffers[this.array.buffer._uuid]);a=new Ba(a,this.stride);a.setUsage(this.usage);return a},onUpload:function(a){this.onUploadCallback=a;return this},toJSON:function(a){void 0===a.arrayBuffers&&(a.arrayBuffers={});void 0===this.array.buffer._uuid&&(this.array.buffer._uuid=P.generateUUID());void 0===a.arrayBuffers[this.array.buffer._uuid]&&(a.arrayBuffers[this.array.buffer._uuid]=Array.prototype.slice.call(new Uint32Array(this.array.buffer)));
-return{uuid:this.uuid,buffer:this.array.buffer._uuid,type:this.array.constructor.name,stride:this.stride}}});var uc=new m;Object.defineProperties(Hb.prototype,{count:{get:function(){return this.data.count}},array:{get:function(){return this.data.array}},needsUpdate:{set:function(a){this.data.needsUpdate=a}}});Object.assign(Hb.prototype,{isInterleavedBufferAttribute:!0,applyMatrix4:function(a){for(var b=0,c=this.data.count;b<c;b++)uc.x=this.getX(b),uc.y=this.getY(b),uc.z=this.getZ(b),uc.applyMatrix4(a),
-this.setXYZ(b,uc.x,uc.y,uc.z);return this},setX:function(a,b){this.data.array[a*this.data.stride+this.offset]=b;return this},setY:function(a,b){this.data.array[a*this.data.stride+this.offset+1]=b;return this},setZ:function(a,b){this.data.array[a*this.data.stride+this.offset+2]=b;return this},setW:function(a,b){this.data.array[a*this.data.stride+this.offset+3]=b;return this},getX:function(a){return this.data.array[a*this.data.stride+this.offset]},getY:function(a){return this.data.array[a*this.data.stride+
-this.offset+1]},getZ:function(a){return this.data.array[a*this.data.stride+this.offset+2]},getW:function(a){return this.data.array[a*this.data.stride+this.offset+3]},setXY:function(a,b,c){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;return this},setXYZ:function(a,b,c,d){a=a*this.data.stride+this.offset;this.data.array[a+0]=b;this.data.array[a+1]=c;this.data.array[a+2]=d;return this},setXYZW:function(a,b,c,d,e){a=a*this.data.stride+this.offset;this.data.array[a+0]=
-b;this.data.array[a+1]=c;this.data.array[a+2]=d;this.data.array[a+3]=e;return this},clone:function(a){if(void 0===a){console.log("THREE.InterleavedBufferAttribute.clone(): Cloning an interlaved buffer attribute will deinterleave buffer data.");a=[];for(var b=0;b<this.count;b++)for(var c=b*this.data.stride+this.offset,d=0;d<this.itemSize;d++)a.push(this.data.array[c+d]);return new J(new this.array.constructor(a),this.itemSize,this.normalized)}void 0===a.interleavedBuffers&&(a.interleavedBuffers={});
-void 0===a.interleavedBuffers[this.data.uuid]&&(a.interleavedBuffers[this.data.uuid]=this.data.clone(a));return new Hb(a.interleavedBuffers[this.data.uuid],this.itemSize,this.offset,this.normalized)},toJSON:function(a){if(void 0===a){console.log("THREE.InterleavedBufferAttribute.toJSON(): Serializing an interlaved buffer attribute will deinterleave buffer data.");a=[];for(var b=0;b<this.count;b++)for(var c=b*this.data.stride+this.offset,d=0;d<this.itemSize;d++)a.push(this.data.array[c+d]);return{itemSize:this.itemSize,
-type:this.array.constructor.name,array:a,normalized:this.normalized}}void 0===a.interleavedBuffers&&(a.interleavedBuffers={});void 0===a.interleavedBuffers[this.data.uuid]&&(a.interleavedBuffers[this.data.uuid]=this.data.toJSON(a));return{isInterleavedBufferAttribute:!0,itemSize:this.itemSize,data:this.data.uuid,offset:this.offset,normalized:this.normalized}}});Ib.prototype=Object.create(L.prototype);Ib.prototype.constructor=Ib;Ib.prototype.isSpriteMaterial=!0;Ib.prototype.copy=function(a){L.prototype.copy.call(this,
-a);this.color.copy(a.color);this.map=a.map;this.alphaMap=a.alphaMap;this.rotation=a.rotation;this.sizeAttenuation=a.sizeAttenuation;return this};var Nc,Be=new m,xd=new m,yd=new m,Oc=new u,Pd=new u,Xh=new U,Lf=new m,Ce=new m,Mf=new m,Di=new u,jh=new u,Ei=new u;Od.prototype=Object.assign(Object.create(C.prototype),{constructor:Od,isSprite:!0,raycast:function(a,b){null===a.camera&&console.error('THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.');xd.setFromMatrixScale(this.matrixWorld);
-Xh.copy(a.camera.matrixWorld);this.modelViewMatrix.multiplyMatrices(a.camera.matrixWorldInverse,this.matrixWorld);yd.setFromMatrixPosition(this.modelViewMatrix);a.camera.isPerspectiveCamera&&!1===this.material.sizeAttenuation&&xd.multiplyScalar(-yd.z);var c=this.material.rotation;if(0!==c){var d=Math.cos(c);var e=Math.sin(c)}c=this.center;Qe(Lf.set(-.5,-.5,0),yd,c,xd,e,d);Qe(Ce.set(.5,-.5,0),yd,c,xd,e,d);Qe(Mf.set(.5,.5,0),yd,c,xd,e,d);Di.set(0,0);jh.set(1,0);Ei.set(1,1);var f=a.ray.intersectTriangle(Lf,
-Ce,Mf,!1,Be);if(null===f&&(Qe(Ce.set(-.5,.5,0),yd,c,xd,e,d),jh.set(0,1),f=a.ray.intersectTriangle(Lf,Mf,Ce,!1,Be),null===f))return;e=a.ray.origin.distanceTo(Be);e<a.near||e>a.far||b.push({distance:e,point:Be.clone(),uv:ba.getUV(Be,Lf,Ce,Mf,Di,jh,Ei,new u),face:null,object:this})},copy:function(a){C.prototype.copy.call(this,a);void 0!==a.center&&this.center.copy(a.center);this.material=a.material;return this}});var Nf=new m,Fi=new m;Qd.prototype=Object.assign(Object.create(C.prototype),{constructor:Qd,
-isLOD:!0,copy:function(a){C.prototype.copy.call(this,a,!1);for(var b=a.levels,c=0,d=b.length;c<d;c++){var e=b[c];this.addLevel(e.object.clone(),e.distance)}this.autoUpdate=a.autoUpdate;return this},addLevel:function(a,b){void 0===b&&(b=0);b=Math.abs(b);var c=this.levels,d;for(d=0;d<c.length&&!(b<c[d].distance);d++);c.splice(d,0,{distance:b,object:a});this.add(a);return this},getCurrentLevel:function(){return this._currentLevel},getObjectForDistance:function(a){var b=this.levels;if(0<b.length){var c;
-var d=1;for(c=b.length;d<c&&!(a<b[d].distance);d++);return b[d-1].object}return null},raycast:function(a,b){if(0<this.levels.length){Nf.setFromMatrixPosition(this.matrixWorld);var c=a.ray.origin.distanceTo(Nf);this.getObjectForDistance(c).raycast(a,b)}},update:function(a){var b=this.levels;if(1<b.length){Nf.setFromMatrixPosition(a.matrixWorld);Fi.setFromMatrixPosition(this.matrixWorld);a=Nf.distanceTo(Fi)/a.zoom;b[0].object.visible=!0;var c;var d=1;for(c=b.length;d<c;d++)if(a>=b[d].distance)b[d-1].object.visible=
-!1,b[d].object.visible=!0;else break;for(this._currentLevel=d-1;d<c;d++)b[d].object.visible=!1}},toJSON:function(a){a=C.prototype.toJSON.call(this,a);!1===this.autoUpdate&&(a.object.autoUpdate=!1);a.object.levels=[];for(var b=this.levels,c=0,d=b.length;c<d;c++){var e=b[c];a.object.levels.push({object:e.object.uuid,distance:e.distance})}return a}});Re.prototype=Object.assign(Object.create(T.prototype),{constructor:Re,isSkinnedMesh:!0,copy:function(a){T.prototype.copy.call(this,a);this.bindMode=a.bindMode;
-this.bindMatrix.copy(a.bindMatrix);this.bindMatrixInverse.copy(a.bindMatrixInverse);this.skeleton=a.skeleton;return this},bind:function(a,b){this.skeleton=a;void 0===b&&(this.updateMatrixWorld(!0),this.skeleton.calculateInverses(),b=this.matrixWorld);this.bindMatrix.copy(b);this.bindMatrixInverse.getInverse(b)},pose:function(){this.skeleton.pose()},normalizeSkinWeights:function(){for(var a=new S,b=this.geometry.attributes.skinWeight,c=0,d=b.count;c<d;c++){a.x=b.getX(c);a.y=b.getY(c);a.z=b.getZ(c);
-a.w=b.getW(c);var e=1/a.manhattanLength();Infinity!==e?a.multiplyScalar(e):a.set(1,0,0,0);b.setXYZW(c,a.x,a.y,a.z,a.w)}},updateMatrixWorld:function(a){T.prototype.updateMatrixWorld.call(this,a);"attached"===this.bindMode?this.bindMatrixInverse.getInverse(this.matrixWorld):"detached"===this.bindMode?this.bindMatrixInverse.getInverse(this.bindMatrix):console.warn("THREE.SkinnedMesh: Unrecognized bindMode: "+this.bindMode)},boneTransform:function(){var a=new m,b=new S,c=new S,d=new m,e=new U;return function(f,
-g){var h=this.skeleton,l=this.geometry;b.fromBufferAttribute(l.attributes.skinIndex,f);c.fromBufferAttribute(l.attributes.skinWeight,f);a.fromBufferAttribute(l.attributes.position,f).applyMatrix4(this.bindMatrix);g.set(0,0,0);for(f=0;4>f;f++)if(l=c.getComponent(f),0!==l){var k=b.getComponent(f);e.multiplyMatrices(h.bones[k].matrixWorld,h.boneInverses[k]);g.addScaledVector(d.copy(a).applyMatrix4(e),l)}return g.applyMatrix4(this.bindMatrixInverse)}}()});var Gi=new U,Tk=new U;Object.assign(Se.prototype,
-{calculateInverses:function(){this.boneInverses=[];for(var a=0,b=this.bones.length;a<b;a++){var c=new U;this.bones[a]&&c.getInverse(this.bones[a].matrixWorld);this.boneInverses.push(c)}},pose:function(){for(var a=0,b=this.bones.length;a<b;a++){var c=this.bones[a];c&&c.matrixWorld.getInverse(this.boneInverses[a])}a=0;for(b=this.bones.length;a<b;a++)if(c=this.bones[a])c.parent&&c.parent.isBone?(c.matrix.getInverse(c.parent.matrixWorld),c.matrix.multiply(c.matrixWorld)):c.matrix.copy(c.matrixWorld),
-c.matrix.decompose(c.position,c.quaternion,c.scale)},update:function(){for(var a=this.bones,b=this.boneInverses,c=this.boneMatrices,d=this.boneTexture,e=0,f=a.length;e<f;e++)Gi.multiplyMatrices(a[e]?a[e].matrixWorld:Tk,b[e]),Gi.toArray(c,16*e);void 0!==d&&(d.needsUpdate=!0)},clone:function(){return new Se(this.bones,this.boneInverses)},getBoneByName:function(a){for(var b=0,c=this.bones.length;b<c;b++){var d=this.bones[b];if(d.name===a)return d}},dispose:function(){this.boneTexture&&(this.boneTexture.dispose(),
-this.boneTexture=void 0)}});pg.prototype=Object.assign(Object.create(C.prototype),{constructor:pg,isBone:!0});var Hi=new U,Ii=new U,Of=[],De=new T;Te.prototype=Object.assign(Object.create(T.prototype),{constructor:Te,isInstancedMesh:!0,copy:function(a){T.prototype.copy.call(this,a);this.instanceMatrix.copy(a.instanceMatrix);this.count=a.count;return this},getMatrixAt:function(a,b){b.fromArray(this.instanceMatrix.array,16*a)},raycast:function(a,b){var c=this.matrixWorld,d=this.count;De.geometry=this.geometry;
-De.material=this.material;if(void 0!==De.material)for(var e=0;e<d;e++){this.getMatrixAt(e,Hi);Ii.multiplyMatrices(c,Hi);De.matrixWorld=Ii;De.raycast(a,Of);for(var f=0,g=Of.length;f<g;f++){var h=Of[f];h.instanceId=e;h.object=this;b.push(h)}Of.length=0}},setMatrixAt:function(a,b){b.toArray(this.instanceMatrix.array,16*a)},updateMorphTargets:function(){}});ja.prototype=Object.create(L.prototype);ja.prototype.constructor=ja;ja.prototype.isLineBasicMaterial=!0;ja.prototype.copy=function(a){L.prototype.copy.call(this,
-a);this.color.copy(a.color);this.linewidth=a.linewidth;this.linecap=a.linecap;this.linejoin=a.linejoin;this.morphTargets=a.morphTargets;return this};var Ji=new m,Ki=new m,Li=new U,Pf=new Xb,Ee=new cb;Ja.prototype=Object.assign(Object.create(C.prototype),{constructor:Ja,isLine:!0,copy:function(a){C.prototype.copy.call(this,a);this.material=a.material;this.geometry=a.geometry;return this},computeLineDistances:function(){var a=this.geometry;if(a.isBufferGeometry)if(null===a.index){for(var b=a.attributes.position,
-c=[0],d=1,e=b.count;d<e;d++)Ji.fromBufferAttribute(b,d-1),Ki.fromBufferAttribute(b,d),c[d]=c[d-1],c[d]+=Ji.distanceTo(Ki);a.setAttribute("lineDistance",new A(c,1))}else console.warn("THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(a.isGeometry)for(b=a.vertices,a=a.lineDistances,a[0]=0,c=1,d=b.length;c<d;c++)a[c]=a[c-1],a[c]+=b[c-1].distanceTo(b[c]);return this},raycast:function(a,b){var c=this.geometry,d=this.matrixWorld,e=a.params.Line.threshold;
-null===c.boundingSphere&&c.computeBoundingSphere();Ee.copy(c.boundingSphere);Ee.applyMatrix4(d);Ee.radius+=e;if(!1!==a.ray.intersectsSphere(Ee)){Li.getInverse(d);Pf.copy(a.ray).applyMatrix4(Li);d=e/((this.scale.x+this.scale.y+this.scale.z)/3);d*=d;var f=new m,g=new m;e=new m;var h=new m,l=this&&this.isLineSegments?2:1;if(c.isBufferGeometry){var k=c.index;c=c.attributes.position.array;if(null!==k){k=k.array;for(var q=0,p=k.length-1;q<p;q+=l){var z=k[q+1];f.fromArray(c,3*k[q]);g.fromArray(c,3*z);Pf.distanceSqToSegment(f,
-g,h,e)>d||(h.applyMatrix4(this.matrixWorld),z=a.ray.origin.distanceTo(h),z<a.near||z>a.far||b.push({distance:z,point:e.clone().applyMatrix4(this.matrixWorld),index:q,face:null,faceIndex:null,object:this}))}}else for(k=0,q=c.length/3-1;k<q;k+=l)f.fromArray(c,3*k),g.fromArray(c,3*k+3),Pf.distanceSqToSegment(f,g,h,e)>d||(h.applyMatrix4(this.matrixWorld),p=a.ray.origin.distanceTo(h),p<a.near||p>a.far||b.push({distance:p,point:e.clone().applyMatrix4(this.matrixWorld),index:k,face:null,faceIndex:null,object:this}))}else if(c.isGeometry)for(f=
-c.vertices,g=f.length,c=0;c<g-1;c+=l)Pf.distanceSqToSegment(f[c],f[c+1],h,e)>d||(h.applyMatrix4(this.matrixWorld),k=a.ray.origin.distanceTo(h),k<a.near||k>a.far||b.push({distance:k,point:e.clone().applyMatrix4(this.matrixWorld),index:c,face:null,faceIndex:null,object:this}))}},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0<b.length&&(a=a[b[0]],void 0!==a)){this.morphTargetInfluences=[];this.morphTargetDictionary={};b=0;for(var c=
-a.length;b<c;b++){var d=a[b].name||String(b);this.morphTargetInfluences.push(0);this.morphTargetDictionary[d]=b}}}else a=a.morphTargets,void 0!==a&&0<a.length&&console.error("THREE.Line.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}});var Qf=new m,Rf=new m;ea.prototype=Object.assign(Object.create(Ja.prototype),{constructor:ea,isLineSegments:!0,computeLineDistances:function(){var a=this.geometry;if(a.isBufferGeometry)if(null===a.index){for(var b=a.attributes.position,
-c=[],d=0,e=b.count;d<e;d+=2)Qf.fromBufferAttribute(b,d),Rf.fromBufferAttribute(b,d+1),c[d]=0===d?0:c[d-1],c[d+1]=c[d]+Qf.distanceTo(Rf);a.setAttribute("lineDistance",new A(c,1))}else console.warn("THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.");else if(a.isGeometry)for(b=a.vertices,a=a.lineDistances,c=0,d=b.length;c<d;c+=2)Qf.copy(b[c]),Rf.copy(b[c+1]),a[c]=0===c?0:a[c-1],a[c+1]=a[c]+Qf.distanceTo(Rf);return this}});Ue.prototype=Object.assign(Object.create(Ja.prototype),
-{constructor:Ue,isLineLoop:!0});Va.prototype=Object.create(L.prototype);Va.prototype.constructor=Va;Va.prototype.isPointsMaterial=!0;Va.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.alphaMap=a.alphaMap;this.size=a.size;this.sizeAttenuation=a.sizeAttenuation;this.morphTargets=a.morphTargets;return this};var Mi=new U,rg=new Xb,Fe=new cb,Sf=new m;Pc.prototype=Object.assign(Object.create(C.prototype),{constructor:Pc,isPoints:!0,copy:function(a){C.prototype.copy.call(this,
-a);this.material=a.material;this.geometry=a.geometry;return this},raycast:function(a,b){var c=this.geometry,d=this.matrixWorld,e=a.params.Points.threshold;null===c.boundingSphere&&c.computeBoundingSphere();Fe.copy(c.boundingSphere);Fe.applyMatrix4(d);Fe.radius+=e;if(!1!==a.ray.intersectsSphere(Fe))if(Mi.getInverse(d),rg.copy(a.ray).applyMatrix4(Mi),e/=(this.scale.x+this.scale.y+this.scale.z)/3,e*=e,c.isBufferGeometry){var f=c.index;c=c.attributes.position.array;if(null!==f){f=f.array;for(var g=0,
-h=f.length;g<h;g++){var l=f[g];Sf.fromArray(c,3*l);qg(Sf,l,e,d,a,b,this)}}else for(f=0,g=c.length/3;f<g;f++)Sf.fromArray(c,3*f),qg(Sf,f,e,d,a,b,this)}else for(c=c.vertices,f=0,g=c.length;f<g;f++)qg(c[f],f,e,d,a,b,this)},updateMorphTargets:function(){var a=this.geometry;if(a.isBufferGeometry){a=a.morphAttributes;var b=Object.keys(a);if(0<b.length&&(a=a[b[0]],void 0!==a)){this.morphTargetInfluences=[];this.morphTargetDictionary={};b=0;for(var c=a.length;b<c;b++){var d=a[b].name||String(b);this.morphTargetInfluences.push(0);
-this.morphTargetDictionary[d]=b}}}else a=a.morphTargets,void 0!==a&&0<a.length&&console.error("THREE.Points.updateMorphTargets() does not support THREE.Geometry. Use THREE.BufferGeometry instead.")}});sg.prototype=Object.assign(Object.create(V.prototype),{constructor:sg,isVideoTexture:!0,update:function(){var a=this.image;!1==="requestVideoFrameCallback"in a&&a.readyState>=a.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}});Qc.prototype=Object.create(V.prototype);Qc.prototype.constructor=Qc;Qc.prototype.isCompressedTexture=
-!0;Rd.prototype=Object.create(V.prototype);Rd.prototype.constructor=Rd;Rd.prototype.isCanvasTexture=!0;Sd.prototype=Object.create(V.prototype);Sd.prototype.constructor=Sd;Sd.prototype.isDepthTexture=!0;Rc.prototype=Object.create(E.prototype);Rc.prototype.constructor=Rc;Td.prototype=Object.create(F.prototype);Td.prototype.constructor=Td;Sc.prototype=Object.create(E.prototype);Sc.prototype.constructor=Sc;Ud.prototype=Object.create(F.prototype);Ud.prototype.constructor=Ud;sa.prototype=Object.create(E.prototype);
-sa.prototype.constructor=sa;Vd.prototype=Object.create(F.prototype);Vd.prototype.constructor=Vd;Tc.prototype=Object.create(sa.prototype);Tc.prototype.constructor=Tc;Wd.prototype=Object.create(F.prototype);Wd.prototype.constructor=Wd;ec.prototype=Object.create(sa.prototype);ec.prototype.constructor=ec;Xd.prototype=Object.create(F.prototype);Xd.prototype.constructor=Xd;Uc.prototype=Object.create(sa.prototype);Uc.prototype.constructor=Uc;Yd.prototype=Object.create(F.prototype);Yd.prototype.constructor=
-Yd;Vc.prototype=Object.create(sa.prototype);Vc.prototype.constructor=Vc;Zd.prototype=Object.create(F.prototype);Zd.prototype.constructor=Zd;fc.prototype=Object.create(E.prototype);fc.prototype.constructor=fc;fc.prototype.toJSON=function(){var a=E.prototype.toJSON.call(this);a.path=this.parameters.path.toJSON();return a};$d.prototype=Object.create(F.prototype);$d.prototype.constructor=$d;Wc.prototype=Object.create(E.prototype);Wc.prototype.constructor=Wc;ae.prototype=Object.create(F.prototype);ae.prototype.constructor=
-ae;Xc.prototype=Object.create(E.prototype);Xc.prototype.constructor=Xc;var Uk={triangulate:function(a,b,c){c=c||2;var d=b&&b.length,e=d?b[0]*c:a.length,f=Yh(a,0,e,c,!0),g=[];if(!f||f.next===f.prev)return g;var h;if(d){var l=c;d=[];var k;var q=0;for(k=b.length;q<k;q++){var p=b[q]*l;var m=q<k-1?b[q+1]*l:a.length;p=Yh(a,p,m,l,!1);p===p.next&&(p.steiner=!0);d.push(Gk(p))}d.sort(Ek);for(q=0;q<d.length;q++){l=d[q];b=f;if(b=Fk(l,b))l=ai(b,l),Jb(b,b.next),Jb(l,l.next);f=Jb(f,f.next)}}if(a.length>80*c){var r=
-h=a[0];var t=d=a[1];for(l=c;l<e;l+=c)q=a[l],b=a[l+1],q<r&&(r=q),b<t&&(t=b),q>h&&(h=q),b>d&&(d=b);h=Math.max(h-r,d-t);h=0!==h?1/h:0}ce(f,g,c,r,t,h);return g}},pb={area:function(a){for(var b=a.length,c=0,d=b-1,e=0;e<b;d=e++)c+=a[d].x*a[e].y-a[e].x*a[d].y;return.5*c},isClockWise:function(a){return 0>pb.area(a)},triangulateShape:function(a,b){var c=[],d=[],e=[];bi(a);ci(c,a);a=a.length;b.forEach(bi);for(var f=0;f<b.length;f++)d.push(a),a+=b[f].length,ci(c,b[f]);b=Uk.triangulate(c,d);for(c=0;c<b.length;c+=
-3)e.push(b.slice(c,c+3));return e}};gc.prototype=Object.create(F.prototype);gc.prototype.constructor=gc;gc.prototype.toJSON=function(){var a=F.prototype.toJSON.call(this);return di(this.parameters.shapes,this.parameters.options,a)};eb.prototype=Object.create(E.prototype);eb.prototype.constructor=eb;eb.prototype.toJSON=function(){var a=E.prototype.toJSON.call(this);return di(this.parameters.shapes,this.parameters.options,a)};var Hk={generateTopUV:function(a,b,c,d,e){a=b[3*d];d=b[3*d+1];var f=b[3*e];
-e=b[3*e+1];return[new u(b[3*c],b[3*c+1]),new u(a,d),new u(f,e)]},generateSideWallUV:function(a,b,c,d,e,f){a=b[3*c];var g=b[3*c+1];c=b[3*c+2];var h=b[3*d],l=b[3*d+1];d=b[3*d+2];var k=b[3*e],q=b[3*e+1];e=b[3*e+2];var p=b[3*f],m=b[3*f+1];b=b[3*f+2];return.01>Math.abs(g-l)?[new u(a,1-c),new u(h,1-d),new u(k,1-e),new u(p,1-b)]:[new u(g,1-c),new u(l,1-d),new u(q,1-e),new u(m,1-b)]}};ee.prototype=Object.create(F.prototype);ee.prototype.constructor=ee;Zc.prototype=Object.create(eb.prototype);Zc.prototype.constructor=
-Zc;fe.prototype=Object.create(F.prototype);fe.prototype.constructor=fe;hc.prototype=Object.create(E.prototype);hc.prototype.constructor=hc;ge.prototype=Object.create(F.prototype);ge.prototype.constructor=ge;$c.prototype=Object.create(E.prototype);$c.prototype.constructor=$c;he.prototype=Object.create(F.prototype);he.prototype.constructor=he;ad.prototype=Object.create(E.prototype);ad.prototype.constructor=ad;ic.prototype=Object.create(F.prototype);ic.prototype.constructor=ic;ic.prototype.toJSON=function(){var a=
-F.prototype.toJSON.call(this);return ei(this.parameters.shapes,a)};jc.prototype=Object.create(E.prototype);jc.prototype.constructor=jc;jc.prototype.toJSON=function(){var a=E.prototype.toJSON.call(this);return ei(this.parameters.shapes,a)};bd.prototype=Object.create(E.prototype);bd.prototype.constructor=bd;kc.prototype=Object.create(F.prototype);kc.prototype.constructor=kc;qb.prototype=Object.create(E.prototype);qb.prototype.constructor=qb;ie.prototype=Object.create(kc.prototype);ie.prototype.constructor=
-ie;je.prototype=Object.create(qb.prototype);je.prototype.constructor=je;ke.prototype=Object.create(F.prototype);ke.prototype.constructor=ke;cd.prototype=Object.create(E.prototype);cd.prototype.constructor=cd;var Da=Object.freeze({__proto__:null,WireframeGeometry:Rc,ParametricGeometry:Td,ParametricBufferGeometry:Sc,TetrahedronGeometry:Vd,TetrahedronBufferGeometry:Tc,OctahedronGeometry:Wd,OctahedronBufferGeometry:ec,IcosahedronGeometry:Xd,IcosahedronBufferGeometry:Uc,DodecahedronGeometry:Yd,DodecahedronBufferGeometry:Vc,
-PolyhedronGeometry:Ud,PolyhedronBufferGeometry:sa,TubeGeometry:Zd,TubeBufferGeometry:fc,TorusKnotGeometry:$d,TorusKnotBufferGeometry:Wc,TorusGeometry:ae,TorusBufferGeometry:Xc,TextGeometry:ee,TextBufferGeometry:Zc,SphereGeometry:fe,SphereBufferGeometry:hc,RingGeometry:ge,RingBufferGeometry:$c,PlaneGeometry:Id,PlaneBufferGeometry:cc,LatheGeometry:he,LatheBufferGeometry:ad,ShapeGeometry:ic,ShapeBufferGeometry:jc,ExtrudeGeometry:gc,ExtrudeBufferGeometry:eb,EdgesGeometry:bd,ConeGeometry:ie,ConeBufferGeometry:je,
-CylinderGeometry:kc,CylinderBufferGeometry:qb,CircleGeometry:ke,CircleBufferGeometry:cd,BoxGeometry:Gc,BoxBufferGeometry:Bb});lc.prototype=Object.create(L.prototype);lc.prototype.constructor=lc;lc.prototype.isShadowMaterial=!0;lc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);return this};rb.prototype=Object.create(ra.prototype);rb.prototype.constructor=rb;rb.prototype.isRawShaderMaterial=!0;fb.prototype=Object.create(L.prototype);fb.prototype.constructor=fb;fb.prototype.isMeshStandardMaterial=
-!0;fb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.defines={STANDARD:""};this.color.copy(a.color);this.roughness=a.roughness;this.metalness=a.metalness;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=
-a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.roughnessMap=a.roughnessMap;this.metalnessMap=a.metalnessMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.envMapIntensity=a.envMapIntensity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=
-a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;this.vertexTangents=a.vertexTangents;return this};Kb.prototype=Object.create(fb.prototype);Kb.prototype.constructor=Kb;Kb.prototype.isMeshPhysicalMaterial=!0;Kb.prototype.copy=function(a){fb.prototype.copy.call(this,a);this.defines={STANDARD:"",PHYSICAL:""};this.clearcoat=a.clearcoat;this.clearcoatMap=a.clearcoatMap;this.clearcoatRoughness=a.clearcoatRoughness;this.clearcoatRoughnessMap=
-a.clearcoatRoughnessMap;this.clearcoatNormalMap=a.clearcoatNormalMap;this.clearcoatNormalScale.copy(a.clearcoatNormalScale);this.reflectivity=a.reflectivity;this.sheen=a.sheen?(this.sheen||new H).copy(a.sheen):null;this.transmission=a.transmission;this.transmissionMap=a.transmissionMap;return this};Lb.prototype=Object.create(L.prototype);Lb.prototype.constructor=Lb;Lb.prototype.isMeshPhongMaterial=!0;Lb.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.specular.copy(a.specular);
-this.shininess=a.shininess;this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;
-this.displacementBias=a.displacementBias;this.specularMap=a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};mc.prototype=Object.create(L.prototype);
-mc.prototype.constructor=mc;mc.prototype.isMeshToonMaterial=!0;mc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.gradientMap=a.gradientMap;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=
-a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};nc.prototype=Object.create(L.prototype);
-nc.prototype.constructor=nc;nc.prototype.isMeshNormalMaterial=!0;nc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.skinning=a.skinning;this.morphTargets=
-a.morphTargets;this.morphNormals=a.morphNormals;return this};oc.prototype=Object.create(L.prototype);oc.prototype.constructor=oc;oc.prototype.isMeshLambertMaterial=!0;oc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.color.copy(a.color);this.map=a.map;this.lightMap=a.lightMap;this.lightMapIntensity=a.lightMapIntensity;this.aoMap=a.aoMap;this.aoMapIntensity=a.aoMapIntensity;this.emissive.copy(a.emissive);this.emissiveMap=a.emissiveMap;this.emissiveIntensity=a.emissiveIntensity;this.specularMap=
-a.specularMap;this.alphaMap=a.alphaMap;this.envMap=a.envMap;this.combine=a.combine;this.reflectivity=a.reflectivity;this.refractionRatio=a.refractionRatio;this.wireframe=a.wireframe;this.wireframeLinewidth=a.wireframeLinewidth;this.wireframeLinecap=a.wireframeLinecap;this.wireframeLinejoin=a.wireframeLinejoin;this.skinning=a.skinning;this.morphTargets=a.morphTargets;this.morphNormals=a.morphNormals;return this};pc.prototype=Object.create(L.prototype);pc.prototype.constructor=pc;pc.prototype.isMeshMatcapMaterial=
-!0;pc.prototype.copy=function(a){L.prototype.copy.call(this,a);this.defines={MATCAP:""};this.color.copy(a.color);this.matcap=a.matcap;this.map=a.map;this.bumpMap=a.bumpMap;this.bumpScale=a.bumpScale;this.normalMap=a.normalMap;this.normalMapType=a.normalMapType;this.normalScale.copy(a.normalScale);this.displacementMap=a.displacementMap;this.displacementScale=a.displacementScale;this.displacementBias=a.displacementBias;this.alphaMap=a.alphaMap;this.skinning=a.skinning;this.morphTargets=a.morphTargets;
-this.morphNormals=a.morphNormals;return this};qc.prototype=Object.create(ja.prototype);qc.prototype.constructor=qc;qc.prototype.isLineDashedMaterial=!0;qc.prototype.copy=function(a){ja.prototype.copy.call(this,a);this.scale=a.scale;this.dashSize=a.dashSize;this.gapSize=a.gapSize;return this};var Vk=Object.freeze({__proto__:null,ShadowMaterial:lc,SpriteMaterial:Ib,RawShaderMaterial:rb,ShaderMaterial:ra,PointsMaterial:Va,MeshPhysicalMaterial:Kb,MeshStandardMaterial:fb,MeshPhongMaterial:Lb,MeshToonMaterial:mc,
-MeshNormalMaterial:nc,MeshLambertMaterial:oc,MeshDepthMaterial:Db,MeshDistanceMaterial:Eb,MeshBasicMaterial:Na,MeshMatcapMaterial:pc,LineDashedMaterial:qc,LineBasicMaterial:ja,Material:L}),ka={arraySlice:function(a,b,c){return ka.isTypedArray(a)?new a.constructor(a.subarray(b,void 0!==c?c:a.length)):a.slice(b,c)},convertArray:function(a,b,c){return!a||!c&&a.constructor===b?a:"number"===typeof b.BYTES_PER_ELEMENT?new b(a):Array.prototype.slice.call(a)},isTypedArray:function(a){return ArrayBuffer.isView(a)&&
-!(a instanceof DataView)},getKeyframeOrder:function(a){for(var b=a.length,c=Array(b),d=0;d!==b;++d)c[d]=d;c.sort(function(b,c){return a[b]-a[c]});return c},sortedArray:function(a,b,c){for(var d=a.length,e=new a.constructor(d),f=0,g=0;g!==d;++f)for(var h=c[f]*b,l=0;l!==b;++l)e[g++]=a[h+l];return e},flattenJSON:function(a,b,c,d){for(var e=1,f=a[0];void 0!==f&&void 0===f[d];)f=a[e++];if(void 0!==f){var g=f[d];if(void 0!==g)if(Array.isArray(g)){do g=f[d],void 0!==g&&(b.push(f.time),c.push.apply(c,g)),
-f=a[e++];while(void 0!==f)}else if(void 0!==g.toArray){do g=f[d],void 0!==g&&(b.push(f.time),g.toArray(c,c.length)),f=a[e++];while(void 0!==f)}else{do g=f[d],void 0!==g&&(b.push(f.time),c.push(g)),f=a[e++];while(void 0!==f)}}},subclip:function(a,b,c,d,e){e=e||30;a=a.clone();a.name=b;b=[];for(var f=0;f<a.tracks.length;++f){for(var g=a.tracks[f],h=g.getValueSize(),l=[],k=[],q=0;q<g.times.length;++q){var p=g.times[q]*e;if(!(p<c||p>=d))for(l.push(g.times[q]),p=0;p<h;++p)k.push(g.values[q*h+p])}0!==l.length&&
-(g.times=ka.convertArray(l,g.times.constructor),g.values=ka.convertArray(k,g.values.constructor),b.push(g))}a.tracks=b;c=Infinity;for(d=0;d<a.tracks.length;++d)c>a.tracks[d].times[0]&&(c=a.tracks[d].times[0]);for(d=0;d<a.tracks.length;++d)a.tracks[d].shift(-1*c);a.resetDuration();return a},makeClipAdditive:function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c=a);if(void 0===d||0>=d)d=30;var e=a.tracks.length,f=b/d;b=function(b){var d=c.tracks[b],e=d.ValueTypeName;if("bool"!==e&&"string"!==e&&(b=a.tracks.find(function(a){return a.name===
-d.name&&a.ValueTypeName===e}),void 0!==b)){var g=d.getValueSize(),k=d.times.length-1,p=void 0;f<=d.times[0]?p=ka.arraySlice(d.values,0,d.valueSize):f>=d.times[k]?p=ka.arraySlice(d.values,k*g):(p=d.createInterpolant(),p.evaluate(f),p=p.resultBuffer);"quaternion"===e&&(new Y(p[0],p[1],p[2],p[3])).normalize().conjugate().toArray(p);k=b.times.length;for(var m=0;m<k;++m){var r=m*g;if("quaternion"===e)Y.multiplyQuaternionsFlat(b.values,r,p,0,b.values,r);else for(var t=0;t<g;++t)b.values[r+t]-=p[t]}}};for(d=
-0;d<e;++d)b(d);a.blendMode=2501;return a}};Object.assign(Ka.prototype,{evaluate:function(a){var b=this.parameterPositions,c=this._cachedIndex,d=b[c],e=b[c-1];a:{b:{c:{d:if(!(a<d)){for(var f=c+2;;){if(void 0===d){if(a<e)break d;this._cachedIndex=c=b.length;return this.afterEnd_(c-1,a,e)}if(c===f)break;e=d;d=b[++c];if(a<d)break b}d=b.length;break c}if(a>=e)break a;else{f=b[1];a<f&&(c=2,e=f);for(f=c-2;;){if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(c===f)break;d=e;e=b[--c-1];
-if(a>=e)break b}d=c;c=0}}for(;c<d;)e=c+d>>>1,a<b[e]?d=e:c=e+1;d=b[c];e=b[c-1];if(void 0===e)return this._cachedIndex=0,this.beforeStart_(0,a,d);if(void 0===d)return this._cachedIndex=c=b.length,this.afterEnd_(c-1,e,a)}this._cachedIndex=c;this.intervalChanged_(c,e,d)}return this.interpolate_(c,e,a,d)},settings:null,DefaultSettings_:{},getSettings_:function(){return this.settings||this.DefaultSettings_},copySampleValue_:function(a){var b=this.resultBuffer,c=this.sampleValues,d=this.valueSize;a*=d;for(var e=
-0;e!==d;++e)b[e]=c[a+e];return b},interpolate_:function(){throw Error("call to abstract method");},intervalChanged_:function(){}});Object.assign(Ka.prototype,{beforeStart_:Ka.prototype.copySampleValue_,afterEnd_:Ka.prototype.copySampleValue_});Ye.prototype=Object.assign(Object.create(Ka.prototype),{constructor:Ye,DefaultSettings_:{endingStart:2400,endingEnd:2400},intervalChanged_:function(a,b,c){var d=this.parameterPositions,e=a-2,f=a+1,g=d[e],h=d[f];if(void 0===g)switch(this.getSettings_().endingStart){case 2401:e=
-a;g=2*b-c;break;case 2402:e=d.length-2;g=b+d[e]-d[e+1];break;default:e=a,g=c}if(void 0===h)switch(this.getSettings_().endingEnd){case 2401:f=a;h=2*c-b;break;case 2402:f=1;h=c+d[1]-d[0];break;default:f=a-1,h=b}a=.5*(c-b);d=this.valueSize;this._weightPrev=a/(b-g);this._weightNext=a/(h-c);this._offsetPrev=e*d;this._offsetNext=f*d},interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;var h=a-g,k=this._offsetPrev,n=this._offsetNext,m=this._weightPrev,p=this._weightNext,
-z=(c-b)/(d-b);c=z*z;d=c*z;b=-m*d+2*m*c-m*z;m=(1+m)*d+(-1.5-2*m)*c+(-.5+m)*z+1;z=(-1-p)*d+(1.5+p)*c+.5*z;p=p*d-p*c;for(c=0;c!==g;++c)e[c]=b*f[k+c]+m*f[h+c]+z*f[a+c]+p*f[n+c];return e}});le.prototype=Object.assign(Object.create(Ka.prototype),{constructor:le,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=this.valueSize;a*=g;var h=a-g;b=(c-b)/(d-b);c=1-b;for(d=0;d!==g;++d)e[d]=f[h+d]*c+f[a+d]*b;return e}});Ze.prototype=Object.assign(Object.create(Ka.prototype),{constructor:Ze,
-interpolate_:function(a){return this.copySampleValue_(a-1)}});Object.assign(ya,{toJSON:function(a){var b=a.constructor;if(void 0!==b.toJSON)b=b.toJSON(a);else{b={name:a.name,times:ka.convertArray(a.times,Array),values:ka.convertArray(a.values,Array)};var c=a.getInterpolation();c!==a.DefaultInterpolation&&(b.interpolation=c)}b.type=a.ValueTypeName;return b}});Object.assign(ya.prototype,{constructor:ya,TimeBufferType:Float32Array,ValueBufferType:Float32Array,DefaultInterpolation:2301,InterpolantFactoryMethodDiscrete:function(a){return new Ze(this.times,
-this.values,this.getValueSize(),a)},InterpolantFactoryMethodLinear:function(a){return new le(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:function(a){return new Ye(this.times,this.values,this.getValueSize(),a)},setInterpolation:function(a){switch(a){case 2300:var b=this.InterpolantFactoryMethodDiscrete;break;case 2301:b=this.InterpolantFactoryMethodLinear;break;case 2302:b=this.InterpolantFactoryMethodSmooth}if(void 0===b){b="unsupported interpolation for "+this.ValueTypeName+
-" keyframe track named "+this.name;if(void 0===this.createInterpolant)if(a!==this.DefaultInterpolation)this.setInterpolation(this.DefaultInterpolation);else throw Error(b);console.warn("THREE.KeyframeTrack:",b);return this}this.createInterpolant=b;return this},getInterpolation:function(){switch(this.createInterpolant){case this.InterpolantFactoryMethodDiscrete:return 2300;case this.InterpolantFactoryMethodLinear:return 2301;case this.InterpolantFactoryMethodSmooth:return 2302}},getValueSize:function(){return this.values.length/
-this.times.length},shift:function(a){if(0!==a)for(var b=this.times,c=0,d=b.length;c!==d;++c)b[c]+=a;return this},scale:function(a){if(1!==a)for(var b=this.times,c=0,d=b.length;c!==d;++c)b[c]*=a;return this},trim:function(a,b){for(var c=this.times,d=c.length,e=0,f=d-1;e!==d&&c[e]<a;)++e;for(;-1!==f&&c[f]>b;)--f;++f;if(0!==e||f!==d)e>=f&&(f=Math.max(f,1),e=f-1),a=this.getValueSize(),this.times=ka.arraySlice(c,e,f),this.values=ka.arraySlice(this.values,e*a,f*a);return this},validate:function(){var a=
-!0,b=this.getValueSize();0!==b-Math.floor(b)&&(console.error("THREE.KeyframeTrack: Invalid value size in track.",this),a=!1);var c=this.times;b=this.values;var d=c.length;0===d&&(console.error("THREE.KeyframeTrack: Track is empty.",this),a=!1);for(var e=null,f=0;f!==d;f++){var g=c[f];if("number"===typeof g&&isNaN(g)){console.error("THREE.KeyframeTrack: Time is not a valid number.",this,f,g);a=!1;break}if(null!==e&&e>g){console.error("THREE.KeyframeTrack: Out of order keys.",this,f,g,e);a=!1;break}e=
-g}if(void 0!==b&&ka.isTypedArray(b))for(c=0,d=b.length;c!==d;++c)if(e=b[c],isNaN(e)){console.error("THREE.KeyframeTrack: Value is not a valid number.",this,c,e);a=!1;break}return a},optimize:function(){for(var a=ka.arraySlice(this.times),b=ka.arraySlice(this.values),c=this.getValueSize(),d=2302===this.getInterpolation(),e=a.length-1,f=1,g=1;g<e;++g){var h=!1,k=a[g];if(k!==a[g+1]&&(1!==g||k!==k[0]))if(d)h=!0;else{k=g*c;for(var n=k-c,m=k+c,p=0;p!==c;++p){var z=b[k+p];if(z!==b[n+p]||z!==b[m+p]){h=!0;
-break}}}if(h){if(g!==f)for(a[f]=a[g],h=g*c,k=f*c,n=0;n!==c;++n)b[k+n]=b[h+n];++f}}if(0<e){a[f]=a[e];d=e*c;e=f*c;for(g=0;g!==c;++g)b[e+g]=b[d+g];++f}f!==a.length?(this.times=ka.arraySlice(a,0,f),this.values=ka.arraySlice(b,0,f*c)):(this.times=a,this.values=b);return this},clone:function(){var a=ka.arraySlice(this.times,0),b=ka.arraySlice(this.values,0);a=new this.constructor(this.name,a,b);a.createInterpolant=this.createInterpolant;return a}});$e.prototype=Object.assign(Object.create(ya.prototype),
-{constructor:$e,ValueTypeName:"bool",ValueBufferType:Array,DefaultInterpolation:2300,InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});af.prototype=Object.assign(Object.create(ya.prototype),{constructor:af,ValueTypeName:"color"});dd.prototype=Object.assign(Object.create(ya.prototype),{constructor:dd,ValueTypeName:"number"});bf.prototype=Object.assign(Object.create(Ka.prototype),{constructor:bf,interpolate_:function(a,b,c,d){var e=this.resultBuffer,f=this.sampleValues,g=
-this.valueSize;b=(c-b)/(d-b);a*=g;for(c=a+g;a!==c;a+=4)Y.slerpFlat(e,0,f,a-g,f,a,b);return e}});me.prototype=Object.assign(Object.create(ya.prototype),{constructor:me,ValueTypeName:"quaternion",DefaultInterpolation:2301,InterpolantFactoryMethodLinear:function(a){return new bf(this.times,this.values,this.getValueSize(),a)},InterpolantFactoryMethodSmooth:void 0});cf.prototype=Object.assign(Object.create(ya.prototype),{constructor:cf,ValueTypeName:"string",ValueBufferType:Array,DefaultInterpolation:2300,
-InterpolantFactoryMethodLinear:void 0,InterpolantFactoryMethodSmooth:void 0});ed.prototype=Object.assign(Object.create(ya.prototype),{constructor:ed,ValueTypeName:"vector"});Object.assign(Pa,{parse:function(a){for(var b=[],c=a.tracks,d=1/(a.fps||1),e=0,f=c.length;e!==f;++e)b.push(Jk(c[e]).scale(d));return new Pa(a.name,a.duration,b,a.blendMode)},toJSON:function(a){var b=[],c=a.tracks;a={name:a.name,duration:a.duration,tracks:b,uuid:a.uuid,blendMode:a.blendMode};for(var d=0,e=c.length;d!==e;++d)b.push(ya.toJSON(c[d]));
-return a},CreateFromMorphTargetSequence:function(a,b,c,d){for(var e=b.length,f=[],g=0;g<e;g++){var h=[],k=[];h.push((g+e-1)%e,g,(g+1)%e);k.push(0,1,0);var n=ka.getKeyframeOrder(h);h=ka.sortedArray(h,1,n);k=ka.sortedArray(k,1,n);d||0!==h[0]||(h.push(e),k.push(k[0]));f.push((new dd(".morphTargetInfluences["+b[g].name+"]",h,k)).scale(1/c))}return new Pa(a,-1,f)},findByName:function(a,b){var c=a;Array.isArray(a)||(c=a.geometry&&a.geometry.animations||a.animations);for(a=0;a<c.length;a++)if(c[a].name===
-b)return c[a];return null},CreateClipsFromMorphTargetSequences:function(a,b,c){for(var d={},e=/^([w-]*?)([d]+)$/,f=0,g=a.length;f<g;f++){var h=a[f],k=h.name.match(e);if(k&&1<k.length){k=k[1];var n=d[k];n||(d[k]=n=[]);n.push(h)}}a=[];for(var m in d)a.push(Pa.CreateFromMorphTargetSequence(m,d[m],b,c));return a},parseAnimation:function(a,b){if(!a)return console.error("THREE.AnimationClip: No animation in JSONLoader data."),null;var c=function(a,b,c,d,e){if(0!==c.length){var f=[],g=[];ka.flattenJSON(c,
-f,g,d);0!==f.length&&e.push(new a(b,f,g))}},d=[],e=a.name||"default",f=a.fps||30,g=a.blendMode,h=a.length||-1;a=a.hierarchy||[];for(var k=0;k<a.length;k++){var n=a[k].keys;if(n&&0!==n.length)if(n[0].morphTargets){h={};var m=void 0;for(m=0;m<n.length;m++)if(n[m].morphTargets)for(var p=0;p<n[m].morphTargets.length;p++)h[n[m].morphTargets[p]]=-1;for(var z in h){p=[];for(var r=[],t=0;t!==n[m].morphTargets.length;++t){var v=n[m];p.push(v.time);r.push(v.morphTarget===z?1:0)}d.push(new dd(".morphTargetInfluence["+
-z+"]",p,r))}h=h.length*(f||1)}else m=".bones["+b[k].name+"]",c(ed,m+".position",n,"pos",d),c(me,m+".quaternion",n,"rot",d),c(ed,m+".scale",n,"scl",d)}return 0===d.length?null:new Pa(e,h,d,g)}});Object.assign(Pa.prototype,{resetDuration:function(){for(var a=0,b=0,c=this.tracks.length;b!==c;++b){var d=this.tracks[b];a=Math.max(a,d.times[d.times.length-1])}this.duration=a;return this},trim:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].trim(0,this.duration);return this},validate:function(){for(var a=
-!0,b=0;b<this.tracks.length;b++)a=a&&this.tracks[b].validate();return a},optimize:function(){for(var a=0;a<this.tracks.length;a++)this.tracks[a].optimize();return this},clone:function(){for(var a=[],b=0;b<this.tracks.length;b++)a.push(this.tracks[b].clone());return new Pa(this.name,this.duration,a,this.blendMode)}});var vc={enabled:!1,files:{},add:function(a,b){!1!==this.enabled&&(this.files[a]=b)},get:function(a){if(!1!==this.enabled)return this.files[a]},remove:function(a){delete this.files[a]},
-clear:function(){this.files={}}},fi=new vg;Object.assign(X.prototype,{load:function(){},loadAsync:function(a,b){var c=this;return new Promise(function(d,e){c.load(a,d,b,e)})},parse:function(){},setCrossOrigin:function(a){this.crossOrigin=a;return this},setPath:function(a){this.path=a;return this},setResourcePath:function(a){this.resourcePath=a;return this},setRequestHeader:function(a){this.requestHeader=a;return this}});var bb={};Qa.prototype=Object.assign(Object.create(X.prototype),{constructor:Qa,
-load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=vc.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;if(void 0!==bb[a])bb[a].push({onLoad:b,onProgress:c,onError:d});else{var g=a.match(/^data:(.*?)(;base64)?,(.*)$/);if(g){c=g[1];var h=!!g[2];g=g[3];g=decodeURIComponent(g);h&&(g=atob(g));try{var k=(this.responseType||"").toLowerCase();switch(k){case "arraybuffer":case "blob":var n=
-new Uint8Array(g.length);for(h=0;h<g.length;h++)n[h]=g.charCodeAt(h);var m="blob"===k?new Blob([n.buffer],{type:c}):n.buffer;break;case "document":m=(new DOMParser).parseFromString(g,c);break;case "json":m=JSON.parse(g);break;default:m=g}setTimeout(function(){b&&b(m);e.manager.itemEnd(a)},0)}catch(z){setTimeout(function(){d&&d(z);e.manager.itemError(a);e.manager.itemEnd(a)},0)}}else{bb[a]=[];bb[a].push({onLoad:b,onProgress:c,onError:d});var p=new XMLHttpRequest;p.open("GET",a,!0);p.addEventListener("load",
-function(b){var c=this.response,d=bb[a];delete bb[a];if(200===this.status||0===this.status){0===this.status&&console.warn("THREE.FileLoader: HTTP Status 0 received.");vc.add(a,c);b=0;for(var f=d.length;b<f;b++){var g=d[b];if(g.onLoad)g.onLoad(c)}}else{c=0;for(f=d.length;c<f;c++)if(g=d[c],g.onError)g.onError(b);e.manager.itemError(a)}e.manager.itemEnd(a)},!1);p.addEventListener("progress",function(b){for(var c=bb[a],d=0,e=c.length;d<e;d++){var f=c[d];if(f.onProgress)f.onProgress(b)}},!1);p.addEventListener("error",
-function(b){var c=bb[a];delete bb[a];for(var d=0,f=c.length;d<f;d++){var g=c[d];if(g.onError)g.onError(b)}e.manager.itemError(a);e.manager.itemEnd(a)},!1);p.addEventListener("abort",function(b){var c=bb[a];delete bb[a];for(var d=0,f=c.length;d<f;d++){var g=c[d];if(g.onError)g.onError(b)}e.manager.itemError(a);e.manager.itemEnd(a)},!1);void 0!==this.responseType&&(p.responseType=this.responseType);void 0!==this.withCredentials&&(p.withCredentials=this.withCredentials);p.overrideMimeType&&p.overrideMimeType(void 0!==
-this.mimeType?this.mimeType:"text/plain");for(h in this.requestHeader)p.setRequestHeader(h,this.requestHeader[h]);p.send(null)}e.manager.itemStart(a);return p}},setResponseType:function(a){this.responseType=a;return this},setWithCredentials:function(a){this.withCredentials=a;return this},setMimeType:function(a){this.mimeType=a;return this}});wg.prototype=Object.assign(Object.create(X.prototype),{constructor:wg,load:function(a,b,c,d){var e=this,f=new Qa(e.manager);f.setPath(e.path);f.setRequestHeader(e.requestHeader);
-f.load(a,function(c){try{b(e.parse(JSON.parse(c)))}catch(h){d?d(h):console.error(h),e.manager.itemError(a)}},c,d)},parse:function(a){for(var b=[],c=0;c<a.length;c++){var d=Pa.parse(a[c]);b.push(d)}return b}});xg.prototype=Object.assign(Object.create(X.prototype),{constructor:xg,load:function(a,b,c,d){function e(e){k.load(a[e],function(a){a=f.parse(a,!0);g[e]={width:a.width,height:a.height,format:a.format,mipmaps:a.mipmaps};n+=1;6===n&&(1===a.mipmapCount&&(h.minFilter=1006),h.format=a.format,h.needsUpdate=
-!0,b&&b(h))},c,d)}var f=this,g=[],h=new Qc;h.image=g;var k=new Qa(this.manager);k.setPath(this.path);k.setResponseType("arraybuffer");k.setRequestHeader(this.requestHeader);var n=0;if(Array.isArray(a))for(var m=0,p=a.length;m<p;++m)e(m);else k.load(a,function(a){a=f.parse(a,!0);if(a.isCubemap)for(var c=a.mipmaps.length/a.mipmapCount,d=0;d<c;d++){g[d]={mipmaps:[]};for(var e=0;e<a.mipmapCount;e++)g[d].mipmaps.push(a.mipmaps[d*a.mipmapCount+e]),g[d].format=a.format,g[d].width=a.width,g[d].height=a.height}else h.image.width=
-a.width,h.image.height=a.height,h.mipmaps=a.mipmaps;1===a.mipmapCount&&(h.minFilter=1006);h.format=a.format;h.needsUpdate=!0;b&&b(h)},c,d);return h}});df.prototype=Object.assign(Object.create(X.prototype),{constructor:df,load:function(a,b,c,d){var e=this,f=new bc,g=new Qa(this.manager);g.setResponseType("arraybuffer");g.setRequestHeader(this.requestHeader);g.setPath(this.path);g.load(a,function(a){if(a=e.parse(a))void 0!==a.image?f.image=a.image:void 0!==a.data&&(f.image.width=a.width,f.image.height=
-a.height,f.image.data=a.data),f.wrapS=void 0!==a.wrapS?a.wrapS:1001,f.wrapT=void 0!==a.wrapT?a.wrapT:1001,f.magFilter=void 0!==a.magFilter?a.magFilter:1006,f.minFilter=void 0!==a.minFilter?a.minFilter:1006,f.anisotropy=void 0!==a.anisotropy?a.anisotropy:1,void 0!==a.format&&(f.format=a.format),void 0!==a.type&&(f.type=a.type),void 0!==a.mipmaps&&(f.mipmaps=a.mipmaps,f.minFilter=1008),1===a.mipmapCount&&(f.minFilter=1006),f.needsUpdate=!0,b&&b(f,a)},c,d);return f}});fd.prototype=Object.assign(Object.create(X.prototype),
-{constructor:fd,load:function(a,b,c,d){function e(){k.removeEventListener("load",e,!1);k.removeEventListener("error",f,!1);vc.add(a,this);b&&b(this);g.manager.itemEnd(a)}function f(b){k.removeEventListener("load",e,!1);k.removeEventListener("error",f,!1);d&&d(b);g.manager.itemError(a);g.manager.itemEnd(a)}void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var g=this,h=vc.get(a);if(void 0!==h)return g.manager.itemStart(a),setTimeout(function(){b&&b(h);g.manager.itemEnd(a)},0),h;var k=
-document.createElementNS("http://www.w3.org/1999/xhtml","img");k.addEventListener("load",e,!1);k.addEventListener("error",f,!1);"data:"!==a.substr(0,5)&&void 0!==this.crossOrigin&&(k.crossOrigin=this.crossOrigin);g.manager.itemStart(a);k.src=a;return k}});ef.prototype=Object.assign(Object.create(X.prototype),{constructor:ef,load:function(a,b,c,d){function e(c){g.load(a[c],function(a){f.images[c]=a;h++;6===h&&(f.needsUpdate=!0,b&&b(f))},void 0,d)}var f=new ob,g=new fd(this.manager);g.setCrossOrigin(this.crossOrigin);
-g.setPath(this.path);var h=0;for(c=0;c<a.length;++c)e(c);return f}});ff.prototype=Object.assign(Object.create(X.prototype),{constructor:ff,load:function(a,b,c,d){var e=new V,f=new fd(this.manager);f.setCrossOrigin(this.crossOrigin);f.setPath(this.path);f.load(a,function(c){e.image=c;c=0<a.search(/.jpe?g($|?)/i)||0===a.search(/^data:image/jpeg/);e.format=c?1022:1023;e.needsUpdate=!0;void 0!==b&&b(e)},c,d);return e}});Object.assign(K.prototype,{getPoint:function(){console.warn("THREE.Curve: .getPoint() not implemented.");
-return null},getPointAt:function(a,b){a=this.getUtoTmapping(a);return this.getPoint(a,b)},getPoints:function(a){void 0===a&&(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/a));return b},getSpacedPoints:function(a){void 0===a&&(a=5);for(var b=[],c=0;c<=a;c++)b.push(this.getPointAt(c/a));return b},getLength:function(){var a=this.getLengths();return a[a.length-1]},getLengths:function(a){void 0===a&&(a=this.arcLengthDivisions);if(this.cacheArcLengths&&this.cacheArcLengths.length===a+1&&!this.needsUpdate)return this.cacheArcLengths;
-this.needsUpdate=!1;var b=[],c=this.getPoint(0),d=0;b.push(0);for(var e=1;e<=a;e++){var f=this.getPoint(e/a);d+=f.distanceTo(c);b.push(d);c=f}return this.cacheArcLengths=b},updateArcLengths:function(){this.needsUpdate=!0;this.getLengths()},getUtoTmapping:function(a,b){var c=this.getLengths(),d=c.length;b=b?b:a*c[d-1];for(var e=0,f=d-1,g;e<=f;)if(a=Math.floor(e+(f-e)/2),g=c[a]-b,0>g)e=a+1;else if(0<g)f=a-1;else{f=a;break}a=f;if(c[a]===b)return a/(d-1);e=c[a];return(a+(b-e)/(c[a+1]-e))/(d-1)},getTangent:function(a,
-b){var c=a-1E-4;a+=1E-4;0>c&&(c=0);1<a&&(a=1);c=this.getPoint(c);a=this.getPoint(a);b=b||(c.isVector2?new u:new m);b.copy(a).sub(c).normalize();return b},getTangentAt:function(a,b){a=this.getUtoTmapping(a);return this.getTangent(a,b)},computeFrenetFrames:function(a,b){for(var c=new m,d=[],e=[],f=[],g=new m,h=new U,k=0;k<=a;k++)d[k]=this.getTangentAt(k/a,new m),d[k].normalize();e[0]=new m;f[0]=new m;k=Number.MAX_VALUE;var n=Math.abs(d[0].x),q=Math.abs(d[0].y),p=Math.abs(d[0].z);n<=k&&(k=n,c.set(1,
-0,0));q<=k&&(k=q,c.set(0,1,0));p<=k&&c.set(0,0,1);g.crossVectors(d[0],c).normalize();e[0].crossVectors(d[0],g);f[0].crossVectors(d[0],e[0]);for(c=1;c<=a;c++)e[c]=e[c-1].clone(),f[c]=f[c-1].clone(),g.crossVectors(d[c-1],d[c]),g.length()>Number.EPSILON&&(g.normalize(),k=Math.acos(P.clamp(d[c-1].dot(d[c]),-1,1)),e[c].applyMatrix4(h.makeRotationAxis(g,k))),f[c].crossVectors(d[c],e[c]);if(!0===b)for(b=Math.acos(P.clamp(e[0].dot(e[a]),-1,1)),b/=a,0<d[0].dot(g.crossVectors(e[0],e[a]))&&(b=-b),g=1;g<=a;g++)e[g].applyMatrix4(h.makeRotationAxis(d[g],
-b*g)),f[g].crossVectors(d[g],e[g]);return{tangents:d,normals:e,binormals:f}},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.arcLengthDivisions=a.arcLengthDivisions;return this},toJSON:function(){var a={metadata:{version:4.5,type:"Curve",generator:"Curve.toJSON"}};a.arcLengthDivisions=this.arcLengthDivisions;a.type=this.type;return a},fromJSON:function(a){this.arcLengthDivisions=a.arcLengthDivisions;return this}});La.prototype=Object.create(K.prototype);La.prototype.constructor=
-La;La.prototype.isEllipseCurve=!0;La.prototype.getPoint=function(a,b){b=b||new u;for(var c=2*Math.PI,d=this.aEndAngle-this.aStartAngle,e=Math.abs(d)<Number.EPSILON;0>d;)d+=c;for(;d>c;)d-=c;d<Number.EPSILON&&(d=e?0:c);!0!==this.aClockwise||e||(d=d===c?-c:d-c);c=this.aStartAngle+a*d;a=this.aX+this.xRadius*Math.cos(c);var f=this.aY+this.yRadius*Math.sin(c);0!==this.aRotation&&(c=Math.cos(this.aRotation),d=Math.sin(this.aRotation),e=a-this.aX,f-=this.aY,a=e*c-f*d+this.aX,f=e*d+f*c+this.aY);return b.set(a,
-f)};La.prototype.copy=function(a){K.prototype.copy.call(this,a);this.aX=a.aX;this.aY=a.aY;this.xRadius=a.xRadius;this.yRadius=a.yRadius;this.aStartAngle=a.aStartAngle;this.aEndAngle=a.aEndAngle;this.aClockwise=a.aClockwise;this.aRotation=a.aRotation;return this};La.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.aX=this.aX;a.aY=this.aY;a.xRadius=this.xRadius;a.yRadius=this.yRadius;a.aStartAngle=this.aStartAngle;a.aEndAngle=this.aEndAngle;a.aClockwise=this.aClockwise;a.aRotation=
-this.aRotation;return a};La.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.aX=a.aX;this.aY=a.aY;this.xRadius=a.xRadius;this.yRadius=a.yRadius;this.aStartAngle=a.aStartAngle;this.aEndAngle=a.aEndAngle;this.aClockwise=a.aClockwise;this.aRotation=a.aRotation;return this};gd.prototype=Object.create(La.prototype);gd.prototype.constructor=gd;gd.prototype.isArcCurve=!0;var Tf=new m,kh=new yg,lh=new yg,mh=new yg;za.prototype=Object.create(K.prototype);za.prototype.constructor=za;za.prototype.isCatmullRomCurve3=
-!0;za.prototype.getPoint=function(a,b){b=b||new m;var c=this.points,d=c.length;a*=d-(this.closed?0:1);var e=Math.floor(a);a-=e;this.closed?e+=0<e?0:(Math.floor(Math.abs(e)/d)+1)*d:0===a&&e===d-1&&(e=d-2,a=1);if(this.closed||0<e)var f=c[(e-1)%d];else Tf.subVectors(c[0],c[1]).add(c[0]),f=Tf;var g=c[e%d];var h=c[(e+1)%d];this.closed||e+2<d?c=c[(e+2)%d]:(Tf.subVectors(c[d-1],c[d-2]).add(c[d-1]),c=Tf);if("centripetal"===this.curveType||"chordal"===this.curveType){var k="chordal"===this.curveType?.5:.25;
-d=Math.pow(f.distanceToSquared(g),k);e=Math.pow(g.distanceToSquared(h),k);k=Math.pow(h.distanceToSquared(c),k);1E-4>e&&(e=1);1E-4>d&&(d=e);1E-4>k&&(k=e);kh.initNonuniformCatmullRom(f.x,g.x,h.x,c.x,d,e,k);lh.initNonuniformCatmullRom(f.y,g.y,h.y,c.y,d,e,k);mh.initNonuniformCatmullRom(f.z,g.z,h.z,c.z,d,e,k)}else"catmullrom"===this.curveType&&(kh.initCatmullRom(f.x,g.x,h.x,c.x,this.tension),lh.initCatmullRom(f.y,g.y,h.y,c.y,this.tension),mh.initCatmullRom(f.z,g.z,h.z,c.z,this.tension));b.set(kh.calc(a),
-lh.calc(a),mh.calc(a));return b};za.prototype.copy=function(a){K.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b<c;b++)this.points.push(a.points[b].clone());this.closed=a.closed;this.curveType=a.curveType;this.tension=a.tension;return this};za.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.points=[];for(var b=0,c=this.points.length;b<c;b++)a.points.push(this.points[b].toArray());a.closed=this.closed;a.curveType=this.curveType;a.tension=this.tension;return a};
-za.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.points=[];for(var b=0,c=a.points.length;b<c;b++){var d=a.points[b];this.points.push((new m).fromArray(d))}this.closed=a.closed;this.curveType=a.curveType;this.tension=a.tension;return this};Wa.prototype=Object.create(K.prototype);Wa.prototype.constructor=Wa;Wa.prototype.isCubicBezierCurve=!0;Wa.prototype.getPoint=function(a,b){b=b||new u;var c=this.v0,d=this.v1,e=this.v2,f=this.v3;b.set(oe(a,c.x,d.x,e.x,f.x),oe(a,c.y,d.y,e.y,
-f.y));return b};Wa.prototype.copy=function(a){K.prototype.copy.call(this,a);this.v0.copy(a.v0);this.v1.copy(a.v1);this.v2.copy(a.v2);this.v3.copy(a.v3);return this};Wa.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.v0=this.v0.toArray();a.v1=this.v1.toArray();a.v2=this.v2.toArray();a.v3=this.v3.toArray();return a};Wa.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.v0.fromArray(a.v0);this.v1.fromArray(a.v1);this.v2.fromArray(a.v2);this.v3.fromArray(a.v3);return this};
-gb.prototype=Object.create(K.prototype);gb.prototype.constructor=gb;gb.prototype.isCubicBezierCurve3=!0;gb.prototype.getPoint=function(a,b){b=b||new m;var c=this.v0,d=this.v1,e=this.v2,f=this.v3;b.set(oe(a,c.x,d.x,e.x,f.x),oe(a,c.y,d.y,e.y,f.y),oe(a,c.z,d.z,e.z,f.z));return b};gb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.v0.copy(a.v0);this.v1.copy(a.v1);this.v2.copy(a.v2);this.v3.copy(a.v3);return this};gb.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.v0=this.v0.toArray();
-a.v1=this.v1.toArray();a.v2=this.v2.toArray();a.v3=this.v3.toArray();return a};gb.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.v0.fromArray(a.v0);this.v1.fromArray(a.v1);this.v2.fromArray(a.v2);this.v3.fromArray(a.v3);return this};ia.prototype=Object.create(K.prototype);ia.prototype.constructor=ia;ia.prototype.isLineCurve=!0;ia.prototype.getPoint=function(a,b){b=b||new u;1===a?b.copy(this.v2):(b.copy(this.v2).sub(this.v1),b.multiplyScalar(a).add(this.v1));return b};ia.prototype.getPointAt=
-function(a,b){return this.getPoint(a,b)};ia.prototype.getTangent=function(a,b){a=b||new u;a.copy(this.v2).sub(this.v1).normalize();return a};ia.prototype.copy=function(a){K.prototype.copy.call(this,a);this.v1.copy(a.v1);this.v2.copy(a.v2);return this};ia.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.v1=this.v1.toArray();a.v2=this.v2.toArray();return a};ia.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.v1.fromArray(a.v1);this.v2.fromArray(a.v2);return this};
-Xa.prototype=Object.create(K.prototype);Xa.prototype.constructor=Xa;Xa.prototype.isLineCurve3=!0;Xa.prototype.getPoint=function(a,b){b=b||new m;1===a?b.copy(this.v2):(b.copy(this.v2).sub(this.v1),b.multiplyScalar(a).add(this.v1));return b};Xa.prototype.getPointAt=function(a,b){return this.getPoint(a,b)};Xa.prototype.copy=function(a){K.prototype.copy.call(this,a);this.v1.copy(a.v1);this.v2.copy(a.v2);return this};Xa.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.v1=this.v1.toArray();
-a.v2=this.v2.toArray();return a};Xa.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.v1.fromArray(a.v1);this.v2.fromArray(a.v2);return this};Ya.prototype=Object.create(K.prototype);Ya.prototype.constructor=Ya;Ya.prototype.isQuadraticBezierCurve=!0;Ya.prototype.getPoint=function(a,b){b=b||new u;var c=this.v0,d=this.v1,e=this.v2;b.set(ne(a,c.x,d.x,e.x),ne(a,c.y,d.y,e.y));return b};Ya.prototype.copy=function(a){K.prototype.copy.call(this,a);this.v0.copy(a.v0);this.v1.copy(a.v1);
-this.v2.copy(a.v2);return this};Ya.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.v0=this.v0.toArray();a.v1=this.v1.toArray();a.v2=this.v2.toArray();return a};Ya.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.v0.fromArray(a.v0);this.v1.fromArray(a.v1);this.v2.fromArray(a.v2);return this};hb.prototype=Object.create(K.prototype);hb.prototype.constructor=hb;hb.prototype.isQuadraticBezierCurve3=!0;hb.prototype.getPoint=function(a,b){b=b||new m;var c=this.v0,d=
-this.v1,e=this.v2;b.set(ne(a,c.x,d.x,e.x),ne(a,c.y,d.y,e.y),ne(a,c.z,d.z,e.z));return b};hb.prototype.copy=function(a){K.prototype.copy.call(this,a);this.v0.copy(a.v0);this.v1.copy(a.v1);this.v2.copy(a.v2);return this};hb.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.v0=this.v0.toArray();a.v1=this.v1.toArray();a.v2=this.v2.toArray();return a};hb.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.v0.fromArray(a.v0);this.v1.fromArray(a.v1);this.v2.fromArray(a.v2);
-return this};Za.prototype=Object.create(K.prototype);Za.prototype.constructor=Za;Za.prototype.isSplineCurve=!0;Za.prototype.getPoint=function(a,b){b=b||new u;var c=this.points,d=(c.length-1)*a;a=Math.floor(d);d-=a;var e=c[0===a?a:a-1],f=c[a],g=c[a>c.length-2?c.length-1:a+1];c=c[a>c.length-3?c.length-1:a+2];b.set(gi(d,e.x,f.x,g.x,c.x),gi(d,e.y,f.y,g.y,c.y));return b};Za.prototype.copy=function(a){K.prototype.copy.call(this,a);this.points=[];for(var b=0,c=a.points.length;b<c;b++)this.points.push(a.points[b].clone());
-return this};Za.prototype.toJSON=function(){var a=K.prototype.toJSON.call(this);a.points=[];for(var b=0,c=this.points.length;b<c;b++)a.points.push(this.points[b].toArray());return a};Za.prototype.fromJSON=function(a){K.prototype.fromJSON.call(this,a);this.points=[];for(var b=0,c=a.points.length;b<c;b++){var d=a.points[b];this.points.push((new u).fromArray(d))}return this};var nh=Object.freeze({__proto__:null,ArcCurve:gd,CatmullRomCurve3:za,CubicBezierCurve:Wa,CubicBezierCurve3:gb,EllipseCurve:La,
-LineCurve:ia,LineCurve3:Xa,QuadraticBezierCurve:Ya,QuadraticBezierCurve3:hb,SplineCurve:Za});sb.prototype=Object.assign(Object.create(K.prototype),{constructor:sb,add:function(a){this.curves.push(a)},closePath:function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new ia(b,a))},getPoint:function(a){var b=a*this.getLength(),c=this.getCurveLengths();for(a=0;a<c.length;){if(c[a]>=b)return b=c[a]-b,a=this.curves[a],c=a.getLength(),a.getPointAt(0===
-c?0:1-b/c);a++}return null},getLength:function(){var a=this.getCurveLengths();return a[a.length-1]},updateArcLengths:function(){this.needsUpdate=!0;this.cacheLengths=null;this.getCurveLengths()},getCurveLengths:function(){if(this.cacheLengths&&this.cacheLengths.length===this.curves.length)return this.cacheLengths;for(var a=[],b=0,c=0,d=this.curves.length;c<d;c++)b+=this.curves[c].getLength(),a.push(b);return this.cacheLengths=a},getSpacedPoints:function(a){void 0===a&&(a=40);for(var b=[],c=0;c<=a;c++)b.push(this.getPoint(c/
-a));this.autoClose&&b.push(b[0]);return b},getPoints:function(a){a=a||12;for(var b=[],c,d=0,e=this.curves;d<e.length;d++){var f=e[d];f=f.getPoints(f&&f.isEllipseCurve?2*a:f&&(f.isLineCurve||f.isLineCurve3)?1:f&&f.isSplineCurve?a*f.points.length:a);for(var g=0;g<f.length;g++){var h=f[g];c&&c.equals(h)||(b.push(h),c=h)}}this.autoClose&&1<b.length&&!b[b.length-1].equals(b[0])&&b.push(b[0]);return b},copy:function(a){K.prototype.copy.call(this,a);this.curves=[];for(var b=0,c=a.curves.length;b<c;b++)this.curves.push(a.curves[b].clone());
-this.autoClose=a.autoClose;return this},toJSON:function(){var a=K.prototype.toJSON.call(this);a.autoClose=this.autoClose;a.curves=[];for(var b=0,c=this.curves.length;b<c;b++)a.curves.push(this.curves[b].toJSON());return a},fromJSON:function(a){K.prototype.fromJSON.call(this,a);this.autoClose=a.autoClose;this.curves=[];for(var b=0,c=a.curves.length;b<c;b++){var d=a.curves[b];this.curves.push((new nh[d.type]).fromJSON(d))}return this}});$a.prototype=Object.assign(Object.create(sb.prototype),{constructor:$a,
-setFromPoints:function(a){this.moveTo(a[0].x,a[0].y);for(var b=1,c=a.length;b<c;b++)this.lineTo(a[b].x,a[b].y);return this},moveTo:function(a,b){this.currentPoint.set(a,b);return this},lineTo:function(a,b){var c=new ia(this.currentPoint.clone(),new u(a,b));this.curves.push(c);this.currentPoint.set(a,b);return this},quadraticCurveTo:function(a,b,c,d){a=new Ya(this.currentPoint.clone(),new u(a,b),new u(c,d));this.curves.push(a);this.currentPoint.set(c,d);return this},bezierCurveTo:function(a,b,c,d,
-e,f){a=new Wa(this.currentPoint.clone(),new u(a,b),new u(c,d),new u(e,f));this.curves.push(a);this.currentPoint.set(e,f);return this},splineThru:function(a){var b=[this.currentPoint.clone()].concat(a);b=new Za(b);this.curves.push(b);this.currentPoint.copy(a[a.length-1]);return this},arc:function(a,b,c,d,e,f){this.absarc(a+this.currentPoint.x,b+this.currentPoint.y,c,d,e,f);return this},absarc:function(a,b,c,d,e,f){this.absellipse(a,b,c,c,d,e,f);return this},ellipse:function(a,b,c,d,e,f,g,h){this.absellipse(a+
-this.currentPoint.x,b+this.currentPoint.y,c,d,e,f,g,h);return this},absellipse:function(a,b,c,d,e,f,g,h){a=new La(a,b,c,d,e,f,g,h);0<this.curves.length&&(b=a.getPoint(0),b.equals(this.currentPoint)||this.lineTo(b.x,b.y));this.curves.push(a);a=a.getPoint(1);this.currentPoint.copy(a);return this},copy:function(a){sb.prototype.copy.call(this,a);this.currentPoint.copy(a.currentPoint);return this},toJSON:function(){var a=sb.prototype.toJSON.call(this);a.currentPoint=this.currentPoint.toArray();return a},
-fromJSON:function(a){sb.prototype.fromJSON.call(this,a);this.currentPoint.fromArray(a.currentPoint);return this}});Mb.prototype=Object.assign(Object.create($a.prototype),{constructor:Mb,getPointsHoles:function(a){for(var b=[],c=0,d=this.holes.length;c<d;c++)b[c]=this.holes[c].getPoints(a);return b},extractPoints:function(a){return{shape:this.getPoints(a),holes:this.getPointsHoles(a)}},copy:function(a){$a.prototype.copy.call(this,a);this.holes=[];for(var b=0,c=a.holes.length;b<c;b++)this.holes.push(a.holes[b].clone());
-return this},toJSON:function(){var a=$a.prototype.toJSON.call(this);a.uuid=this.uuid;a.holes=[];for(var b=0,c=this.holes.length;b<c;b++)a.holes.push(this.holes[b].toJSON());return a},fromJSON:function(a){$a.prototype.fromJSON.call(this,a);this.uuid=a.uuid;this.holes=[];for(var b=0,c=a.holes.length;b<c;b++){var d=a.holes[b];this.holes.push((new $a).fromJSON(d))}return this}});fa.prototype=Object.assign(Object.create(C.prototype),{constructor:fa,isLight:!0,copy:function(a){C.prototype.copy.call(this,
-a);this.color.copy(a.color);this.intensity=a.intensity;return this},toJSON:function(a){a=C.prototype.toJSON.call(this,a);a.object.color=this.color.getHex();a.object.intensity=this.intensity;void 0!==this.groundColor&&(a.object.groundColor=this.groundColor.getHex());void 0!==this.distance&&(a.object.distance=this.distance);void 0!==this.angle&&(a.object.angle=this.angle);void 0!==this.decay&&(a.object.decay=this.decay);void 0!==this.penumbra&&(a.object.penumbra=this.penumbra);void 0!==this.shadow&&
-(a.object.shadow=this.shadow.toJSON());return a}});gf.prototype=Object.assign(Object.create(fa.prototype),{constructor:gf,isHemisphereLight:!0,copy:function(a){fa.prototype.copy.call(this,a);this.groundColor.copy(a.groundColor);return this}});Object.assign(ib.prototype,{_projScreenMatrix:new U,_lightPositionWorld:new m,_lookTarget:new m,getViewportCount:function(){return this._viewportCount},getFrustum:function(){return this._frustum},updateMatrices:function(a){var b=this.camera,c=this.matrix,d=this._projScreenMatrix,
-e=this._lookTarget,f=this._lightPositionWorld;f.setFromMatrixPosition(a.matrixWorld);b.position.copy(f);e.setFromMatrixPosition(a.target.matrixWorld);b.lookAt(e);b.updateMatrixWorld();d.multiplyMatrices(b.projectionMatrix,b.matrixWorldInverse);this._frustum.setFromProjectionMatrix(d);c.set(.5,0,0,.5,0,.5,0,.5,0,0,.5,.5,0,0,0,1);c.multiply(b.projectionMatrix);c.multiply(b.matrixWorldInverse)},getViewport:function(a){return this._viewports[a]},getFrameExtents:function(){return this._frameExtents},copy:function(a){this.camera=
-a.camera.clone();this.bias=a.bias;this.radius=a.radius;this.mapSize.copy(a.mapSize);return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var a={};0!==this.bias&&(a.bias=this.bias);0!==this.normalBias&&(a.normalBias=this.normalBias);1!==this.radius&&(a.radius=this.radius);if(512!==this.mapSize.x||512!==this.mapSize.y)a.mapSize=this.mapSize.toArray();a.camera=this.camera.toJSON(!1).object;delete a.camera.matrix;return a}});hf.prototype=Object.assign(Object.create(ib.prototype),
-{constructor:hf,isSpotLightShadow:!0,updateMatrices:function(a){var b=this.camera,c=2*P.RAD2DEG*a.angle,d=this.mapSize.width/this.mapSize.height,e=a.distance||b.far;if(c!==b.fov||d!==b.aspect||e!==b.far)b.fov=c,b.aspect=d,b.far=e,b.updateProjectionMatrix();ib.prototype.updateMatrices.call(this,a)}});jf.prototype=Object.assign(Object.create(fa.prototype),{constructor:jf,isSpotLight:!0,copy:function(a){fa.prototype.copy.call(this,a);this.distance=a.distance;this.angle=a.angle;this.penumbra=a.penumbra;
-this.decay=a.decay;this.target=a.target.clone();this.shadow=a.shadow.clone();return this}});zg.prototype=Object.assign(Object.create(ib.prototype),{constructor:zg,isPointLightShadow:!0,updateMatrices:function(a,b){void 0===b&&(b=0);var c=this.camera,d=this.matrix,e=this._lightPositionWorld,f=this._lookTarget,g=this._projScreenMatrix;e.setFromMatrixPosition(a.matrixWorld);c.position.copy(e);f.copy(c.position);f.add(this._cubeDirections[b]);c.up.copy(this._cubeUps[b]);c.lookAt(f);c.updateMatrixWorld();
-d.makeTranslation(-e.x,-e.y,-e.z);g.multiplyMatrices(c.projectionMatrix,c.matrixWorldInverse);this._frustum.setFromProjectionMatrix(g)}});kf.prototype=Object.assign(Object.create(fa.prototype),{constructor:kf,isPointLight:!0,copy:function(a){fa.prototype.copy.call(this,a);this.distance=a.distance;this.decay=a.decay;this.shadow=a.shadow.clone();return this}});hd.prototype=Object.assign(Object.create(db.prototype),{constructor:hd,isOrthographicCamera:!0,copy:function(a,b){db.prototype.copy.call(this,
-a,b);this.left=a.left;this.right=a.right;this.top=a.top;this.bottom=a.bottom;this.near=a.near;this.far=a.far;this.zoom=a.zoom;this.view=null===a.view?null:Object.assign({},a.view);return this},setViewOffset:function(a,b,c,d,e,f){null===this.view&&(this.view={enabled:!0,fullWidth:1,fullHeight:1,offsetX:0,offsetY:0,width:1,height:1});this.view.enabled=!0;this.view.fullWidth=a;this.view.fullHeight=b;this.view.offsetX=c;this.view.offsetY=d;this.view.width=e;this.view.height=f;this.updateProjectionMatrix()},
-clearViewOffset:function(){null!==this.view&&(this.view.enabled=!1);this.updateProjectionMatrix()},updateProjectionMatrix:function(){var a=(this.right-this.left)/(2*this.zoom),b=(this.top-this.bottom)/(2*this.zoom),c=(this.right+this.left)/2,d=(this.top+this.bottom)/2,e=c-a;c+=a;a=d+b;b=d-b;null!==this.view&&this.view.enabled&&(d=(this.right-this.left)/this.view.fullWidth/this.zoom,b=(this.top-this.bottom)/this.view.fullHeight/this.zoom,e+=d*this.view.offsetX,c=e+d*this.view.width,a-=b*this.view.offsetY,
-b=a-b*this.view.height);this.projectionMatrix.makeOrthographic(e,c,a,b,this.near,this.far);this.projectionMatrixInverse.getInverse(this.projectionMatrix)},toJSON:function(a){a=C.prototype.toJSON.call(this,a);a.object.zoom=this.zoom;a.object.left=this.left;a.object.right=this.right;a.object.top=this.top;a.object.bottom=this.bottom;a.object.near=this.near;a.object.far=this.far;null!==this.view&&(a.object.view=Object.assign({},this.view));return a}});lf.prototype=Object.assign(Object.create(ib.prototype),
-{constructor:lf,isDirectionalLightShadow:!0,updateMatrices:function(a){ib.prototype.updateMatrices.call(this,a)}});mf.prototype=Object.assign(Object.create(fa.prototype),{constructor:mf,isDirectionalLight:!0,copy:function(a){fa.prototype.copy.call(this,a);this.target=a.target.clone();this.shadow=a.shadow.clone();return this}});nf.prototype=Object.assign(Object.create(fa.prototype),{constructor:nf,isAmbientLight:!0});of.prototype=Object.assign(Object.create(fa.prototype),{constructor:of,isRectAreaLight:!0,
-copy:function(a){fa.prototype.copy.call(this,a);this.width=a.width;this.height=a.height;return this},toJSON:function(a){a=fa.prototype.toJSON.call(this,a);a.object.width=this.width;a.object.height=this.height;return a}});Object.assign(pf.prototype,{isSphericalHarmonics3:!0,set:function(a){for(var b=0;9>b;b++)this.coefficients[b].copy(a[b]);return this},zero:function(){for(var a=0;9>a;a++)this.coefficients[a].set(0,0,0);return this},getAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;
-b.copy(e[0]).multiplyScalar(.282095);b.addScaledVector(e[1],.488603*d);b.addScaledVector(e[2],.488603*a);b.addScaledVector(e[3],.488603*c);b.addScaledVector(e[4],1.092548*c*d);b.addScaledVector(e[5],1.092548*d*a);b.addScaledVector(e[6],.315392*(3*a*a-1));b.addScaledVector(e[7],1.092548*c*a);b.addScaledVector(e[8],.546274*(c*c-d*d));return b},getIrradianceAt:function(a,b){var c=a.x,d=a.y;a=a.z;var e=this.coefficients;b.copy(e[0]).multiplyScalar(.886227);b.addScaledVector(e[1],1.023328*d);b.addScaledVector(e[2],
-1.023328*a);b.addScaledVector(e[3],1.023328*c);b.addScaledVector(e[4],.858086*c*d);b.addScaledVector(e[5],.858086*d*a);b.addScaledVector(e[6],.743125*a*a-.247708);b.addScaledVector(e[7],.858086*c*a);b.addScaledVector(e[8],.429043*(c*c-d*d));return b},add:function(a){for(var b=0;9>b;b++)this.coefficients[b].add(a.coefficients[b]);return this},addScaledSH:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].addScaledVector(a.coefficients[c],b);return this},scale:function(a){for(var b=0;9>b;b++)this.coefficients[b].multiplyScalar(a);
-return this},lerp:function(a,b){for(var c=0;9>c;c++)this.coefficients[c].lerp(a.coefficients[c],b);return this},equals:function(a){for(var b=0;9>b;b++)if(!this.coefficients[b].equals(a.coefficients[b]))return!1;return!0},copy:function(a){return this.set(a.coefficients)},clone:function(){return(new this.constructor).copy(this)},fromArray:function(a,b){void 0===b&&(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].fromArray(a,b+3*d);return this},toArray:function(a,b){void 0===a&&(a=[]);void 0===b&&
-(b=0);for(var c=this.coefficients,d=0;9>d;d++)c[d].toArray(a,b+3*d);return a}});Object.assign(pf,{getBasisAt:function(a,b){var c=a.x,d=a.y;a=a.z;b[0]=.282095;b[1]=.488603*d;b[2]=.488603*a;b[3]=.488603*c;b[4]=1.092548*c*d;b[5]=1.092548*d*a;b[6]=.315392*(3*a*a-1);b[7]=1.092548*c*a;b[8]=.546274*(c*c-d*d)}});Ra.prototype=Object.assign(Object.create(fa.prototype),{constructor:Ra,isLightProbe:!0,copy:function(a){fa.prototype.copy.call(this,a);this.sh.copy(a.sh);return this},fromJSON:function(a){this.intensity=
-a.intensity;this.sh.fromArray(a.sh);return this},toJSON:function(a){a=fa.prototype.toJSON.call(this,a);a.object.sh=this.sh.toArray();return a}});qf.prototype=Object.assign(Object.create(X.prototype),{constructor:qf,load:function(a,b,c,d){var e=this,f=new Qa(e.manager);f.setPath(e.path);f.setRequestHeader(e.requestHeader);f.load(a,function(c){try{b(e.parse(JSON.parse(c)))}catch(h){d?d(h):console.error(h),e.manager.itemError(a)}},c,d)},parse:function(a){function b(a){void 0===c[a]&&console.warn("THREE.MaterialLoader: Undefined texture",
-a);return c[a]}var c=this.textures,d=new Vk[a.type];void 0!==a.uuid&&(d.uuid=a.uuid);void 0!==a.name&&(d.name=a.name);void 0!==a.color&&d.color.setHex(a.color);void 0!==a.roughness&&(d.roughness=a.roughness);void 0!==a.metalness&&(d.metalness=a.metalness);void 0!==a.sheen&&(d.sheen=(new H).setHex(a.sheen));void 0!==a.emissive&&d.emissive.setHex(a.emissive);void 0!==a.specular&&d.specular.setHex(a.specular);void 0!==a.shininess&&(d.shininess=a.shininess);void 0!==a.clearcoat&&(d.clearcoat=a.clearcoat);
-void 0!==a.clearcoatRoughness&&(d.clearcoatRoughness=a.clearcoatRoughness);void 0!==a.fog&&(d.fog=a.fog);void 0!==a.flatShading&&(d.flatShading=a.flatShading);void 0!==a.blending&&(d.blending=a.blending);void 0!==a.combine&&(d.combine=a.combine);void 0!==a.side&&(d.side=a.side);void 0!==a.opacity&&(d.opacity=a.opacity);void 0!==a.transparent&&(d.transparent=a.transparent);void 0!==a.alphaTest&&(d.alphaTest=a.alphaTest);void 0!==a.depthTest&&(d.depthTest=a.depthTest);void 0!==a.depthWrite&&(d.depthWrite=
-a.depthWrite);void 0!==a.colorWrite&&(d.colorWrite=a.colorWrite);void 0!==a.stencilWrite&&(d.stencilWrite=a.stencilWrite);void 0!==a.stencilWriteMask&&(d.stencilWriteMask=a.stencilWriteMask);void 0!==a.stencilFunc&&(d.stencilFunc=a.stencilFunc);void 0!==a.stencilRef&&(d.stencilRef=a.stencilRef);void 0!==a.stencilFuncMask&&(d.stencilFuncMask=a.stencilFuncMask);void 0!==a.stencilFail&&(d.stencilFail=a.stencilFail);void 0!==a.stencilZFail&&(d.stencilZFail=a.stencilZFail);void 0!==a.stencilZPass&&(d.stencilZPass=
-a.stencilZPass);void 0!==a.wireframe&&(d.wireframe=a.wireframe);void 0!==a.wireframeLinewidth&&(d.wireframeLinewidth=a.wireframeLinewidth);void 0!==a.wireframeLinecap&&(d.wireframeLinecap=a.wireframeLinecap);void 0!==a.wireframeLinejoin&&(d.wireframeLinejoin=a.wireframeLinejoin);void 0!==a.rotation&&(d.rotation=a.rotation);1!==a.linewidth&&(d.linewidth=a.linewidth);void 0!==a.dashSize&&(d.dashSize=a.dashSize);void 0!==a.gapSize&&(d.gapSize=a.gapSize);void 0!==a.scale&&(d.scale=a.scale);void 0!==a.polygonOffset&&
-(d.polygonOffset=a.polygonOffset);void 0!==a.polygonOffsetFactor&&(d.polygonOffsetFactor=a.polygonOffsetFactor);void 0!==a.polygonOffsetUnits&&(d.polygonOffsetUnits=a.polygonOffsetUnits);void 0!==a.skinning&&(d.skinning=a.skinning);void 0!==a.morphTargets&&(d.morphTargets=a.morphTargets);void 0!==a.morphNormals&&(d.morphNormals=a.morphNormals);void 0!==a.dithering&&(d.dithering=a.dithering);void 0!==a.vertexTangents&&(d.vertexTangents=a.vertexTangents);void 0!==a.visible&&(d.visible=a.visible);void 0!==
-a.toneMapped&&(d.toneMapped=a.toneMapped);void 0!==a.userData&&(d.userData=a.userData);void 0!==a.vertexColors&&(d.vertexColors="number"===typeof a.vertexColors?0<a.vertexColors?!0:!1:a.vertexColors);if(void 0!==a.uniforms)for(var e in a.uniforms){var f=a.uniforms[e];d.uniforms[e]={};switch(f.type){case "t":d.uniforms[e].value=b(f.value);break;case "c":d.uniforms[e].value=(new H).setHex(f.value);break;case "v2":d.uniforms[e].value=(new u).fromArray(f.value);break;case "v3":d.uniforms[e].value=(new m).fromArray(f.value);
-break;case "v4":d.uniforms[e].value=(new S).fromArray(f.value);break;case "m3":d.uniforms[e].value=(new qa).fromArray(f.value);case "m4":d.uniforms[e].value=(new U).fromArray(f.value);break;default:d.uniforms[e].value=f.value}}void 0!==a.defines&&(d.defines=a.defines);void 0!==a.vertexShader&&(d.vertexShader=a.vertexShader);void 0!==a.fragmentShader&&(d.fragmentShader=a.fragmentShader);if(void 0!==a.extensions)for(var g in a.extensions)d.extensions[g]=a.extensions[g];void 0!==a.shading&&(d.flatShading=
-1===a.shading);void 0!==a.size&&(d.size=a.size);void 0!==a.sizeAttenuation&&(d.sizeAttenuation=a.sizeAttenuation);void 0!==a.map&&(d.map=b(a.map));void 0!==a.matcap&&(d.matcap=b(a.matcap));void 0!==a.alphaMap&&(d.alphaMap=b(a.alphaMap));void 0!==a.bumpMap&&(d.bumpMap=b(a.bumpMap));void 0!==a.bumpScale&&(d.bumpScale=a.bumpScale);void 0!==a.normalMap&&(d.normalMap=b(a.normalMap));void 0!==a.normalMapType&&(d.normalMapType=a.normalMapType);void 0!==a.normalScale&&(e=a.normalScale,!1===Array.isArray(e)&&
-(e=[e,e]),d.normalScale=(new u).fromArray(e));void 0!==a.displacementMap&&(d.displacementMap=b(a.displacementMap));void 0!==a.displacementScale&&(d.displacementScale=a.displacementScale);void 0!==a.displacementBias&&(d.displacementBias=a.displacementBias);void 0!==a.roughnessMap&&(d.roughnessMap=b(a.roughnessMap));void 0!==a.metalnessMap&&(d.metalnessMap=b(a.metalnessMap));void 0!==a.emissiveMap&&(d.emissiveMap=b(a.emissiveMap));void 0!==a.emissiveIntensity&&(d.emissiveIntensity=a.emissiveIntensity);
-void 0!==a.specularMap&&(d.specularMap=b(a.specularMap));void 0!==a.envMap&&(d.envMap=b(a.envMap));void 0!==a.envMapIntensity&&(d.envMapIntensity=a.envMapIntensity);void 0!==a.reflectivity&&(d.reflectivity=a.reflectivity);void 0!==a.refractionRatio&&(d.refractionRatio=a.refractionRatio);void 0!==a.lightMap&&(d.lightMap=b(a.lightMap));void 0!==a.lightMapIntensity&&(d.lightMapIntensity=a.lightMapIntensity);void 0!==a.aoMap&&(d.aoMap=b(a.aoMap));void 0!==a.aoMapIntensity&&(d.aoMapIntensity=a.aoMapIntensity);
-void 0!==a.gradientMap&&(d.gradientMap=b(a.gradientMap));void 0!==a.clearcoatMap&&(d.clearcoatMap=b(a.clearcoatMap));void 0!==a.clearcoatRoughnessMap&&(d.clearcoatRoughnessMap=b(a.clearcoatRoughnessMap));void 0!==a.clearcoatNormalMap&&(d.clearcoatNormalMap=b(a.clearcoatNormalMap));void 0!==a.clearcoatNormalScale&&(d.clearcoatNormalScale=(new u).fromArray(a.clearcoatNormalScale));void 0!==a.transmission&&(d.transmission=a.transmission);void 0!==a.transmissionMap&&(d.transmissionMap=b(a.transmissionMap));
-return d},setTextures:function(a){this.textures=a;return this}});var oh={decodeText:function(a){if("undefined"!==typeof TextDecoder)return(new TextDecoder).decode(a);for(var b="",c=0,d=a.length;c<d;c++)b+=String.fromCharCode(a[c]);try{return decodeURIComponent(escape(b))}catch(e){return b}},extractUrlBase:function(a){var b=a.lastIndexOf("/");return-1===b?"./":a.substr(0,b+1)}};pe.prototype=Object.assign(Object.create(E.prototype),{constructor:pe,isInstancedBufferGeometry:!0,copy:function(a){E.prototype.copy.call(this,
-a);this.instanceCount=a.instanceCount;return this},clone:function(){return(new this.constructor).copy(this)},toJSON:function(){var a=E.prototype.toJSON.call(this);a.instanceCount=this.instanceCount;a.isInstancedBufferGeometry=!0;return a}});rf.prototype=Object.assign(Object.create(J.prototype),{constructor:rf,isInstancedBufferAttribute:!0,copy:function(a){J.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;return this},toJSON:function(){var a=J.prototype.toJSON.call(this);a.meshPerAttribute=
-this.meshPerAttribute;a.isInstancedBufferAttribute=!0;return a}});sf.prototype=Object.assign(Object.create(X.prototype),{constructor:sf,load:function(a,b,c,d){var e=this,f=new Qa(e.manager);f.setPath(e.path);f.setRequestHeader(e.requestHeader);f.load(a,function(c){try{b(e.parse(JSON.parse(c)))}catch(h){d?d(h):console.error(h),e.manager.itemError(a)}},c,d)},parse:function(a){function b(a,b){if(void 0!==c[b])return c[b];var e=a.interleavedBuffers[b];var f=e.buffer;void 0!==d[f]?f=d[f]:(a=(new Uint32Array(a.arrayBuffers[f])).buffer,
-f=d[f]=a);f=new Uf[e.type](f);f=new Ba(f,e.stride);f.uuid=e.uuid;return c[b]=f}var c={},d={},e=a.isInstancedBufferGeometry?new pe:new E,f=a.data.index;void 0!==f&&(f=new Uf[f.type](f.array),e.setIndex(new J(f,1)));f=a.data.attributes;for(var g in f){var h=f[g],k=void 0;h.isInterleavedBufferAttribute?(k=b(a.data,h.data),k=new Hb(k,h.itemSize,h.offset,h.normalized)):(k=new Uf[h.type](h.array),k=new (h.isInstancedBufferAttribute?rf:J)(k,h.itemSize,h.normalized));void 0!==h.name&&(k.name=h.name);e.setAttribute(g,
-k)}if(g=a.data.morphAttributes)for(var n in g){f=g[n];h=[];k=0;for(var q=f.length;k<q;k++){var p=f[k],z=void 0;p.isInterleavedBufferAttribute?(z=b(a.data,p.data),z=new Hb(z,p.itemSize,p.offset,p.normalized)):(z=new Uf[p.type](p.array),z=new J(z,p.itemSize,p.normalized));void 0!==p.name&&(z.name=p.name);h.push(z)}e.morphAttributes[n]=h}a.data.morphTargetsRelative&&(e.morphTargetsRelative=!0);n=a.data.groups||a.data.drawcalls||a.data.offsets;if(void 0!==n)for(g=0,f=n.length;g!==f;++g)h=n[g],e.addGroup(h.start,
-h.count,h.materialIndex);n=a.data.boundingSphere;void 0!==n&&(g=new m,void 0!==n.center&&g.fromArray(n.center),e.boundingSphere=new cb(g,n.radius));a.name&&(e.name=a.name);a.userData&&(e.userData=a.userData);return e}});var Uf={Int8Array:Int8Array,Uint8Array:Uint8Array,Uint8ClampedArray:"undefined"!==typeof Uint8ClampedArray?Uint8ClampedArray:Uint8Array,Int16Array:Int16Array,Uint16Array:Uint16Array,Int32Array:Int32Array,Uint32Array:Uint32Array,Float32Array:Float32Array,Float64Array:Float64Array};
-tf.prototype=Object.assign(Object.create(X.prototype),{constructor:tf,load:function(a,b,c,d){var e=this,f=""===this.path?oh.extractUrlBase(a):this.path;this.resourcePath=this.resourcePath||f;f=new Qa(e.manager);f.setPath(this.path);f.setRequestHeader(this.requestHeader);f.load(a,function(c){var f=null;try{f=JSON.parse(c)}catch(l){void 0!==d&&d(l);console.error("THREE:ObjectLoader: Can't parse "+a+".",l.message);return}c=f.metadata;void 0===c||void 0===c.type||"geometry"===c.type.toLowerCase()?console.error("THREE.ObjectLoader: Can't load "+
-a):e.parse(f,b)},c,d)},parse:function(a,b){var c=this.parseShape(a.shapes);c=this.parseGeometries(a.geometries,c);var d=this.parseImages(a.images,function(){void 0!==b&&b(e)});d=this.parseTextures(a.textures,d);d=this.parseMaterials(a.materials,d);var e=this.parseObject(a.object,c,d);a.animations&&(e.animations=this.parseAnimations(a.animations));void 0!==a.images&&0!==a.images.length||void 0===b||b(e);return e},parseShape:function(a){var b={};if(void 0!==a)for(var c=0,d=a.length;c<d;c++){var e=(new Mb).fromJSON(a[c]);
-b[e.uuid]=e}return b},parseGeometries:function(a,b){var c={};if(void 0!==a)for(var d=new sf,e=0,f=a.length;e<f;e++){var g=void 0;var h=a[e];switch(h.type){case "PlaneGeometry":case "PlaneBufferGeometry":g=new Da[h.type](h.width,h.height,h.widthSegments,h.heightSegments);break;case "BoxGeometry":case "BoxBufferGeometry":case "CubeGeometry":g=new Da[h.type](h.width,h.height,h.depth,h.widthSegments,h.heightSegments,h.depthSegments);break;case "CircleGeometry":case "CircleBufferGeometry":g=new Da[h.type](h.radius,
-h.segments,h.thetaStart,h.thetaLength);break;case "CylinderGeometry":case "CylinderBufferGeometry":g=new Da[h.type](h.radiusTop,h.radiusBottom,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case "ConeGeometry":case "ConeBufferGeometry":g=new Da[h.type](h.radius,h.height,h.radialSegments,h.heightSegments,h.openEnded,h.thetaStart,h.thetaLength);break;case "SphereGeometry":case "SphereBufferGeometry":g=new Da[h.type](h.radius,h.widthSegments,h.heightSegments,
-h.phiStart,h.phiLength,h.thetaStart,h.thetaLength);break;case "DodecahedronGeometry":case "DodecahedronBufferGeometry":case "IcosahedronGeometry":case "IcosahedronBufferGeometry":case "OctahedronGeometry":case "OctahedronBufferGeometry":case "TetrahedronGeometry":case "TetrahedronBufferGeometry":g=new Da[h.type](h.radius,h.detail);break;case "RingGeometry":case "RingBufferGeometry":g=new Da[h.type](h.innerRadius,h.outerRadius,h.thetaSegments,h.phiSegments,h.thetaStart,h.thetaLength);break;case "TorusGeometry":case "TorusBufferGeometry":g=
-new Da[h.type](h.radius,h.tube,h.radialSegments,h.tubularSegments,h.arc);break;case "TorusKnotGeometry":case "TorusKnotBufferGeometry":g=new Da[h.type](h.radius,h.tube,h.tubularSegments,h.radialSegments,h.p,h.q);break;case "TubeGeometry":case "TubeBufferGeometry":g=new Da[h.type]((new nh[h.path.type]).fromJSON(h.path),h.tubularSegments,h.radius,h.radialSegments,h.closed);break;case "LatheGeometry":case "LatheBufferGeometry":g=new Da[h.type](h.points,h.segments,h.phiStart,h.phiLength);break;case "PolyhedronGeometry":case "PolyhedronBufferGeometry":g=
-new Da[h.type](h.vertices,h.indices,h.radius,h.details);break;case "ShapeGeometry":case "ShapeBufferGeometry":g=[];for(var k=0,n=h.shapes.length;k<n;k++)g.push(b[h.shapes[k]]);g=new Da[h.type](g,h.curveSegments);break;case "ExtrudeGeometry":case "ExtrudeBufferGeometry":g=[];k=0;for(n=h.shapes.length;k<n;k++)g.push(b[h.shapes[k]]);k=h.options.extrudePath;void 0!==k&&(h.options.extrudePath=(new nh[k.type]).fromJSON(k));g=new Da[h.type](g,h.options);break;case "BufferGeometry":case "InstancedBufferGeometry":g=
-d.parse(h);break;case "Geometry":console.error('THREE.ObjectLoader: Loading "Geometry" is not supported anymore.');break;default:console.warn('THREE.ObjectLoader: Unsupported geometry type "'+h.type+'"');continue}g.uuid=h.uuid;void 0!==h.name&&(g.name=h.name);!0===g.isBufferGeometry&&void 0!==h.userData&&(g.userData=h.userData);c[h.uuid]=g}return c},parseMaterials:function(a,b){var c={},d={};if(void 0!==a){var e=new qf;e.setTextures(b);b=0;for(var f=a.length;b<f;b++){var g=a[b];if("MultiMaterial"===
-g.type){for(var h=[],k=0;k<g.materials.length;k++){var n=g.materials[k];void 0===c[n.uuid]&&(c[n.uuid]=e.parse(n));h.push(c[n.uuid])}d[g.uuid]=h}else void 0===c[g.uuid]&&(c[g.uuid]=e.parse(g)),d[g.uuid]=c[g.uuid]}}return d},parseAnimations:function(a){for(var b=[],c=0;c<a.length;c++){var d=a[c],e=Pa.parse(d);void 0!==d.uuid&&(e.uuid=d.uuid);b.push(e)}return b},parseImages:function(a,b){function c(a){d.manager.itemStart(a);return f.load(a,function(){d.manager.itemEnd(a)},void 0,function(){d.manager.itemError(a);
-d.manager.itemEnd(a)})}var d=this,e={};if(void 0!==a&&0<a.length){b=new vg(b);var f=new fd(b);f.setCrossOrigin(this.crossOrigin);b=0;for(var g=a.length;b<g;b++){var h=a[b],k=h.url;if(Array.isArray(k)){e[h.uuid]=[];for(var n=0,m=k.length;n<m;n++){var p=k[n];p=/^(//)|([a-z]+:(//)?)/i.test(p)?p:d.resourcePath+p;e[h.uuid].push(c(p))}}else k=/^(//)|([a-z]+:(//)?)/i.test(h.url)?h.url:d.resourcePath+h.url,e[h.uuid]=c(k)}}return e},parseTextures:function(a,b){function c(a,b){if("number"===typeof a)return a;
-console.warn("THREE.ObjectLoader.parseTexture: Constant should be in numeric form.",a);return b[a]}var d={};if(void 0!==a)for(var e=0,f=a.length;e<f;e++){var g=a[e];void 0===g.image&&console.warn('THREE.ObjectLoader: No "image" specified for',g.uuid);void 0===b[g.image]&&console.warn("THREE.ObjectLoader: Undefined image",g.image);var h=void 0;h=Array.isArray(b[g.image])?new ob(b[g.image]):new V(b[g.image]);h.needsUpdate=!0;h.uuid=g.uuid;void 0!==g.name&&(h.name=g.name);void 0!==g.mapping&&(h.mapping=
-c(g.mapping,Wk));void 0!==g.offset&&h.offset.fromArray(g.offset);void 0!==g.repeat&&h.repeat.fromArray(g.repeat);void 0!==g.center&&h.center.fromArray(g.center);void 0!==g.rotation&&(h.rotation=g.rotation);void 0!==g.wrap&&(h.wrapS=c(g.wrap[0],Ni),h.wrapT=c(g.wrap[1],Ni));void 0!==g.format&&(h.format=g.format);void 0!==g.type&&(h.type=g.type);void 0!==g.encoding&&(h.encoding=g.encoding);void 0!==g.minFilter&&(h.minFilter=c(g.minFilter,Oi));void 0!==g.magFilter&&(h.magFilter=c(g.magFilter,Oi));void 0!==
-g.anisotropy&&(h.anisotropy=g.anisotropy);void 0!==g.flipY&&(h.flipY=g.flipY);void 0!==g.premultiplyAlpha&&(h.premultiplyAlpha=g.premultiplyAlpha);void 0!==g.unpackAlignment&&(h.unpackAlignment=g.unpackAlignment);d[g.uuid]=h}return d},parseObject:function(a,b,c){function d(a){void 0===b[a]&&console.warn("THREE.ObjectLoader: Undefined geometry",a);return b[a]}function e(a){if(void 0!==a){if(Array.isArray(a)){for(var b=[],d=0,e=a.length;d<e;d++){var f=a[d];void 0===c[f]&&console.warn("THREE.ObjectLoader: Undefined material",
-f);b.push(c[f])}return b}void 0===c[a]&&console.warn("THREE.ObjectLoader: Undefined material",a);return c[a]}}switch(a.type){case "Scene":var f=new Ad;void 0!==a.background&&Number.isInteger(a.background)&&(f.background=new H(a.background));void 0!==a.fog&&("Fog"===a.fog.type?f.fog=new Pe(a.fog.color,a.fog.near,a.fog.far):"FogExp2"===a.fog.type&&(f.fog=new Oe(a.fog.color,a.fog.density)));break;case "PerspectiveCamera":f=new W(a.fov,a.aspect,a.near,a.far);void 0!==a.focus&&(f.focus=a.focus);void 0!==
-a.zoom&&(f.zoom=a.zoom);void 0!==a.filmGauge&&(f.filmGauge=a.filmGauge);void 0!==a.filmOffset&&(f.filmOffset=a.filmOffset);void 0!==a.view&&(f.view=Object.assign({},a.view));break;case "OrthographicCamera":f=new hd(a.left,a.right,a.top,a.bottom,a.near,a.far);void 0!==a.zoom&&(f.zoom=a.zoom);void 0!==a.view&&(f.view=Object.assign({},a.view));break;case "AmbientLight":f=new nf(a.color,a.intensity);break;case "DirectionalLight":f=new mf(a.color,a.intensity);break;case "PointLight":f=new kf(a.color,a.intensity,
-a.distance,a.decay);break;case "RectAreaLight":f=new of(a.color,a.intensity,a.width,a.height);break;case "SpotLight":f=new jf(a.color,a.intensity,a.distance,a.angle,a.penumbra,a.decay);break;case "HemisphereLight":f=new gf(a.color,a.groundColor,a.intensity);break;case "LightProbe":f=(new Ra).fromJSON(a);break;case "SkinnedMesh":console.warn("THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.");case "Mesh":f=d(a.geometry);var g=e(a.material);f=new T(f,g);break;case "InstancedMesh":f=
-d(a.geometry);g=e(a.material);var h=a.instanceMatrix;f=new Te(f,g,a.count);f.instanceMatrix=new J(new Float32Array(h.array),16);break;case "LOD":f=new Qd;break;case "Line":f=new Ja(d(a.geometry),e(a.material),a.mode);break;case "LineLoop":f=new Ue(d(a.geometry),e(a.material));break;case "LineSegments":f=new ea(d(a.geometry),e(a.material));break;case "PointCloud":case "Points":f=new Pc(d(a.geometry),e(a.material));break;case "Sprite":f=new Od(e(a.material));break;case "Group":f=new Gb;break;default:f=
-new C}f.uuid=a.uuid;void 0!==a.name&&(f.name=a.name);void 0!==a.matrix?(f.matrix.fromArray(a.matrix),void 0!==a.matrixAutoUpdate&&(f.matrixAutoUpdate=a.matrixAutoUpdate),f.matrixAutoUpdate&&f.matrix.decompose(f.position,f.quaternion,f.scale)):(void 0!==a.position&&f.position.fromArray(a.position),void 0!==a.rotation&&f.rotation.fromArray(a.rotation),void 0!==a.quaternion&&f.quaternion.fromArray(a.quaternion),void 0!==a.scale&&f.scale.fromArray(a.scale));void 0!==a.castShadow&&(f.castShadow=a.castShadow);
-void 0!==a.receiveShadow&&(f.receiveShadow=a.receiveShadow);a.shadow&&(void 0!==a.shadow.bias&&(f.shadow.bias=a.shadow.bias),void 0!==a.shadow.normalBias&&(f.shadow.normalBias=a.shadow.normalBias),void 0!==a.shadow.radius&&(f.shadow.radius=a.shadow.radius),void 0!==a.shadow.mapSize&&f.shadow.mapSize.fromArray(a.shadow.mapSize),void 0!==a.shadow.camera&&(f.shadow.camera=this.parseObject(a.shadow.camera)));void 0!==a.visible&&(f.visible=a.visible);void 0!==a.frustumCulled&&(f.frustumCulled=a.frustumCulled);
-void 0!==a.renderOrder&&(f.renderOrder=a.renderOrder);void 0!==a.userData&&(f.userData=a.userData);void 0!==a.layers&&(f.layers.mask=a.layers);if(void 0!==a.children)for(h=a.children,g=0;g<h.length;g++)f.add(this.parseObject(h[g],b,c));if("LOD"===a.type)for(void 0!==a.autoUpdate&&(f.autoUpdate=a.autoUpdate),a=a.levels,h=0;h<a.length;h++){g=a[h];var k=f.getObjectByProperty("uuid",g.object);void 0!==k&&f.addLevel(k,g.distance)}return f}});var Wk={UVMapping:300,CubeReflectionMapping:301,CubeRefractionMapping:302,
-EquirectangularReflectionMapping:303,EquirectangularRefractionMapping:304,CubeUVReflectionMapping:306,CubeUVRefractionMapping:307},Ni={RepeatWrapping:1E3,ClampToEdgeWrapping:1001,MirroredRepeatWrapping:1002},Oi={NearestFilter:1003,NearestMipmapNearestFilter:1004,NearestMipmapLinearFilter:1005,LinearFilter:1006,LinearMipmapNearestFilter:1007,LinearMipmapLinearFilter:1008};Ag.prototype=Object.assign(Object.create(X.prototype),{constructor:Ag,isImageBitmapLoader:!0,setOptions:function(a){this.options=
-a;return this},load:function(a,b,c,d){void 0===a&&(a="");void 0!==this.path&&(a=this.path+a);a=this.manager.resolveURL(a);var e=this,f=vc.get(a);if(void 0!==f)return e.manager.itemStart(a),setTimeout(function(){b&&b(f);e.manager.itemEnd(a)},0),f;fetch(a).then(function(a){return a.blob()}).then(function(a){return createImageBitmap(a,e.options)}).then(function(c){vc.add(a,c);b&&b(c);e.manager.itemEnd(a)}).catch(function(b){d&&d(b);e.manager.itemError(a);e.manager.itemEnd(a)});e.manager.itemStart(a)}});
-Object.assign(Bg.prototype,{moveTo:function(a,b){this.currentPath=new $a;this.subPaths.push(this.currentPath);this.currentPath.moveTo(a,b);return this},lineTo:function(a,b){this.currentPath.lineTo(a,b);return this},quadraticCurveTo:function(a,b,c,d){this.currentPath.quadraticCurveTo(a,b,c,d);return this},bezierCurveTo:function(a,b,c,d,e,f){this.currentPath.bezierCurveTo(a,b,c,d,e,f);return this},splineThru:function(a){this.currentPath.splineThru(a);return this},toShapes:function(a,b){function c(a){for(var b=
-[],c=0,d=a.length;c<d;c++){var e=a[c],f=new Mb;f.curves=e.curves;b.push(f)}return b}function d(a,b){for(var c=b.length,d=!1,e=c-1,f=0;f<c;e=f++){var g=b[e],h=b[f],k=h.x-g.x,l=h.y-g.y;if(Math.abs(l)>Number.EPSILON){if(0>l&&(g=b[f],k=-k,h=b[e],l=-l),!(a.y<g.y||a.y>h.y))if(a.y===g.y){if(a.x===g.x)return!0}else{e=l*(a.x-g.x)-k*(a.y-g.y);if(0===e)return!0;0>e||(d=!d)}}else if(a.y===g.y&&(h.x<=a.x&&a.x<=g.x||g.x<=a.x&&a.x<=h.x))return!0}return d}var e=pb.isClockWise,f=this.subPaths;if(0===f.length)return[];
-if(!0===b)return c(f);b=[];if(1===f.length){var g=f[0];var h=new Mb;h.curves=g.curves;b.push(h);return b}var k=!e(f[0].getPoints());k=a?!k:k;h=[];var n=[],m=[],p=0;n[p]=void 0;m[p]=[];for(var u=0,r=f.length;u<r;u++){g=f[u];var t=g.getPoints();var v=e(t);(v=a?!v:v)?(!k&&n[p]&&p++,n[p]={s:new Mb,p:t},n[p].s.curves=g.curves,k&&p++,m[p]=[]):m[p].push({h:g,p:t[0]})}if(!n[0])return c(f);if(1<n.length){a=!1;e=[];f=0;for(g=n.length;f<g;f++)h[f]=[];f=0;for(g=n.length;f<g;f++)for(v=m[f],k=0;k<v.length;k++){p=
-v[k];t=!0;for(u=0;u<n.length;u++)d(p.p,n[u].p)&&(f!==u&&e.push({froms:f,tos:u,hole:k}),t?(t=!1,h[u].push(p)):a=!0);t&&h[f].push(p)}0<e.length&&(a||(m=h))}e=0;for(f=n.length;e<f;e++)for(h=n[e].s,b.push(h),a=m[e],g=0,v=a.length;g<v;g++)h.holes.push(a[g].h);return b}});Object.assign(Cg.prototype,{isFont:!0,generateShapes:function(a,b){void 0===b&&(b=100);var c=[],d=b;b=this.data;var e=Array.from?Array.from(a):String(a).split("");d/=b.resolution;var f=(b.boundingBox.yMax-b.boundingBox.yMin+b.underlineThickness)*
-d;a=[];for(var g=0,h=0,k=0;k<e.length;k++){var n=e[k];if("n"===n)g=0,h-=f;else{var m=n;n=d;var p=g,u=h,r=b,t=r.glyphs[m]||r.glyphs["?"];if(t){m=new Bg;if(t.o){r=t._cachedOutline||(t._cachedOutline=t.o.split(" "));for(var v=0,x=r.length;v<x;)switch(r[v++]){case "m":var B=r[v++]*n+p;var w=r[v++]*n+u;m.moveTo(B,w);break;case "l":B=r[v++]*n+p;w=r[v++]*n+u;m.lineTo(B,w);break;case "q":var A=r[v++]*n+p;var C=r[v++]*n+u;var E=r[v++]*n+p;var y=r[v++]*n+u;m.quadraticCurveTo(E,y,A,C);break;case "b":A=r[v++]*
-n+p,C=r[v++]*n+u,E=r[v++]*n+p,y=r[v++]*n+u,B=r[v++]*n+p,w=r[v++]*n+u,m.bezierCurveTo(E,y,B,w,A,C)}}n={offsetX:t.ha*n,path:m}}else console.error('THREE.Font: character "'+m+'" does not exists in font family '+r.familyName+"."),n=void 0;g+=n.offsetX;a.push(n.path)}}b=0;for(e=a.length;b<e;b++)Array.prototype.push.apply(c,a[b].toShapes());return c}});Dg.prototype=Object.assign(Object.create(X.prototype),{constructor:Dg,load:function(a,b,c,d){var e=this,f=new Qa(this.manager);f.setPath(this.path);f.setRequestHeader(this.requestHeader);
-f.load(a,function(a){try{var c=JSON.parse(a)}catch(l){console.warn("THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead."),c=JSON.parse(a.substring(65,a.length-2))}a=e.parse(c);b&&b(a)},c,d)},parse:function(a){return new Cg(a)}});var Vf,Ig={getContext:function(){void 0===Vf&&(Vf=new (window.AudioContext||window.webkitAudioContext));return Vf},setContext:function(a){Vf=a}};uf.prototype=Object.assign(Object.create(X.prototype),{constructor:uf,load:function(a,b,c,d){var e=
-this,f=new Qa(e.manager);f.setResponseType("arraybuffer");f.setPath(e.path);f.setRequestHeader(e.requestHeader);f.load(a,function(c){try{var f=c.slice(0);Ig.getContext().decodeAudioData(f,function(a){b(a)})}catch(l){d?d(l):console.error(l),e.manager.itemError(a)}},c,d)}});Eg.prototype=Object.assign(Object.create(Ra.prototype),{constructor:Eg,isHemisphereLightProbe:!0,copy:function(a){Ra.prototype.copy.call(this,a);return this},toJSON:function(a){return Ra.prototype.toJSON.call(this,a)}});Fg.prototype=
-Object.assign(Object.create(Ra.prototype),{constructor:Fg,isAmbientLightProbe:!0,copy:function(a){Ra.prototype.copy.call(this,a);return this},toJSON:function(a){return Ra.prototype.toJSON.call(this,a)}});var Pi=new U,Qi=new U;Object.assign(hi.prototype,{update:function(a){var b=this._cache;if(b.focus!==a.focus||b.fov!==a.fov||b.aspect!==a.aspect*this.aspect||b.near!==a.near||b.far!==a.far||b.zoom!==a.zoom||b.eyeSep!==this.eyeSep){b.focus=a.focus;b.fov=a.fov;b.aspect=a.aspect*this.aspect;b.near=a.near;
-b.far=a.far;b.zoom=a.zoom;b.eyeSep=this.eyeSep;var c=a.projectionMatrix.clone(),d=b.eyeSep/2,e=d*b.near/b.focus,f=b.near*Math.tan(P.DEG2RAD*b.fov*.5)/b.zoom;Qi.elements[12]=-d;Pi.elements[12]=d;d=-f*b.aspect+e;var g=f*b.aspect+e;c.elements[0]=2*b.near/(g-d);c.elements[8]=(g+d)/(g-d);this.cameraL.projectionMatrix.copy(c);d=-f*b.aspect-e;g=f*b.aspect-e;c.elements[0]=2*b.near/(g-d);c.elements[8]=(g+d)/(g-d);this.cameraR.projectionMatrix.copy(c)}this.cameraL.matrixWorld.copy(a.matrixWorld).multiply(Qi);
-this.cameraR.matrixWorld.copy(a.matrixWorld).multiply(Pi)}});Object.assign(Gg.prototype,{start:function(){this.oldTime=this.startTime=("undefined"===typeof performance?Date:performance).now();this.elapsedTime=0;this.running=!0},stop:function(){this.getElapsedTime();this.autoStart=this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;if(this.autoStart&&!this.running)return this.start(),0;if(this.running){var b=("undefined"===typeof performance?
-Date:performance).now();a=(b-this.oldTime)/1E3;this.oldTime=b;this.elapsedTime+=a}return a}});var wc=new m,Ri=new Y,Xk=new m,xc=new m;Hg.prototype=Object.assign(Object.create(C.prototype),{constructor:Hg,getInput:function(){return this.gain},removeFilter:function(){null!==this.filter&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null);return this},getFilter:function(){return this.filter},setFilter:function(a){null!==
-this.filter?(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)):this.gain.disconnect(this.context.destination);this.filter=a;this.gain.connect(this.filter);this.filter.connect(this.context.destination);return this},getMasterVolume:function(){return this.gain.gain.value},setMasterVolume:function(a){this.gain.gain.setTargetAtTime(a,this.context.currentTime,.01);return this},updateMatrixWorld:function(a){C.prototype.updateMatrixWorld.call(this,a);a=this.context.listener;
-var b=this.up;this.timeDelta=this._clock.getDelta();this.matrixWorld.decompose(wc,Ri,Xk);xc.set(0,0,-1).applyQuaternion(Ri);if(a.positionX){var c=this.context.currentTime+this.timeDelta;a.positionX.linearRampToValueAtTime(wc.x,c);a.positionY.linearRampToValueAtTime(wc.y,c);a.positionZ.linearRampToValueAtTime(wc.z,c);a.forwardX.linearRampToValueAtTime(xc.x,c);a.forwardY.linearRampToValueAtTime(xc.y,c);a.forwardZ.linearRampToValueAtTime(xc.z,c);a.upX.linearRampToValueAtTime(b.x,c);a.upY.linearRampToValueAtTime(b.y,
-c);a.upZ.linearRampToValueAtTime(b.z,c)}else a.setPosition(wc.x,wc.y,wc.z),a.setOrientation(xc.x,xc.y,xc.z,b.x,b.y,b.z)}});id.prototype=Object.assign(Object.create(C.prototype),{constructor:id,getOutput:function(){return this.gain},setNodeSource:function(a){this.hasPlaybackControl=!1;this.sourceType="audioNode";this.source=a;this.connect();return this},setMediaElementSource:function(a){this.hasPlaybackControl=!1;this.sourceType="mediaNode";this.source=this.context.createMediaElementSource(a);this.connect();
-return this},setMediaStreamSource:function(a){this.hasPlaybackControl=!1;this.sourceType="mediaStreamNode";this.source=this.context.createMediaStreamSource(a);this.connect();return this},setBuffer:function(a){this.buffer=a;this.sourceType="buffer";this.autoplay&&this.play();return this},play:function(a){void 0===a&&(a=0);if(!0===this.isPlaying)console.warn("THREE.Audio: Audio is already playing.");else if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");
-else return this._startedAt=this.context.currentTime+a,a=this.context.createBufferSource(),a.buffer=this.buffer,a.loop=this.loop,a.loopStart=this.loopStart,a.loopEnd=this.loopEnd,a.onended=this.onEnded.bind(this),a.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=a,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()},pause:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");
-else return!0===this.isPlaying&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,!0===this.loop&&(this._progress%=this.duration||this.buffer.duration),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this},stop:function(){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this._progress=0,this.source.stop(),this.source.onended=null,this.isPlaying=!1,this},connect:function(){if(0<this.filters.length){this.source.connect(this.filters[0]);
-for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-1].connect(this.filters[a]);this.filters[this.filters.length-1].connect(this.getOutput())}else this.source.connect(this.getOutput());return this},disconnect:function(){if(0<this.filters.length){this.source.disconnect(this.filters[0]);for(var a=1,b=this.filters.length;a<b;a++)this.filters[a-1].disconnect(this.filters[a]);this.filters[this.filters.length-1].disconnect(this.getOutput())}else this.source.disconnect(this.getOutput());return this},
-getFilters:function(){return this.filters},setFilters:function(a){a||(a=[]);!0===this.isPlaying?(this.disconnect(),this.filters=a,this.connect()):this.filters=a;return this},setDetune:function(a){this.detune=a;if(void 0!==this.source.detune)return!0===this.isPlaying&&this.source.detune.setTargetAtTime(this.detune,this.context.currentTime,.01),this},getDetune:function(){return this.detune},getFilter:function(){return this.getFilters()[0]},setFilter:function(a){return this.setFilters(a?[a]:[])},setPlaybackRate:function(a){if(!1===
-this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");else return this.playbackRate=a,!0===this.isPlaying&&this.source.playbackRate.setTargetAtTime(this.playbackRate,this.context.currentTime,.01),this},getPlaybackRate:function(){return this.playbackRate},onEnded:function(){this.isPlaying=!1},getLoop:function(){return!1===this.hasPlaybackControl?(console.warn("THREE.Audio: this Audio has no playback control."),!1):this.loop},setLoop:function(a){if(!1===this.hasPlaybackControl)console.warn("THREE.Audio: this Audio has no playback control.");
-else return this.loop=a,!0===this.isPlaying&&(this.source.loop=this.loop),this},setLoopStart:function(a){this.loopStart=a;return this},setLoopEnd:function(a){this.loopEnd=a;return this},getVolume:function(){return this.gain.gain.value},setVolume:function(a){this.gain.gain.setTargetAtTime(a,this.context.currentTime,.01);return this}});var yc=new m,Si=new Y,Yk=new m,zc=new m;Jg.prototype=Object.assign(Object.create(id.prototype),{constructor:Jg,getOutput:function(){return this.panner},getRefDistance:function(){return this.panner.refDistance},
-setRefDistance:function(a){this.panner.refDistance=a;return this},getRolloffFactor:function(){return this.panner.rolloffFactor},setRolloffFactor:function(a){this.panner.rolloffFactor=a;return this},getDistanceModel:function(){return this.panner.distanceModel},setDistanceModel:function(a){this.panner.distanceModel=a;return this},getMaxDistance:function(){return this.panner.maxDistance},setMaxDistance:function(a){this.panner.maxDistance=a;return this},setDirectionalCone:function(a,b,c){this.panner.coneInnerAngle=
-a;this.panner.coneOuterAngle=b;this.panner.coneOuterGain=c;return this},updateMatrixWorld:function(a){C.prototype.updateMatrixWorld.call(this,a);if(!0!==this.hasPlaybackControl||!1!==this.isPlaying)if(this.matrixWorld.decompose(yc,Si,Yk),zc.set(0,0,1).applyQuaternion(Si),a=this.panner,a.positionX){var b=this.context.currentTime+this.listener.timeDelta;a.positionX.linearRampToValueAtTime(yc.x,b);a.positionY.linearRampToValueAtTime(yc.y,b);a.positionZ.linearRampToValueAtTime(yc.z,b);a.orientationX.linearRampToValueAtTime(zc.x,
-b);a.orientationY.linearRampToValueAtTime(zc.y,b);a.orientationZ.linearRampToValueAtTime(zc.z,b)}else a.setPosition(yc.x,yc.y,yc.z),a.setOrientation(zc.x,zc.y,zc.z)}});Object.assign(Kg.prototype,{getFrequencyData:function(){this.analyser.getByteFrequencyData(this.data);return this.data},getAverageFrequency:function(){for(var a=0,b=this.getFrequencyData(),c=0;c<b.length;c++)a+=b[c];return a/b.length}});Object.assign(Lg.prototype,{accumulate:function(a,b){var c=this.buffer,d=this.valueSize;a=a*d+d;
-var e=this.cumulativeWeight;if(0===e){for(e=0;e!==d;++e)c[a+e]=c[e];e=b}else e+=b,this._mixBufferRegion(c,a,0,b/e,d);this.cumulativeWeight=e},accumulateAdditive:function(a){var b=this.buffer,c=this.valueSize,d=c*this._addIndex;0===this.cumulativeWeightAdditive&&this._setIdentity();this._mixBufferRegionAdditive(b,d,0,a,c);this.cumulativeWeightAdditive+=a},apply:function(a){var b=this.valueSize,c=this.buffer;a=a*b+b;var d=this.cumulativeWeight,e=this.cumulativeWeightAdditive,f=this.binding;this.cumulativeWeightAdditive=
-this.cumulativeWeight=0;1>d&&this._mixBufferRegion(c,a,b*this._origIndex,1-d,b);0<e&&this._mixBufferRegionAdditive(c,a,this._addIndex*b,1,b);d=b;for(e=b+b;d!==e;++d)if(c[d]!==c[d+b]){f.setValue(c,a);break}},saveOriginalState:function(){var a=this.buffer,b=this.valueSize,c=b*this._origIndex;this.binding.getValue(a,c);for(var d=b;d!==c;++d)a[d]=a[c+d%b];this._setIdentity();this.cumulativeWeightAdditive=this.cumulativeWeight=0},restoreOriginalState:function(){this.binding.setValue(this.buffer,3*this.valueSize)},
-_setAdditiveIdentityNumeric:function(){for(var a=this._addIndex*this.valueSize,b=a+this.valueSize;a<b;a++)this.buffer[a]=0},_setAdditiveIdentityQuaternion:function(){this._setAdditiveIdentityNumeric();this.buffer[4*this._addIndex+3]=1},_setAdditiveIdentityOther:function(){for(var a=this._origIndex*this.valueSize,b=this._addIndex*this.valueSize,c=0;c<this.valueSize;c++)this.buffer[b+c]=this.buffer[a+c]},_select:function(a,b,c,d,e){if(.5<=d)for(d=0;d!==e;++d)a[b+d]=a[c+d]},_slerp:function(a,b,c,d){Y.slerpFlat(a,
-b,a,b,a,c,d)},_slerpAdditive:function(a,b,c,d,e){e*=this._workIndex;Y.multiplyQuaternionsFlat(a,e,a,b,a,c);Y.slerpFlat(a,b,a,b,a,e,d)},_lerp:function(a,b,c,d,e){for(var f=1-d,g=0;g!==e;++g){var h=b+g;a[h]=a[h]*f+a[c+g]*d}},_lerpAdditive:function(a,b,c,d,e){for(var f=0;f!==e;++f){var g=b+f;a[g]+=a[c+f]*d}}});var Zk=/[[].:/]/g,$k="[^"+"\[\]\.:\/".replace("\.","")+"]",al=/((?:WC+[/:])*)/.source.replace("WC","[^\[\]\.:\/]"),bl=/(WCOD+)?/.source.replace("WCOD",$k),cl=/(?:.(WC+)(?:[(.+)])?)?/.source.replace("WC",
-"[^\[\]\.:\/]"),dl=/.(WC+)(?:[(.+)])?/.source.replace("WC","[^\[\]\.:\/]"),el=new RegExp("^"+al+bl+cl+dl+"$"),fl=["material","materials","bones"];Object.assign(ii.prototype,{getValue:function(a,b){this.bind();var c=this._bindings[this._targetGroup.nCachedObjects_];void 0!==c&&c.getValue(a,b)},setValue:function(a,b){for(var c=this._bindings,d=this._targetGroup.nCachedObjects_,e=c.length;d!==e;++d)c[d].setValue(a,b)},bind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,
-c=a.length;b!==c;++b)a[b].bind()},unbind:function(){for(var a=this._bindings,b=this._targetGroup.nCachedObjects_,c=a.length;b!==c;++b)a[b].unbind()}});Object.assign(wa,{Composite:ii,create:function(a,b,c){return a&&a.isAnimationObjectGroup?new wa.Composite(a,b,c):new wa(a,b,c)},sanitizeNodeName:function(a){return a.replace(/s/g,"_").replace(Zk,"")},parseTrackName:function(a){var b=el.exec(a);if(!b)throw Error("PropertyBinding: Cannot parse trackName: "+a);b={nodeName:b[2],objectName:b[3],objectIndex:b[4],
-propertyName:b[5],propertyIndex:b[6]};var c=b.nodeName&&b.nodeName.lastIndexOf(".");if(void 0!==c&&-1!==c){var d=b.nodeName.substring(c+1);-1!==fl.indexOf(d)&&(b.nodeName=b.nodeName.substring(0,c),b.objectName=d)}if(null===b.propertyName||0===b.propertyName.length)throw Error("PropertyBinding: can not parse propertyName from trackName: "+a);return b},findNode:function(a,b){if(!b||""===b||"."===b||-1===b||b===a.name||b===a.uuid)return a;if(a.skeleton){var c=a.skeleton.getBoneByName(b);if(void 0!==
-c)return c}if(a.children){var d=function(a){for(var c=0;c<a.length;c++){var e=a[c];if(e.name===b||e.uuid===b||(e=d(e.children)))return e}return null};if(a=d(a.children))return a}return null}});Object.assign(wa.prototype,{_getValue_unavailable:function(){},_setValue_unavailable:function(){},BindingType:{Direct:0,EntireArray:1,ArrayElement:2,HasFromToArray:3},Versioning:{None:0,NeedsUpdate:1,MatrixWorldNeedsUpdate:2},GetterByBindingType:[function(a,b){a[b]=this.node[this.propertyName]},function(a,b){for(var c=
-this.resolvedProperty,d=0,e=c.length;d!==e;++d)a[b++]=c[d]},function(a,b){a[b]=this.resolvedProperty[this.propertyIndex]},function(a,b){this.resolvedProperty.toArray(a,b)}],SetterByBindingTypeAndVersioning:[[function(a,b){this.targetObject[this.propertyName]=a[b]},function(a,b){this.targetObject[this.propertyName]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.targetObject[this.propertyName]=a[b];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){for(var c=this.resolvedProperty,
-d=0,e=c.length;d!==e;++d)c[d]=a[b++]},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.needsUpdate=!0},function(a,b){for(var c=this.resolvedProperty,d=0,e=c.length;d!==e;++d)c[d]=a[b++];this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty[this.propertyIndex]=a[b]},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty[this.propertyIndex]=a[b];
-this.targetObject.matrixWorldNeedsUpdate=!0}],[function(a,b){this.resolvedProperty.fromArray(a,b)},function(a,b){this.resolvedProperty.fromArray(a,b);this.targetObject.needsUpdate=!0},function(a,b){this.resolvedProperty.fromArray(a,b);this.targetObject.matrixWorldNeedsUpdate=!0}]],getValue:function(a,b){this.bind();this.getValue(a,b)},setValue:function(a,b){this.bind();this.setValue(a,b)},bind:function(){var a=this.node,b=this.parsedPath,c=b.objectName,d=b.propertyName,e=b.propertyIndex;a||(this.node=
-a=wa.findNode(this.rootNode,b.nodeName)||this.rootNode);this.getValue=this._getValue_unavailable;this.setValue=this._setValue_unavailable;if(a){if(c){var f=b.objectIndex;switch(c){case "materials":if(!a.material){console.error("THREE.PropertyBinding: Can not bind to material as node does not have a material.",this);return}if(!a.material.materials){console.error("THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.",this);return}a=a.material.materials;
-break;case "bones":if(!a.skeleton){console.error("THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.",this);return}a=a.skeleton.bones;for(c=0;c<a.length;c++)if(a[c].name===f){f=c;break}break;default:if(void 0===a[c]){console.error("THREE.PropertyBinding: Can not bind to objectName of node undefined.",this);return}a=a[c]}if(void 0!==f){if(void 0===a[f]){console.error("THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.",this,a);return}a=
-a[f]}}f=a[d];if(void 0===f)console.error("THREE.PropertyBinding: Trying to update property for track: "+b.nodeName+"."+d+" but it wasn't found.",a);else{b=this.Versioning.None;this.targetObject=a;void 0!==a.needsUpdate?b=this.Versioning.NeedsUpdate:void 0!==a.matrixWorldNeedsUpdate&&(b=this.Versioning.MatrixWorldNeedsUpdate);c=this.BindingType.Direct;if(void 0!==e){if("morphTargetInfluences"===d){if(!a.geometry){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.",
-this);return}if(a.geometry.isBufferGeometry){if(!a.geometry.morphAttributes){console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.",this);return}void 0!==a.morphTargetDictionary[e]&&(e=a.morphTargetDictionary[e])}else{console.error("THREE.PropertyBinding: Can not bind to morphTargetInfluences on THREE.Geometry. Use THREE.BufferGeometry instead.",this);return}}c=this.BindingType.ArrayElement;this.resolvedProperty=f;this.propertyIndex=
-e}else void 0!==f.fromArray&&void 0!==f.toArray?(c=this.BindingType.HasFromToArray,this.resolvedProperty=f):Array.isArray(f)?(c=this.BindingType.EntireArray,this.resolvedProperty=f):this.propertyName=d;this.getValue=this.GetterByBindingType[c];this.setValue=this.SetterByBindingTypeAndVersioning[c][b]}}else console.error("THREE.PropertyBinding: Trying to update node for track: "+this.path+" but it wasn't found.")},unbind:function(){this.node=null;this.getValue=this._getValue_unbound;this.setValue=
-this._setValue_unbound}});Object.assign(wa.prototype,{_getValue_unbound:wa.prototype.getValue,_setValue_unbound:wa.prototype.setValue});Object.assign(ji.prototype,{isAnimationObjectGroup:!0,add:function(){for(var a=this._objects,b=this._indicesByUUID,c=this._paths,d=this._parsedPaths,e=this._bindings,f=e.length,g=void 0,h=a.length,k=this.nCachedObjects_,n=0,m=arguments.length;n!==m;++n){var p=arguments[n],u=p.uuid,r=b[u];if(void 0===r){r=h++;b[u]=r;a.push(p);r=0;for(var t=f;r!==t;++r)e[r].push(new wa(p,
-c[r],d[r]))}else if(r<k){g=a[r];t=--k;var v=a[t];b[v.uuid]=r;a[r]=v;b[u]=t;a[t]=p;u=0;for(v=f;u!==v;++u){var x=e[u],A=x[r];x[r]=x[t];void 0===A&&(A=new wa(p,c[u],d[u]));x[t]=A}}else a[r]!==g&&console.error("THREE.AnimationObjectGroup: Different objects with the same UUID detected. Clean the caches or recreate your infrastructure when reloading scenes.")}this.nCachedObjects_=k},remove:function(){for(var a=this._objects,b=this._indicesByUUID,c=this._bindings,d=c.length,e=this.nCachedObjects_,f=0,g=
-arguments.length;f!==g;++f){var h=arguments[f],k=h.uuid,n=b[k];if(void 0!==n&&n>=e){var m=e++,p=a[m];b[p.uuid]=n;a[n]=p;b[k]=m;a[m]=h;h=0;for(k=d;h!==k;++h){p=c[h];var u=p[n];p[n]=p[m];p[m]=u}}}this.nCachedObjects_=e},uncache:function(){for(var a=this._objects,b=this._indicesByUUID,c=this._bindings,d=c.length,e=this.nCachedObjects_,f=a.length,g=0,h=arguments.length;g!==h;++g){var k=arguments[g].uuid,n=b[k];if(void 0!==n)if(delete b[k],n<e){k=--e;var m=a[k],p=--f,u=a[p];b[m.uuid]=n;a[n]=m;b[u.uuid]=
-k;a[k]=u;a.pop();m=0;for(u=d;m!==u;++m){var r=c[m],t=r[p];r[n]=r[k];r[k]=t;r.pop()}}else for(k=--f,p=a[k],b[p.uuid]=n,a[n]=p,a.pop(),p=0,m=d;p!==m;++p)u=c[p],u[n]=u[k],u.pop()}this.nCachedObjects_=e},subscribe_:function(a,b){var c=this._bindingsIndicesByPath,d=c[a],e=this._bindings;if(void 0!==d)return e[d];var f=this._paths,g=this._parsedPaths,h=this._objects,k=this.nCachedObjects_,n=Array(h.length);d=e.length;c[a]=d;f.push(a);g.push(b);e.push(n);c=k;for(d=h.length;c!==d;++c)n[c]=new wa(h[c],a,b);
-return n},unsubscribe_:function(a){var b=this._bindingsIndicesByPath,c=b[a];if(void 0!==c){var d=this._paths,e=this._parsedPaths,f=this._bindings,g=f.length-1,h=f[g];b[a[g]]=c;f[c]=h;f.pop();e[c]=e[g];e.pop();d[c]=d[g];d.pop()}}});Object.assign(ki.prototype,{play:function(){this._mixer._activateAction(this);return this},stop:function(){this._mixer._deactivateAction(this);return this.reset()},reset:function(){this.paused=!1;this.enabled=!0;this.time=0;this._loopCount=-1;this._startTime=null;return this.stopFading().stopWarping()},
-isRunning:function(){return this.enabled&&!this.paused&&0!==this.timeScale&&null===this._startTime&&this._mixer._isActiveAction(this)},isScheduled:function(){return this._mixer._isActiveAction(this)},startAt:function(a){this._startTime=a;return this},setLoop:function(a,b){this.loop=a;this.repetitions=b;return this},setEffectiveWeight:function(a){this.weight=a;this._effectiveWeight=this.enabled?a:0;return this.stopFading()},getEffectiveWeight:function(){return this._effectiveWeight},fadeIn:function(a){return this._scheduleFading(a,
-0,1)},fadeOut:function(a){return this._scheduleFading(a,1,0)},crossFadeFrom:function(a,b,c){a.fadeOut(b);this.fadeIn(b);if(c){c=this._clip.duration;var d=a._clip.duration,e=c/d;a.warp(1,d/c,b);this.warp(e,1,b)}return this},crossFadeTo:function(a,b,c){return a.crossFadeFrom(this,b,c)},stopFading:function(){var a=this._weightInterpolant;null!==a&&(this._weightInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},setEffectiveTimeScale:function(a){this.timeScale=a;this._effectiveTimeScale=
-this.paused?0:a;return this.stopWarping()},getEffectiveTimeScale:function(){return this._effectiveTimeScale},setDuration:function(a){this.timeScale=this._clip.duration/a;return this.stopWarping()},syncWith:function(a){this.time=a.time;this.timeScale=a.timeScale;return this.stopWarping()},halt:function(a){return this.warp(this._effectiveTimeScale,0,a)},warp:function(a,b,c){var d=this._mixer,e=d.time,f=this.timeScale,g=this._timeScaleInterpolant;null===g&&(this._timeScaleInterpolant=g=d._lendControlInterpolant());
-d=g.parameterPositions;g=g.sampleValues;d[0]=e;d[1]=e+c;g[0]=a/f;g[1]=b/f;return this},stopWarping:function(){var a=this._timeScaleInterpolant;null!==a&&(this._timeScaleInterpolant=null,this._mixer._takeBackControlInterpolant(a));return this},getMixer:function(){return this._mixer},getClip:function(){return this._clip},getRoot:function(){return this._localRoot||this._mixer._root},_update:function(a,b,c,d){if(this.enabled){var e=this._startTime;if(null!==e){b=(a-e)*c;if(0>b||0===c)return;this._startTime=
-null;b*=c}b*=this._updateTimeScale(a);c=this._updateTime(b);a=this._updateWeight(a);if(0<a)switch(b=this._interpolants,e=this._propertyBindings,this.blendMode){case 2501:d=0;for(var f=b.length;d!==f;++d)b[d].evaluate(c),e[d].accumulateAdditive(a);break;default:f=0;for(var g=b.length;f!==g;++f)b[f].evaluate(c),e[f].accumulate(d,a)}}else this._updateWeight(a)},_updateWeight:function(a){var b=0;if(this.enabled){b=this.weight;var c=this._weightInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&
-(this.stopFading(),0===d&&(this.enabled=!1))}}return this._effectiveWeight=b},_updateTimeScale:function(a){var b=0;if(!this.paused){b=this.timeScale;var c=this._timeScaleInterpolant;if(null!==c){var d=c.evaluate(a)[0];b*=d;a>c.parameterPositions[1]&&(this.stopWarping(),0===b?this.paused=!0:this.timeScale=b)}}return this._effectiveTimeScale=b},_updateTime:function(a){var b=this._clip.duration,c=this.loop,d=this.time+a,e=this._loopCount,f=2202===c;if(0===a)return-1===e?d:f&&1===(e&1)?b-d:d;if(2200===
-c)a:{if(-1===e&&(this._loopCount=0,this._setEndings(!0,!0,!1)),d>=b)d=b;else if(0>d)d=0;else{this.time=d;break a}this.clampWhenFinished?this.paused=!0:this.enabled=!1;this.time=d;this._mixer.dispatchEvent({type:"finished",action:this,direction:0>a?-1:1})}else{-1===e&&(0<=a?(e=0,this._setEndings(!0,0===this.repetitions,f)):this._setEndings(0===this.repetitions,!0,f));if(d>=b||0>d){c=Math.floor(d/b);d-=b*c;e+=Math.abs(c);var g=this.repetitions-e;0>=g?(this.clampWhenFinished?this.paused=!0:this.enabled=
-!1,this.time=d=0<a?b:0,this._mixer.dispatchEvent({type:"finished",action:this,direction:0<a?1:-1})):(1===g?(a=0>a,this._setEndings(a,!a,f)):this._setEndings(!1,!1,f),this._loopCount=e,this.time=d,this._mixer.dispatchEvent({type:"loop",action:this,loopDelta:c}))}else this.time=d;if(f&&1===(e&1))return b-d}return d},_setEndings:function(a,b,c){var d=this._interpolantSettings;c?(d.endingStart=2401,d.endingEnd=2401):(d.endingStart=a?this.zeroSlopeAtStart?2401:2400:2402,d.endingEnd=b?this.zeroSlopeAtEnd?
-2401:2400:2402)},_scheduleFading:function(a,b,c){var d=this._mixer,e=d.time,f=this._weightInterpolant;null===f&&(this._weightInterpolant=f=d._lendControlInterpolant());d=f.parameterPositions;f=f.sampleValues;d[0]=e;f[0]=b;d[1]=e+a;f[1]=c;return this}});Mg.prototype=Object.assign(Object.create(Ea.prototype),{constructor:Mg,_bindAction:function(a,b){var c=a._localRoot||this._root,d=a._clip.tracks,e=d.length,f=a._propertyBindings;a=a._interpolants;var g=c.uuid,h=this._bindingsByRootAndName,k=h[g];void 0===
-k&&(k={},h[g]=k);for(h=0;h!==e;++h){var n=d[h],m=n.name,p=k[m];if(void 0===p){p=f[h];if(void 0!==p){null===p._cacheIndex&&(++p.referenceCount,this._addInactiveBinding(p,g,m));continue}p=new Lg(wa.create(c,m,b&&b._propertyBindings[h].binding.parsedPath),n.ValueTypeName,n.getValueSize());++p.referenceCount;this._addInactiveBinding(p,g,m)}f[h]=p;a[h].resultBuffer=p.buffer}},_activateAction:function(a){if(!this._isActiveAction(a)){if(null===a._cacheIndex){var b=(a._localRoot||this._root).uuid,c=a._clip.uuid,
-d=this._actionsByClip[c];this._bindAction(a,d&&d.knownActions[0]);this._addInactiveAction(a,c,b)}b=a._propertyBindings;c=0;for(d=b.length;c!==d;++c){var e=b[c];0===e.useCount++&&(this._lendBinding(e),e.saveOriginalState())}this._lendAction(a)}},_deactivateAction:function(a){if(this._isActiveAction(a)){for(var b=a._propertyBindings,c=0,d=b.length;c!==d;++c){var e=b[c];0===--e.useCount&&(e.restoreOriginalState(),this._takeBackBinding(e))}this._takeBackAction(a)}},_initMemoryManager:function(){this._actions=
-[];this._nActiveActions=0;this._actionsByClip={};this._bindings=[];this._nActiveBindings=0;this._bindingsByRootAndName={};this._controlInterpolants=[];this._nActiveControlInterpolants=0;var a=this;this.stats={actions:{get total(){return a._actions.length},get inUse(){return a._nActiveActions}},bindings:{get total(){return a._bindings.length},get inUse(){return a._nActiveBindings}},controlInterpolants:{get total(){return a._controlInterpolants.length},get inUse(){return a._nActiveControlInterpolants}}}},
-_isActiveAction:function(a){a=a._cacheIndex;return null!==a&&a<this._nActiveActions},_addInactiveAction:function(a,b,c){var d=this._actions,e=this._actionsByClip,f=e[b];void 0===f?(f={knownActions:[a],actionByRoot:{}},a._byClipCacheIndex=0,e[b]=f):(b=f.knownActions,a._byClipCacheIndex=b.length,b.push(a));a._cacheIndex=d.length;d.push(a);f.actionByRoot[c]=a},_removeInactiveAction:function(a){var b=this._actions,c=b[b.length-1],d=a._cacheIndex;c._cacheIndex=d;b[d]=c;b.pop();a._cacheIndex=null;b=a._clip.uuid;
-c=this._actionsByClip;d=c[b];var e=d.knownActions,f=e[e.length-1],g=a._byClipCacheIndex;f._byClipCacheIndex=g;e[g]=f;e.pop();a._byClipCacheIndex=null;delete d.actionByRoot[(a._localRoot||this._root).uuid];0===e.length&&delete c[b];this._removeInactiveBindingsForAction(a)},_removeInactiveBindingsForAction:function(a){a=a._propertyBindings;for(var b=0,c=a.length;b!==c;++b){var d=a[b];0===--d.referenceCount&&this._removeInactiveBinding(d)}},_lendAction:function(a){var b=this._actions,c=a._cacheIndex,
-d=this._nActiveActions++,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackAction:function(a){var b=this._actions,c=a._cacheIndex,d=--this._nActiveActions,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_addInactiveBinding:function(a,b,c){var d=this._bindingsByRootAndName,e=this._bindings,f=d[b];void 0===f&&(f={},d[b]=f);f[c]=a;a._cacheIndex=e.length;e.push(a)},_removeInactiveBinding:function(a){var b=this._bindings,c=a.binding,d=c.rootNode.uuid;c=c.path;var e=this._bindingsByRootAndName,
-f=e[d],g=b[b.length-1];a=a._cacheIndex;g._cacheIndex=a;b[a]=g;b.pop();delete f[c];0===Object.keys(f).length&&delete e[d]},_lendBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=this._nActiveBindings++,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_takeBackBinding:function(a){var b=this._bindings,c=a._cacheIndex,d=--this._nActiveBindings,e=b[d];a._cacheIndex=d;b[d]=a;e._cacheIndex=c;b[c]=e},_lendControlInterpolant:function(){var a=this._controlInterpolants,b=this._nActiveControlInterpolants++,
-c=a[b];void 0===c&&(c=new le(new Float32Array(2),new Float32Array(2),1,this._controlInterpolantsResultBuffer),c.__cacheIndex=b,a[b]=c);return c},_takeBackControlInterpolant:function(a){var b=this._controlInterpolants,c=a.__cacheIndex,d=--this._nActiveControlInterpolants,e=b[d];a.__cacheIndex=d;b[d]=a;e.__cacheIndex=c;b[c]=e},_controlInterpolantsResultBuffer:new Float32Array(1),clipAction:function(a,b,c){var d=b||this._root,e=d.uuid;d="string"===typeof a?Pa.findByName(d,a):a;a=null!==d?d.uuid:a;var f=
-this._actionsByClip[a],g=null;void 0===c&&(c=null!==d?d.blendMode:2500);if(void 0!==f){g=f.actionByRoot[e];if(void 0!==g&&g.blendMode===c)return g;g=f.knownActions[0];null===d&&(d=g._clip)}if(null===d)return null;b=new ki(this,d,b,c);this._bindAction(b,g);this._addInactiveAction(b,a,e);return b},existingAction:function(a,b){var c=b||this._root;b=c.uuid;c="string"===typeof a?Pa.findByName(c,a):a;a=this._actionsByClip[c?c.uuid:a];return void 0!==a?a.actionByRoot[b]||null:null},stopAllAction:function(){for(var a=
-this._actions,b=this._nActiveActions-1;0<=b;--b)a[b].stop();return this},update:function(a){a*=this.timeScale;for(var b=this._actions,c=this._nActiveActions,d=this.time+=a,e=Math.sign(a),f=this._accuIndex^=1,g=0;g!==c;++g)b[g]._update(d,a,e,f);a=this._bindings;b=this._nActiveBindings;for(c=0;c!==b;++c)a[c].apply(f);return this},setTime:function(a){for(var b=this.time=0;b<this._actions.length;b++)this._actions[b].time=0;return this.update(a)},getRoot:function(){return this._root},uncacheClip:function(a){var b=
-this._actions;a=a.uuid;var c=this._actionsByClip,d=c[a];if(void 0!==d){d=d.knownActions;for(var e=0,f=d.length;e!==f;++e){var g=d[e];this._deactivateAction(g);var h=g._cacheIndex,k=b[b.length-1];g._cacheIndex=null;g._byClipCacheIndex=null;k._cacheIndex=h;b[h]=k;b.pop();this._removeInactiveBindingsForAction(g)}delete c[a]}},uncacheRoot:function(a){a=a.uuid;var b=this._actionsByClip;for(d in b){var c=b[d].actionByRoot[a];void 0!==c&&(this._deactivateAction(c),this._removeInactiveAction(c))}var d=this._bindingsByRootAndName[a];
-if(void 0!==d)for(var e in d)a=d[e],a.restoreOriginalState(),this._removeInactiveBinding(a)},uncacheAction:function(a,b){a=this.existingAction(a,b);null!==a&&(this._deactivateAction(a),this._removeInactiveAction(a))}});vf.prototype.clone=function(){return new vf(void 0===this.value.clone?this.value:this.value.clone())};Ng.prototype=Object.assign(Object.create(Ba.prototype),{constructor:Ng,isInstancedInterleavedBuffer:!0,copy:function(a){Ba.prototype.copy.call(this,a);this.meshPerAttribute=a.meshPerAttribute;
-return this},clone:function(a){a=Ba.prototype.clone.call(this,a);a.meshPerAttribute=this.meshPerAttribute;return a},toJSON:function(a){a=Ba.prototype.toJSON.call(this,a);a.isInstancedInterleavedBuffer=!0;a.meshPerAttribute=this.meshPerAttribute;return a}});Object.assign(Og.prototype,{set:function(a,b){this.ray.set(a,b)},setFromCamera:function(a,b){b&&b.isPerspectiveCamera?(this.ray.origin.setFromMatrixPosition(b.matrixWorld),this.ray.direction.set(a.x,a.y,.5).unproject(b).sub(this.ray.origin).normalize(),
-this.camera=b):b&&b.isOrthographicCamera?(this.ray.origin.set(a.x,a.y,(b.near+b.far)/(b.near-b.far)).unproject(b),this.ray.direction.set(0,0,-1).transformDirection(b.matrixWorld),this.camera=b):console.error("THREE.Raycaster: Unsupported camera type.")},intersectObject:function(a,b,c){c=c||[];Pg(a,this,c,b);c.sort(li);return c},intersectObjects:function(a,b,c){c=c||[];if(!1===Array.isArray(a))return console.warn("THREE.Raycaster.intersectObjects: objects is not an Array."),c;for(var d=0,e=a.length;d<
-e;d++)Pg(a[d],this,c,b);c.sort(li);return c}});var Ac=function(a,b,c){void 0===a&&(a=1);void 0===b&&(b=0);void 0===c&&(c=0);this.radius=a;this.phi=b;this.theta=c;return this};Ac.prototype.set=function(a,b,c){this.radius=a;this.phi=b;this.theta=c;return this};Ac.prototype.clone=function(){return(new this.constructor).copy(this)};Ac.prototype.copy=function(a){this.radius=a.radius;this.phi=a.phi;this.theta=a.theta;return this};Ac.prototype.makeSafe=function(){this.phi=Math.max(1E-6,Math.min(Math.PI-
-1E-6,this.phi));return this};Ac.prototype.setFromVector3=function(a){return this.setFromCartesianCoords(a.x,a.y,a.z)};Ac.prototype.setFromCartesianCoords=function(a,b,c){this.radius=Math.sqrt(a*a+b*b+c*c);0===this.radius?this.phi=this.theta=0:(this.theta=Math.atan2(a,c),this.phi=Math.acos(P.clamp(b/this.radius,-1,1)));return this};Object.assign(mi.prototype,{set:function(a,b,c){this.radius=a;this.theta=b;this.y=c;return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.radius=
-a.radius;this.theta=a.theta;this.y=a.y;return this},setFromVector3:function(a){return this.setFromCartesianCoords(a.x,a.y,a.z)},setFromCartesianCoords:function(a,b,c){this.radius=Math.sqrt(a*a+c*c);this.theta=Math.atan2(a,c);this.y=b;return this}});var Ti=new u;Object.assign(Qg.prototype,{set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){this.makeEmpty();for(var b=0,c=a.length;b<c;b++)this.expandByPoint(a[b]);return this},setFromCenterAndSize:function(a,b){b=
-Ti.copy(b).multiplyScalar(.5);this.min.copy(a).sub(b);this.max.copy(a).add(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},isEmpty:function(){return this.max.x<this.min.x||this.max.y<this.min.y},getCenter:function(a){void 0===a&&(console.warn("THREE.Box2: .getCenter() target is now required"),a=new u);return this.isEmpty()?
-a.set(0,0):a.addVectors(this.min,this.max).multiplyScalar(.5)},getSize:function(a){void 0===a&&(console.warn("THREE.Box2: .getSize() target is now required"),a=new u);return this.isEmpty()?a.set(0,0):a.subVectors(this.max,this.min)},expandByPoint:function(a){this.min.min(a);this.max.max(a);return this},expandByVector:function(a){this.min.sub(a);this.max.add(a);return this},expandByScalar:function(a){this.min.addScalar(-a);this.max.addScalar(a);return this},containsPoint:function(a){return a.x<this.min.x||
-a.x>this.max.x||a.y<this.min.y||a.y>this.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y},getParameter:function(a,b){void 0===b&&(console.warn("THREE.Box2: .getParameter() target is now required"),b=new u);return b.set((a.x-this.min.x)/(this.max.x-this.min.x),(a.y-this.min.y)/(this.max.y-this.min.y))},intersectsBox:function(a){return a.max.x<this.min.x||a.min.x>this.max.x||a.max.y<this.min.y||a.min.y>this.max.y?!1:!0},
-clampPoint:function(a,b){void 0===b&&(console.warn("THREE.Box2: .clampPoint() target is now required"),b=new u);return b.copy(a).clamp(this.min,this.max)},distanceToPoint:function(a){return Ti.copy(a).clamp(this.min,this.max).sub(a).length()},intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&
-a.max.equals(this.max)}});var Ui=new m,Wf=new m;Object.assign(Rg.prototype,{set:function(a,b){this.start.copy(a);this.end.copy(b);return this},clone:function(){return(new this.constructor).copy(this)},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},getCenter:function(a){void 0===a&&(console.warn("THREE.Line3: .getCenter() target is now required"),a=new m);return a.addVectors(this.start,this.end).multiplyScalar(.5)},delta:function(a){void 0===a&&(console.warn("THREE.Line3: .delta() target is now required"),
-a=new m);return a.subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a,b){void 0===b&&(console.warn("THREE.Line3: .at() target is now required"),b=new m);return this.delta(b).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(a,b){Ui.subVectors(a,this.start);Wf.subVectors(this.end,this.start);a=Wf.dot(Wf);a=Wf.dot(Ui)/a;b&&(a=P.clamp(a,0,1));return a},closestPointToPoint:function(a,
-b,c){a=this.closestPointToPointParameter(a,b);void 0===c&&(console.warn("THREE.Line3: .closestPointToPoint() target is now required"),c=new m);return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a);this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)}});qe.prototype=Object.create(C.prototype);qe.prototype.constructor=qe;qe.prototype.isImmediateRenderObject=!0;var Vi=new m;jd.prototype=
-Object.create(C.prototype);jd.prototype.constructor=jd;jd.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};jd.prototype.update=function(){this.light.updateMatrixWorld();var a=this.light.distance?this.light.distance:1E3,b=a*Math.tan(this.light.angle);this.cone.scale.set(b,b,a);Vi.setFromMatrixPosition(this.light.target.matrixWorld);this.cone.lookAt(Vi);void 0!==this.color?this.cone.material.color.set(this.color):this.cone.material.color.copy(this.light.color)};
-var Ub=new m,Xf=new U,ph=new U;rc.prototype=Object.create(ea.prototype);rc.prototype.constructor=rc;rc.prototype.isSkeletonHelper=!0;rc.prototype.updateMatrixWorld=function(a){var b=this.bones,c=this.geometry,d=c.getAttribute("position");ph.getInverse(this.root.matrixWorld);for(var e=0,f=0;e<b.length;e++){var g=b[e];g.parent&&g.parent.isBone&&(Xf.multiplyMatrices(ph,g.matrixWorld),Ub.setFromMatrixPosition(Xf),d.setXYZ(f,Ub.x,Ub.y,Ub.z),Xf.multiplyMatrices(ph,g.parent.matrixWorld),Ub.setFromMatrixPosition(Xf),
-d.setXYZ(f+1,Ub.x,Ub.y,Ub.z),f+=2)}c.getAttribute("position").needsUpdate=!0;C.prototype.updateMatrixWorld.call(this,a)};kd.prototype=Object.create(T.prototype);kd.prototype.constructor=kd;kd.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()};kd.prototype.update=function(){void 0!==this.color?this.material.color.set(this.color):this.material.color.copy(this.light.color)};var gl=new m,Wi=new H,Xi=new H;ld.prototype=Object.create(C.prototype);ld.prototype.constructor=ld;ld.prototype.dispose=
-function(){this.children[0].geometry.dispose();this.children[0].material.dispose()};ld.prototype.update=function(){var a=this.children[0];if(void 0!==this.color)this.material.color.set(this.color);else{var b=a.geometry.getAttribute("color");Wi.copy(this.light.color);Xi.copy(this.light.groundColor);for(var c=0,d=b.count;c<d;c++){var e=c<d/2?Wi:Xi;b.setXYZ(c,e.r,e.g,e.b)}b.needsUpdate=!0}a.lookAt(gl.setFromMatrixPosition(this.light.matrixWorld).negate())};re.prototype=Object.create(ea.prototype);re.prototype.constructor=
-re;wf.prototype=Object.create(ea.prototype);wf.prototype.constructor=wf;var Yi=new m,Yf=new m,Zi=new m;md.prototype=Object.create(C.prototype);md.prototype.constructor=md;md.prototype.dispose=function(){this.lightPlane.geometry.dispose();this.lightPlane.material.dispose();this.targetLine.geometry.dispose();this.targetLine.material.dispose()};md.prototype.update=function(){Yi.setFromMatrixPosition(this.light.matrixWorld);Yf.setFromMatrixPosition(this.light.target.matrixWorld);Zi.subVectors(Yf,Yi);
-this.lightPlane.lookAt(Yf);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(Yf);this.targetLine.scale.z=Zi.length()};var xf=new m,la=new db;se.prototype=Object.create(ea.prototype);se.prototype.constructor=se;se.prototype.update=function(){var a=this.geometry,b=this.pointMap;la.projectionMatrixInverse.copy(this.camera.projectionMatrixInverse);
-oa("c",b,a,la,0,0,-1);oa("t",b,a,la,0,0,1);oa("n1",b,a,la,-1,-1,-1);oa("n2",b,a,la,1,-1,-1);oa("n3",b,a,la,-1,1,-1);oa("n4",b,a,la,1,1,-1);oa("f1",b,a,la,-1,-1,1);oa("f2",b,a,la,1,-1,1);oa("f3",b,a,la,-1,1,1);oa("f4",b,a,la,1,1,1);oa("u1",b,a,la,.7,1.1,-1);oa("u2",b,a,la,-.7,1.1,-1);oa("u3",b,a,la,0,2,-1);oa("cf1",b,a,la,-1,0,1);oa("cf2",b,a,la,1,0,1);oa("cf3",b,a,la,0,-1,1);oa("cf4",b,a,la,0,1,1);oa("cn1",b,a,la,-1,0,-1);oa("cn2",b,a,la,1,0,-1);oa("cn3",b,a,la,0,-1,-1);oa("cn4",b,a,la,0,1,-1);a.getAttribute("position").needsUpdate=
-!0};var Zf=new Sa;Nb.prototype=Object.create(ea.prototype);Nb.prototype.constructor=Nb;Nb.prototype.update=function(a){void 0!==a&&console.warn("THREE.BoxHelper: .update() has no longer arguments.");void 0!==this.object&&Zf.setFromObject(this.object);if(!Zf.isEmpty()){a=Zf.min;var b=Zf.max,c=this.geometry.attributes.position,d=c.array;d[0]=b.x;d[1]=b.y;d[2]=b.z;d[3]=a.x;d[4]=b.y;d[5]=b.z;d[6]=a.x;d[7]=a.y;d[8]=b.z;d[9]=b.x;d[10]=a.y;d[11]=b.z;d[12]=b.x;d[13]=b.y;d[14]=a.z;d[15]=a.x;d[16]=b.y;d[17]=
-a.z;d[18]=a.x;d[19]=a.y;d[20]=a.z;d[21]=b.x;d[22]=a.y;d[23]=a.z;c.needsUpdate=!0;this.geometry.computeBoundingSphere()}};Nb.prototype.setFromObject=function(a){this.object=a;this.update();return this};Nb.prototype.copy=function(a){ea.prototype.copy.call(this,a);this.object=a.object;return this};te.prototype=Object.create(ea.prototype);te.prototype.constructor=te;te.prototype.updateMatrixWorld=function(a){var b=this.box;b.isEmpty()||(b.getCenter(this.position),b.getSize(this.scale),this.scale.multiplyScalar(.5),
-C.prototype.updateMatrixWorld.call(this,a))};ue.prototype=Object.create(Ja.prototype);ue.prototype.constructor=ue;ue.prototype.updateMatrixWorld=function(a){var b=-this.plane.constant;1E-8>Math.abs(b)&&(b=1E-8);this.scale.set(.5*this.size,.5*this.size,b);this.children[0].material.side=0>b?1:0;this.lookAt(this.plane.normal);C.prototype.updateMatrixWorld.call(this,a)};var $i=new m,yf,Sg;Ob.prototype=Object.create(C.prototype);Ob.prototype.constructor=Ob;Ob.prototype.setDirection=function(a){.99999<
-a.y?this.quaternion.set(0,0,0,1):-.99999>a.y?this.quaternion.set(1,0,0,0):($i.set(a.z,0,-a.x).normalize(),this.quaternion.setFromAxisAngle($i,Math.acos(a.y)))};Ob.prototype.setLength=function(a,b,c){void 0===b&&(b=.2*a);void 0===c&&(c=.2*b);this.line.scale.set(1,Math.max(1E-4,a-b),1);this.line.updateMatrix();this.cone.scale.set(c,b,c);this.cone.position.y=a;this.cone.updateMatrix()};Ob.prototype.setColor=function(a){this.line.material.color.set(a);this.cone.material.color.set(a)};Ob.prototype.copy=
-function(a){C.prototype.copy.call(this,a,!1);this.line.copy(a.line);this.cone.copy(a.cone);return this};ve.prototype=Object.create(ea.prototype);ve.prototype.constructor=ve;var kb=Math.pow(2,8),aj=[.125,.215,.35,.446,.526,.582],bj=5+aj.length,jb={3E3:0,3001:1,3002:2,3004:3,3005:4,3006:5,3007:6},qh=new hd,rh=function(){for(var a=[],b=[],c=[],d=8,e=0;e<bj;e++){var f=Math.pow(2,d);b.push(f);var g=1/f;4<e?g=aj[e-8+4-1]:0==e&&(g=0);c.push(g);g=1/(f-1);f=-g/2;g=1+g/2;var h=[f,f,g,f,g,g,f,f,g,g,f,g];f=new Float32Array(108);
-g=new Float32Array(72);for(var k=new Float32Array(36),n=0;6>n;n++){var m=n%3*2/3-1,p=2<n?0:-1;f.set([m,p,0,m+2/3,p,0,m+2/3,p+1,0,m,p,0,m+2/3,p+1,0,m,p+1,0],18*n);g.set(h,12*n);k.set([n,n,n,n,n,n],6*n)}h=new E;h.setAttribute("position",new J(f,3));h.setAttribute("uv",new J(g,2));h.setAttribute("faceIndex",new J(k,1));a.push(h);4<d&&d--}return{_lodPlanes:a,_sizeLods:b,_sigmas:c}}(),Ge=rh._lodPlanes,cj=rh._sizeLods,$f=rh._sigmas,sh=null,Bc=(1+Math.sqrt(5))/2,zd=1/Bc,dj=[new m(1,1,1),new m(-1,1,1),new m(1,
-1,-1),new m(-1,1,-1),new m(0,Bc,zd),new m(0,Bc,-zd),new m(zd,0,Bc),new m(-zd,0,Bc),new m(Bc,zd,0),new m(-Bc,zd,0)];Tg.prototype={constructor:Tg,fromScene:function(a,b,c,d){void 0===b&&(b=0);void 0===c&&(c=.1);void 0===d&&(d=100);sh=this._renderer.getRenderTarget();var e=this._allocateTargets();this._sceneToCubeUV(a,c,d,e);0<b&&this._blur(e,0,0,b);this._applyPMREM(e);this._cleanup(e);return e},fromEquirectangular:function(a){return this._fromTexture(a)},fromCubemap:function(a){return this._fromTexture(a)},
-compileCubemapShader:function(){null===this._cubemapShader&&(this._cubemapShader=qi(),this._compileMaterial(this._cubemapShader))},compileEquirectangularShader:function(){null===this._equirectShader&&(this._equirectShader=pi(),this._compileMaterial(this._equirectShader))},dispose:function(){this._blurMaterial.dispose();null!==this._cubemapShader&&this._cubemapShader.dispose();null!==this._equirectShader&&this._equirectShader.dispose();for(var a=0;a<Ge.length;a++)Ge[a].dispose()},_cleanup:function(a){this._pingPongRenderTarget.dispose();
-this._renderer.setRenderTarget(sh);a.scissorTest=!1;zf(a,0,0,a.width,a.height)},_fromTexture:function(a){sh=this._renderer.getRenderTarget();var b=this._allocateTargets(a);this._textureToCubeUV(a,b);this._applyPMREM(b);this._cleanup(b);return b},_allocateTargets:function(a){var b=void 0===a||1009!==a.type?!1:3E3===a.encoding||3001===a.encoding||3007===a.encoding;b={magFilter:1003,minFilter:1003,generateMipmaps:!1,type:1009,format:1023,encoding:b?a.encoding:3002,depthBuffer:!1,stencilBuffer:!1};var c=
-oi(b);c.depthBuffer=a?!1:!0;this._pingPongRenderTarget=oi(b);return c},_compileMaterial:function(a){a=new T(Ge[0],a);this._renderer.compile(a,qh)},_sceneToCubeUV:function(a,b,c,d){b=new W(90,1,b,c);c=[1,-1,1,1,1,1];var e=[1,1,1,-1,-1,-1],f=this._renderer,g=f.outputEncoding,h=f.toneMapping,k=f.getClearColor(),m=f.getClearAlpha();f.toneMapping=0;f.outputEncoding=3E3;var q=a.background;if(q&&q.isColor){q.convertSRGBToLinear();var p=Math.min(Math.max(Math.ceil(Math.log2(Math.max(q.r,q.g,q.b))),-128),
-127);q=q.multiplyScalar(Math.pow(2,-p));f.setClearColor(q,(p+128)/255);a.background=null}for(q=0;6>q;q++)p=q%3,0==p?(b.up.set(0,c[q],0),b.lookAt(e[q],0,0)):1==p?(b.up.set(0,0,c[q]),b.lookAt(0,e[q],0)):(b.up.set(0,c[q],0),b.lookAt(0,0,e[q])),zf(d,p*kb,2<q?kb:0,kb,kb),f.setRenderTarget(d),f.render(a,b);f.toneMapping=h;f.outputEncoding=g;f.setClearColor(k,m)},_textureToCubeUV:function(a,b){var c=this._renderer;a.isCubeTexture?null==this._cubemapShader&&(this._cubemapShader=qi()):null==this._equirectShader&&
-(this._equirectShader=pi());var d=a.isCubeTexture?this._cubemapShader:this._equirectShader,e=new T(Ge[0],d);d=d.uniforms;d.envMap.value=a;a.isCubeTexture||d.texelSize.value.set(1/a.image.width,1/a.image.height);d.inputEncoding.value=jb[a.encoding];d.outputEncoding.value=jb[b.texture.encoding];zf(b,0,0,3*kb,2*kb);c.setRenderTarget(b);c.render(e,qh)},_applyPMREM:function(a){var b=this._renderer,c=b.autoClear;b.autoClear=!1;for(var d=1;d<bj;d++)this._blur(a,d-1,d,Math.sqrt($f[d]*$f[d]-$f[d-1]*$f[d-1]),
-dj[(d-1)%dj.length]);b.autoClear=c},_blur:function(a,b,c,d,e){var f=this._pingPongRenderTarget;this._halfBlur(a,f,b,c,d,"latitudinal",e);this._halfBlur(f,a,c,c,d,"longitudinal",e)},_halfBlur:function(a,b,c,d,e,f,g){var h=this._renderer,k=this._blurMaterial;"latitudinal"!==f&&"longitudinal"!==f&&console.error("blur direction must be either latitudinal or longitudinal!");var m=new T(Ge[d],k);k=k.uniforms;var q=cj[c]-1;q=isFinite(e)?Math.PI/(2*q):2*Math.PI/39;var p=e/q,u=isFinite(e)?1+Math.floor(3*p):
-20;20<u&&console.warn("sigmaRadians, "+e+", is too large and will clip, as it requested "+u+" samples when the maximum is set to 20");e=[];for(var r=0,t=0;20>t;++t){var v=t/p;v=Math.exp(-v*v/2);e.push(v);0==t?r+=v:t<u&&(r+=2*v)}for(p=0;p<e.length;p++)e[p]/=r;k.envMap.value=a.texture;k.samples.value=u;k.weights.value=e;k.latitudinal.value="latitudinal"===f;g&&(k.poleAxis.value=g);k.dTheta.value=q;k.mipInt.value=8-c;k.inputEncoding.value=jb[a.texture.encoding];k.outputEncoding.value=jb[a.texture.encoding];
-a=cj[d];zf(b,3*Math.max(0,kb-2*a),(0===d?0:2*kb)+2*a*(4<d?d-8+4:0),3*a,2*a);h.setRenderTarget(b);h.render(m,qh)}};K.create=function(a,b){console.log("THREE.Curve.create() has been deprecated");a.prototype=Object.create(K.prototype);a.prototype.constructor=a;a.prototype.getPoint=b;return a};Object.assign(sb.prototype,{createPointsGeometry:function(a){console.warn("THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getPoints(a);
-return this.createGeometry(a)},createSpacedPointsGeometry:function(a){console.warn("THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");a=this.getSpacedPoints(a);return this.createGeometry(a)},createGeometry:function(a){console.warn("THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.");for(var b=new F,c=0,d=a.length;c<d;c++){var e=a[c];b.vertices.push(new m(e.x,e.y,
-e.z||0))}return b}});Object.assign($a.prototype,{fromPoints:function(a){console.warn("THREE.Path: .fromPoints() has been renamed to .setFromPoints().");return this.setFromPoints(a)}});ri.prototype=Object.create(za.prototype);si.prototype=Object.create(za.prototype);Wg.prototype=Object.create(za.prototype);Object.assign(Wg.prototype,{initFromArray:function(){console.error("THREE.Spline: .initFromArray() has been removed.")},getControlPointsArray:function(){console.error("THREE.Spline: .getControlPointsArray() has been removed.")},
-reparametrizeByArcLength:function(){console.error("THREE.Spline: .reparametrizeByArcLength() has been removed.")}});re.prototype.setColors=function(){console.error("THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.")};rc.prototype.update=function(){console.error("THREE.SkeletonHelper: update() no longer needs to be called.")};Object.assign(X.prototype,{extractUrlBase:function(a){console.warn("THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.");
-return oh.extractUrlBase(a)}});X.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.")}};Object.assign(tf.prototype,{setTexturePath:function(a){console.warn("THREE.ObjectLoader: .setTexturePath() has been renamed to .setResourcePath().");return this.setResourcePath(a)}});Object.assign(Qg.prototype,{center:function(a){console.warn("THREE.Box2: .center() has been renamed to .getCenter().");
-return this.getCenter(a)},empty:function(){console.warn("THREE.Box2: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},size:function(a){console.warn("THREE.Box2: .size() has been renamed to .getSize().");return this.getSize(a)}});Object.assign(Sa.prototype,{center:function(a){console.warn("THREE.Box3: .center() has been renamed to .getCenter().");
-return this.getCenter(a)},empty:function(){console.warn("THREE.Box3: .empty() has been renamed to .isEmpty().");return this.isEmpty()},isIntersectionBox:function(a){console.warn("THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},isIntersectionSphere:function(a){console.warn("THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().");return this.intersectsSphere(a)},size:function(a){console.warn("THREE.Box3: .size() has been renamed to .getSize().");
-return this.getSize(a)}});Object.assign(cb.prototype,{empty:function(){console.warn("THREE.Sphere: .empty() has been renamed to .isEmpty().");return this.isEmpty()}});Jc.prototype.setFromMatrix=function(a){console.warn("THREE.Frustum: .setFromMatrix() has been renamed to .setFromProjectionMatrix().");return this.setFromProjectionMatrix(a)};Rg.prototype.center=function(a){console.warn("THREE.Line3: .center() has been renamed to .getCenter().");return this.getCenter(a)};Object.assign(P,{random16:function(){console.warn("THREE.Math: .random16() has been deprecated. Use Math.random() instead.");
-return Math.random()},nearestPowerOfTwo:function(a){console.warn("THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().");return P.floorPowerOfTwo(a)},nextPowerOfTwo:function(a){console.warn("THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().");return P.ceilPowerOfTwo(a)}});Object.assign(qa.prototype,{flattenToArrayOffset:function(a,b){console.warn("THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(a,b)},
-multiplyVector3:function(a){console.warn("THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)},multiplyVector3Array:function(){console.error("THREE.Matrix3: .multiplyVector3Array() has been removed.")},applyToBufferAttribute:function(a){console.warn("THREE.Matrix3: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)},applyToVector3Array:function(){console.error("THREE.Matrix3: .applyToVector3Array() has been removed.")}});
-Object.assign(U.prototype,{extractPosition:function(a){console.warn("THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().");return this.copyPosition(a)},flattenToArrayOffset:function(a,b){console.warn("THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.");return this.toArray(a,b)},getPosition:function(){console.warn("THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.");return(new m).setFromMatrixColumn(this,
-3)},setRotationFromQuaternion:function(a){console.warn("THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().");return this.makeRotationFromQuaternion(a)},multiplyToArray:function(){console.warn("THREE.Matrix4: .multiplyToArray() has been removed.")},multiplyVector3:function(a){console.warn("THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},multiplyVector4:function(a){console.warn("THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.");
-return a.applyMatrix4(this)},multiplyVector3Array:function(){console.error("THREE.Matrix4: .multiplyVector3Array() has been removed.")},rotateAxis:function(a){console.warn("THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.");a.transformDirection(this)},crossVector:function(a){console.warn("THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},translate:function(){console.error("THREE.Matrix4: .translate() has been removed.")},
-rotateX:function(){console.error("THREE.Matrix4: .rotateX() has been removed.")},rotateY:function(){console.error("THREE.Matrix4: .rotateY() has been removed.")},rotateZ:function(){console.error("THREE.Matrix4: .rotateZ() has been removed.")},rotateByAxis:function(){console.error("THREE.Matrix4: .rotateByAxis() has been removed.")},applyToBufferAttribute:function(a){console.warn("THREE.Matrix4: .applyToBufferAttribute() has been removed. Use attribute.applyMatrix4( matrix ) instead.");return a.applyMatrix4(this)},
-applyToVector3Array:function(){console.error("THREE.Matrix4: .applyToVector3Array() has been removed.")},makeFrustum:function(a,b,c,d,e,f){console.warn("THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.");return this.makePerspective(a,b,d,c,e,f)}});Ta.prototype.isIntersectionLine=function(a){console.warn("THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().");return this.intersectsLine(a)};Y.prototype.multiplyVector3=
-function(a){console.warn("THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return a.applyQuaternion(this)};Object.assign(Xb.prototype,{isIntersectionBox:function(a){console.warn("THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().");return this.intersectsBox(a)},isIntersectionPlane:function(a){console.warn("THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().");return this.intersectsPlane(a)},isIntersectionSphere:function(a){console.warn("THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().");
-return this.intersectsSphere(a)}});Object.assign(ba.prototype,{area:function(){console.warn("THREE.Triangle: .area() has been renamed to .getArea().");return this.getArea()},barycoordFromPoint:function(a,b){console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().");return this.getBarycoord(a,b)},midpoint:function(a){console.warn("THREE.Triangle: .midpoint() has been renamed to .getMidpoint().");return this.getMidpoint(a)},normal:function(a){console.warn("THREE.Triangle: .normal() has been renamed to .getNormal().");
-return this.getNormal(a)},plane:function(a){console.warn("THREE.Triangle: .plane() has been renamed to .getPlane().");return this.getPlane(a)}});Object.assign(ba,{barycoordFromPoint:function(a,b,c,d,e){console.warn("THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().");return ba.getBarycoord(a,b,c,d,e)},normal:function(a,b,c,d){console.warn("THREE.Triangle: .normal() has been renamed to .getNormal().");return ba.getNormal(a,b,c,d)}});Object.assign(Mb.prototype,{extractAllPoints:function(a){console.warn("THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.");
-return this.extractPoints(a)},extrude:function(a){console.warn("THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.");return new gc(this,a)},makeGeometry:function(a){console.warn("THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.");return new ic(this,a)}});Object.assign(u.prototype,{fromAttribute:function(a,b,c){console.warn("THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(a,b,c)},distanceToManhattan:function(a){console.warn("THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().");
-return this.manhattanDistanceTo(a)},lengthManhattan:function(){console.warn("THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(m.prototype,{setEulerFromRotationMatrix:function(){console.error("THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.")},setEulerFromQuaternion:function(){console.error("THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.")},
-getPositionFromMatrix:function(a){console.warn("THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().");return this.setFromMatrixPosition(a)},getScaleFromMatrix:function(a){console.warn("THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().");return this.setFromMatrixScale(a)},getColumnFromMatrix:function(a,b){console.warn("THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().");return this.setFromMatrixColumn(b,
-a)},applyProjection:function(a){console.warn("THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.");return this.applyMatrix4(a)},fromAttribute:function(a,b,c){console.warn("THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(a,b,c)},distanceToManhattan:function(a){console.warn("THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().");return this.manhattanDistanceTo(a)},lengthManhattan:function(){console.warn("THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().");
-return this.manhattanLength()}});Object.assign(S.prototype,{fromAttribute:function(a,b,c){console.warn("THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().");return this.fromBufferAttribute(a,b,c)},lengthManhattan:function(){console.warn("THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().");return this.manhattanLength()}});Object.assign(F.prototype,{computeTangents:function(){console.error("THREE.Geometry: .computeTangents() has been removed.")},computeLineDistances:function(){console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.")},
-applyMatrix:function(a){console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().");return this.applyMatrix4(a)}});Object.assign(C.prototype,{getChildByName:function(a){console.warn("THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().");return this.getObjectByName(a)},renderDepth:function(){console.warn("THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.")},translate:function(a,b){console.warn("THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.");
-return this.translateOnAxis(b,a)},getWorldRotation:function(){console.error("THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.")},applyMatrix:function(a){console.warn("THREE.Object3D: .applyMatrix() has been renamed to .applyMatrix4().");return this.applyMatrix4(a)}});Object.defineProperties(C.prototype,{eulerOrder:{get:function(){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");return this.rotation.order},set:function(a){console.warn("THREE.Object3D: .eulerOrder is now .rotation.order.");
-this.rotation.order=a}},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.")}}});Object.assign(T.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(T.prototype,{drawMode:{get:function(){console.error("THREE.Mesh: .drawMode has been removed. The renderer now always assumes THREE.TrianglesDrawMode.");return 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.")}}});Object.defineProperties(Qd.prototype,{objects:{get:function(){console.warn("THREE.LOD: .objects has been renamed to .levels.");
-return this.levels}}});Object.defineProperty(Se.prototype,"useVertexTexture",{get:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")},set:function(){console.warn("THREE.Skeleton: useVertexTexture has been removed.")}});Re.prototype.initBones=function(){console.error("THREE.SkinnedMesh: initBones() has been removed.")};Object.defineProperty(K.prototype,"__arcLengthDivisions",{get:function(){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");return this.arcLengthDivisions},
-set:function(a){console.warn("THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.");this.arcLengthDivisions=a}});W.prototype.setLens=function(a,b){console.warn("THREE.PerspectiveCamera.setLens is deprecated. Use .setFocalLength and .filmGauge for a photographic setup.");void 0!==b&&(this.filmGauge=b);this.setFocalLength(a)};Object.defineProperties(fa.prototype,{onlyShadow:{set:function(){console.warn("THREE.Light: .onlyShadow has been removed.")}},shadowCameraFov:{set:function(a){console.warn("THREE.Light: .shadowCameraFov is now .shadow.camera.fov.");
-this.shadow.camera.fov=a}},shadowCameraLeft:{set:function(a){console.warn("THREE.Light: .shadowCameraLeft is now .shadow.camera.left.");this.shadow.camera.left=a}},shadowCameraRight:{set:function(a){console.warn("THREE.Light: .shadowCameraRight is now .shadow.camera.right.");this.shadow.camera.right=a}},shadowCameraTop:{set:function(a){console.warn("THREE.Light: .shadowCameraTop is now .shadow.camera.top.");this.shadow.camera.top=a}},shadowCameraBottom:{set:function(a){console.warn("THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.");
-this.shadow.camera.bottom=a}},shadowCameraNear:{set:function(a){console.warn("THREE.Light: .shadowCameraNear is now .shadow.camera.near.");this.shadow.camera.near=a}},shadowCameraFar:{set:function(a){console.warn("THREE.Light: .shadowCameraFar is now .shadow.camera.far.");this.shadow.camera.far=a}},shadowCameraVisible:{set:function(){console.warn("THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.")}},shadowBias:{set:function(a){console.warn("THREE.Light: .shadowBias is now .shadow.bias.");
-this.shadow.bias=a}},shadowDarkness:{set:function(){console.warn("THREE.Light: .shadowDarkness has been removed.")}},shadowMapWidth:{set:function(a){console.warn("THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.");this.shadow.mapSize.width=a}},shadowMapHeight:{set:function(a){console.warn("THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.");this.shadow.mapSize.height=a}}});Object.defineProperties(J.prototype,{length:{get:function(){console.warn("THREE.BufferAttribute: .length has been deprecated. Use .count instead.");
-return this.array.length}},dynamic:{get:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.");return 35048===this.usage},set:function(){console.warn("THREE.BufferAttribute: .dynamic has been deprecated. Use .usage instead.");this.setUsage(35048)}}});Object.assign(J.prototype,{setDynamic:function(a){console.warn("THREE.BufferAttribute: .setDynamic() has been deprecated. Use .setUsage() instead.");this.setUsage(!0===a?35048:35044);return this},copyIndicesArray:function(){console.error("THREE.BufferAttribute: .copyIndicesArray() has been removed.")},
-setArray:function(){console.error("THREE.BufferAttribute: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}});Object.assign(E.prototype,{addIndex:function(a){console.warn("THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().");this.setIndex(a)},addAttribute:function(a,b,c){console.warn("THREE.BufferGeometry: .addAttribute() has been renamed to .setAttribute().");return b&&b.isBufferAttribute||b&&b.isInterleavedBufferAttribute?"index"===
-a?(console.warn("THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute."),this.setIndex(b),this):this.setAttribute(a,b):(console.warn("THREE.BufferGeometry: .addAttribute() now expects ( name, attribute )."),this.setAttribute(a,new J(b,c)))},addDrawCall:function(a,b,c){void 0!==c&&console.warn("THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.");console.warn("THREE.BufferGeometry: .addDrawCall() is now .addGroup().");this.addGroup(a,b)},clearDrawCalls:function(){console.warn("THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().");
-this.clearGroups()},computeTangents:function(){console.warn("THREE.BufferGeometry: .computeTangents() has been removed.")},computeOffsets:function(){console.warn("THREE.BufferGeometry: .computeOffsets() has been removed.")},removeAttribute:function(a){console.warn("THREE.BufferGeometry: .removeAttribute() has been renamed to .deleteAttribute().");return this.deleteAttribute(a)},applyMatrix:function(a){console.warn("THREE.BufferGeometry: .applyMatrix() has been renamed to .applyMatrix4().");return this.applyMatrix4(a)}});
-Object.defineProperties(E.prototype,{drawcalls:{get:function(){console.error("THREE.BufferGeometry: .drawcalls has been renamed to .groups.");return this.groups}},offsets:{get:function(){console.warn("THREE.BufferGeometry: .offsets has been renamed to .groups.");return this.groups}}});Object.defineProperties(pe.prototype,{maxInstancedCount:{get:function(){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.");return this.instanceCount},set:function(a){console.warn("THREE.InstancedBufferGeometry: .maxInstancedCount has been renamed to .instanceCount.");
-this.instanceCount=a}}});Object.defineProperties(Og.prototype,{linePrecision:{get:function(){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.");return this.params.Line.threshold},set:function(a){console.warn("THREE.Raycaster: .linePrecision has been deprecated. Use .params.Line.threshold instead.");this.params.Line.threshold=a}}});Object.defineProperties(Ba.prototype,{dynamic:{get:function(){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.");
-return 35048===this.usage},set:function(a){console.warn("THREE.InterleavedBuffer: .length has been deprecated. Use .usage instead.");this.setUsage(a)}}});Object.assign(Ba.prototype,{setDynamic:function(a){console.warn("THREE.InterleavedBuffer: .setDynamic() has been deprecated. Use .setUsage() instead.");this.setUsage(!0===a?35048:35044);return this},setArray:function(){console.error("THREE.InterleavedBuffer: .setArray has been removed. Use BufferGeometry .setAttribute to replace/resize attribute buffers")}});
-Object.assign(eb.prototype,{getArrays:function(){console.error("THREE.ExtrudeBufferGeometry: .getArrays() has been removed.")},addShapeList:function(){console.error("THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.")},addShape:function(){console.error("THREE.ExtrudeBufferGeometry: .addShape() has been removed.")}});Object.defineProperties(vf.prototype,{dynamic:{set:function(){console.warn("THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.")}},onUpdate:{value:function(){console.warn("THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.");
-return this}}});Object.defineProperties(L.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(){console.warn("THREE.Material: .wrapRGB has been removed.");return new H}},shading:{get:function(){console.error("THREE."+
-this.type+": .shading has been removed. Use the boolean .flatShading instead.")},set:function(a){console.warn("THREE."+this.type+": .shading has been removed. Use the boolean .flatShading instead.");this.flatShading=1===a}},stencilMask:{get:function(){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead.");return this.stencilFuncMask},set:function(a){console.warn("THREE."+this.type+": .stencilMask has been removed. Use .stencilFuncMask instead.");this.stencilFuncMask=
-a}}});Object.defineProperties(Lb.prototype,{metal:{get:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.");return!1},set:function(){console.warn("THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead")}}});Object.defineProperties(Kb.prototype,{transparency:{get:function(){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.");return this.transmission},set:function(a){console.warn("THREE.MeshPhysicalMaterial: .transparency has been renamed to .transmission.");
-this.transmission=a}}});Object.defineProperties(ra.prototype,{derivatives:{get:function(){console.warn("THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");return this.extensions.derivatives},set:function(a){console.warn("THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.");this.extensions.derivatives=a}}});Object.assign(Nd.prototype,{clearTarget:function(a,b,c,d){console.warn("THREE.WebGLRenderer: .clearTarget() has been deprecated. Use .setRenderTarget() and .clear() instead.");
-this.setRenderTarget(a);this.clear(b,c,d)},animate:function(a){console.warn("THREE.WebGLRenderer: .animate() is now .setAnimationLoop().");this.setAnimationLoop(a)},getCurrentRenderTarget:function(){console.warn("THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().");return this.getRenderTarget()},getMaxAnisotropy:function(){console.warn("THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().");return this.capabilities.getMaxAnisotropy()},getPrecision:function(){console.warn("THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.");
-return this.capabilities.precision},resetGLState:function(){console.warn("THREE.WebGLRenderer: .resetGLState() is now .state.reset().");return this.state.reset()},supportsFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( 'OES_texture_float' ).");return this.extensions.get("OES_texture_float")},supportsHalfFloatTextures:function(){console.warn("THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( 'OES_texture_half_float' ).");
-return this.extensions.get("OES_texture_half_float")},supportsStandardDerivatives:function(){console.warn("THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( 'OES_standard_derivatives' ).");return this.extensions.get("OES_standard_derivatives")},supportsCompressedTextureS3TC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( 'WEBGL_compressed_texture_s3tc' ).");return this.extensions.get("WEBGL_compressed_texture_s3tc")},
-supportsCompressedTexturePVRTC:function(){console.warn("THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( 'WEBGL_compressed_texture_pvrtc' ).");return this.extensions.get("WEBGL_compressed_texture_pvrtc")},supportsBlendMinMax:function(){console.warn("THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( 'EXT_blend_minmax' ).");return this.extensions.get("EXT_blend_minmax")},supportsVertexTextures:function(){console.warn("THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.");
-return this.capabilities.vertexTextures},supportsInstancedArrays:function(){console.warn("THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( 'ANGLE_instanced_arrays' ).");return this.extensions.get("ANGLE_instanced_arrays")},enableScissorTest:function(a){console.warn("THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().");this.setScissorTest(a)},initMaterial:function(){console.warn("THREE.WebGLRenderer: .initMaterial() has been removed.")},addPrePlugin:function(){console.warn("THREE.WebGLRenderer: .addPrePlugin() has been removed.")},
-addPostPlugin:function(){console.warn("THREE.WebGLRenderer: .addPostPlugin() has been removed.")},updateShadowMap:function(){console.warn("THREE.WebGLRenderer: .updateShadowMap() has been removed.")},setFaceCulling:function(){console.warn("THREE.WebGLRenderer: .setFaceCulling() has been removed.")},allocTextureUnit:function(){console.warn("THREE.WebGLRenderer: .allocTextureUnit() has been removed.")},setTexture:function(){console.warn("THREE.WebGLRenderer: .setTexture() has been removed.")},setTexture2D:function(){console.warn("THREE.WebGLRenderer: .setTexture2D() has been removed.")},
-setTextureCube:function(){console.warn("THREE.WebGLRenderer: .setTextureCube() has been removed.")},getActiveMipMapLevel:function(){console.warn("THREE.WebGLRenderer: .getActiveMipMapLevel() is now .getActiveMipmapLevel().");return this.getActiveMipmapLevel()}});Object.defineProperties(Nd.prototype,{shadowMapEnabled:{get:function(){return this.shadowMap.enabled},set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.");this.shadowMap.enabled=a}},shadowMapType:{get:function(){return this.shadowMap.type},
-set:function(a){console.warn("THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.");this.shadowMap.type=a}},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(){console.warn("THREE.WebGLRenderer: .context has been removed. Use .getContext() instead.");return this.getContext()}},
-vr:{get:function(){console.warn("THREE.WebGLRenderer: .vr has been renamed to .xr");return this.xr}},gammaInput:{get:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.");return!1},set:function(){console.warn("THREE.WebGLRenderer: .gammaInput has been removed. Set the encoding for textures via Texture.encoding instead.")}},gammaOutput:{get:function(){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.");
-return!1},set:function(a){console.warn("THREE.WebGLRenderer: .gammaOutput has been removed. Set WebGLRenderer.outputEncoding instead.");this.outputEncoding=!0===a?3001:3E3}},toneMappingWhitePoint:{get:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.");return 1},set:function(){console.warn("THREE.WebGLRenderer: .toneMappingWhitePoint has been removed.")}}});Object.defineProperties(Th.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(Ga.prototype,{wrapS:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");return this.texture.wrapS},set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.");this.texture.wrapS=a}},wrapT:{get:function(){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");return this.texture.wrapT},
-set:function(a){console.warn("THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.");this.texture.wrapT=a}},magFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");return this.texture.magFilter},set:function(a){console.warn("THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.");this.texture.magFilter=a}},minFilter:{get:function(){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");return this.texture.minFilter},
-set:function(a){console.warn("THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.");this.texture.minFilter=a}},anisotropy:{get:function(){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");return this.texture.anisotropy},set:function(a){console.warn("THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.");this.texture.anisotropy=a}},offset:{get:function(){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");return this.texture.offset},
-set:function(a){console.warn("THREE.WebGLRenderTarget: .offset is now .texture.offset.");this.texture.offset=a}},repeat:{get:function(){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");return this.texture.repeat},set:function(a){console.warn("THREE.WebGLRenderTarget: .repeat is now .texture.repeat.");this.texture.repeat=a}},format:{get:function(){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");return this.texture.format},set:function(a){console.warn("THREE.WebGLRenderTarget: .format is now .texture.format.");
-this.texture.format=a}},type:{get:function(){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");return this.texture.type},set:function(a){console.warn("THREE.WebGLRenderTarget: .type is now .texture.type.");this.texture.type=a}},generateMipmaps:{get:function(){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");return this.texture.generateMipmaps},set:function(a){console.warn("THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.");
-this.texture.generateMipmaps=a}}});Object.defineProperties(id.prototype,{load:{value:function(a){console.warn("THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.");var b=this;(new uf).load(a,function(a){b.setBuffer(a)});return this}},startTime:{set:function(){console.warn("THREE.Audio: .startTime is now .play( delay ).")}}});Kg.prototype.getData=function(){console.warn("THREE.AudioAnalyser: .getData() is now .getFrequencyData().");return this.getFrequencyData()};Ic.prototype.updateCubeMap=
-function(a,b){console.warn("THREE.CubeCamera: .updateCubeMap() is now .update().");return this.update(a,b)};Pb.crossOrigin=void 0;Pb.loadTexture=function(a,b,c,d){console.warn("THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.");var e=new ff;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a};Pb.loadTextureCube=function(a,b,c,d){console.warn("THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.");
-var e=new ef;e.setCrossOrigin(this.crossOrigin);a=e.load(a,c,void 0,d);b&&(a.mapping=b);return a};Pb.loadCompressedTexture=function(){console.error("THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.")};Pb.loadCompressedTextureCube=function(){console.error("THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.")};"undefined"!==typeof __THREE_DEVTOOLS__&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent("register",{detail:{revision:"119"}}));
-k.ACESFilmicToneMapping=4;k.AddEquation=100;k.AddOperation=2;k.AdditiveAnimationBlendMode=2501;k.AdditiveBlending=2;k.AlphaFormat=1021;k.AlwaysDepth=1;k.AlwaysStencilFunc=519;k.AmbientLight=nf;k.AmbientLightProbe=Fg;k.AnimationClip=Pa;k.AnimationLoader=wg;k.AnimationMixer=Mg;k.AnimationObjectGroup=ji;k.AnimationUtils=ka;k.ArcCurve=gd;k.ArrayCamera=Ne;k.ArrowHelper=Ob;k.Audio=id;k.AudioAnalyser=Kg;k.AudioContext=Ig;k.AudioListener=Hg;k.AudioLoader=uf;k.AxesHelper=ve;k.AxisHelper=function(a){console.warn("THREE.AxisHelper has been renamed to THREE.AxesHelper.");
-return new ve(a)};k.BackSide=1;k.BasicDepthPacking=3200;k.BasicShadowMap=0;k.BinaryTextureLoader=function(a){console.warn("THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.");return new df(a)};k.Bone=pg;k.BooleanKeyframeTrack=$e;k.BoundingBoxHelper=function(a,b){console.warn("THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.");return new Nb(a,b)};k.Box2=Qg;k.Box3=Sa;k.Box3Helper=te;k.BoxBufferGeometry=Bb;k.BoxGeometry=Gc;k.BoxHelper=Nb;k.BufferAttribute=
-J;k.BufferGeometry=E;k.BufferGeometryLoader=sf;k.ByteType=1010;k.Cache=vc;k.Camera=db;k.CameraHelper=se;k.CanvasRenderer=function(){console.error("THREE.CanvasRenderer has been removed")};k.CanvasTexture=Rd;k.CatmullRomCurve3=za;k.CineonToneMapping=3;k.CircleBufferGeometry=cd;k.CircleGeometry=ke;k.ClampToEdgeWrapping=1001;k.Clock=Gg;k.ClosedSplineCurve3=ri;k.Color=H;k.ColorKeyframeTrack=af;k.CompressedTexture=Qc;k.CompressedTextureLoader=xg;k.ConeBufferGeometry=je;k.ConeGeometry=ie;k.CubeCamera=Ic;
-k.CubeGeometry=Gc;k.CubeReflectionMapping=301;k.CubeRefractionMapping=302;k.CubeTexture=ob;k.CubeTextureLoader=ef;k.CubeUVReflectionMapping=306;k.CubeUVRefractionMapping=307;k.CubicBezierCurve=Wa;k.CubicBezierCurve3=gb;k.CubicInterpolant=Ye;k.CullFaceBack=1;k.CullFaceFront=2;k.CullFaceFrontBack=3;k.CullFaceNone=0;k.Curve=K;k.CurvePath=sb;k.CustomBlending=5;k.CustomToneMapping=5;k.CylinderBufferGeometry=qb;k.CylinderGeometry=kc;k.Cylindrical=mi;k.DataTexture=bc;k.DataTexture2DArray=Kc;k.DataTexture3D=
-Lc;k.DataTextureLoader=df;k.DecrementStencilOp=7683;k.DecrementWrapStencilOp=34056;k.DefaultLoadingManager=fi;k.DepthFormat=1026;k.DepthStencilFormat=1027;k.DepthTexture=Sd;k.DirectionalLight=mf;k.DirectionalLightHelper=md;k.DirectionalLightShadow=lf;k.DiscreteInterpolant=Ze;k.DodecahedronBufferGeometry=Vc;k.DodecahedronGeometry=Yd;k.DoubleSide=2;k.DstAlphaFactor=206;k.DstColorFactor=208;k.DynamicBufferAttribute=function(a,b){console.warn("THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setUsage( THREE.DynamicDrawUsage ) instead.");
-return(new J(a,b)).setUsage(35048)};k.DynamicCopyUsage=35050;k.DynamicDrawUsage=35048;k.DynamicReadUsage=35049;k.EdgesGeometry=bd;k.EdgesHelper=function(a,b){console.warn("THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.");return new ea(new bd(a.geometry),new ja({color:void 0!==b?b:16777215}))};k.EllipseCurve=La;k.EqualDepth=4;k.EqualStencilFunc=514;k.EquirectangularReflectionMapping=303;k.EquirectangularRefractionMapping=304;k.Euler=Vb;k.EventDispatcher=Ea;k.ExtrudeBufferGeometry=
-eb;k.ExtrudeGeometry=gc;k.Face3=Cc;k.Face4=function(a,b,c,d,e,f,g){console.warn("THREE.Face4 has been removed. A THREE.Face3 will be created instead.");return new Cc(a,b,c,e,f,g)};k.FaceColors=1;k.FileLoader=Qa;k.FlatShading=1;k.Float32Attribute=function(a,b){console.warn("THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.");return new A(a,b)};k.Float32BufferAttribute=A;k.Float64Attribute=function(a,b){console.warn("THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.");
-return new Gd(a,b)};k.Float64BufferAttribute=Gd;k.FloatType=1015;k.Fog=Pe;k.FogExp2=Oe;k.Font=Cg;k.FontLoader=Dg;k.FrontSide=0;k.Frustum=Jc;k.GammaEncoding=3007;k.Geometry=F;k.GeometryUtils={merge:function(a,b,c){console.warn("THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.");if(b.isMesh){b.matrixAutoUpdate&&b.updateMatrix();var d=b.matrix;b=b.geometry}a.merge(b,d,c)},center:function(a){console.warn("THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.");
-return a.center()}};k.GreaterDepth=6;k.GreaterEqualDepth=5;k.GreaterEqualStencilFunc=518;k.GreaterStencilFunc=516;k.GridHelper=re;k.Group=Gb;k.HalfFloatType=1016;k.HemisphereLight=gf;k.HemisphereLightHelper=ld;k.HemisphereLightProbe=Eg;k.IcosahedronBufferGeometry=Uc;k.IcosahedronGeometry=Xd;k.ImageBitmapLoader=Ag;k.ImageLoader=fd;k.ImageUtils=Pb;k.ImmediateRenderObject=qe;k.IncrementStencilOp=7682;k.IncrementWrapStencilOp=34055;k.InstancedBufferAttribute=rf;k.InstancedBufferGeometry=pe;k.InstancedInterleavedBuffer=
-Ng;k.InstancedMesh=Te;k.Int16Attribute=function(a,b){console.warn("THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.");return new Ed(a,b)};k.Int16BufferAttribute=Ed;k.Int32Attribute=function(a,b){console.warn("THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.");return new Fd(a,b)};k.Int32BufferAttribute=Fd;k.Int8Attribute=function(a,b){console.warn("THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.");
-return new Bd(a,b)};k.Int8BufferAttribute=Bd;k.IntType=1013;k.InterleavedBuffer=Ba;k.InterleavedBufferAttribute=Hb;k.Interpolant=Ka;k.InterpolateDiscrete=2300;k.InterpolateLinear=2301;k.InterpolateSmooth=2302;k.InvertStencilOp=5386;k.JSONLoader=function(){console.error("THREE.JSONLoader has been removed.")};k.KeepStencilOp=7680;k.KeyframeTrack=ya;k.LOD=Qd;k.LatheBufferGeometry=ad;k.LatheGeometry=he;k.Layers=He;k.LensFlare=function(){console.error("THREE.LensFlare has been moved to /examples/jsm/objects/Lensflare.js")};
-k.LessDepth=2;k.LessEqualDepth=3;k.LessEqualStencilFunc=515;k.LessStencilFunc=513;k.Light=fa;k.LightProbe=Ra;k.LightShadow=ib;k.Line=Ja;k.Line3=Rg;k.LineBasicMaterial=ja;k.LineCurve=ia;k.LineCurve3=Xa;k.LineDashedMaterial=qc;k.LineLoop=Ue;k.LinePieces=1;k.LineSegments=ea;k.LineStrip=0;k.LinearEncoding=3E3;k.LinearFilter=1006;k.LinearInterpolant=le;k.LinearMipMapLinearFilter=1008;k.LinearMipMapNearestFilter=1007;k.LinearMipmapLinearFilter=1008;k.LinearMipmapNearestFilter=1007;k.LinearToneMapping=1;
-k.Loader=X;k.LoaderUtils=oh;k.LoadingManager=vg;k.LogLuvEncoding=3003;k.LoopOnce=2200;k.LoopPingPong=2202;k.LoopRepeat=2201;k.LuminanceAlphaFormat=1025;k.LuminanceFormat=1024;k.MOUSE={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2};k.Material=L;k.MaterialLoader=qf;k.Math=P;k.MathUtils=P;k.Matrix3=qa;k.Matrix4=U;k.MaxEquation=104;k.Mesh=T;k.MeshBasicMaterial=Na;k.MeshDepthMaterial=Db;k.MeshDistanceMaterial=Eb;k.MeshFaceMaterial=function(a){console.warn("THREE.MeshFaceMaterial has been removed. Use an Array instead.");
-return a};k.MeshLambertMaterial=oc;k.MeshMatcapMaterial=pc;k.MeshNormalMaterial=nc;k.MeshPhongMaterial=Lb;k.MeshPhysicalMaterial=Kb;k.MeshStandardMaterial=fb;k.MeshToonMaterial=mc;k.MinEquation=103;k.MirroredRepeatWrapping=1002;k.MixOperation=1;k.MultiMaterial=function(a){void 0===a&&(a=[]);console.warn("THREE.MultiMaterial has been removed. Use an Array instead.");a.isMultiMaterial=!0;a.materials=a;a.clone=function(){return a.slice()};return a};k.MultiplyBlending=4;k.MultiplyOperation=0;k.NearestFilter=
-1003;k.NearestMipMapLinearFilter=1005;k.NearestMipMapNearestFilter=1004;k.NearestMipmapLinearFilter=1005;k.NearestMipmapNearestFilter=1004;k.NeverDepth=0;k.NeverStencilFunc=512;k.NoBlending=0;k.NoColors=0;k.NoToneMapping=0;k.NormalAnimationBlendMode=2500;k.NormalBlending=1;k.NotEqualDepth=7;k.NotEqualStencilFunc=517;k.NumberKeyframeTrack=dd;k.Object3D=C;k.ObjectLoader=tf;k.ObjectSpaceNormalMap=1;k.OctahedronBufferGeometry=ec;k.OctahedronGeometry=Wd;k.OneFactor=201;k.OneMinusDstAlphaFactor=207;k.OneMinusDstColorFactor=
-209;k.OneMinusSrcAlphaFactor=205;k.OneMinusSrcColorFactor=203;k.OrthographicCamera=hd;k.PCFShadowMap=1;k.PCFSoftShadowMap=2;k.PMREMGenerator=Tg;k.ParametricBufferGeometry=Sc;k.ParametricGeometry=Td;k.Particle=function(a){console.warn("THREE.Particle has been renamed to THREE.Sprite.");return new Od(a)};k.ParticleBasicMaterial=function(a){console.warn("THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.");return new Va(a)};k.ParticleSystem=function(a,b){console.warn("THREE.ParticleSystem has been renamed to THREE.Points.");
-return new Pc(a,b)};k.ParticleSystemMaterial=function(a){console.warn("THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.");return new Va(a)};k.Path=$a;k.PerspectiveCamera=W;k.Plane=Ta;k.PlaneBufferGeometry=cc;k.PlaneGeometry=Id;k.PlaneHelper=ue;k.PointCloud=function(a,b){console.warn("THREE.PointCloud has been renamed to THREE.Points.");return new Pc(a,b)};k.PointCloudMaterial=function(a){console.warn("THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.");return new Va(a)};
-k.PointLight=kf;k.PointLightHelper=kd;k.Points=Pc;k.PointsMaterial=Va;k.PolarGridHelper=wf;k.PolyhedronBufferGeometry=sa;k.PolyhedronGeometry=Ud;k.PositionalAudio=Jg;k.PropertyBinding=wa;k.PropertyMixer=Lg;k.QuadraticBezierCurve=Ya;k.QuadraticBezierCurve3=hb;k.Quaternion=Y;k.QuaternionKeyframeTrack=me;k.QuaternionLinearInterpolant=bf;k.REVISION="119";k.RGBADepthPacking=3201;k.RGBAFormat=1023;k.RGBAIntegerFormat=1033;k.RGBA_ASTC_10x10_Format=37819;k.RGBA_ASTC_10x5_Format=37816;k.RGBA_ASTC_10x6_Format=
-37817;k.RGBA_ASTC_10x8_Format=37818;k.RGBA_ASTC_12x10_Format=37820;k.RGBA_ASTC_12x12_Format=37821;k.RGBA_ASTC_4x4_Format=37808;k.RGBA_ASTC_5x4_Format=37809;k.RGBA_ASTC_5x5_Format=37810;k.RGBA_ASTC_6x5_Format=37811;k.RGBA_ASTC_6x6_Format=37812;k.RGBA_ASTC_8x5_Format=37813;k.RGBA_ASTC_8x6_Format=37814;k.RGBA_ASTC_8x8_Format=37815;k.RGBA_BPTC_Format=36492;k.RGBA_ETC2_EAC_Format=37496;k.RGBA_PVRTC_2BPPV1_Format=35843;k.RGBA_PVRTC_4BPPV1_Format=35842;k.RGBA_S3TC_DXT1_Format=33777;k.RGBA_S3TC_DXT3_Format=
-33778;k.RGBA_S3TC_DXT5_Format=33779;k.RGBDEncoding=3006;k.RGBEEncoding=3002;k.RGBEFormat=1023;k.RGBFormat=1022;k.RGBIntegerFormat=1032;k.RGBM16Encoding=3005;k.RGBM7Encoding=3004;k.RGB_ETC1_Format=36196;k.RGB_ETC2_Format=37492;k.RGB_PVRTC_2BPPV1_Format=35841;k.RGB_PVRTC_4BPPV1_Format=35840;k.RGB_S3TC_DXT1_Format=33776;k.RGFormat=1030;k.RGIntegerFormat=1031;k.RawShaderMaterial=rb;k.Ray=Xb;k.Raycaster=Og;k.RectAreaLight=of;k.RedFormat=1028;k.RedIntegerFormat=1029;k.ReinhardToneMapping=2;k.RepeatWrapping=
-1E3;k.ReplaceStencilOp=7681;k.ReverseSubtractEquation=102;k.RingBufferGeometry=$c;k.RingGeometry=ge;k.SRGB8_ALPHA8_ASTC_10x10_Format=37851;k.SRGB8_ALPHA8_ASTC_10x5_Format=37848;k.SRGB8_ALPHA8_ASTC_10x6_Format=37849;k.SRGB8_ALPHA8_ASTC_10x8_Format=37850;k.SRGB8_ALPHA8_ASTC_12x10_Format=37852;k.SRGB8_ALPHA8_ASTC_12x12_Format=37853;k.SRGB8_ALPHA8_ASTC_4x4_Format=37840;k.SRGB8_ALPHA8_ASTC_5x4_Format=37841;k.SRGB8_ALPHA8_ASTC_5x5_Format=37842;k.SRGB8_ALPHA8_ASTC_6x5_Format=37843;k.SRGB8_ALPHA8_ASTC_6x6_Format=
-37844;k.SRGB8_ALPHA8_ASTC_8x5_Format=37845;k.SRGB8_ALPHA8_ASTC_8x6_Format=37846;k.SRGB8_ALPHA8_ASTC_8x8_Format=37847;k.Scene=Ad;k.SceneUtils={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")}};k.ShaderChunk=O;k.ShaderLib=
-Ua;k.ShaderMaterial=ra;k.ShadowMaterial=lc;k.Shape=Mb;k.ShapeBufferGeometry=jc;k.ShapeGeometry=ic;k.ShapePath=Bg;k.ShapeUtils=pb;k.ShortType=1011;k.Skeleton=Se;k.SkeletonHelper=rc;k.SkinnedMesh=Re;k.SmoothShading=2;k.Sphere=cb;k.SphereBufferGeometry=hc;k.SphereGeometry=fe;k.Spherical=Ac;k.SphericalHarmonics3=pf;k.Spline=Wg;k.SplineCurve=Za;k.SplineCurve3=si;k.SpotLight=jf;k.SpotLightHelper=jd;k.SpotLightShadow=hf;k.Sprite=Od;k.SpriteMaterial=Ib;k.SrcAlphaFactor=204;k.SrcAlphaSaturateFactor=210;k.SrcColorFactor=
-202;k.StaticCopyUsage=35046;k.StaticDrawUsage=35044;k.StaticReadUsage=35045;k.StereoCamera=hi;k.StreamCopyUsage=35042;k.StreamDrawUsage=35040;k.StreamReadUsage=35041;k.StringKeyframeTrack=cf;k.SubtractEquation=101;k.SubtractiveBlending=3;k.TOUCH={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3};k.TangentSpaceNormalMap=0;k.TetrahedronBufferGeometry=Tc;k.TetrahedronGeometry=Vd;k.TextBufferGeometry=Zc;k.TextGeometry=ee;k.Texture=V;k.TextureLoader=ff;k.TorusBufferGeometry=Xc;k.TorusGeometry=ae;k.TorusKnotBufferGeometry=
-Wc;k.TorusKnotGeometry=$d;k.Triangle=ba;k.TriangleFanDrawMode=2;k.TriangleStripDrawMode=1;k.TrianglesDrawMode=0;k.TubeBufferGeometry=fc;k.TubeGeometry=Zd;k.UVMapping=300;k.Uint16Attribute=function(a,b){console.warn("THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.");return new Yb(a,b)};k.Uint16BufferAttribute=Yb;k.Uint32Attribute=function(a,b){console.warn("THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.");return new Zb(a,
-b)};k.Uint32BufferAttribute=Zb;k.Uint8Attribute=function(a,b){console.warn("THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.");return new Cd(a,b)};k.Uint8BufferAttribute=Cd;k.Uint8ClampedAttribute=function(a,b){console.warn("THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.");return new Dd(a,b)};k.Uint8ClampedBufferAttribute=Dd;k.Uniform=vf;k.UniformsLib=G;k.UniformsUtils=Qh;k.UnsignedByteType=1009;k.UnsignedInt248Type=
-1020;k.UnsignedIntType=1014;k.UnsignedShort4444Type=1017;k.UnsignedShort5551Type=1018;k.UnsignedShort565Type=1019;k.UnsignedShortType=1012;k.VSMShadowMap=3;k.Vector2=u;k.Vector3=m;k.Vector4=S;k.VectorKeyframeTrack=ed;k.Vertex=function(a,b,c){console.warn("THREE.Vertex has been removed. Use THREE.Vector3 instead.");return new m(a,b,c)};k.VertexColors=2;k.VideoTexture=sg;k.WebGL1Renderer=og;k.WebGLCubeRenderTarget=ac;k.WebGLMultisampleRenderTarget=ag;k.WebGLRenderTarget=Ga;k.WebGLRenderTargetCube=function(a,
-b,c){console.warn("THREE.WebGLRenderTargetCube( width, height, options ) is now WebGLCubeRenderTarget( size, options ).");return new ac(a,c)};k.WebGLRenderer=Nd;k.WebGLUtils=Uh;k.WireframeGeometry=Rc;k.WireframeHelper=function(a,b){console.warn("THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.");return new ea(new Rc(a.geometry),new ja({color:void 0!==b?b:16777215}))};k.WrapAroundEnding=2402;k.XHRLoader=function(a){console.warn("THREE.XHRLoader has been renamed to THREE.FileLoader.");
-return new Qa(a)};k.ZeroCurvatureEnding=2400;k.ZeroFactor=200;k.ZeroSlopeEnding=2401;k.ZeroStencilOp=0;k.sRGBEncoding=3001;Object.defineProperty(k,"__esModule",{value:!0})});
diff --git a/layouts/_default/list.html b/layouts/_default/list.html
@@ -0,0 +1,11 @@
+{{ partial "header.html" . -}}
+<header><h1 id="tag_{{ .Title }}">{{ .Title | title }}</h1></header>
+<article>
+{{ .Content -}}
+<ul>
+{{- range.Pages }}
+ <li><time datetime="{{ .Date.Format "2006-01-02T15:04:05Z07:00" }}">{{ .Date.Format "2006 Jan 02" }}</time> – <a href="{{ .RelPermalink }}">{{ .Title }}</a></li>
+{{ end -}}
+</ul>
+</article>
+{{- partial "footer.html" . }}
diff --git a/layouts/_default/rss.xml b/layouts/_default/rss.xml
@@ -0,0 +1,26 @@
+<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+ <channel>
+ <title>{{ .Site.Title }}</title>
+ <link>{{ .Permalink }}</link>
+ <description>Recent content {{ if ne .Title .Site.Title }}{{ with .Title }}in {{.}} {{ end }}{{ end }}on {{ .Site.Title }}</description>
+ <generator>Hugo -- gohugo.io</generator>{{ with .Site.LanguageCode }}
+ <language>{{.}}</language>{{end}}{{ with .Site.Author.email }}
+ <managingEditor>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</managingEditor>{{end}}{{ with .Site.Author.email }}
+ <webMaster>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</webMaster>{{end}}{{ with .Site.Copyright }}
+ <copyright>{{.}}</copyright>{{end}}{{ if not .Date.IsZero }}
+ <lastBuildDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</lastBuildDate>{{ end }}
+ {{ with .OutputFormats.Get "RSS" }}
+ {{ printf "<atom:link href=%q rel="self" type=%q />" .Permalink .MediaType | safeHTML }}
+ {{ end }}
+ {{ range .Pages }}
+ <item>
+ <title>{{ .Title }}</title>
+ <link>{{ .Permalink }}</link>
+ <pubDate>{{ .Date.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}</pubDate>
+ {{ with .Site.Author.email }}<author>{{.}}{{ with $.Site.Author.name }} ({{.}}){{end}}</author>{{end}}
+ <guid>{{ .Permalink }}</guid>
+ <description>{{- .Content | html -}}</description>
+ </item>
+ {{ end }}
+ </channel>
+</rss>
diff --git a/layouts/_default/single.html b/layouts/_default/single.html
@@ -0,0 +1,7 @@
+{{ partial "header.html" . -}}
+<header><h1>{{ .Title }}</h1></header>
+<article>
+<div class="main">
+{{ .Content -}}
+</div>
+{{ partial "footer.html" . }}
diff --git a/layouts/index.html b/layouts/index.html
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+<html lang="en">
+
+<head>
+<title>Michael Percival's Home Page</title>
+<meta charset="utf-8"/ >
+<meta name="author" content="mpizzzle"/ >
+<link rel="stylesheet" type="text/css" href="style.css"/ >
+<link rel="icon" type="image/jpg" href="mpizzzle.jpg"/ >
+</head>
+
+<body>
+{{ partial "navigation.html" }}
+<div class="main">
+ <div class="profile-container">
+ <div class="profile-element">
+ <p><img src="mpizzzle.jpg" alt="" width="400" height="400" /></p>
+ </div>
+ <div class="profile-element">
+ <p>My name is Michael Percival. I am:</p>
+ <ul>
+ <li>a software engineer based in central London</li>
+ <li>trying to be excellent engineer</li>
+ <li>trying to suck less at Brazilian Jiu Jitsu</li>
+ <li>trying to rank up at Go 바둑.</li>
+ </ul>
+ <p>Some of my interests include:</p>
+ <ul>
+ <li>Brazilian Jiu Jitsu. I train at 10th Planet London.</li>
+ <li>Minimalist, free/ libre software</li>
+ <li>Machine Learning</li>
+ <li>Go (the board game, though golang is also neat) challenge me, mpizzzle on <a href="https://pandanet-igs.com/communities/pandanet">pandanet</a>.</li>
+ <li>Cryptography. The <a href="https://cryptopals.com/">cryptopals</a> challenges are great if you want to learn through trial by fire.</li>
+ <li>Organic Chemistry, no space for it in London though unfortunately.</li>
+ <li>Speaking terrible Spanish.</li>
+ </ul>
+ </div>
+ </div>
+
+ <div class="contact-element">
+ <p>Contact:</p>
+ <li>cv: <a href="cv.pdf">cv.pdf</a></li>
+ <li>email: <a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> <a href="mpxyz.pgp"><img src="gnupg.png" alt="" width="32" height="32" /></a></li>
+ </div>
+
+ </div>
+</body>
+
+</html>
diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html
@@ -0,0 +1,10 @@
+{{ partial "nextprev.html" . -}}
+{{ partial "taglist.html" . -}}
+</article>
+</main>
+<footer>
+ <a href="{{ .Site.BaseURL }}">{{ .Site.BaseURL }}</a><br><br>
+ <a href="/index.xml"><img src="/rss.svg" style="max-height:1.5em" alt="RSS Feed" title="Subscribe via RSS for updates."></a>
+</footer>
+</body>
+</html>
diff --git a/layouts/partials/header.html b/layouts/partials/header.html
@@ -0,0 +1,19 @@
+<!DOCTYPE html>
+<html lang="{{ .Site.Language }}">
+<head>
+ <title>{{ if not .IsHome }}{{ .Title | title }} | {{ end }}{{ .Site.Title }}</title>
+ <link rel="canonical" href="{{ .Site.BaseURL }}">
+ <link rel='alternate' type='application/rss+xml' title="{{ .Site.Title }} RSS" href='/index.xml'>
+ <link rel='stylesheet' type='text/css' href='/style.css'>
+ {{ with .Site.Params.favicon }}<link rel="icon" href="{{ . }}">
+ {{ end -}}
+ <meta name="description" content="{{ with .Params.description }}{{ . }}{{ else }}{{ .Summary }}{{ end }}">
+ {{ if isset .Params "tags" }}<meta name="keywords" content="{{ with .Params.tags }}{{ delimit . ", " }}{{ end }}">
+ {{ end -}}
+ <meta name="viewport" content="width=device-width, initial-scale=1">
+ <meta name="robots" content="index, follow">
+ <meta charset="utf-8">
+</head>
+<body>
+{{ partial "navigation.html" . }}
+<main>
diff --git a/layouts/partials/nav.html b/layouts/partials/nav.html
@@ -0,0 +1,8 @@
+<nav>
+ <ul>
+{{- $sec := .Page.Section }}{{ $file := .File.TranslationBaseName -}}
+{{ range.Site.Menus.main.ByWeight }}{{ $base := path.Base .URL }}
+ <li><a {{ if or ( eq $sec $base ) ( eq $file $base ) ( and (eq $sec "") ( eq $file "_index") (eq $base "/") ) }}class="menuactive" {{ end }}href="{{ .URL }}"><span class=pre>{{ .Pre }}</span><span class=menuname>{{ .Name }}</span></a></li>
+{{- end }}
+ </ul>
+</nav>
diff --git a/layouts/partials/navigation.html b/layouts/partials/navigation.html
@@ -0,0 +1,19 @@
+<nav class="nav-container">
+ <div class="nav-element">
+ <p><a href="https://git.michaelpercival.xyz"><img src="/git.png" width="32" height="32" /></a> |
+ <a href="https://github.com/mpizzzle"><img src="/github.png" width="32" height="32" /></a> |
+ <a href="/rss.xml"><img src="/rss.png" width="32" height="32" /></a></p>
+ </div>
+ <div class="nav-element">
+ <p><a href="/">home</a> |
+ <a href="/blog">thoughts</a> |
+ <a href="/software">software</a> |
+ <a href="/hardware">hardware</a> |
+ <a href="/library">library</a> |
+ <a href="/wallpapers">wallpapers</a></p>
+ </div>
+ <div class="nav-element">
+ <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> |
+ <a href="/mpxyz.pgp"><img src="/gnupg.png" width="32" height="32" /></a></p>
+ </div>
+</nav>
diff --git a/layouts/partials/nextprev.html b/layouts/partials/nextprev.html
@@ -0,0 +1,10 @@
+{{ if or .Next .Prev -}}
+<div id="nextprev">
+{{- with .Prev }}
+<a href="{{ .RelPermalink}}"><div id="prevart">Previous:<br>{{.Title}}</div></a>
+{{ end -}}
+{{- with .Next -}}
+<a href="{{ .RelPermalink}}"><div id="nextart">Next:<br>{{.Title}}</div></a>
+{{ end -}}
+</div>
+{{ end -}}
diff --git a/layouts/partials/taglist.html b/layouts/partials/taglist.html
@@ -0,0 +1,13 @@
+ {{- if isset .Params "tags" -}}
+ {{- $tagsLen := len .Params.tags -}}
+ {{- if gt $tagsLen 0 -}}
+ <div style="clear:both" class=taglist>
+ {{- with .Site.Params.relatedtext }}{{ . }}<br>{{ end -}}
+ {{- range $k, $v := .Params.tags -}}
+ {{- $url := printf "tags/%s" (. | urlize | lower) -}}
+ <a id="tag_{{ . | lower }}" href="{{ $url | absURL }}">{{ . | title }}</a>
+ {{- if lt $k (sub $tagsLen 1) }} · {{ end -}}
+ {{- end -}}
+ </div>
+ {{- end -}}
+ {{- end }}
diff --git a/layouts/shortcodes/gallery.html b/layouts/shortcodes/gallery.html
@@ -0,0 +1,5 @@
+{{ range os.ReadDir "static/wallpapers" }}
+ <a href="/wallpapers/{{ .Name }}">
+ <img src="/wallpapers/{{ .Name }}" width="192" height="108">
+ </a>
+{{ end }}
diff --git a/layouts/shortcodes/image-row.html b/layouts/shortcodes/image-row.html
@@ -0,0 +1,4 @@
+<div class="img-row-container">
+ <img src="/assets/{{ .Get "img1" }}" alt="" width="400" height="400" />
+ <img src="/assets/{{ .Get "img2" }}" alt="" width="400" height="400" />
+</div>
diff --git a/layouts/shortcodes/img.html b/layouts/shortcodes/img.html
@@ -0,0 +1,24 @@
+<!--
+ class: class of the figure
+ link: url the image directs to
+ alt: alternative text
+ caption: caption
+ mouse: what the image says when moused over ("title" in HTML)
+-->
+<div class="img-row-container">
+ <figure {{ with .Get "class" }}class="{{.}}"{{ end -}}>
+ {{- with .Get "link"}}<a href="{{.}}">{{ end -}}
+ <img src="{{ .Get "src" }}"
+ {{- with .Get "mouse" }} title="{{.}}"{{ end -}}
+ {{- with .Get "alt" }} alt="{{.}}"{{ end -}}
+ {{- with .Get "width" }} width="{{.}}"{{ end -}}
+ {{- with .Get "height" }} height="{{.}}"{{ end -}}
+ >
+ {{- if .Get "link"}}</a>{{ end -}}
+ {{- with .Get "caption" -}}
+ <figcaption>
+ {{- . -}}
+ </figcaption>
+ {{- end -}}
+ </figure>
+</div>
diff --git a/layouts/shortcodes/pgp.html b/layouts/shortcodes/pgp.html
@@ -0,0 +1 @@
+<div class="pgp"><pre>{{ os.ReadFile "static/mpxyz.pgp" }}</pre></div>
diff --git a/library.html b/library.html
@@ -1,31 +0,0 @@
-<head>
-<title>Personal Library</title>
-<meta charset="utf-8">
-<meta name="author" content="mpizzzle">
-<link href="style.css" rel="stylesheet">
-<link rel="icon" type="image/jpg" href="mpizzzle.jpg"/ >
-</head>
-<body>
-<nav>
- <div class="nav-container">
- <div class="nav-element">
- <p><a href="https://git.michaelpercival.xyz"><img src="git.png" alt="" width="32" height="32" /></a> | <a href="https://github.com/mpizzzle"><img src="github.png" alt="" width="32" height="32" /></a> | <a href="rss.xml"><img src="rss.png" alt="" width="32" height="32" /></a></p>
- </div>
- <div class="nav-element">
- <p><a href="index.html">home</a> |
- <a href="2020.html">thoughts</a> |
- <a href="software.html">software</a> |
- <a href="hardware.html">hardware</a> |
- <a href="library.html">library</a> |
- <a href="shaders.html">shaders</a></p>
- </div>
- <div class="nav-element">
- <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> | <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></p>
- </div>
- </div>
-</nav>
-<div class="main">
-Fiction
-Non-Fiction
-</div>
-</body>
diff --git a/rss.xml b/rss.xml
@@ -1,99 +0,0 @@
-<!-- <?xml-stylesheet type="text/css" href="rss.css" ?> -->
-<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
-<channel>
-<title>Michael Percival's Blog</title>
-<description>
-Updates from Michael Percival. Give this file to your RSS feeder to receive blog updates.
-</description>
-<language>en-us</language>
-<link>https://michaelpercival.xyz/rss.xml</link>
-<atom:link href="https://michaelpercival.xyz/rss.xml" rel="self" type="application/rss+xml"/>
-<!-- LB -->
-
-<item>
-<title>Penrose Tilings part 1</title>
-<guid>https://michaelpercival.xyz/2020.html#penrose-tilings-part-1</guid>
-<pubDate>Sat, 07 Nov 2020 14:12:33 +0000</pubDate>
-<description><![CDATA[
-<p>I recently read an article that <a href="https://www.nobelprize.org/prizes/physics/2020/penrose/interview/">Roger Penrose</a> won a nobel prize for his theoretical work on Black Holes, which I'm sure is well deserved. Another creation of Roger Penrose, 'Penrose tilings' are also very interesting, being his solution for tiling an infinite plane aperiodically with only two tiles. Penrose tilings have an Escheresque quality to them (Escher and Penrose famously were both inspired by one-another during their respective careers) which I find fascinating.</p>
-<p>Having just moved into a new (tragically empty) flat, I've been inspired to try decorating it with some self created art, and Penrose tiling's beauty in conjunction with their relative ease of computability make them an ideal candidate. The idea I have is to write a program to generate some basic Penrose tilings, where I can then play around with the colour scheme, print out a frame, and paint them by hand in an Escher like style. How is that going to work? Let's find out.</p>
-
-<p>The rules for constructing penrose tilings are well documented, <a href="https://tartarus.org/~simon/20110412-penrose/penrose.xhtml">this</a> link in particular explains the iterative process in better detail than I ever could.</p>
-<p>The initial starting triangle shares it's geometry with a slice from a decagon (I will refer to this triangle type as 't123'). The easiest way to construct one is to draw a line of length 1 and rotate the end point by π/5 radians with respect to the origin; optionally repeat the process nine more times and you have a decagon. Conveniently, (0, 0) is the middle of the screen when it comes to computer graphics so arranging the triangles around the center of the screen is trivial.</p>
-<p>The simplest method of division is to take each t123 triangle and divide it into three sub triangles; you can calculate the sub-triangle geometry by finding two new vertices along the perimeter of the parent t123 triangle via the golden ratio (again, check out the link above for more detail).</p>
-<p>Doing this correctly you can fit two t123's and one t124 perfectly into a parent t123 triangle, and in a similar manner the rules for dividing t124 triangles is to fit one t123 and one t124. Boom, infinite Penrose tilings. Simple right? Check out the initial decagon and first t123 split below:
-
-<p><a href="blog/assets/pizza.png"><img src="blog/assets/pizza.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/more_complicated_pizza.png"><img src="blog/assets/more_complicated_pizza.png" alt="" width="400" height="400" /></a></p>
-
-<p>I have used the <a href="https://www.sfml-dev.org/">sfml</a> library in the past as a wrapper for GLSL shading, but it turned out to be a pain to use for this project. I admit my knowledge of the library is poor, but in a marginally more complex project I found a few too many things to be restrictive, for example managing <a href="https://www.sfml-dev.org/documentation/2.5.1/classsf_1_1VertexBuffer.php">vertex buffers</a> (how do I handle my own element buffer objects?); in the end I'd rather just call the OpenGL functions myself, so I scrapped the library in favour of <a href="https://www.glfw.org/">glfw</a>. A little more work required in exchange for a little more control turned out to be the right balance.</p>
-
-<p>Once I had sufficiently bashed myself over the head trying to remember how the OpenGL rendering pipeline works, most of the implementation was a modest cycle of tinkering/ refactoring. The only tricky part was that I had to look up was <a href="https://math.stackexchange.com/questions/2045174/how-to-find-a-point-between-two-points-with-given-distance">how to find a point on a line</a> (thank you based math stack exchange), something I'm sure I learned in school and immediately forgot.</p>
-
-<p>For reference, the formula for calculating a point between two points is:
-<ul>
- <li>(xt, yt) = (((1 − t) * x0 + (t * x1)), ((1 − t) * y0 + (t * y1)))</li>
- <li>where ratio t = dt / d</li>
- <li>and distance d = √((x1 − x0)² + (y1 − y0)²)</li>
-</ul></p>
-
-<p>That looks like a bit of a pain, but for our use case it simplifies nicely since sub-triangles are always a... ratio... of the golden ratio. That is to say:
-<ul>
- <li>dt = φ * d</li>
- <li>∴ t = φ</li>
- <li>∴ no need to calculate d at all (nice.).</li>
-</ul></p>
-
-<p>Once that was solved I ended up with this interesting pattern, from which the Penrose tiling can be carved out:</p>
-<a href="blog/assets/skeleton.png"><img src="blog/assets/skeleton.png" alt="" width="400" height="400" /></a></p>
-
-<p>Despite the above picture being formed from only two different triangles, it is not a valid Penrose tiling. Some of the lines need to be removed, and at the time I was rendering whole triangles instead of individual lines which wasn't flexible enough in terms of design. Once I figured out which lines needed to be removed and how, I ended up with the following:</p>
-
-<p><a href="blog/assets/p2.png"><img src="blog/assets/p2.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p3.png"><img src="blog/assets/p3.png" alt="" width="400" height="400" /></a></p>
-
-<p>Voila! That qualifies as a valid Penrose tiling, and with some careful tinkering I was able to generate the P3 tiling also. Next, using the triangle index data for shading (one element buffer for the t123 triangles, and one for t124):</p>
-
-<p><a href="blog/assets/p2_two_colour.png"><img src="blog/assets/p2_two_colour.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p3_two_colour.png"><img src="blog/assets/p3_two_colour.png" alt="" width="400" height="400" /></a></p>
-
-<p>Then trying to be clever by using a six colour palette (including the lines and background). This was achieved by looking at the parent type of any given triangle giving us 2² colour options for the triangles. I think it turned out nicely:</p>
-
-<p><a href="blog/assets/p3_four_colour_1.png"><img src="blog/assets/p3_four_colour_1.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p2_four_colour_1.png"><img src="blog/assets/p2_four_colour_1.png" alt="" width="400" height="400" /></a></p>
-<p><a href="blog/assets/p2_four_colour_2.png"><img src="blog/assets/p2_four_colour_2.png" alt="" width="400" height="400" /></a>
-<a href="blog/assets/p3_four_colour_2.png"><img src="blog/assets/p3_four_colour_2.png" alt="" width="400" height="400" /></a></p>
-
-<p>I know there are better and more elegant ways of shading Penrose tilings but I feel happy that I've done what I set out to do, the hard part is waiting for divine inspiration to kick in before I try and paint one for real.</p>
-<p>You can find the code used to generate the images above on github <a href="https://github.com/mpizzzle/penrose">here</a>. If you want to compile the program yourself you'll have install the dependencies manually for now; I may take the time to package it with a more modern build tool in the future.</p>
-<p>Peace out.</p>
-]]></description>
-</item>
-
-
-
-
-
-
-<item>
-<title>on shaders</title>
-<guid>https://michaelpercival.xyz/2020.html#on-shaders</guid>
-<pubDate>Fri, 21 Aug 2020 22:03:36 +0100</pubDate>
-<description><![CDATA[
-<p>Writing shaders is an impressive art form.<p/>
-
-<p>I think this is because shaders intersect with a few interesting disciplines: mathematics, art, minimalism, etc. and thus anyone can look at a shader and see the inherent beauty.<p/>
-
-<p>The flip side is that writing shaders is hard, and my own 'shading ability' is total dog shit.<p/>
-
-<p>I'm going to try and nail two birds with one stone; my inability to finish personal projects, and my terrible understanding of shaders. Writing a shader is such a small self-contained project that it surely must be hard not to finish one, even for someone as lazy as myself? I will soon find out.<p/>
-
-<p>I want to see if I can crank out a shader every day for two weeks, creative integrity be damned. Of course this includes publishing shaders to this site, which means setting up whatever relevant frameworks (exactly the kind of BS that I end up tinkering with endlessly to avoid actually doing my projects).<p/>
-
-<p>Vamos. (see current progress <a href="../shaders.html">here<a/>.)<p/>
-]]></description>
-</item>
-
-
-</channel>
-</rss>
diff --git a/shaders.html b/shaders.html
@@ -1,33 +0,0 @@
-<head>
-<title>Shaders</title>
-<meta charset="utf-8">
-<meta name="author" content="mpizzzle">
-<link href="style.css" rel="stylesheet">
-<link rel="icon" type="image/jpg" href="mpizzzle.jpg"/ >
-</head>
-<body>
-<nav>
- <div class="nav-container">
- <div class="nav-element">
- <p><a href="https://git.michaelpercival.xyz"><img src="git.png" alt="" width="32" height="32" /></a> | <a href="https://github.com/mpizzzle"><img src="github.png" alt="" width="32" height="32" /></a> | <a href="rss.xml"><img src="rss.png" alt="" width="32" height="32" /></a></p>
- </div>
- <div class="nav-element">
- <p><a href="index.html">home</a> |
- <a href="2020.html">thoughts</a> |
- <a href="software.html">software</a> |
- <a href="hardware.html">hardware</a> |
- <a href="library.html">library</a> |
- <a href="shaders.html">shaders</a></p>
- </div>
- <div class="nav-element">
- <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> | <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></p>
- </div>
- </div>
-</nav>
-<div class="main" id="container">
-</div>
-<script src="js/three.min.js"></script>
-<script src="shaders/test.vert" id="vertexShader" type="x-shader/x-vertex"></script>
-<script src="shaders/test.frag" id="fragmentShader" type="x-shader/x-fragment"></script>
-<script src="js/shader-container.js"></script>
-</body>
diff --git a/shaders/test.frag b/shaders/test.frag
@@ -1,12 +0,0 @@
-#version 120
-#ifdef GL_ES
-precision mediump float;
-#endif
-
-uniform vec2 u_resolution;
-uniform float u_time;
-
-void main() {
- vec2 st = gl_FragCoord.xy/ u_resolution.xy;
- gl_FragColor=vec4(st.x, st.y, 0.5, 1.0);
-}
diff --git a/shaders/test.vert b/shaders/test.vert
@@ -1,8 +0,0 @@
-#version 120
-#ifdef GL_ES
-precision mediump float;
-#endif
-
-void main() {
- gl_Position = vec4( position, 1.0 );
-}
diff --git a/software.html b/software.html
@@ -1,30 +0,0 @@
-<head>
-<title>Software</title>
-<meta charset="utf-8">
-<meta name="author" content="mpizzzle">
-<link href="style.css" rel="stylesheet">
-<link rel="icon" type="image/jpg" href="mpizzzle.jpg"/ >
-</head>
-<body>
-<nav>
- <div class="nav-container">
- <div class="nav-element">
- <p><a href="https://git.michaelpercival.xyz"><img src="git.png" alt="" width="32" height="32" /></a> | <a href="https://github.com/mpizzzle"><img src="github.png" alt="" width="32" height="32" /></a> | <a href="rss.xml"><img src="rss.png" alt="" width="32" height="32" /></a></p>
- </div>
- <div class="nav-element">
- <p><a href="index.html">home</a> |
- <a href="2020.html">thoughts</a> |
- <a href="software.html">software</a> |
- <a href="hardware.html">hardware</a> |
- <a href="library.html">library</a> |
- <a href="shaders.html">shaders</a></p>
- </div>
- <div class="nav-element">
- <p><a href="mailto:m@michaelpercival.xyz">m@michaelpercival.xyz</a> | <a href="gpg.html"><img src="gnupg.png" alt="" width="32" height="32" /></a></p>
- </div>
- </div>
-</nav>
-<div class="main">
-Coming soon.
-</div>
-</body>
diff --git a/blog/assets/more_complicated_pizza.png b/static/assets/more_complicated_pizza.png
Binary files differ.
diff --git a/blog/assets/p2.png b/static/assets/p2.png
Binary files differ.
diff --git a/blog/assets/p2_four_colour_1.png b/static/assets/p2_four_colour_1.png
Binary files differ.
diff --git a/blog/assets/p2_four_colour_2.png b/static/assets/p2_four_colour_2.png
Binary files differ.
diff --git a/blog/assets/p2_two_colour.png b/static/assets/p2_two_colour.png
Binary files differ.
diff --git a/blog/assets/p3.png b/static/assets/p3.png
Binary files differ.
diff --git a/blog/assets/p3_four_colour_1.png b/static/assets/p3_four_colour_1.png
Binary files differ.
diff --git a/blog/assets/p3_four_colour_2.png b/static/assets/p3_four_colour_2.png
Binary files differ.
diff --git a/blog/assets/p3_two_colour.png b/static/assets/p3_two_colour.png
Binary files differ.
diff --git a/blog/assets/pizza.png b/static/assets/pizza.png
Binary files differ.
diff --git a/blog/assets/skeleton.png b/static/assets/skeleton.png
Binary files differ.
diff --git a/git.png b/static/git.png
Binary files differ.
diff --git a/github.png b/static/github.png
Binary files differ.
diff --git a/gnupg.png b/static/gnupg.png
Binary files differ.
diff --git a/mpizzzle.jpg b/static/mpizzzle.jpg
Binary files differ.
diff --git a/static/mpxyz.pgp b/static/mpxyz.pgp
@@ -0,0 +1,104 @@
+pub rsa4096 2022-08-06 [SC] [expires: 2025-08-05]
+ 55B1D95A60B4806373A861206F20C1797BBCCD9D
+uid [ultimate] Michael Percival <m@michaelpercival.xyz>
+sub rsa4096 2022-08-06 [E] [expires: 2025-08-05]
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+
+mQINBFyp4XoBEAC9Wq/xvQcXL8n7eMrr3DtCq9F2XfgVs6rkkh1+p5IPmGJRkXn7
+yt6QHG0j+UF7z1Wc3Ds6QS11p4c2I8KOltu9fywWyZPu6RhqL8/fCMe+kb4vNCVZ
+guBWQKYlhHJFNrbP5vkfpGmSFInjaHjl5FaS1lZJke5M7KkYtyjHeQwMp4uRqdic
+i/eu5y6V99jUU45Am7+Lo5HEHZv2bx1i5JtNXA4x2ZZ6GoAtbJ2tPyLd/xYEEvMw
+b7uQ+3czuoWPFvFhXmuYPZS02CYvhmyRDdKgwDHuw6Fg7KhH6PICDphOV5WJQj5w
+t8XhgvT5z7yWrKQtmaUJpwVkieirsDMQyJAzoeDEwAA23CjVKXvS0FmxLO4pPhpg
+dN+zr3q+ZAWn72HbWKtIolQi3T1DhUla+FhkmMUn/SYgOWTqTgNWg4oksfGpfc/s
+QMW1WjVSmJpMjRq823XwWvprJNruSXfZ4IeaO14InPLeOtSs0w757wr+646KQSaU
+epVxtlm38NNqrMArgnWP/82otXBFQ8KC8h9prJetq0fD851jfgGjiL2Amc3UnZRM
+y49dGtdAMjqtzc1Eejh3is+cF/cW042PmQ+bYyPVaarDT8g5YAvh0g3IVMEDh2ch
+2buB84cMIR1CbAgUfY3Shhpb7thsdm7iQHqAnO2gQiWIeDuN/tt0wU6btwARAQAB
+tChNaWNoYWVsIFBlcmNpdmFsIDxtQG1pY2hhZWxwZXJjaXZhbC54eXo+iQJUBBMB
+CAA+FiEE/DBW/7JbJ/PiPEcUyaJKmeuVvKwFAlyp4XoCGwMFCQPCZwAFCwkIBwIG
+FQoJCAsCBBYCAwECHgECF4AACgkQyaJKmeuVvKw0Ww/7Bj2SXgVX/ryTaWy+6nM9
++7a+mEHQj7N1LZdeiY9gsUxsulyuPISoEHcxjXP+RAUvU70Xn0XQp5o0L1ep9S9m
+uVexMA4Rv7ntt8cRp05SyQjX9+UIfvKyABrwHDwGbIier6a0WXmIoeLAH0BIpCj9
+AsgejzjCwQeKWOTIU+aW8IhBsDEMDV27viOoseB9cEna3PNy6SFg3N4GecD5yz1Y
+wsWCPhPhA5/lddSYaStms1nExM57wgl3VYr2Gq5/aynTp/s74FK+mQWWmyrunNf2
+N+Tdvi+zZ7bIJjl8gCrWYHA/uTdtb7uD23j9C9qwzx+tfrggMCh2C/VntQA85gdy
+GobnbVBsGhOdySSZG2fRe7hU8cgZoIdM2ltfSwxupndDpwYiSSr+GnlvRhA+bLbG
+1rop3dRWFW0G3xgZeRYJKViXf5TPnZiV0w1rWCwHRSGJMSG4LcF2xa7oY1QlPHEu
+5FhnlGyXPIoRqoaoUShJCgWnWQ7Ak+1HvUg3feIYeSCEDwY8huN64SD7KNJwiWk8
+onNXcKspD2I8mCyMzZDJpacVzr4gX+H2ss7YYKdCUcIUBwe8pKTlJssaUHj9Ahy1
+wMALs2nZBvzswL89awOHxmR2mVGfTK+cmkFLeXEWRdyp3q60e0I2fCklNOTmagIV
+BVVaLzNf2HDNSaUd6qrLEqK5Ag0EXKnhegEQAL4EYRAjhzMhQaSmKF7AvAzWuLoD
+oa8DdoMGxzX3pnbJMRpKmYHFa90w93+CFwk2Ded/4WFoF28rZx9v0KgWNuhVpigH
+6/iCCaki974YxG8iPPU8KfPJA0nPW4sH1lZr3IHd8W28sHruDCJH4e6IHOybk85m
+SvGlFPRP/PIAfpuv1qu+SDDcTfbv59AOhrYNsfEnLgVlOjZlD7S6RqMqB0lMeMwr
+fzJ/g0Ydf0Dq+qmDGInlL6C4Qovsk+uegyJVdqYt47pfu9O6SQNQNMegyHLHFsac
+j+EDzMTaQEd/tJJ3qIT7pP6JMZAQvYqdd9Hcw4lVzpGZn3Dl+NEetlzrYqlF+Y1d
+Eeux/tW3q+9bAkaf+ctQcXDawlHxN7METmjtNKoU3bUX0dqpdWZb0t6zyksZYxLN
+TYGnIEm+XL7oHAUJRDY4v645TyQTIT9E/O0EtpsL+mjkDOyv5Sp911dM0ExeDk7v
+dliMkXdrzi9jeziBQNYW8tFDefhrJ6XEDWr6SE7cHMjVr3dcLZDXQWWroiGplxSF
+F+Ba81KaEsD8eidSrYQgdm4ZSTAwFWkMwZt5DD56sgXzTUnGPVkjZMUuLWM70Xm8
+Fr8+UY6djZxF3kzD97sK35H28TWHr7pnuLnfgDWhFLU37nfQv9uVz8Oqh6ddTe2C
+d/t6bb+2B8Mq7BerABEBAAGJAjwEGAEIACYWIQT8MFb/slsn8+I8RxTJokqZ65W8
+rAUCXKnhegIbDAUJA8JnAAAKCRDJokqZ65W8rIqlD/459MDMUYn0aGRzQf8Co/T5
+Upv014i53yIZlKfbzx4Pi46AOhiJ9Sc8eqJyCYSzHrhR+6DYyW/RAD5q3ANz5gkZ
+Q4/S7EdcMQQ7VwZklJ8xcieLtqRAlQxdc7pce5m5sfhk9YB9lMxg7jEOwLCI/7wd
+H6A5CJKPXXezTZZ8kBQJMyTQjzr5ug5/lUG3cblmz79XIovoCrLF3Md81Lh7vXHQ
+37H67Kq0ABGSx/pr04UbV12tBsgY+JP5GZiEWcbSzAz1skVagQSeA4Z01Pf5q3Iz
+lQ/ZAX8K7xIc/gbioRrv+9RO/IT2rq56XIDqVRQdUyvnujDjKWvgxq9bzJnDXau0
+KY3SIZzEHYyrWrQJzTgWP+8Q7+/MPIrrcEEHo8RUs+U+QpAUts+bnvSqP/jijC/t
+rkoXYsgiGs4Fi+6YnPlXLRBkSN3M9H4p5NRQ7CkV+tOL3y60DWPG9udSB4FnZRno
+TiwTyVQRLAYlouyAqH2wHajNC9Su25XV8swWWneRikhDeyyk/Vtebn5jfdcDZ+iR
+MFw6ZC0Vp28GGYDkbaokH4U/EKEKetZDU5EGgtXbzXoIxmNPGXFwnlhnWNxG9vSj
+hdIJ9ZVLaGz/qV9oixVEmdDV/WC9Cu/lIsKu5cPi/ADaMcTFVJWrT0aKpW/rMi28
+x3NtZUPjN9qxwvdorrgKiZkCDQRi7voJARAAzvd5G0hqs0DNT7Q2TsEF1j+aX0zV
+RVMAqAzqQzx1FTS+FIj5rphxYnKqoAjdZu77fB0qDIpaG6fbfzEbMYY4rRj674hT
+k/hj0ajmtsB9BEHMjx4T62UwzYg2LzBXSUBICPpg0HsjsKSp0UX1VBgFp+Yf/9o1
+NsKUtRzFqECUJDdo40jVkNMv2ZYIRu+J3fmPYopmzmCCPWPp4n6Q9bBkNhtZdBXl
+/wrdKxNrZ2+LwDQuMvrt6cppmKBMyF+T8I8Xiqa1TDVRgvjAbJZFbOxt4FxSDma1
+It2kHdtKnSUwauYaCSZZYKfOwnE5nonOwNyjsin+V+mZeh9Wm7rp1YiEvWyBKTJ5
+SKbFE1pbm7O0+gJO3+cx6z0ZXU8vwa0t6aCMm20raaEuwn6sMOb3KsOJEymE/p/8
+n8TV0udUbCLOFC1V8YpBy3aXl8qVjl0evHHioFx4SlDxr7ckoiuD2WFN5gIMsVgZ
+CfUBTzZaNE+jsq7GaF0AQbTwlD+CfshywYJAXh3x8B4R7xSscGprBfQvSP/6Wmhy
+AKrcOz442CD58DqtzhXcNqf5DWZQ6iuGp8Yo9X97KJ/aw6To5XKR1AtlG18MG2N8
++bp7WDZtssPXdHqaEkz6mP5RrXNTcqRaB11BGv6MbaxLC+pwALzlPs0y0GaiQBSp
+AV6tVbBrQQKxGx8AEQEAAbQoTWljaGFlbCBQZXJjaXZhbCA8bUBtaWNoYWVscGVy
+Y2l2YWwueHl6PokCVAQTAQgAPhYhBFWx2VpgtIBjc6hhIG8gwXl7vM2dBQJi7voJ
+AhsDBQkFo5qABQsJCAcCBhUKCQgLAgQWAgMBAh4BAheAAAoJEG8gwXl7vM2dTNQP
+/jC/aACnKpfeWGz3h2HFOouL7npFczEqduoX1BvxaILqPTZyWMtzpvuCK0Deq858
+epaltEH3ud0M+yYyeJXgWFk7nKX3sCejyBfGP+KN4XY1Fl0cCZ5umzrymaTVxneb
+4JI6Gxq/RNaQWXK+U5O1YlIYiSYB6bUc1RcE8H3baBycGx2iBJaxUszF4VqVZS56
+HJcWADAxzfsgYg6msBnt94aC//qw84E4uq43awlL5FDx0pJLpIoPPgGi4EGxpBCv
+AMbJG6QX9T2jyZ0Pr63S0jojjDN0ZPddnD3v0LpnL3CRtFN/sToZ6BzNB7ap/7ZA
+gHPpaMRRZDkUA4gn2mXh4J7L1+c2oa5P6ZKO1/+6gvBy/VA5CVEmmPQ2Aa039YZw
+Gsd8MgJiyf46mLlXGn/6rguT27H9XIrox8Fy5GHACv576uc+tsnK2vAUOP/1hY01
+DIU26xgA6szAY8FrvJFILYOfYg7gpwvQbyv9+k48qtRfptUlKvbbbfNVS1IEMU+B
+6NkgyE4S0KMpTYu6kDDgjruNoAzRYIeI4bsAbzbeT7Fx204ETJb2ld0QvcrEusgj
+BVvTUb5ZFxn3ixWdeCAwrbyY0Cr+lVAs+cAfFlvirYUVE5yFKwJbA/1ylm9sYTNX
+2Zdh8VDO/+cENsQifRpT0KPcpDhsVEOZo3mn5mH4nk5CuQINBGLu+gkBEACmudE/
+bWg4CnxvDiRZuQoC+aCpDwEpBN3/Ooh/9th7TC9ysu6M7sBif6mTTdSgP3KF/kUw
+BurKztTvZPraJhQUdJMEt5vZDTLd3QnCA0pJugi7aTbqu9FlDiHjr9N/qwqxPoIK
+YGCe1HGFVUa7GzAQrLFR6ulSsY+ubAL1MN/bEyXI8HLeuuT9ViXhDeL5Y5X3gi2J
+x2+5WIJfgoCE3zvUhDxNwyF5huxF3CT7t2r0qFv/gpOzp3S/vyXtSQCGbrQMcs/3
+f8TuXiiHI63rdGi84dsOdEU2ClydfFPU/yjAMGiHILOwWCZE2zf/iJPZ4CnKJstU
+aR2v1PmeGHyWvCTArPlkcKgwgFZNMaPs20BAOLe/l45QxO+ZTeNtHnhuVGqidwcB
+926KrNLVizlpEFXLZ5qd9FLGtgpqn+ymydl3Zwj+1M+dVFOhyhd8xVLF41sShAT/
+jjF3etN9/0rpdHwd6a784XBZ43984dKh6YjxaqC8ctkJc7BQZ/D99fMI5y7mUZHW
+AwEnR4l4MhncqjzVtsuYrJYJr03/LsHIrP7ZabzYlmiZMDU4JoVAb2bskAw0lbtR
+mvW7DBFx2a3xX9cNojcNEZx0KV4AJQmK3pNjB6cUcDw1AR3ZpLR8rR5zFp/yibNW
+85kr1GJTHM7W3y05ANsw1Hvq4OiTek8RgX6HLQARAQABiQI8BBgBCAAmFiEEVbHZ
+WmC0gGNzqGEgbyDBeXu8zZ0FAmLu+gkCGwwFCQWjmoAACgkQbyDBeXu8zZ3UYg/+
+OGpqUC/QE3q2J+cJEPAI2mKodeq05iGmbEmESzef82O7MGK1yTRdbWNW9OAXl6hi
+4WYCWFKcyKoQSdupC/CQGh+MAVa9Wthc69JMRlqPu97qyfzjFvfHAk5SkpkfG3dl
+wGuftGHP4fFxjpoO5SCwd9ofxvA3vb5D9EaXr57gAmeL2tD6zqZwPBGwljHBkk8g
+MqJGBnPivZn1MutMYnlSALxm3UUKKv4+DOC6W73ckx3Q8uHGDT17K/eHT6Usr+pm
+5NXircrV12LDjD+NZ8Ju6ElXz/Am0H6CBSzz76I11GoiJI7VpoJd3uvIFja+hWB7
++NEl6Ms6yY+Bw63XuHV67iONKi4ecloB/FWtqQWzDuIPE/+ySKwMIjbJLPsIuHMk
+1WwzPA12wKa7S7HbU61UcJYRQZ8eh7MLTxNwthPw1egwKSpARhKEbUo4nGCKL/HL
+88n/fI0SSR1NzkRVuiuCMuUUQPxKzWj6T0WpiIWTtmpBvKabC9j69uRUAeYCHWOX
+XVZymt8uATjuEVaAzZpuZkOkVJO05314i389y8p/RqHXECPKZMtlAoSSkhCcLVBn
+ZHHNqKbowMBuiXI+uS1zIZYlU3F6ydBkhZfM6cmhb3dnHLgHVzre14QakR314/lb
+Npid88JMGMX3nECBgNPdDh0lv2v8ZUBIXhl75aVyMfM=
+=ULmM
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/rss.png b/static/rss.png
Binary files differ.
diff --git a/static/rss.svg b/static/rss.svg
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 455.731 455.731" style="enable-background:new 0 0 455.731 455.731;" xml:space="preserve"><g><rect x="0" y="0" style="fill:#F78422;" width="455.731" height="455.731"/><g><path style="fill:#FFFFFF;" d="M296.208,159.16C234.445,97.397,152.266,63.382,64.81,63.382v64.348 c70.268,0,136.288,27.321,185.898,76.931c49.609,49.61,76.931,115.63,76.931,185.898h64.348 C391.986,303.103,357.971,220.923,296.208,159.16z"/><path style="fill:#FFFFFF;" d="M64.143,172.273v64.348c84.881,0,153.938,69.056,153.938,153.939h64.348 C282.429,270.196,184.507,172.273,64.143,172.273z"/><circle style="fill:#FFFFFF;" cx="109.833" cy="346.26" r="46.088"/></g></g></svg>
diff --git a/static/style.css b/static/style.css
@@ -0,0 +1,102 @@
+body {
+ background: #0c1010;
+ color: #ccc;
+ font-family: "BQN386 Nerd Font";
+ font-style: sans-serif ;
+ margin: 0em;
+}
+
+.main {
+ background-color: #1d2021;
+ line-height: 1.5em;
+ max-width: 63em;
+ margin: auto;
+ margin: 0em;
+ margin-top: 2em;
+ margin-bottom: 2em;
+ margin-left: auto;
+ margin-right: auto;
+ padding: 2em;
+}
+
+img {
+ vertical-align: middle;
+}
+
+header h1 {
+ text-align: center ;
+}
+
+footer {
+ text-align: center ;
+ clear: both ;
+}
+
+/* For TAGLIST.HTML */
+.taglist {
+ text-align: center ;
+ clear: both ;
+}
+
+/* For NEXTPREV.HTML */
+#nextprev {
+ /* The container for both the previous and next articles. */
+}
+
+#prevart {
+ float: left ;
+ text-align: left ;
+}
+
+#nextart {
+ float: right ;
+ text-align: right ;
+}
+
+#nextart,#prevart {
+ max-width: 33% ;
+}
+
+.img-row-container {
+ display: flex;
+ flex: 1;
+ justify-content: center;
+}
+
+.nav-container {
+ display: flex;
+ background-color: #1d2021;
+}
+
+.nav-element {
+ display: flex;
+ flex: 1;
+ justify-content: center;
+ background-color: #1d2021;
+ margin: auto;
+}
+
+.contact-element {
+ display: vertical;
+ flex: 1;
+ justify-content: left;
+ text-align: center;
+}
+
+.profile-container {
+ margin: 0em;
+ display: flex;
+ flex: 0;
+}
+
+.profile-element {
+ display: vertical;
+ flex: 1;
+ justify-content: left;
+ text-align: left;
+}
+
+.gpg {
+ display: flex;
+ justify-content: center;
+}
diff --git a/thinkyboi.jpg b/static/thinkyboi.jpg
Binary files differ.
diff --git a/style.css b/style.css
@@ -1,183 +0,0 @@
-body {
- color: #F8F8F2;
- background-color: #111111;
- font-family: monospace;
- font-size: 1.2em;
- margin: 0em;
-}
-
-#content {
- background-color: #1d2021;
- margin: 0em;
- padding: 2em;
- width: fill;
- height: fill;
- max-width: auto;
-}
-
-
-.main {
- max-width: 60em;
- width: 100%;
- margin: 0em;
- margin-top: 2em;
- margin-bottom: 2em;
- margin-left: auto;
- margin-right: auto;
- background-color: #1d2021;
- padding: 2em;
- padding-top: 1em;
- padding-bottom: 1em;
- align-self: start;
- line-height: 1.5em;
-}
-
-.main p {
- word-break: break-word;
-}
-
-.gpg {
- max-width: 40em;
- width: 100%;
- margin: 0em;
- margin-top: 2em;
- margin-bottom: 2em;
- margin-left: auto;
- margin-right: auto;
- background-color: #1d2021;
- padding: 2em;
- padding-top: 1em;
- padding-bottom: 1em;
- align-self: start;
- font-size: 0.8em;
-}
-
-.main-element {
- display: vertical;
- flex: 1;
- justify-content: left;
- text-align: left;
- align-items: left;
-}
-
-.nav-container {
- display: flex;
- align-items: right;
- background-color: #1d2021;
-}
-
-.nav-element {
- display: flex;
- flex: 1;
- line-height: 2em;
- justify-content: center;
- text-align: left;
-}
-
-.contact-element {
- display: vertical;
- flex: 1;
- justify-content: left;
- text-align: center;
-}
-
-h1, h2, h3, h4, h5, h6 {
- font-size: 1em;
- margin: 0;
-}
-
-img, h1, h2 {
- vertical-align: middle;
-}
-
-a:target {
- background-color: #ccc;
-}
-
-img {
- border: 0;
-}
-
-a.d,
-a.h,
-a.i,
-a.line {
- text-decoration: none;
-}
-
-
-a {
- text-decoration: none;
-}
-
-a:link {
- color: dodgerblue;
-}
-
-a:visited {
- color: dodgerblue;
-}
-
-a:hover {
- color: magenta;
- text-decoration: underline;
-}
-
-a:active {
- color: magenta;
- text-decoration: underline;
-}
-
-table thead td {
- font-weight: bold;
-}
-
-table td {
- padding: 0 0.4em;
-}
-
-#content table td {
- vertical-align: top;
- white-space: nowrap;
-}
-
-#index tr td:nth-child(2),
-#tags tr td:nth-child(3),
-#branches tr td:nth-child(3),
-#log tr td:nth-child(2) {
- white-space: normal;
-}
-
-td.num {
- text-align: right;
-}
-
-.desc {
- color: #777;
-}
-
-pre {
- font-family: monospace;
-}
-
-pre a.h {
- color: #00a;
-}
-
-.A,
-span.i,
-pre a.i {
- color: #070;
-}
-
-.D,
-span.d,
-pre a.d {
- color: #e00;
-}
-
-pre a.h:hover,
-pre a.i:hover,
-pre a.d:hover {
- text-decoration: none;
-}