{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/jquery/dist/jquery.js-exposed?0261","webpack:///./app/javascript/packs/lib/3js/three.js","webpack:///(webpack)/buildin/module.js","webpack:///./app/javascript/packs/lib/3js/OBJLoader.js","webpack:///./app/javascript/packs/lib/3js/OrbitControls.js","webpack:///./app/javascript/packs/lib/jquery.konami.min.js","webpack:///./app/assets/images/favicon.png","webpack:///./app/assets/images/favicon/android-chrome-192x192.png","webpack:///./app/assets/images/favicon/android-chrome-384x384.png","webpack:///./app/assets/images/favicon/apple-touch-icon.png","webpack:///./app/assets/images/favicon/favicon-16x16.png","webpack:///./app/assets/images/favicon/favicon-32x32.png","webpack:///./app/assets/images/favicon/mstile-150x150.png","webpack:///./app/assets/images/favicon/safari-pinned-tab.svg","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./node_modules/@rails/actiontext/node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/turbolinks/dist/turbolinks.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./app/javascript/channels/index.js","webpack:///./app/javascript/channels sync _channel\\.js$","webpack:///./node_modules/jquery/dist/jquery.js-exposed","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./app/javascript/images sync ^\\.\\/.*$","webpack:///./app/assets/images sync ^\\.\\/.*$","webpack:///./app/assets/images/3D-template.obj","webpack:///./app/assets/images/favicon/favicon.ico","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/select2/dist/js/select2.js","webpack:///./node_modules/easy-autocomplete/dist/jquery.easy-autocomplete.js","webpack:///./node_modules/trix/dist/trix.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/@rails/actiontext/app/javascript/actiontext/attachment_upload.js","webpack:///./node_modules/@rails/actiontext/app/javascript/actiontext/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","_typeof","obj","iterator","constructor","g","this","Function","e","window","EventDispatcher","undefined","Number","EPSILON","Math","pow","isInteger","isFinite","floor","sign","x","toString","match","assign","target","TypeError","output","index","arguments","length","source","nextKey","addEventListener","type","listener","_listeners","listeners","indexOf","push","hasEventListener","removeEventListener","listenerArray","splice","dispatchEvent","event","array","slice","quaternion","vector","matrix","y","z","zero","one","v1","min","max","_Math","DEG2RAD","PI","RAD2DEG","generateUUID","lut","d0","random","d1","d2","d3","toUpperCase","clamp","euclideanModulo","mapLinear","a1","a2","b1","b2","lerp","smoothstep","smootherstep","randInt","low","high","randFloat","randFloatSpread","range","degToRad","degrees","radToDeg","radians","isPowerOfTwo","ceilPowerOfTwo","ceil","log","LN2","floorPowerOfTwo","Vector2","Matrix4","elements","console","error","Quaternion","w","_x","_y","_z","_w","Vector3","Matrix3","defineProperties","set","isVector2","setScalar","scalar","setX","setY","setComponent","Error","getComponent","clone","copy","v","add","warn","addVectors","addScalar","a","b","addScaledVector","sub","subVectors","subScalar","multiply","multiplyScalar","divide","divideScalar","applyMatrix3","clampScalar","minVal","maxVal","clampLength","round","roundToZero","negate","dot","lengthSq","sqrt","manhattanLength","abs","normalize","angle","atan2","distanceTo","distanceToSquared","dx","dy","manhattanDistanceTo","setLength","alpha","lerpVectors","v2","equals","fromArray","offset","toArray","fromBufferAttribute","attribute","getX","getY","rotateAround","center","cos","sin","isMatrix4","n11","n12","n13","n14","n21","n22","n23","n24","n31","n32","n33","n34","n41","n42","n43","n44","te","identity","me","copyPosition","extractBasis","xAxis","yAxis","zAxis","setFromMatrixColumn","makeBasis","extractRotation","scaleX","scaleY","scaleZ","makeRotationFromEuler","euler","isEuler","f","order","ae","af","be","bf","ce","cf","de","df","ac","ad","bc","bd","makeRotationFromQuaternion","q","compose","lookAt","eye","up","crossVectors","multiplyMatrices","premultiply","a11","a12","a13","a14","a21","a22","a23","a24","a31","a32","a33","a34","a41","a42","a43","a44","b11","b12","b13","b14","b21","b22","b23","b24","b31","b32","b33","b34","b41","b42","b43","b44","applyToBufferAttribute","count","getZ","applyMatrix4","setXYZ","determinant","transpose","tmp","setPosition","getInverse","throwOnDegenerate","t11","t12","t13","t14","det","msg","detInv","scale","getMaxScaleOnAxis","scaleXSq","scaleYSq","scaleZSq","makeTranslation","makeRotationX","theta","makeRotationY","makeRotationZ","makeRotationAxis","axis","tx","ty","makeScale","makeShear","position","x2","y2","z2","xx","xy","xz","yy","yz","zz","wx","wy","wz","sx","sy","sz","decompose","invSX","invSY","invSZ","setFromRotationMatrix","makePerspective","left","right","top","bottom","near","far","makeOrthographic","h","slerp","qa","qb","qm","slerpFlat","dst","dstOffset","src0","srcOffset0","src1","srcOffset1","x0","y0","z0","w0","x1","y1","z1","w1","dir","sqrSin","len","tDir","onChangeCallback","setFromEuler","update","c1","c2","c3","s1","s2","s3","setFromAxisAngle","halfAngle","m11","m12","m13","m21","m22","m23","m31","m32","m33","trace","setFromUnitVectors","vFrom","vTo","inverse","conjugate","multiplyQuaternions","qax","qay","qaz","qaw","qbx","qby","qbz","qbw","cosHalfTheta","sinHalfTheta","halfTheta","ratioA","ratioB","onChange","callback","isVector3","setZ","multiplyVectors","applyEuler","applyQuaternion","applyAxisAngle","qx","qy","qz","qw","ix","iy","iz","iw","project","camera","projectionMatrix","matrixWorld","unproject","transformDirection","cross","ax","ay","az","bx","by","bz","projectOnVector","projectOnPlane","planeNormal","reflect","normal","angleTo","acos","dz","setFromSpherical","sinPhiRadius","phi","radius","setFromCylindrical","setFromMatrixPosition","setFromMatrixScale","isMatrix3","setFromMatrix4","getNormalMatrix","matrix4","transposeIntoArray","setUvTransform","rotation","cx","cy","rotate","translate","p1","p2","sphere","box","closestPoint","textureId","Texture","image","mapping","wrapS","wrapT","magFilter","minFilter","format","anisotropy","encoding","uuid","DEFAULT_IMAGE","mipmaps","DEFAULT_MAPPING","repeat","matrixAutoUpdate","generateMipmaps","premultiplyAlpha","flipY","unpackAlignment","version","onUpdate","Vector4","WebGLRenderTarget","width","height","options","scissor","scissorTest","viewport","texture","depthBuffer","stencilBuffer","depthTexture","WebGLRenderTargetCube","activeCubeFace","activeMipMapLevel","DataTexture","data","Box3","Sphere","Plane","constant","Frustum","p0","p3","p4","p5","planes","isTexture","updateMatrix","toJSON","meta","isRootObject","textures","metadata","generator","wrap","images","url","canvas","HTMLCanvasElement","document","createElementNS","context","getContext","ImageData","putImageData","drawImage","toDataURL","getDataURL","dispose","transformUv","uv","isVector4","setW","setAxisAngleFromQuaternion","setAxisAngleFromRotationMatrix","getW","isWebGLRenderTarget","setSize","isWebGLRenderTargetCube","isDataTexture","isBox3","setFromArray","minX","minY","minZ","maxX","maxY","maxZ","setFromBufferAttribute","setFromPoints","points","makeEmpty","il","expandByPoint","setFromCenterAndSize","size","halfSize","setFromObject","expandByObject","isEmpty","getCenter","getSize","point","expandByVector","expandByScalar","scope","traverse","node","geometry","isGeometry","vertices","isBufferGeometry","attributes","updateMatrixWorld","containsPoint","containsBox","getParameter","intersectsBox","intersectsSphere","clampPoint","intersectsPlane","plane","intersectsTriangle","v0","f0","f1","f2","testAxis","extents","triangleNormal","satForAxes","axes","j","triangle","distanceToPoint","getBoundingSphere","intersect","union","xax","xay","xaz","xbx","xby","xbz","yax","yay","yaz","ybx","yby","ybz","zax","zay","zaz","zbx","zby","zbz","optionalCenter","maxRadiusSq","empty","radiusSum","deltaLengthSq","getBoundingBox","setComponents","setFromNormalAndCoplanarPoint","setFromCoplanarPoints","inverseNormalLength","distanceToSphere","projectPoint","intersectLine","line","direction","delta","denominator","start","intersectsLine","startSign","endSign","end","coplanarPoint","m1","optionalNormalMatrix","normalMatrix","referencePoint","frustum","setFromMatrix","me0","me1","me2","me3","me4","me5","me6","me7","me8","me9","me10","me11","me12","me13","me14","me15","intersectsObject","boundingSphere","computeBoundingSphere","intersectsSprite","sprite","negRadius","hsl","ShaderChunk","alphamap_fragment","alphamap_pars_fragment","alphatest_fragment","aomap_fragment","aomap_pars_fragment","begin_vertex","beginnormal_vertex","bsdfs","bumpmap_pars_fragment","clipping_planes_fragment","clipping_planes_pars_fragment","clipping_planes_pars_vertex","clipping_planes_vertex","color_fragment","color_pars_fragment","color_pars_vertex","color_vertex","common","cube_uv_reflection_fragment","defaultnormal_vertex","displacementmap_pars_vertex","displacementmap_vertex","emissivemap_fragment","emissivemap_pars_fragment","encodings_fragment","encodings_pars_fragment","envmap_fragment","envmap_pars_fragment","envmap_pars_vertex","envmap_vertex","fog_vertex","fog_pars_vertex","fog_fragment","fog_pars_fragment","gradientmap_pars_fragment","lightmap_fragment","lightmap_pars_fragment","lights_lambert_vertex","lights_pars_begin","lights_pars_maps","lights_phong_fragment","lights_phong_pars_fragment","lights_physical_fragment","lights_physical_pars_fragment","lights_fragment_begin","lights_fragment_maps","lights_fragment_end","logdepthbuf_fragment","logdepthbuf_pars_fragment","logdepthbuf_pars_vertex","logdepthbuf_vertex","map_fragment","map_pars_fragment","map_particle_fragment","map_particle_pars_fragment","metalnessmap_fragment","metalnessmap_pars_fragment","morphnormal_vertex","morphtarget_pars_vertex","morphtarget_vertex","normal_fragment_begin","normal_fragment_maps","normalmap_pars_fragment","packing","premultiplied_alpha_fragment","project_vertex","dithering_fragment","dithering_pars_fragment","roughnessmap_fragment","roughnessmap_pars_fragment","shadowmap_pars_fragment","shadowmap_pars_vertex","shadowmap_vertex","shadowmask_pars_fragment","skinbase_vertex","skinning_pars_vertex","skinning_vertex","skinnormal_vertex","specularmap_fragment","specularmap_pars_fragment","tonemapping_fragment","tonemapping_pars_fragment","uv_pars_fragment","uv_pars_vertex","uv_vertex","uv2_pars_fragment","uv2_pars_vertex","uv2_vertex","worldpos_vertex","cube_frag","cube_vert","depth_frag","depth_vert","distanceRGBA_frag","distanceRGBA_vert","equirect_frag","equirect_vert","linedashed_frag","linedashed_vert","meshbasic_frag","meshbasic_vert","meshlambert_frag","meshlambert_vert","meshphong_frag","meshphong_vert","meshphysical_frag","meshphysical_vert","normal_frag","normal_vert","points_frag","points_vert","shadow_frag","shadow_vert","UniformsUtils","merge","uniforms","merged","u","uniforms_src","uniforms_dst","parameter_src","isColor","Array","isArray","ColorKeywords","Color","setRGB","setHex","setStyle","hex","setHSL","hue2rgb","style","handleAlpha","string","parseFloat","exec","color","components","parseInt","charAt","copyGammaToLinear","gammaFactor","copyLinearToGamma","safeInverse","convertGammaToLinear","convertLinearToGamma","getHex","getHexString","getHSL","hue","saturation","lightness","getStyle","offsetHSL","addColors","color1","color2","UniformsLib","diffuse","opacity","map","uvTransform","alphaMap","specularmap","specularMap","envmap","envMap","flipEnvMap","reflectivity","refractionRatio","maxMipLevel","aomap","aoMap","aoMapIntensity","lightmap","lightMap","lightMapIntensity","emissivemap","emissiveMap","bumpmap","bumpMap","bumpScale","normalmap","normalMap","normalScale","displacementmap","displacementMap","displacementScale","displacementBias","roughnessmap","roughnessMap","metalnessmap","metalnessMap","gradientmap","gradientMap","fog","fogDensity","fogNear","fogFar","fogColor","lights","ambientLightColor","directionalLights","properties","shadow","shadowBias","shadowRadius","shadowMapSize","directionalShadowMap","directionalShadowMatrix","spotLights","distance","coneCos","penumbraCos","decay","spotShadowMap","spotShadowMatrix","pointLights","shadowCameraNear","shadowCameraFar","pointShadowMap","pointShadowMatrix","hemisphereLights","skyColor","groundColor","rectAreaLights","ShaderLib","basic","vertexShader","fragmentShader","lambert","emissive","phong","specular","shininess","standard","roughness","metalness","envMapIntensity","dashed","dashSize","totalSize","depth","cube","tCube","tFlip","equirect","tEquirect","distanceRGBA","referencePosition","nearDistance","farDistance","WebGLAnimation","isAnimating","animationLoop","onAnimationFrame","time","frame","requestAnimationFrame","stop","setAnimationLoop","setContext","WebGLAttributes","gl","buffers","WeakMap","isInterleavedBufferAttribute","remove","deleteBuffer","buffer","bufferType","usage","dynamic","DYNAMIC_DRAW","STATIC_DRAW","createBuffer","bindBuffer","bufferData","onUploadCallback","FLOAT","Float32Array","Float64Array","Uint16Array","UNSIGNED_SHORT","Int16Array","SHORT","Uint32Array","UNSIGNED_INT","Int32Array","INT","Int8Array","BYTE","Uint8Array","UNSIGNED_BYTE","bytesPerElement","BYTES_PER_ELEMENT","updateRange","bufferSubData","subarray","updateBuffer","Euler","_order","DefaultOrder","Layers","mask","physical","clearCoat","clearCoatRoughness","RotationOrders","asin","setFromQuaternion","setFromVector3","reorder","newOrder","toVector3","optionalResult","channel","enable","toggle","disable","test","layers","q1","object3DId","Object3D","parent","children","DefaultUp","modelViewMatrix","DefaultMatrixAutoUpdate","matrixWorldNeedsUpdate","visible","castShadow","receiveShadow","frustumCulled","renderOrder","userData","Camera","matrixWorldInverse","OrthographicCamera","zoom","view","updateProjectionMatrix","Face3","materialIndex","vertexNormals","vertexColors","isObject3D","onBeforeRender","onAfterRender","applyMatrix","setRotationFromAxisAngle","setRotationFromEuler","setRotationFromMatrix","setRotationFromQuaternion","rotateOnAxis","rotateOnWorldAxis","rotateX","rotateY","rotateZ","translateOnAxis","translateX","translateY","translateZ","localToWorld","worldToLocal","isCamera","getObjectById","id","getObjectByProperty","getObjectByName","getWorldPosition","getWorldQuaternion","getWorldScale","getWorldDirection","raycast","traverseVisible","traverseAncestors","force","geometries","materials","shapes","serialize","library","element","JSON","stringify","parameters","shape","material","uuids","extractFromCache","cache","values","recursive","parse","child","isOrthographicCamera","setViewOffset","fullWidth","fullHeight","enabled","offsetX","offsetY","clearViewOffset","zoomW","zoomH","scaleW","scaleH","geometryId","Geometry","colors","faces","faceVertexUvs","morphTargets","morphNormals","skinWeights","skinIndices","lineDistances","boundingBox","elementsNeedUpdate","verticesNeedUpdate","uvsNeedUpdate","normalsNeedUpdate","colorsNeedUpdate","lineDistancesNeedUpdate","groupsNeedUpdate","BufferAttribute","itemSize","normalized","Int8BufferAttribute","Uint8BufferAttribute","Uint8ClampedBufferAttribute","Uint8ClampedArray","Int16BufferAttribute","Uint16BufferAttribute","Int32BufferAttribute","Uint32BufferAttribute","Float32BufferAttribute","Float64BufferAttribute","DirectGeometry","normals","uvs","uvs2","groups","arrayMax","face","jl","computeBoundingBox","fromBufferGeometry","indices","positions","uv2","tempNormals","tempUVs","tempUVs2","addFace","group","computeFaceNormals","cb","ab","fl","vA","vB","vC","computeVertexNormals","areaWeighted","vl","computeFlatVertexNormals","computeMorphNormals","__originalFaceNormal","__originalVertexNormals","tmpGeo","faceNormals","dstNormalsFace","dstNormalsVertex","faceNormal","materialIndexOffset","vertexOffset","vertices1","vertices2","faces1","faces2","uvs1","colors1","colors2","vertexCopy","faceCopy","faceVertexNormals","faceVertexColors","uvCopy","mergeMesh","mesh","isMesh","mergeVertices","verticesMap","unique","changes","precision","faceIndicesToRemove","idx","diff","sortFacesByMaterialIndex","_id","sort","newUvs1","newUvs2","vertex","normalsHash","colorsHash","uvsHash","hasFaceVertexUv","hasFaceNormal","hasFaceVertexNormal","hasFaceColor","hasFaceVertexColor","faceType","setBit","getUvIndex","getNormalIndex","getColorIndex","hash","k","kl","uvsCopy","morphTarget","morphNormal","srcVertexNormal","destVertexNormal","isBufferAttribute","setArray","setDynamic","copyAt","index1","index2","copyArray","copyColorsArray","copyVector2sArray","vectors","copyVector3sArray","copyVector4sArray","setXY","setXYZW","onUpload","computeGroups","fromGeometry","morphTargetsPosition","hasFaceVertexUv2","morphTargetsLength","morphTargetsNormal","morphNormalsLength","hasSkinIndices","hasSkinWeights","vertexUvs","bufferGeometryId","BufferGeometry","morphAttributes","drawRange","Infinity","BoxGeometry","widthSegments","heightSegments","depthSegments","BoxBufferGeometry","numberOfVertices","groupStart","buildPlane","udir","vdir","gridX","gridY","segmentWidth","segmentHeight","widthHalf","heightHalf","depthHalf","gridX1","gridY1","vertexCounter","groupCount","addGroup","setIndex","addAttribute","PlaneGeometry","PlaneBufferGeometry","width_half","height_half","segment_width","segment_height","getIndex","getAttribute","removeAttribute","clearGroups","setDrawRange","needsUpdate","isPoints","isLine","updateFromObject","direct","__directGeometry","lineDistance","fromDirectGeometry","isNaN","pA","pB","pC","normalizeNormals","attributeArray1","attribute2","attributeArray2","toNonIndexed","geometry2","array2","keys","morphAttribute","startP","startEnd","segCenter","segDir","materialId","Material","blending","side","flatShading","transparent","blendSrc","blendDst","blendEquation","blendSrcAlpha","blendDstAlpha","blendEquationAlpha","depthFunc","depthTest","depthWrite","clippingPlanes","clipIntersection","clipShadows","shadowSide","colorWrite","polygonOffset","polygonOffsetFactor","polygonOffsetUnits","dithering","alphaTest","premultipliedAlpha","overdraw","MeshBasicMaterial","combine","wireframe","wireframeLinewidth","wireframeLinecap","wireframeLinejoin","skinning","setValues","ShaderMaterial","defines","linewidth","clipping","extensions","derivatives","fragDepth","drawBuffers","shaderTextureLOD","defaultAttributeValues","index0AttributeName","uniformsNeedUpdate","Ray","origin","Line3","Triangle","Mesh","drawMode","updateMorphTargets","WebGLBackground","renderer","state","objects","planeCamera","planeMesh","boxMesh","clearColor","clearAlpha","setClear","getClearColor","setClearColor","getClearAlpha","setClearAlpha","render","renderList","scene","forceClear","background","autoClear","clear","autoClearColor","autoClearDepth","autoClearStencil","isCubeTexture","renderBufferDirect","WebGLBufferRenderer","info","setMode","drawArrays","renderInstances","extension","drawArraysInstancedANGLE","maxInstancedCount","WebGLCapabilities","maxAnisotropy","getMaxPrecision","getShaderPrecisionFormat","VERTEX_SHADER","HIGH_FLOAT","FRAGMENT_SHADER","MEDIUM_FLOAT","maxPrecision","logarithmicDepthBuffer","maxTextures","MAX_TEXTURE_IMAGE_UNITS","maxVertexTextures","MAX_VERTEX_TEXTURE_IMAGE_UNITS","maxTextureSize","MAX_TEXTURE_SIZE","maxCubemapSize","MAX_CUBE_MAP_TEXTURE_SIZE","maxAttributes","MAX_VERTEX_ATTRIBS","maxVertexUniforms","MAX_VERTEX_UNIFORM_VECTORS","maxVaryings","MAX_VARYING_VECTORS","maxFragmentUniforms","MAX_FRAGMENT_UNIFORM_VECTORS","vertexTextures","floatFragmentTextures","getMaxAnisotropy","MAX_TEXTURE_MAX_ANISOTROPY_EXT","floatVertexTextures","WebGLClipping","globalState","numGlobalPlanes","localClippingEnabled","renderingShadows","viewNormalMatrix","uniform","resetGlobalState","numPlanes","numIntersection","projectPlanes","skipTransform","nPlanes","dstArray","flatSize","viewMatrix","i4","init","enableLocalClipping","beginShadows","endShadows","setState","fromCache","nGlobal","lGlobal","clippingState","WebGLExtensions","getExtension","WebGLGeometries","wireframeAttributes","onGeometryDispose","buffergeometry","memory","_bufferGeometry","geometryAttributes","ELEMENT_ARRAY_BUFFER","ARRAY_BUFFER","getWireframeAttribute","geometryIndex","WebGLIndexedBufferRenderer","drawElements","drawElementsInstancedANGLE","WebGLInfo","calls","triangles","lines","programs","autoReset","reset","instanceCount","TRIANGLES","TRIANGLE_STRIP","TRIANGLE_FAN","LINES","LINE_STRIP","LINE_LOOP","POINTS","absNumericalSort","WebGLMorphtargets","influencesList","morphInfluences","program","objectInfluences","morphTargetInfluences","influences","influence","getUniforms","setValue","WebGLObjects","updateList","CubeTexture","isMaterial","onBeforeCompile","newValue","currentValue","isRoot","emissiveIntensity","sizeAttenuation","gapSize","srcPlanes","dstPlanes","isMeshBasicMaterial","isShaderMaterial","ray","at","recast","closestPointToPoint","directionDistance","distanceSqToPoint","distanceSqToSegment","optionalPointOnRay","optionalPointOnSegment","s0","sqrDist","extDet","segExtent","a01","b0","invDet","intersectSphere","tca","radius2","thc","t0","t1","distanceToPlane","intersectPlane","distToPoint","intersectBox","tmin","tmax","tymin","tymax","tzmin","tzmax","invdirx","invdiry","invdirz","intersectTriangle","edge1","edge2","backfaceCulling","DdN","DdQxE2","DdE1xQ","QdN","distanceSq","closestPointToPointParameter","clampToLine","startEnd2","getNormal","targetLengthSq","getBarycoord","dot00","dot01","dot02","dot11","dot12","denom","invDenom","setFromPointsAndIndices","i0","i1","i2","getArea","getMidpoint","getPlane","edgeList","projectedPoint","minDistance","setDrawMode","morphTargetDictionary","ml","String","inverseMatrix","tempA","tempB","tempC","uvA","uvB","uvC","barycoord","intersectionPoint","intersectionPointWorld","uvIntersection","uv1","uv3","checkIntersection","raycaster","checkBufferGeometryIntersection","intersection","intersects","faceIndex","fvA","fvB","fvC","isMultiMaterial","faceMaterial","tl","targets","uvs_f","emptyTexture","emptyCubeTexture","UniformContainer","seq","arrayCacheF32","arrayCacheI32","mat4array","mat3array","mat2array","flatten","nBlocks","blockSize","firstElem","arraysEqual","allocTexUnits","allocTextureUnit","setValue1f","uniform1f","addr","setValue1i","uniform1i","setValue2fv","uniform2f","uniform2fv","setValue3fv","uniform3f","uniform3fv","setValue4fv","uniform4f","uniform4fv","setValue2fm","uniformMatrix2fv","setValue3fm","uniformMatrix3fv","setValue4fm","uniformMatrix4fv","setValueT1","unit","setTexture2D","setValueT6","setTextureCube","setValue2iv","uniform2iv","setValue3iv","uniform3iv","setValue4iv","uniform4iv","setValue1fv","uniform1fv","setValue1iv","uniform1iv","setValueV2a","updateCache","setValueV3a","setValueV4a","setValueM2a","setValueM3a","setValueM4a","setValueT1a","units","setValueT6a","SingleUniform","activeInfo","getSingularSetter","PureArrayUniform","getPureArraySetter","StructuredUniform","RePathPart","addUniform","container","uniformObject","parseUniform","path","pathLength","lastIndex","matchEnd","idIsIndex","subscript","next","WebGLUniforms","getProgramParameter","ACTIVE_UNIFORMS","getActiveUniform","getUniformLocation","WebGLShader","shader","createShader","shaderSource","compileShader","getShaderParameter","COMPILE_STATUS","getShaderInfoLog","split","join","addLineNumbers","setOptional","upload","seqWithValue","programIdCount","getEncodingComponents","getTexelDecodingFunction","functionName","getToneMappingFunction","toneMapping","toneMappingName","filterEmptyLine","replaceLightNums","replace","numDirLights","numSpotLights","numRectAreaLights","numPointLights","numHemiLights","replaceClippingPlaneNums","numClippingPlanes","numClipIntersection","parseIncludes","include","unrollLoops","snippet","unroll","WebGLProgram","code","shadowMapTypeDefine","shadowMapType","envMapTypeDefine","envMapModeDefine","envMapBlendingDefine","prefixVertex","prefixFragment","gammaFactorDefine","customExtensions","rendererExtensions","envMapCubeUV","filter","generateExtensions","customDefines","chunks","generateDefines","createProgram","isRawShaderMaterial","supportsVertexTextures","maxBones","useFog","fogExp","useVertexTexture","doubleSided","flipSided","shadowMapEnabled","physicallyCorrectLights","outputEncoding","mapEncoding","envMapEncoding","emissiveMapEncoding","depthPacking","vertexGlsl","fragmentGlsl","glVertexShader","glFragmentShader","attachShader","bindAttribLocation","linkProgram","cachedUniforms","cachedAttributes","programLog","getProgramInfoLog","trim","vertexLog","fragmentLog","runnable","haveDiagnostics","LINK_STATUS","getError","VALIDATE_STATUS","diagnostics","prefix","deleteShader","getAttributes","ACTIVE_ATTRIBUTES","getActiveAttrib","getAttribLocation","fetchAttributeLocations","destroy","deleteProgram","usedTimes","WebGLPrograms","capabilities","shaderIDs","MeshDepthMaterial","MeshDistanceMaterial","MeshNormalMaterial","MeshLambertMaterial","MeshPhongMaterial","MeshToonMaterial","MeshStandardMaterial","MeshPhysicalMaterial","LineBasicMaterial","LineDashedMaterial","PointsMaterial","ShadowMaterial","parameterNames","getTextureEncodingFromMap","gammaOverrideLinear","getParameters","shadows","nClipPlanes","nClipIntersection","shaderID","isSkinnedMesh","bones","skeleton","nVertexUniforms","nVertexMatrices","allocateBones","currentRenderTarget","getRenderTarget","gammaOutput","gammaInput","envMapMode","isFogExp2","maxMorphTargets","maxMorphNormals","directional","spot","rectArea","hemi","shadowMap","getProgramCode","acquireProgram","pl","programInfo","releaseProgram","pop","WebGLProperties","painterSortStable","reversePainterSortStable","WebGLRenderList","renderItems","renderItemsIndex","opaque","renderItem","WebGLRenderLists","lists","list","UniformsCache","light","halfWidth","halfHeight","offsetMatrix","identityMatrix","matrixPosition","intersectPoint","worldPosition","worldScale","WebGLLights","ambient","vector3","matrix42","setup","directionalLength","pointLength","spotLength","rectAreaLength","hemiLength","intensity","isAmbientLight","isDirectionalLight","bias","mapSize","isSpotLight","penumbra","isRectAreaLight","isPointLight","isHemisphereLight","WebGLRenderState","lightsArray","shadowsArray","spritesArray","setupLights","pushLight","pushShadow","shadowLight","pushSprite","WebGLRenderStates","renderStates","renderState","WebGLShadowMap","_renderer","_objects","_frustum","_projScreenMatrix","_shadowMapSize","_maxShadowMapSize","_lookTarget","_lightPositionWorld","_depthMaterials","_distanceMaterials","_materialCache","0","1","2","cubeDirections","cubeUps","cube2DViewPorts","useMorphing","useSkinning","depthMaterial","distanceMaterial","getDepthMaterial","lightPositionWorld","result","materialVariants","customMaterial","customDepthMaterial","customDistanceMaterial","variantIndex","keyA","keyB","materialsForVariant","cachedMaterial","isMeshDistanceMaterial","renderObject","shadowCamera","groupMaterial","autoUpdate","faceCount","_gl","_state","BLEND","setTest","setScissorTest","vpWidth","vpHeight","pars","isSpotLightShadow","shadowMatrix","setRenderTarget","vpDimensions","CanvasTexture","WebGLSpriteRenderer","vertexBuffer","elementBuffer","spritePosition","spriteRotation","spriteScale","uvOffset","uvScale","fogType","fogDepth","fillStyle","fillRect","sprites","useProgram","initAttributes","enableAttribute","disableUnusedAttributes","CULL_FACE","vertexAttribPointer","activeTexture","TEXTURE0","oldFogType","sceneFogType","isFog","density","setBlending","setMask","WebGLState","utils","colorBuffer","locked","currentColorMask","currentColorClear","colorMask","setLocked","lock","currentDepthMask","currentDepthFunc","currentDepthClear","DEPTH_TEST","depthMask","setFunc","NEVER","ALWAYS","LESS","LEQUAL","EQUAL","GEQUAL","GREATER","NOTEQUAL","clearDepth","currentStencilMask","currentStencilFunc","currentStencilRef","currentStencilFuncMask","currentStencilFail","currentStencilZFail","currentStencilZPass","currentStencilClear","stencilTest","STENCIL_TEST","stencilMask","stencilFunc","stencilRef","setOp","stencilFail","stencilZFail","stencilZPass","stencilOp","stencil","clearStencil","maxVertexAttributes","newAttributes","enabledAttributes","attributeDivisors","compressedTextureFormats","currentProgram","currentBlending","currentBlendEquation","currentBlendSrc","currentBlendDst","currentBlendEquationAlpha","currentBlendSrcAlpha","currentBlendDstAlpha","currentPremultipledAlpha","currentFlipSided","currentCullFace","currentLineWidth","currentPolygonOffsetFactor","currentPolygonOffsetUnits","MAX_COMBINED_TEXTURE_IMAGE_UNITS","lineWidthAvailable","glVersion","VERSION","currentTextureSlot","currentBoundTextures","currentScissor","currentViewport","createTexture","bindTexture","texParameteri","TEXTURE_MIN_FILTER","NEAREST","TEXTURE_MAG_FILTER","texImage2D","RGBA","emptyTextures","enableAttributeAndDivisor","meshPerAttribute","enableVertexAttribArray","vertexAttribDivisorANGLE","blendEquationSeparate","FUNC_ADD","blendFuncSeparate","ONE","blendFunc","SRC_ALPHA","ZERO","ONE_MINUS_SRC_COLOR","ONE_MINUS_SRC_ALPHA","SRC_COLOR","convert","setFlipSided","frontFace","CW","CCW","setCullFace","cullFace","BACK","FRONT","FRONT_AND_BACK","setPolygonOffset","factor","POLYGON_OFFSET_FILL","webglSlot","TEXTURE_2D","TEXTURE_CUBE_MAP","TEXTURE_CUBE_MAP_POSITIVE_X","disableVertexAttribArray","getCompressedTextureFormats","formats","COMPRESSED_TEXTURE_FORMATS","setMaterial","frontFaceCW","setLineWidth","lineWidth","SCISSOR_TEST","webglType","webglTexture","boundTexture","compressedTexImage2D","apply","WebGLTextures","_canvas","_isWebGL2","WebGL2RenderingContext","_videoTextures","clampToMaxSize","maxSize","textureNeedsGenerateMipmaps","generateMipmap","__maxMipLevel","LOG2E","filterFallback","LINEAR","onTextureDispose","textureProperties","__image__webglTextureCube","deleteTexture","__webglInit","__webglTexture","deallocateTexture","isVideoTexture","onRenderTargetDispose","renderTarget","renderTargetProperties","deleteFramebuffer","__webglFramebuffer","__webglDepthbuffer","deleteRenderbuffer","deallocateRenderTarget","slot","updateVideoTexture","__version","complete","pixelStorei","UNPACK_FLIP_Y_WEBGL","UNPACK_PREMULTIPLY_ALPHA_WEBGL","UNPACK_ALIGNMENT","textureNeedsPowerOfTwo","HTMLImageElement","ImageBitmap","makePowerOfTwo","isPowerOfTwoImage","glFormat","glType","setTextureParameters","mipmap","isDepthTexture","internalFormat","DEPTH_COMPONENT","DEPTH_COMPONENT32F","DEPTH_COMPONENT16","DEPTH_STENCIL","isCompressedTexture","uploadTexture","textureType","TEXTURE_WRAP_S","TEXTURE_WRAP_T","CLAMP_TO_EDGE","__currentAnisotropy","texParameterf","TEXTURE_MAX_ANISOTROPY_EXT","setupFrameBufferTexture","framebuffer","attachment","textureTarget","bindFramebuffer","FRAMEBUFFER","framebufferTexture2D","setupRenderBufferStorage","renderbuffer","bindRenderbuffer","RENDERBUFFER","renderbufferStorage","framebufferRenderbuffer","DEPTH_ATTACHMENT","DEPTH_STENCIL_ATTACHMENT","RGBA4","setupDepthRenderbuffer","isCube","webglDepthTexture","setupDepthTexture","createRenderbuffer","isCompressed","cubeImage","setTextureCubeDynamic","setupRenderTarget","isTargetPowerOfTwo","createFramebuffer","COLOR_ATTACHMENT0","updateRenderTargetMipmap","WebGLUtils","REPEAT","MIRRORED_REPEAT","NEAREST_MIPMAP_NEAREST","NEAREST_MIPMAP_LINEAR","LINEAR_MIPMAP_NEAREST","LINEAR_MIPMAP_LINEAR","UNSIGNED_SHORT_4_4_4_4","UNSIGNED_SHORT_5_5_5_1","UNSIGNED_SHORT_5_6_5","HALF_FLOAT_OES","ALPHA","RGB","LUMINANCE","LUMINANCE_ALPHA","FUNC_SUBTRACT","FUNC_REVERSE_SUBTRACT","DST_ALPHA","ONE_MINUS_DST_ALPHA","DST_COLOR","ONE_MINUS_DST_COLOR","SRC_ALPHA_SATURATE","COMPRESSED_RGB_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT1_EXT","COMPRESSED_RGBA_S3TC_DXT3_EXT","COMPRESSED_RGBA_S3TC_DXT5_EXT","COMPRESSED_RGB_PVRTC_4BPPV1_IMG","COMPRESSED_RGB_PVRTC_2BPPV1_IMG","COMPRESSED_RGBA_PVRTC_4BPPV1_IMG","COMPRESSED_RGBA_PVRTC_2BPPV1_IMG","COMPRESSED_RGB_ETC1_WEBGL","MIN_EXT","MAX_EXT","UNSIGNED_INT_24_8_WEBGL","PerspectiveCamera","fov","aspect","focus","filmGauge","filmOffset","ArrayCamera","cameras","WebVRManager","device","frameData","poseTarget","standingMatrix","standingMatrixInverse","VRFrameData","onVRDisplayPresentChange","tempQuaternion","tempPosition","cameraL","bounds","cameraR","currentSize","currentPixelRatio","cameraVR","isPresenting","eyeParameters","getEyeParameters","renderWidth","renderHeight","getPixelRatio","setDrawingBufferSize","animation","userHeight","getDevice","setDevice","setPoseTarget","getCamera","depthNear","depthFar","getFrameData","stageParameters","sittingToStandingTransform","pose","poseObject","orientation","leftViewMatrix","rightViewMatrix","leftProjectionMatrix","rightProjectionMatrix","getLayers","layer","leftBounds","rightBounds","getStandingMatrix","submitFrame","WebXRManager","session","frameOfRef","updateCamera","setCompatibleXRDevice","setSession","setFramebuffer","baseLayer","XRWebGLLayer","requestFrameOfReference","frameOfReferenceType","then","onAnimationFrameCallback","getDevicePose","views","getViewport","getViewMatrix","THREE","WebGLRenderer","_context","_alpha","_depth","_stencil","_antialias","antialias","_premultipliedAlpha","_preserveDrawingBuffer","preserveDrawingBuffer","_powerPreference","powerPreference","currentRenderList","currentRenderState","domElement","sortObjects","toneMappingExposure","toneMappingWhitePoint","programCache","renderLists","morphtargets","bufferRenderer","indexedBufferRenderer","spriteRenderer","_this","_isContextLost","_framebuffer","_currentRenderTarget","_currentFramebuffer","_currentMaterialId","_currentGeometryProgram","_currentCamera","_currentArrayCamera","_currentViewport","_currentScissor","_currentScissorTest","_usedTextureUnits","_width","_height","_pixelRatio","_viewport","_scissor","_scissorTest","_clipping","_clippingEnabled","_localClippingEnabled","_vector3","getTargetPixelRatio","contextAttributes","onContextLost","onContextRestore","message","initGLContext","vr","navigator","preventDefault","onMaterialDispose","releaseMaterialProgramReference","deallocateMaterial","getContextAttributes","forceContextLoss","loseContext","forceContextRestore","restoreContext","setPixelRatio","updateStyle","setViewport","getDrawingBufferSize","pixelRatio","getCurrentViewport","setScissor","boolean","bits","COLOR_BUFFER_BIT","DEPTH_BUFFER_BIT","STENCIL_BUFFER_BIT","clearTarget","renderBufferImmediate","hasPositions","hasNormals","hasUvs","hasColors","programAttributes","positionArray","isMeshPhongMaterial","isMeshStandardMaterial","isMeshNormalMaterial","normalArray","nx","ny","nz","uvArray","colorArray","setProgram","geometryProgram","updateBuffers","rangeFactor","isInstancedBufferGeometry","materialDefaultAttributeValues","programAttribute","geometryAttribute","stride","isInstancedInterleavedBuffer","isInstancedBufferAttribute","vertexAttrib2fv","vertexAttrib3fv","vertexAttrib4fv","vertexAttrib1fv","setupVertexAttributes","dataCount","rangeStart","rangeCount","drawStart","drawEnd","drawCount","isLineSegments","isLineLoop","compile","isLight","initMaterial","warned","renderObjects","overrideMaterial","isArrayCamera","camera2","isImmediateRenderObject","renderObjectImmediate","materialProperties","programChange","lightsHash","numSupportedMorphTargets","numSupportedMorphNormals","progUniforms","uniformsList","useCache","refreshProgram","refreshMaterial","refreshLights","p_uniforms","m_uniforms","uCamPos","cameraPosition","isMeshLambertMaterial","boneTexture","boneMatrices","boneTextureSize","refreshUniformsFog","refreshUniformsCommon","refreshUniformsLambert","isMeshToonMaterial","refreshUniformsPhong","refreshUniformsToon","isMeshPhysicalMaterial","refreshUniformsStandard","refreshUniformsPhysical","isMeshDepthMaterial","refreshUniformsDepth","refreshUniformsDistance","refreshUniformsNormal","isLineBasicMaterial","refreshUniformsLine","isLineDashedMaterial","refreshUniformsDash","isPointsMaterial","refreshUniformsPoints","isShadowMaterial","ltc_1","LTC_1","ltc_2","LTC_2","uvScaleMap","projectObject","isSprite","opaqueObjects","transparentObjects","textureUnit","setTexture","readRenderTargetPixels","restore","textureFormat","IMPLEMENTATION_COLOR_READ_FORMAT","IMPLEMENTATION_COLOR_READ_TYPE","checkFramebufferStatus","FRAMEBUFFER_COMPLETE","readPixels","copyFramebufferToTexture","level","copyTexImage2D","copyTextureToTexture","srcTexture","dstTexture","texSubImage2D","FogExp2","Fog","Scene","SpriteMaterial","Sprite","LOD","levels","Skeleton","boneInverses","calculateInverses","Bone","SkinnedMesh","bindMode","bindMatrix","bindMatrixInverse","initBones","normalizeSkinWeights","linecap","linejoin","Line","LineSegments","LineLoop","Points","Group","VideoTexture","video","CompressedTexture","DepthTexture","WireframeGeometry","ol","edge","edges","ParametricGeometry","func","slices","stacks","ParametricBufferGeometry","pu","pv","sliceCount","PolyhedronGeometry","detail","PolyhedronBufferGeometry","uvBuffer","subdivideFace","cols","aj","bj","rows","pushVertex","getVertexByIndex","correctUV","azimuth","inclination","subdivide","appplyRadius","centroid","azi","correctUVs","correctSeam","generateUVs","TetrahedronGeometry","TetrahedronBufferGeometry","OctahedronGeometry","OctahedronBufferGeometry","IcosahedronGeometry","IcosahedronBufferGeometry","DodecahedronGeometry","DodecahedronBufferGeometry","TubeGeometry","tubularSegments","radialSegments","closed","taper","bufferGeometry","TubeBufferGeometry","tangents","binormals","frames","computeFrenetFrames","P","generateSegment","getPointAt","N","B","generateIndices","generateBufferData","TorusKnotGeometry","tube","heightScale","TorusKnotBufferGeometry","P1","P2","T","calculatePositionOnCurve","cu","su","quOverP","cs","TorusGeometry","arc","TorusBufferGeometry","isCanvasTexture","isPerspectiveCamera","setFocalLength","focalLength","vExtentSlope","getFilmHeight","atan","getFocalLength","tan","getEffectiveFOV","getFilmWidth","skew","isSpriteMaterial","guessSizeSq","addLevel","getObjectForDistance","bone","isBone","getBoneByName","gbone","pos","rotq","scl","sw","vec","skinWeight","computeLineDistances","positionAttribute","linePrecision","precisionSq","vStart","vEnd","interSegment","interRay","step","nbVertices","threshold","params","localThreshold","localThresholdSq","testPoint","rayPointDistanceSq","distanceToRay","isGroup","readyState","HAVE_CURRENT_DATA","Earcut","holeIndices","dim","invSize","hasHoles","outerLen","outerNode","linkedList","queue","steiner","getLeftmost","compareX","eliminateHole","filterPoints","eliminateHoles","earcutLinked","clockwise","last","sum","signedArea","insertNode","removeNode","again","area","prev","ear","pass","zOrder","prevZ","nextZ","tail","numMerges","pSize","qSize","inSize","sortLinked","indexCurve","isEarHashed","isEar","cureLocalIntersections","splitEarcut","pointInTriangle","minTX","minTY","maxTX","maxTY","locallyInside","isValidDiagonal","splitPolygon","hole","hx","hy","mx","my","tanMin","findHoleBridge","leftmost","px","py","intersectsPolygon","inside","middleInside","q2","Node","an","bp","ShapeUtils","contour","isClockWise","pts","triangulateShape","holes","removeDupEndPts","addContour","holeIndex","forEach","ExtrudeGeometry","ExtrudeBufferGeometry","verticesArray","addShape","placeholder","curveSegments","steps","bevelEnabled","bevelThickness","bevelSize","bevelSegments","extrudePath","uvgen","UVGenerator","WorldUVGenerator","amount","extrudePts","splineTube","binormal","position2","ahole","hl","extrudeByPath","getSpacedPoints","shapePoints","extractPoints","reverse","concat","scalePt2","pt","bs","vert","vlen","flen","getBevelVec","inPt","inPrev","inNext","v_trans_x","v_trans_y","shrink_by","v_prev_x","v_prev_y","v_next_x","v_next_y","v_prev_lensq","collinear0","v_prev_len","v_next_len","ptPrevShift_x","ptPrevShift_y","sf","v_trans_lensq","direction_eq","contourMovements","oneHoleMovements","holesMovements","verticesMovements","sidewalls","layeroffset","sl","slen1","slen2","f4","f3","addVertex","nextIndex","generateTopUV","addUV","generateSideWallUV","vector2","buildLidFaces","buildSideFaces","indexA","indexB","indexC","a_x","a_y","b_x","b_y","c_x","c_y","indexD","a_z","b_z","c_z","d_x","d_y","d_z","TextGeometry","text","TextBufferGeometry","font","isFont","generateShapes","SphereGeometry","phiStart","phiLength","thetaStart","thetaLength","SphereBufferGeometry","thetaEnd","grid","verticesRow","RingGeometry","innerRadius","outerRadius","thetaSegments","phiSegments","RingBufferGeometry","segment","radiusStep","thetaSegmentLevel","LatheGeometry","segments","LatheBufferGeometry","base","inverseSegments","n1","n2","ShapeGeometry","ShapeBufferGeometry","shapeHole","indexOffset","shapeVertices","shapeHoles","toJSON$1","EdgesGeometry","thresholdAngle","thresholdDot","sourceVertices","face1","face2","CylinderGeometry","radiusTop","radiusBottom","openEnded","CylinderBufferGeometry","indexArray","generateCap","centerIndexStart","centerIndexEnd","cosTheta","sinTheta","slope","indexRow","generateTorso","ConeGeometry","ConeBufferGeometry","CircleGeometry","CircleBufferGeometry","Geometries","freeze","RawShaderMaterial","Materials","Cache","files","file","LoadingManager","onLoad","onProgress","onError","isLoading","itemsLoaded","itemsTotal","urlModifier","onStart","itemStart","itemEnd","itemError","resolveURL","setURLModifier","transform","DefaultLoadingManager","loading","FileLoader","manager","CompressedTextureLoader","_parser","DataTextureLoader","ImageLoader","CubeTextureLoader","TextureLoader","Curve","arcLengthDivisions","EllipseCurve","aX","aY","xRadius","yRadius","aStartAngle","aEndAngle","aClockwise","aRotation","ArcCurve","aRadius","CubicPoly","c0","initCatmullRom","x3","tension","initNonuniformCatmullRom","dt0","dt1","dt2","t2","calc","load","cached","setTimeout","dataUriRegexResult","mimeType","isBase64","decodeURIComponent","atob","response","responseType","toLowerCase","charCodeAt","Blob","parser","DOMParser","parseFromString","request","XMLHttpRequest","header","open","callbacks","status","withCredentials","overrideMimeType","requestHeader","setRequestHeader","send","setPath","setResponseType","setWithCredentials","setMimeType","loader","loadTexture","texDatas","loaded","mipmapCount","isCubemap","texData","crossOrigin","onImageLoad","onImageError","substr","src","setCrossOrigin","urls","isJPEG","search","getPoint","optionalTarget","getUtoTmapping","getPoints","divisions","getLength","lengths","getLengths","cacheArcLengths","current","updateArcLengths","targetArcLength","arcLengths","comparison","lengthBefore","getTangent","pt1","getTangentAt","mat","MAX_VALUE","tz","fromJSON","json","isEllipseCurve","twoPi","deltaAngle","samePoints","isArcCurve","pz","CatmullRomCurve3","curveType","CatmullRom","QuadraticBezier","QuadraticBezierP0","QuadraticBezierP1","QuadraticBezierP2","CubicBezier","CubicBezierP0","CubicBezierP1","CubicBezierP2","CubicBezierP3","CubicBezierCurve","v3","CubicBezierCurve3","LineCurve","LineCurve3","QuadraticBezierCurve","QuadraticBezierCurve3","SplineCurve","isCatmullRomCurve3","intPoint","weight","isCubicBezierCurve","isCubicBezierCurve3","isLineCurve","isLineCurve3","isQuadraticBezierCurve","isQuadraticBezierCurve3","isSplineCurve","Curves","CurvePath","curves","autoClose","Path","currentPoint","Shape","Light","HemisphereLight","LightShadow","SpotLightShadow","SpotLight","power","PointLight","DirectionalLightShadow","DirectionalLight","AmbientLight","RectAreaLight","StringKeyframeTrack","times","interpolation","KeyframeTrack","BooleanKeyframeTrack","Interpolant","parameterPositions","sampleValues","sampleSize","resultBuffer","_cachedIndex","valueSize","QuaternionLinearInterpolant","QuaternionKeyframeTrack","ColorKeyframeTrack","NumberKeyframeTrack","CubicInterpolant","_weightPrev","_offsetPrev","_weightNext","_offsetNext","LinearInterpolant","DiscreteInterpolant","curve","closePath","startPoint","endPoint","curveLengths","getCurveLengths","segmentLength","lens","cacheLengths","sums","resolution","moveTo","lineTo","quadraticCurveTo","aCPx","aCPy","bezierCurveTo","aCP1x","aCP1y","aCP2x","aCP2y","splineThru","absarc","absellipse","ellipse","firstPoint","lastPoint","getPointsHoles","holesPts","ValueTypeName","ValueBufferType","DefaultInterpolation","InterpolantFactoryMethodLinear","InterpolantFactoryMethodSmooth","evaluate","pp","validate_interval","seek","linear_scan","forward_scan","giveUpAt","afterEnd_","t1global","beforeStart_","mid","intervalChanged_","interpolate_","settings","DefaultSettings_","getSettings_","copySampleValue_","getValueSize","endingStart","endingEnd","iPrev","iNext","tPrev","tNext","halfDt","o1","o0","oP","oN","wP","wN","ppp","sP","sN","offset1","offset0","weight1","weight0","AnimationUtils","arraySlice","from","to","isTypedArray","convertArray","forceClone","ArrayBuffer","isView","DataView","getKeyframeOrder","sortedArray","nValues","srcOffset","flattenJSON","jsonKeys","valuePropertyName","TimeBufferType","setInterpolation","validate","optimize","VectorKeyframeTrack","AnimationClip","duration","tracks","resetDuration","MaterialLoader","BufferGeometryLoader","trackType","_getTrackTypeForValueTypeName","track","getInterpolation","typeName","InterpolantFactoryMethodDiscrete","factoryMethod","createInterpolant","shift","timeOffset","timeScale","startTime","endTime","nKeys","valid","prevTime","currTime","smoothInterpolation","writeIndex","keep","offsetP","offsetN","readOffset","writeOffset","jsonTracks","frameTime","fps","clip","clipTracks","CreateFromMorphTargetSequence","morphTargetSequence","noLoop","numMorphTargets","findByName","objectOrClipArray","clipArray","animations","CreateClipsFromMorphTargetSequences","animationToMorphTargets","pattern","parts","animationMorphTargets","clips","parseAnimation","addNonemptyTrack","trackName","animationKeys","propertyName","destTracks","clipName","hierarchyTracks","hierarchy","morphTargetNames","morphTargetName","animationKey","boneName","setTextures","getTexture","shading","typedArray","TYPED_ARRAYS","drawcalls","offsets","BlendingMode","textureLoader","materialLoader","Loader","Handlers","handlers","regex","onLoadStart","onLoadProgress","onLoadComplete","initMaterials","texturePath","createMaterial","NoBlending","NormalBlending","AdditiveBlending","SubtractiveBlending","MultiplyBlending","CustomBlending","fullPath","mapDiffuseRepeat","mapDiffuseOffset","mapDiffuseWrap","mapDiffuseAnisotropy","mapEmissiveRepeat","mapEmissiveOffset","mapEmissiveWrap","mapEmissiveAnisotropy","mapLightRepeat","mapLightOffset","mapLightWrap","mapLightAnisotropy","mapAORepeat","mapAOOffset","mapAOWrap","mapAOAnisotropy","mapBumpRepeat","mapBumpOffset","mapBumpWrap","mapBumpAnisotropy","mapNormalRepeat","mapNormalOffset","mapNormalWrap","mapNormalAnisotropy","mapSpecularRepeat","mapSpecularOffset","mapSpecularWrap","mapSpecularAnisotropy","mapMetalnessRepeat","mapMetalnessOffset","mapMetalnessWrap","mapMetalnessAnisotropy","mapRoughnessRepeat","mapRoughnessOffset","mapRoughnessWrap","mapRoughnessAnisotropy","mapAlphaRepeat","mapAlphaOffset","mapAlphaWrap","mapAlphaAnisotropy","LoaderUtils","decodeText","TextDecoder","decode","fromCharCode","escape","extractUrlBase","lastIndexOf","JSONLoader","ObjectLoader","setTexturePath","isBitSet","fi","zLength","colorIndex","normalIndex","uvIndex","isQuad","hasMaterial","faceA","faceB","uvLayer","nUvLayers","parseModel","influencesPerVertex","parseSkin","dstVertices","srcVertices","morphColors","parseMorphing","outputAnimations","morphAnimationClips","parseAnimations","substring","parseShape","parseGeometries","parseImages","parseTextures","parseMaterials","parseObject","geometryLoader","bufferGeometryLoader","details","geometryShapes","loadImage","parseConstant","TEXTURE_MAPPING","TEXTURE_WRAPPING","TEXTURE_FILTER","getGeometry","getMaterial","UVMapping","CubeReflectionMapping","CubeRefractionMapping","EquirectangularReflectionMapping","EquirectangularRefractionMapping","SphericalReflectionMapping","CubeUVReflectionMapping","CubeUVRefractionMapping","RepeatWrapping","ClampToEdgeWrapping","MirroredRepeatWrapping","NearestFilter","NearestMipMapNearestFilter","NearestMipMapLinearFilter","LinearFilter","LinearMipMapNearestFilter","LinearMipMapLinearFilter","ImageBitmapLoader","createImageBitmap","fetch","ShapePath","subPaths","currentPath","Font","createPath","char","glyph","glyphs","cpx","cpy","cpx1","cpy1","cpx2","cpy2","outline","_cachedOutline","ha","FontLoader","setOptions","res","blob","imageBitmap","toShapes","isCCW","noHoles","toShapesNoHoles","inSubpaths","tmpPath","tmpShape","isPointInsidePolygon","inPolygon","polyLen","edgeLowPt","edgeHighPt","edgeDx","edgeDy","perpEdge","solid","holesFirst","tmpPoints","tmpHoles","betterShapeHoles","newShapes","newShapeHoles","mainIdx","ambiguous","toChange","sIdx","sLen","sho","hIdx","ho","hole_unassigned","s2Idx","froms","tos","paths","chars","line_height","yMax","yMin","underlineThickness","ret","createPaths","instance","eyeSep","eyeRight","eyeLeft","lineGeometry","coneGeometry","wordChar","wordCharOrDot","directoryRe","nodeRe","objectRe","propertyRe","trackRe","supportedObjectNames","reservedRe","AudioContext","webkitAudioContext","AudioLoader","StereoCamera","CubeCamera","cubeResolution","cameraPX","cameraNX","cameraPY","cameraNY","cameraPZ","cameraNZ","AudioListener","gain","createGain","connect","destination","Audio","getInput","autoplay","loop","playbackRate","isPlaying","hasPlaybackControl","sourceType","filters","PositionalAudio","panner","createPanner","AudioAnalyser","audio","fftSize","analyser","createAnalyser","frequencyBinCount","getOutput","PropertyMixer","binding","mixFunction","_slerp","_select","_lerp","_mixBufferRegion","cumulativeWeight","useCount","referenceCount","Composite","targetGroup","optionalParsedPath","parsedPath","PropertyBinding","parseTrackName","_targetGroup","_bindings","subscribe_","rootNode","findNode","nodeName","AnimationObjectGroup","nCachedObjects_","_indicesByUUID","_paths","_parsedPaths","_bindingsIndicesByPath","stats","total","AnimationAction","mixer","localRoot","_mixer","_clip","_localRoot","nTracks","interpolants","interpolantSettings","interpolant","_interpolantSettings","_interpolants","_propertyBindings","_cacheIndex","_byClipCacheIndex","_timeScaleInterpolant","_weightInterpolant","_loopCount","_startTime","_effectiveTimeScale","_effectiveWeight","repetitions","paused","clampWhenFinished","zeroSlopeAtStart","zeroSlopeAtEnd","AnimationMixer","root","_root","_initMemoryManager","_accuIndex","Uniform","InstancedBufferGeometry","InterleavedBufferAttribute","interleavedBuffer","InterleavedBuffer","InstancedInterleavedBuffer","InstancedBufferAttribute","Raycaster","PointCloud","ascSort","intersectObject","Clock","autoStart","oldTime","elapsedTime","running","Spherical","Cylindrical","Box2","ImmediateRenderObject","VertexNormalsHelper","nNormals","objGeometry","SpotLightHelper","cone","SkeletonHelper","getBoneList","boneList","PointLightHelper","sphereSize","RectAreaLightHelper","HemisphereLightHelper","GridHelper","PolarGridHelper","radials","circles","FaceNormalsHelper","DirectionalLightHelper","lightPlane","targetLine","CameraHelper","pointMap","colorFrustum","colorCone","colorUp","colorTarget","colorCross","addLine","addPoint","BoxHelper","Box3Helper","PlaneHelper","ArrowHelper","headLength","headWidth","setDirection","AxesHelper","ClosedSplineCurve3","SplineCurve3","Spline","decodeAudioData","audioBuffer","xmin","xmax","eyeSepOnProjection","ymax","removeFilter","disconnect","getFilter","setFilter","getMasterVolume","setMasterVolume","setTargetAtTime","currentTime","positionX","setValueAtTime","positionY","positionZ","forwardX","forwardY","forwardZ","upX","upY","upZ","setOrientation","setNodeSource","audioNode","setMediaElementSource","mediaElement","createMediaElementSource","setBuffer","play","createBufferSource","onended","onEnded","pause","getFilters","setFilters","setPlaybackRate","getPlaybackRate","getLoop","setLoop","getVolume","setVolume","getRefDistance","refDistance","setRefDistance","getRolloffFactor","rolloffFactor","setRolloffFactor","getDistanceModel","distanceModel","setDistanceModel","getMaxDistance","maxDistance","setMaxDistance","getFrequencyData","getByteFrequencyData","getAverageFrequency","accumulate","accuIndex","currentWeight","mix","originalValueOffset","saveOriginalState","getValue","restoreOriginalState","firstValidIndex","bindings","unbind","isAnimationObjectGroup","sanitizeNodeName","RegExp","matches","results","objectName","objectIndex","propertyIndex","lastDot","subTreeNode","searchNodeSubtree","childNode","_getValue_unavailable","_setValue_unavailable","BindingType","Direct","EntireArray","ArrayElement","HasFromToArray","Versioning","None","NeedsUpdate","MatrixWorldNeedsUpdate","GetterByBindingType","resolvedProperty","SetterByBindingTypeAndVersioning","targetObject","dest","targetArray","sourceArray","nodeProperty","versioning","bindingType","_getValue_unbound","_setValue_unbound","nObjects","nCachedObjects","indicesByUUID","parsedPaths","nBindings","knownObject","firstActiveIndex","lastCachedObject","bindingsForPath","lastCached","lastCachedIndex","firstActiveObject","firstActive","uncache","lastObject","indicesByPath","unsubscribe_","lastBindingsIndex","lastBindings","_activateAction","_deactivateAction","stopFading","stopWarping","isRunning","_isActiveAction","isScheduled","startAt","setEffectiveWeight","getEffectiveWeight","fadeIn","_scheduleFading","fadeOut","crossFadeFrom","fadeOutAction","warp","fadeInDuration","fadeOutDuration","startEndRatio","endStartRatio","crossFadeTo","fadeInAction","weightInterpolant","_takeBackControlInterpolant","setEffectiveTimeScale","getEffectiveTimeScale","setDuration","syncWith","action","halt","startTimeScale","endTimeScale","now","_lendControlInterpolant","timeScaleInterpolant","getMixer","getClip","getRoot","_update","deltaTime","timeDirection","timeRunning","_updateTimeScale","clipTime","_updateTime","_updateWeight","propertyMixers","interpolantValue","loopCount","_setEndings","handle_stop","pingPong","loopDelta","pending","atStart","atEnd","weightNow","weightThen","_bindAction","prototypeAction","rootUuid","bindingsByRoot","_bindingsByRootAndName","bindingsByName","_addInactiveBinding","clipUuid","actionsForClip","_actionsByClip","knownActions","_addInactiveAction","_lendBinding","_lendAction","_takeBackBinding","_takeBackAction","_actions","_nActiveActions","_nActiveBindings","_controlInterpolants","_nActiveControlInterpolants","actions","controlInterpolants","actionsByClip","actionByRoot","_removeInactiveAction","lastInactiveAction","cacheIndex","knownActionsForClip","lastKnownAction","byClipCacheIndex","_removeInactiveBindingsForAction","_removeInactiveBinding","prevIndex","lastActiveIndex","firstInactiveAction","firstInactiveIndex","lastActiveAction","bindingByName","propBinding","lastInactiveBinding","remove_empty_map","_","firstInactiveBinding","lastActiveBinding","_controlInterpolantsResultBuffer","__cacheIndex","lastActiveInterpolant","clipAction","optionalRoot","clipObject","existingAction","newAction","stopAllAction","nActions","uncacheClip","actionsToRemove","uncacheRoot","uncacheAction","isInterleavedBuffer","setFromCamera","coords","intersectObjects","performance","Date","getElapsedTime","getDelta","newTime","other","makeSafe","vec3","objPos","objNorm","coneLength","coneWidth","boneMatrix","matrixWorldInv","setPoint","setColor","construct","createPointsGeometry","createGeometry","createSpacedPointsGeometry","fromPoints","initFromArray","getControlPointsArray","reparametrizeByArcLength","setColors","isIntersectionBox","isIntersectionSphere","random16","nearestPowerOfTwo","nextPowerOfTwo","flattenToArrayOffset","multiplyVector3","multiplyVector3Array","applyToBuffer","applyToVector3Array","extractPosition","getPosition","multiplyToArray","multiplyVector4","rotateAxis","crossVector","rotateByAxis","makeFrustum","isIntersectionLine","isIntersectionPlane","barycoordFromPoint","midpoint","extractAllPoints","extrude","makeGeometry","fromAttribute","distanceToManhattan","lengthManhattan","setEulerFromRotationMatrix","setEulerFromQuaternion","getPositionFromMatrix","getScaleFromMatrix","getColumnFromMatrix","applyProjection","computeTangents","getChildByName","renderDepth","getWorldRotation","eulerOrder","useQuaternion","setLens","onlyShadow","shadowCameraFov","shadowCameraLeft","shadowCameraRight","shadowCameraTop","shadowCameraBottom","shadowCameraVisible","shadowDarkness","shadowMapWidth","shadowMapHeight","copyIndicesArray","addIndex","addDrawCall","clearDrawCalls","computeOffsets","getArrays","addShapeList","wrapAround","wrapRGB","metal","animate","getCurrentRenderTarget","getPrecision","resetGLState","supportsFloatTextures","supportsHalfFloatTextures","supportsStandardDerivatives","supportsCompressedTextureS3TC","supportsCompressedTexturePVRTC","supportsBlendMinMax","supportsInstancedArrays","enableScissorTest","addPrePlugin","addPostPlugin","updateShadowMap","setFaceCulling","shadowMapCullFace","renderReverseSided","renderSingleSided","standing","getData","updateCubeMap","GeometryUtils","geometry1","ImageUtils","loadTextureCube","loadCompressedTexture","loadCompressedTextureCube","SceneUtils","createMultiMaterialObject","detach","attach","REVISION","MOUSE","LEFT","MIDDLE","RIGHT","CullFaceNone","CullFaceBack","CullFaceFront","CullFaceFrontBack","FrontFaceDirectionCW","FrontFaceDirectionCCW","BasicShadowMap","PCFShadowMap","PCFSoftShadowMap","FrontSide","BackSide","DoubleSide","FlatShading","SmoothShading","NoColors","FaceColors","VertexColors","AddEquation","SubtractEquation","ReverseSubtractEquation","MinEquation","MaxEquation","ZeroFactor","OneFactor","SrcColorFactor","OneMinusSrcColorFactor","SrcAlphaFactor","OneMinusSrcAlphaFactor","DstAlphaFactor","OneMinusDstAlphaFactor","DstColorFactor","OneMinusDstColorFactor","SrcAlphaSaturateFactor","NeverDepth","AlwaysDepth","LessDepth","LessEqualDepth","EqualDepth","GreaterEqualDepth","GreaterDepth","NotEqualDepth","MultiplyOperation","MixOperation","AddOperation","NoToneMapping","LinearToneMapping","ReinhardToneMapping","Uncharted2ToneMapping","CineonToneMapping","UnsignedByteType","ByteType","ShortType","UnsignedShortType","IntType","UnsignedIntType","FloatType","HalfFloatType","UnsignedShort4444Type","UnsignedShort5551Type","UnsignedShort565Type","UnsignedInt248Type","AlphaFormat","RGBFormat","RGBAFormat","LuminanceFormat","LuminanceAlphaFormat","RGBEFormat","DepthFormat","DepthStencilFormat","RGB_S3TC_DXT1_Format","RGBA_S3TC_DXT1_Format","RGBA_S3TC_DXT3_Format","RGBA_S3TC_DXT5_Format","RGB_PVRTC_4BPPV1_Format","RGB_PVRTC_2BPPV1_Format","RGBA_PVRTC_4BPPV1_Format","RGBA_PVRTC_2BPPV1_Format","RGB_ETC1_Format","RGBA_ASTC_4x4_Format","RGBA_ASTC_5x4_Format","RGBA_ASTC_5x5_Format","RGBA_ASTC_6x5_Format","RGBA_ASTC_6x6_Format","RGBA_ASTC_8x5_Format","RGBA_ASTC_8x6_Format","RGBA_ASTC_8x8_Format","RGBA_ASTC_10x5_Format","RGBA_ASTC_10x6_Format","RGBA_ASTC_10x8_Format","RGBA_ASTC_10x10_Format","RGBA_ASTC_12x10_Format","RGBA_ASTC_12x12_Format","LoopOnce","LoopRepeat","LoopPingPong","InterpolateDiscrete","InterpolateLinear","InterpolateSmooth","ZeroCurvatureEnding","ZeroSlopeEnding","WrapAroundEnding","TrianglesDrawMode","TriangleStripDrawMode","TriangleFanDrawMode","LinearEncoding","sRGBEncoding","GammaEncoding","RGBEEncoding","LogLuvEncoding","RGBM7Encoding","RGBM16Encoding","RGBDEncoding","BasicDepthPacking","RGBADepthPacking","CubeGeometry","Face4","LineStrip","LinePieces","MeshFaceMaterial","MultiMaterial","Particle","ParticleSystem","PointCloudMaterial","ParticleBasicMaterial","ParticleSystemMaterial","Vertex","DynamicBufferAttribute","Int8Attribute","Uint8Attribute","Uint8ClampedAttribute","Int16Attribute","Uint16Attribute","Int32Attribute","Uint32Attribute","Float32Attribute","Float64Attribute","AxisHelper","BoundingBoxHelper","EdgesHelper","WireframeHelper","XHRLoader","BinaryTextureLoader","Projector","projectVector","unprojectVector","pickingRay","CanvasRenderer","LensFlare","factory","webpackPolyfill","deprecate","OBJLoader","regexp","vertex_pattern","normal_pattern","uv_pattern","face_vertex","face_vertex_uv","face_vertex_uv_normal","face_vertex_normal","object_pattern","smoothing_pattern","material_library_pattern","material_use_pattern","setMaterials","_createParserState","materialLibraries","startObject","fromDeclaration","_finalize","previousMaterial","currentMaterial","smooth","startMaterial","libraries","previous","inherited","mtllib","groupEnd","lastMultiMaterial","declared","finalize","parseVertexIndex","parseNormalIndex","parseUVIndex","addVertexLine","addNormal","addUVLine","ua","ub","uc","ud","na","nb","nc","nd","vLen","ia","ib","ic","uvLen","nLen","addLineGeometry","vi","uvi","lineFirstChar","lineSecondChar","trimLeft","lineParts","lineVertices","lineUVs","li","llen","createdMaterials","mi","miLen","sourceMaterial","materialLine","multiMaterial","timeEnd","OrbitControls","quat","quatInverse","lastPosition","lastQuaternion","minZoom","maxZoom","minPolarAngle","maxPolarAngle","minAzimuthAngle","maxAzimuthAngle","enableDamping","dampingFactor","enableZoom","zoomSpeed","enableRotate","rotateSpeed","enablePan","panSpeed","screenSpacePanning","keyPanSpeed","autoRotate","autoRotateSpeed","enableKeys","UP","BOTTOM","mouseButtons","ORBIT","ZOOM","PAN","target0","position0","zoom0","getPolarAngle","spherical","getAzimuthalAngle","saveState","changeEvent","STATE","NONE","rotateLeft","sphericalDelta","panOffset","zoomChanged","EPS","onContextMenu","onMouseDown","onMouseWheel","onTouchStart","onTouchEnd","onTouchMove","onMouseMove","onMouseUp","onKeyDown","startEvent","endEvent","ROTATE","DOLLY","TOUCH_ROTATE","TOUCH_DOLLY_PAN","rotateStart","rotateEnd","rotateDelta","panStart","panEnd","panDelta","dollyStart","dollyEnd","dollyDelta","getZoomScale","rotateUp","panLeft","objectMatrix","panUp","pan","deltaX","deltaY","body","targetDistance","clientHeight","clientWidth","dollyIn","dollyScale","dollyOut","button","clientX","clientY","handleMouseDownRotate","handleMouseDownDolly","handleMouseDownPan","handleMouseMoveRotate","handleMouseMoveDolly","handleMouseMovePan","stopPropagation","handleMouseWheel","keyCode","handleKeyDown","touches","pageX","pageY","handleTouchStartRotate","handleTouchStartDollyPan","handleTouchMoveRotate","handleTouchMoveDollyPan","noZoom","noRotate","noPan","noKeys","staticMoving","dynamicDampingFactor","fn","konami","extend","defaults","eventProperties","keyup","which","cheat","eventName","trigger","jQuery","isBrowser","timeoutDuration","longerTimeoutBrowsers","userAgent","debounce","Promise","called","resolve","scheduled","isFunction","functionToCheck","getStyleComputedProperty","nodeType","css","ownerDocument","defaultView","getComputedStyle","getParentNode","parentNode","host","getScrollParent","_getStyleComputedProp","overflow","overflowX","overflowY","getReferenceNode","reference","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","documentElement","noOffsetParent","offsetParent","nextElementSibling","findCommonOffsetParent","element1","element2","compareDocumentPosition","DOCUMENT_POSITION_FOLLOWING","createRange","setStart","setEnd","commonAncestorContainer","contains","firstElementChild","element1root","getScroll","upperSide","html","scrollingElement","includeScroll","rect","subtract","scrollTop","scrollLeft","modifier","getBordersSize","styles","sideA","sideB","computedStyle","getWindowSizes","classCallCheck","Constructor","createClass","props","descriptor","configurable","writable","protoProps","staticProps","_extends","getClientRect","getBoundingClientRect","sizes","horizScrollbar","offsetWidth","vertScrollbar","offsetHeight","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","scrollParent","borderTopWidth","borderLeftWidth","marginTop","marginLeft","getViewportOffsetRectRelativeToArtbitraryNode","excludeScroll","relativeOffset","innerWidth","innerHeight","isFixed","getFixedPositionOffsetParent","parentElement","el","getBoundaries","popper","padding","boundariesElement","boundaries","boundariesNode","_getWindowSizes","isPaddingNumber","_ref","computeAutoPlacement","placement","refRect","rects","sortedAreas","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","commonOffsetParent","getOuterSizes","marginBottom","marginRight","getOppositePlacement","matched","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","find","arr","check","runModifiers","modifiers","ends","prop","findIndex","cur","isDestroyed","arrowStyles","flipped","positionFixed","flip","originalPlacement","isCreated","onCreate","isModifierEnabled","modifierName","some","getSupportedPropertyName","prefixes","upperProp","toCheck","willChange","disableEventListeners","removeOnDestroy","removeChild","getWindow","setupEventListeners","updateBound","passive","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","enableEventListeners","scheduleUpdate","cancelAnimationFrame","isNumeric","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","counter","BEHAVIORS","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","ops","op","mergeWithPrevious","reduce","str","toValue","Defaults","shiftvariation","_data$offsets","isVertical","shiftOffsets","preventOverflow","transformProp","popperStyles","priority","primary","escapeWithReference","secondary","keepTogether","opSide","arrow","_data$offsets$arrow","arrowElement","querySelector","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","placementOpposite","flipOrder","behavior","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","inner","subtractLength","hide","bound","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","invertTop","invertLeft","applyStyle","setAttribute","modifierOptions","Popper","jquery","Utils","global","PopperUtils","sparkMd5","createCommonjsModule","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","lo","hi","rhex","toUtf8","unescape","encodeURIComponent","hexToBinaryString","bytes","SparkMD5","val","num","byteLength","begin","append","appendBinary","contents","_buff","_length","_hash","raw","buff","_finish","getState","hashBinary","content","first","second","returnUInt8Array","utf8Str2ArrayBuffer","md51_array","fileSlice","File","mozSlice","webkitSlice","FileChecksum","chunkSize","chunkCount","chunkIndex","md5Buffer","fileReader","FileReader","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","btoa","readAsArrayBuffer","findElement","selector","eventInit","disabled","bubbles","cancelable","createEvent","initEvent","toArray$1","BlobRecord","checksum","filename","content_type","byte_size","xhr","csrfToken","head","getMetaValue","requestDidLoad","requestDidError","direct_upload","directUploadData","_xhr","BlobUpload","_blob$directUploadDat","headers","DirectUpload","delegate","notify","methodName","_len","messages","_key","DirectUploadController","input","directUpload","dispatch","hiddenInput","createElement","insertAdjacentElement","dispatchError","signed_id","progress","defaultPrevented","alert","_this2","uploadRequestDidProgress","DirectUploadsController","form","inputs","querySelectorAll","controllers","createDirectUploadControllers","startNextController","controller","submitButtonsByForm","started","didClick","didSubmitForm","didSubmitRemoteElement","tagName","handleFormSubmissionEvent","hasAttribute","click","display","appendChild","submitForm","ActiveStorage","require","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","nonce","loadCSPNonce","ref","cspNonce","Element","matchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector","webkitMatchesSelector","setData","$","csrfParam","CSRFProtection","token","refreshCSRFTokens","param","CustomEvent","fire","evt","initCustomEvent","Event","stopEverything","stopImmediatePropagation","eventType","handler","AcceptHeaders","createXHR","prepareOptions","processResponse","xml","script","ajax","responseText","getResponseHeader","success","statusText","beforeSend","OPENED","location","href","dataType","accept","done","crossDomain","onreadystatechange","DONE","isCrossDomain","originAnchor","urlAnchor","protocol","serializeElement","additionalParam","option","selected","checked","formElements","allowAction","handleConfirm","confirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","replacement","innerHTML","originalText","handleMethod","formContent","method","isRemote","handleRemote","enctype","FormData","args","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","metaKey","ctrlKey","rails","ajaxPrefilter","originalOptions","_rails_loaded","Turbolinks","supported","history","pushState","visit","clearCache","setProgressBarDelay","copyObject","closest","ELEMENT_NODE","defer","throttle","Location","absoluteURL","requestURL","anchor","getOrigin","getPath","getPathComponents","getLastPathComponent","isPrefixedBy","isEqualTo","toCacheKey","valueOf","_t","HttpRequest","requestCanceled","requestTimedOut","requestFailed","requestLoaded","requestProgressed","referrer","NETWORK_FAILURE","TIMEOUT_FAILURE","timeout","sent","notifyApplicationBeforeRequestStart","setProgress","requestStarted","cancel","abort","lengthComputable","endRequest","requestCompletedWithResponse","failed","requestFailedWithStatusCode","notifyApplicationAfterRequestEnd","onprogress","onload","onerror","ontimeout","onabort","requestFinished","ProgressBar","trickle","_t2","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","defaultCSS","show","installStylesheetElement","installProgressElement","startTrickling","hiding","fadeProgressElement","uninstallProgressElement","stopTrickling","refresh","insertBefore","firstChild","trickleInterval","setInterval","clearInterval","textContent","className","BrowserAdapter","showProgressBar","_t3","progressBar","visitProposedToLocationWithAction","startVisitToLocationWithAction","visitStarted","issueRequest","changeHistory","loadCachedSnapshot","visitRequestStarted","hasCachedSnapshot","showProgressBarAfterDelay","visitRequestProgressed","visitRequestCompleted","loadResponse","visitRequestFailedWithStatusCode","reload","visitRequestFinished","hideProgressBar","visitCompleted","followRedirect","pageInvalidated","progressBarTimeout","progressBarDelay","clearTimeout","_t4","History","onPageLoad","onPopState","shouldHandlePopState","turbolinks","restorationIdentifier","historyPoppedToLocationWithRestorationIdentifier","pageLoaded","pageIsLoaded","HeadDetails","outerHTML","tracked","fromHeadElement","childNodes","hasElementWithKey","getTrackedElementSignature","getScriptElementsNotInDetails","getElementsMatchingTypeNotInDetails","getStylesheetElementsNotInDetails","getProvisionalElements","findMetaElementByName","_e","Snapshot","headDetails","bodyElement","fromHTMLString","fromHTMLElement","cloneNode","getRootLocation","getSetting","getCacheControlValue","getElementForAnchor","getPermanentElements","getPermanentElementById","getPermanentElementsPresentInSnapshot","findFirstAutofocusableElement","hasAnchor","isPreviewable","isCacheable","isVisitable","Renderer","renderView","viewWillRender","newBody","viewRendered","invalidateView","viewInvalidated","createScriptElement","async","__super__","SnapshotRenderer","currentSnapshot","newSnapshot","isPreview","currentHeadDetails","newHeadDetails","currentBody","shouldRender","mergeHead","replaceBody","focusFirstAutofocusableElement","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","relocateCurrentBodyPermanentElements","activateNewBodyScriptElements","assignNewBody","replacePlaceholderElementsWithClonedPermanentElements","trackedElementsAreIdentical","getNewHeadStylesheetElements","getNewHeadScriptElements","getCurrentHeadProvisionalElements","getNewHeadProvisionalElements","getCurrentBodyPermanentElements","permanentElement","getNewBodyScriptElements","_t5","replaceChild","_t6","ErrorRenderer","newHead","replaceHeadAndBody","activateBodyScriptElements","getScriptElements","View","htmlElement","getSnapshot","snapshot","markAsPreview","renderSnapshot","renderError","ScrollManager","onScroll","_t7","scrollToElement","scrollIntoView","scrollToPosition","scrollTo","updatePosition","pageXOffset","pageYOffset","scrollPositionChanged","SnapshotCache","snapshots","has","read","touch","put","write","unshift","Visit","performScroll","_t8","identifier","adapter","timingMetrics","recordTimingMetric","cancelRender","fail","visitFailed","historyChanged","shouldIssueRequest","getCachedSnapshot","getCachedSnapshotForLocation","cacheSnapshot","visitRendered","redirectedToLocation","followedRedirect","replaceHistoryWithLocationAndRestorationIdentifier","scrolled","scrollToRestoredPosition","scrollToTop","scrollToAnchor","restorationData","scrollPosition","getTime","getTimingMetrics","snapshotCached","_t9","Controller","clickBubbled","clickCaptured","scrollManager","startHistory","stopHistory","applicationAllowsVisitingLocation","locationIsVisitable","getRestorationDataForIdentifier","startVisit","pushHistoryWithLocationAndRestorationIdentifier","shouldCacheSnapshot","notifyApplicationBeforeCachingSnapshot","lastRenderedLocation","getCurrentRestorationData","notifyApplicationBeforeRender","currentVisit","notifyApplicationAfterRender","notifyApplicationAfterPageLoad","clickEventIsSignificant","getVisitableLinkForNode","getVisitableLocationForLink","applicationAllowsFollowingLinkToLocation","getActionForLink","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","notifyApplicationAfterVisitingLocation","timing","createVisit","isContentEditable","altKey","shiftKey","nodeIsVisitable","currentScript","channels","webpackEmptyContext","req","noGlobal","getProto","getPrototypeOf","class2type","hasOwn","fnToString","ObjectFunctionString","support","isWindow","preservedScriptAttributes","noModule","DOMEval","doc","toType","rtrim","isArrayLike","pushStack","elems","prevObject","each","elem","eq","copyIsArray","deep","isPlainObject","expando","isReady","noop","proto","Ctor","isEmptyObject","globalEval","makeArray","inArray","grep","invert","callbackExpect","arg","guid","Sizzle","Expr","getText","isXML","tokenize","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","preferredDoc","dirruns","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","push_native","booleans","whitespace","pseudos","rwhitespace","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","escaped","escapedWhitespace","rcssescape","fcssescape","ch","asCodePoint","unloadHandler","inDisabledFieldset","addCombinator","els","seed","nid","newSelector","newContext","getElementById","getElementsByTagName","getElementsByClassName","qsa","toSelector","testContext","qsaError","cacheLength","markFunction","assert","addHandle","attrs","attrHandle","siblingCheck","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","hasCompare","subWindow","attachEvent","createComment","getById","getElementsByName","attrId","getAttributeNode","tag","disconnectedMatch","adown","bup","compare","sortDetached","aup","ap","expr","attr","specified","sel","uniqueSort","duplicates","detectDuplicates","sortStable","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","operator","what","simple","forward","ofType","uniqueCache","outerCache","nodeIndex","lastChild","uniqueID","pseudo","matcher","unmatched","lang","elemLang","activeElement","hasFocus","tabIndex","selectedIndex","radio","checkbox","password","submit","tokens","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","temp","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","parseOnly","soFar","preFilters","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","defaultValue","isXMLDoc","escapeSelector","until","truncate","is","siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","parseHTML","ready","rparentsprev","guaranteedUnique","sibling","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","contentDocument","rnothtmlwhite","Identity","Thrower","ex","adoptValue","reject","noValue","promise","Callbacks","flag","createOptions","firing","fired","firingIndex","once","stopOnFalse","fireWith","Deferred","tuples","always","deferred","pipe","fns","newDefer","tuple","returned","onFulfilled","onRejected","maxDepth","special","that","mightThrow","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","stack","readyException","readyList","completed","catch","readyWait","wait","doScroll","access","chainable","emptyGet","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","camelCase","acceptData","owner","Data","uid","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","removeData","_data","_removeData","dequeue","startLength","hooks","_queueHooks","setter","clearQueue","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","swap","old","adjustCSS","valueParts","tween","adjusted","maxIterations","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","showHide","rcheckableType","rtagName","rscriptType","wrapMap","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","buildFragment","scripts","selection","ignored","attached","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","on","types","origFn","off","leverageNative","notAsync","saved","isTrigger","delegateType","handleObjIn","eventHandle","events","handleObj","namespaces","origType","elemData","handle","triggered","bindType","delegateCount","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","matchedHandlers","matchedSelectors","addProp","hook","originalEvent","noBubble","beforeunload","returnValue","isDefaultPrevented","relatedTarget","timeStamp","isSimulated","changedTouches","eventPhase","charCode","buttons","pointerId","pointerType","screenX","screenY","targetTouches","toElement","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","_evalUrl","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","prepend","before","after","replaceWith","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","rboxStyle","curCSS","computed","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","pixelBoxStylesVal","boxSizingReliableVal","scrollboxSizeVal","measure","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","cssPrefixes","emptyStyle","vendorProps","finalPropName","final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","isBorderBox","computedVal","extra","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","origName","isCustomProp","setProperty","scrollboxSizeBuggy","margin","border","suffix","expand","expanded","propHooks","run","percent","eased","fx","linear","swing","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","interval","tick","createFxNow","genFx","includeWidth","createTween","Animation","tweeners","stopped","prefilters","tweens","opts","specialEasing","originalProperties","gotoEnd","propFilter","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","prefilter","speed","opt","speeds","fadeTo","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeToggle","slow","fast","delay","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","valueOrFunction","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","addToPrefiltersOrTransports","structure","dataTypeExpression","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","inspect","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","isLocal","processData","contentType","accepts","responseFields","converters","ajaxSetup","ajaxTransport","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","statusCode","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","finalText","hasContent","ifModified","nativeStatusText","responses","isSuccess","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","conv","dataFilter","throws","ajaxConvert","getJSON","getScript","wrapAll","wrapInner","htmlIsFunction","unwrap","xhrSuccessStatus","1223","xhrSupported","cors","errorCallback","username","xhrFields","binary","scriptAttrs","charset","scriptCharset","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","win","parentOffset","Height","Width","defaultExtra","funcName","hover","fnOver","fnOut","undelegate","proxy","holdReady","hold","parseJSON","_jQuery","_$","noConflict","webpackContext","webpackContextResolve","_defineProperties","_createClass","_defineProperty","ownKeys","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","_objectSpread2","getOwnPropertyDescriptors","transitionEndEmulator","Util","TRANSITION_END","triggerTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","Boolean","isElement","typeCheckConfig","componentName","config","configTypes","expectedTypes","valueType","findShadowRoot","attachShadow","ShadowRoot","jQueryDetection","emulateTransitionEnd","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_element","_proto","close","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","JQUERY_NO_CONFLICT$1","ClassName$1","Selector$1","Event$1","FOCUS_BLUR_DATA_API","LOAD_DATA_API","Button","triggerChangeEvent","addAriaPressed","classList","inputBtn","_i","_button","NAME$2","EVENT_KEY$2","JQUERY_NO_CONFLICT$2","Default","keyboard","slide","DefaultType","Direction","Event$2","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","ClassName$2","Selector$2","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_config","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","visibilityState","activeIndex","_getItemIndex","_handleSwipe","absDeltax","_keydown","_addTouchEventListeners","_this3","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","fromIndex","slideEvent","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","_this4","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","defaultInterval","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","Event$3","SHOW","SHOWN","HIDE","HIDDEN","ClassName$3","Dimension","Selector$3","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","_getDimension","setTransitioning","scrollSize","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","isOpen","$this","$trigger","$target","NAME$4","JQUERY_NO_CONFLICT$4","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","Event$4","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","ClassName$4","Selector$4","AttachmentMap","Default$2","boundary","popperConfig","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","isActive","_clearMenus","usePopper","showEvent","_getParentFromElement","referenceElement","_getPopperConfig","hideEvent","_getPlacement","$parentDropdown","_getOffset","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","items","item","JQUERY_NO_CONFLICT$5","Default$3","backdrop","DefaultType$3","Event$5","HIDE_PREVENTED","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","ClassName$5","Selector$5","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","handleUpdate","_triggerBackdropTransition","hideEventPrevented","modalTransitionDuration","modalBody","_enforceFocus","shownEvent","transitionComplete","_this5","_this6","_this7","_this8","_resetAdjustments","_resetScrollbar","_removeBackdrop","_this9","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","scrollHeight","paddingLeft","paddingRight","_getScrollbarWidth","_this10","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","_this11","uriAttrs","DefaultWhitelist","br","em","hr","h1","h2","h3","h4","h5","h6","img","pre","small","span","sup","strong","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","attrName","regExp","attrRegex","allowedAttribute","NAME$6","JQUERY_NO_CONFLICT$6","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType$4","template","title","fallbackPlacement","sanitize","AttachmentMap$1","AUTO","TOP","Default$4","HoverState","Event$6","INSERTED","FOCUSOUT","ClassName$6","Selector$6","Trigger","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","_hideModalHandler","isWithContent","shadowRoot","isInTheDom","tipId","NAME","setContent","_getAttachment","addAttachmentClass","_getContainer","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","_handlePopperPlacementChange","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","popperInstance","initConfigAnimation","NAME$7","JQUERY_NO_CONFLICT$7","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","ClassName$7","Selector$7","Event$7","Popover","_Tooltip","subClass","superClass","__proto__","_getContent","CLASS_PREFIX$1","NAME$8","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","Event$8","ACTIVATE","SCROLL","ClassName$8","Selector$8","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","$spy","JQUERY_NO_CONFLICT$9","Event$9","ClassName$9","Selector$9","Tab","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","JQUERY_NO_CONFLICT$a","Event$a","ClassName$a","DefaultType$7","autohide","Default$7","Selector$a","Toast","_close","Scrollspy","S2","select2","amd","requirejs","define","undef","main","_req","makeMap","defined","waiting","defining","aps","jsSuffixRegExp","hasProp","baseName","nameParts","nameSegment","mapValue","foundMap","foundI","foundStarMap","starI","part","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeLoad","depName","callDep","splitPrefix","makeRelParts","makeConfig","relParts","plugin","relResourceName","pr","uri","deps","cjsModule","usingExports","callbackType","alt","cfg","_defined","getMethods","theClass","methods","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","_type","invoke","generateChars","_convertData","originalKey","dataLevel","hasScroll","$el","scrollWidth","escapeMarkup","markup","replaceMap","'","appendMany","$nodes","$jqNodes","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","$results","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","sorter","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","selectedIds","showLoading","loadingMore","$loading","_resultId","role","label","$children","$child","$childrenContainer","$container","$highlighted","getHighlightedResults","currentIndex","$next","currentOffset","nextTop","nextOffset","outerHeight","nextBottom","mousewheel","isAtTop","isAtBottom","offsetDelta","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","isEnabled","SingleSelection","$rendered","selectionContainer","formatted","MultipleSelection","$selections","Placeholder","decorated","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","removeAll","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","term","EventRelay","relayEvents","preventableEvents","Translation","dict","translation","_cache","loadPath","translations","BaseAdapter","query","generateResultId","SelectAdapter","currentData","unselect","addOptions","innerText","normalizedData","_normalizeItem","ArrayAdapter","_dataToConvert","convertToOptions","elm","$existing","existingIds","onlyItem","$existingOption","existingData","newData","$newOption","AjaxAdapter","ajaxOptions","_applyDefaults","processResults","failure","$request","_request","_queryTimeout","Tags","tags","createTag","insertTag","_removeOldTags","page","wrapper","checkChildren","Tokenizer","tokenizer","dropdown","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","more","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","ev","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","enoughRoomAbove","enoughRoomBelow","$offsetParent","isConnected","outerWidth","MinimumResultsForSearch","minimumResultsForSearch","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","multiple","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","language","_resolveLanguage","uniqueLanguages","_processTranslations","debug","stripDiacritics","amdLanguageBase","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","theme","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","baseLanguage","languageData","convertedData","Options","fromElement","InputCompat","excludedData","dataset","upperCaseLetter","attributeName","dataName","dataValue","Select2","_generateId","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","observer","MutationObserver","WebKitMutationObserver","MozMutationObserver","_observer","mutations","observe","childList","subtree","nonRelayEvents","toggleDropdown","_isChangeMutation","changed","addedNodes","removedNodes","mutation","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","newVal","detachEvent","thisMethods","instanceOptions","EasyAutocomplete","$input","requestDelayTimeoutId","consts","Constans","Configuration","logger","Logger","Template","listBuilderService","ListBuilderService","proccess","checkParam","$field","elementsList","selectedElement","prepareField","$elements_container","highlight","phrase","escapedPhrase","highlightPhrase","$wrapper","getTemplateClass","fieldWidth","createWrapper","getContainerId","showAnimation","animationTime","onShowListEvent","hideAnimation","onHideListEvent","onSelectItemEvent","listBuilders","$item","$listContainer","builderIndex","listBuildersLength","listData","listDataLength","maxListSize","itemCounter","elementsValue","selectElement","onClickEvent","onChooseEvent","mouseover","onMouseOverEvent","mouseout","onMouseOutEvent","build","onLoadEvent","elementId","showContainer","hideContainer","loadElements","getConstants","getConfiguration","getContainer","getSelectedItemIndex","getItems","getItemData","getSelectedItemData","checkDataUrlProperties","checkRequiredProperties","focusout","fieldValue","caseSensitive","inputPhrase","hideOnEmptyPhrase","loadData","updateCategories","createAjaxSettings","convertXml","checkInputPhraseMatchResponse","checkIfDataExists","warning","suppressKeypress","keydown","onKeyEnterEvent","eacHandles","getHandle","inputHasId","assignRandomId","fieldId","setHandle","genericTemplates","cssClass","description","fields","iconLeft","icon","iconRight","iconSrc","links","link","custom","_cssClass","emptyStringFunction","templateClass","_fields","buildMethod","elementValue","prepareBuildMethod","listBuilder","maxNumberOfElements","reduceElementsInList","preparedList","findMatch","configuration","proccessResponseData","convertToListBuilder","category","builder","listLocation","xmlElementName","convertXmlToListBuilder","convertDataToListBuilder","defaultsGetValue","convertXmlToList","simpleList","constants","CONTAINER_CLASS","CONTAINER_ID","WRAPPER_CSS_CLASS","autocompleteOff","ajaxCallback","matchResponseProperty","cssClasses","minCharNumber","requestDelay","adjustWidth","preparePostData","loggerEnabled","categoriesAssigned","categories","externalObjects","printPropertiesThatDoesntExist","consol","optionsToCheck","checkPropertiesIfExist","isAssigned","prepareDefaults","mergeObjects","mergedObject","defaultUrl","defaultlistLocation","processAfterMerge","easyAutocomplete","eacHandle","inputId","Set","_handled","_value","_deferreds","setImmediate","race","_setImmediateFn","_setUnhandledRejectionFn","customElements","registerElement","A","uid_","takeRecords","nodes_","removeTransientObservers","callback_","enqueue","records_","C","previousSibling","attributeNamespace","oldValue","transientObservedNodes","JsMutationObserver","postMessage","ShadowDOMPolyfill","wrapIfNeeded","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","addListeners_","removeListeners_","addTransientObserver","handleEvent","relatedNode","attrChange","MutationEvent","ADDITION","prevValue","_isPolyfilled","webkitRequestAnimationFrame","mozRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","WebComponents","CustomElements","flags","addModule","initializeModules","hasNative","useNative","register","HTMLImports","olderShadowRoot","IMPORT_LINK_TYPE","forDocumentTree","forSubtree","upgrade","__upgraded__","__attached","attachedCallback","detachedCallback","dom","URL","_URL","localName","DOCUMENT_FRAGMENT_NODE","E","__observer","baseURI","hasPolyfillMutations","hasThrottledAttached","S","createShadowRoot","watchShadow","__watched","upgradeDocumentTree","upgradeDocument","upgradeSubtree","upgradeAll","createdCallback","HTMLElement","getOwnPropertyNames","HTMLTemplateElement","decorate","getRegisteredDefinition","upgradeWithDefinition","implementPrototype","_polyfilled","attributeChangedCallback","ctor","__name","lifecycle","ancestry","registry","reservedTagList","readyTime","elapsed","unwrapIfNeeded","__importsParsingHook","eager","Trix","ZERO_WIDTH_SPACE","NON_BREAKING_SPACE","OBJECT_REPLACEMENT_CHARACTER","browser","composesExistingText","forcesObjectResizing","supportsInputEvents","InputEvent","BasicObject","proxyMethod","toMethod","toProperty","optional","fromJSONString","hasSameConstructorAs","contentsForInspection","toJSONString","toUTF16String","UTF16String","getCacheKey","normalizeSpaces","normalizeNewlines","breakableWhitespacePattern","squishBreakableWhitespace","summarizeStringChange","added","removed","_n","utf16String","codepoints","fromCodepoints","objectsAreEqual","arraysAreEqual","arrayStartsWith","spliceArray","summarizeArrayChange","getAllAttributeNames","getTextAttributeNames","getBlockAttributeNames","getBlockConfig","blockAttributes","getTextConfig","textAttributes","getListAttributeNames","listAttribute","_s","onElement","matchingSelector","withCallback","inPhase","findClosestElementFromNode","handleEventOnce","triggerEvent","elementMatchesSelector","untilNode","findInnerElement","innerElementIsActive","elementContainsNode","findNodeFromContainerAndOffset","TEXT_NODE","findElementFromContainerAndOffset","findChildIndexOfNode","walkTree","onlyNodesOfType","usingFilter","expandEntityReferences","NodeFilter","SHOW_ELEMENT","SHOW_TEXT","SHOW_COMMENT","SHOW_ALL","createTreeWalker","makeElement","editable","contenteditable","getBlockTagNames","blockTagNames","nodeIsBlockContainer","nodeIsBlockStartComment","nodeProbablyIsBlockContainer","nodeIsBlockStart","strict","nodeIsCommentNode","COMMENT_NODE","nodeIsCursorTarget","nodeIsTextNode","trixCursorTarget","nodeIsAttachmentElement","AttachmentView","attachmentSelector","nodeIsEmptyTextNode","normalizeRange","rangeIsCollapsed","rangesAreEqual","initialize","initialized","connectedCallback","disconnectedCallback","_n2","Reflect","setPrototypeOf","getDOMSelection","getSelection","getDOMRange","getRangeAt","setDOMRange","removeAllRanges","addRange","selectionChangeObserver","startContainer","endContainer","dataTransferIsPlainText","dataTransferIsWritable","keyEventIsKeyboardCommand","platform","RTL_PATTERN","getDirection","dirName","Hash","fromCommonAttributesOfObjects","getKeys","getKeysCommonToHash","toObject","ObjectGroup","asTree","groupObjects","canBeGrouped","canBeGroupedWith","getObjects","getDepth","ObjectMap","ElementStore","trixStoreKey","Operation","isPerforming","performing","hasPerformed","performed","hasSucceeded","succeeded","hasFailed","getPromise","perform","release","ucs2String","ucs2Length","fromUCS2String","offsetToUCS2Offset","offsetFromUCS2Offset","codePointAt","fromCodePoint","attachFiles","bold","bullets","captionPlaceholder","heading1","indent","italic","numbers","outdent","quote","redo","strike","undo","unlink","urlPlaceholder","GB","KB","MB","PB","TB","attachmentCaption","attachmentCaptionEditor","attachmentMetadata","attachmentMetadataContainer","attachmentName","attachmentProgress","attachmentSize","attachmentToolbar","attachmentGallery","nestable","terminal","breakOnReturn","plaintext","bulletList","bullet","numberList","number","exclusive","fileSize","formatter","toFixed","inheritable","fontStyle","groupTagName","frozen","backgroundColor","serializers","Document","fromHTML","toSerializableDocument","DocumentView","deserializers","serializeToContentType","deserializeFromContentType","toolbar","getDefaultHTML","undoInterval","attachments","preview","presentation","keyNames","8","9","13","27","37","39","46","68","72","79","level2Enabled","getLevel","pickFiles","fileInputId","ObjectView","childViews","rootView","getNodes","createNodes","invalidate","parentView","invalidateViewForObject","findViewForObject","findOrCreateCachedChildView","getCachedViewForObject","recordChildView","createChildView","cacheViewForObject","viewClass","ObjectGroupView","getAllChildViews","findElementForObject","getViewCache","isViewCachingEnabled","viewCache","shouldCacheViews","enableViewCaching","disableViewCaching","garbageCollectCachedViews","objectGroup","getChildViews","createContainerElement","didMutate","_h","findSignificantMutations","elementDidMutate","getMutationSummary","mutationIsSignificant","nodeIsMutable","nodesModifiedByMutation","nodeIsSignificant","getTextMutationSummary","getTextChangesFromCharacterData","additions","deletions","getTextChangesFromChildList","textAdded","textDeleted","getMutationsByType","_t10","FileVerificationOperation","InputController","mutationObserver","handlerFor","editorWillSyncDocumentView","editorDidSyncDocumentView","requestRender","inputControllerDidRequestRender","requestReparse","inputControllerDidRequestReparse","handleInput","inputControllerWillAttachFiles","responder","insertFiles","inputControllerWillHandleInput","inputControllerDidHandleInput","createLinkHTML","Level0InputController","resetInputSummary","setInputSummary","inputSummary","isComposing","inputControllerDidAllowUnhandledInput","mutationIsExpected","preferDocument","didDelete","getSelectedRange","positionIsBlockBreak","compositionInput","getEndData","didInput","keyName","inputControllerDidReceiveKeyboardCommand","keypress","inputControllerWillPerformTyping","insertString","selectionIsExpanded","textInput","setSelectedRange","dragenter","dragstart","serializeSelectionToDataTransfer","dataTransfer","draggedRange","inputControllerDidStartDrag","dragover","canAcceptDataTransfer","draggingPoint","inputControllerDidReceiveDragOverPoint","dragend","inputControllerDidCancelDrag","drop","setLocationRangeFromPointRange","inputControllerWillMoveText","moveTextFromRange","insertDocument","cut","clipboardData","inputControllerWillCutText","deleteInDirection","paste","R","D","L","testClipboardData","clipboard","getPastedHTMLUsingHiddenElement","inputControllerWillPaste","insertHTML","inputControllerDidPaste","getAsFile","insertFile","compositionstart","getCompositionInput","compositionupdate","compositionend","beforeinput","backspace","insertLineBreak","tab","canIncreaseNestingLevel","increaseNestingLevel","selectionIsInCursorTarget","moveCursorInDirection","control","canDecreaseNestingLevel","decreaseNestingLevel","expandSelectionInDirection","isEnded","getSelectedDocument","Files","inputController","isSignificant","insertPlaceholder","selectPlaceholder","forgetPlaceholder","canApplyToDocument","Level2InputController","scheduledRender","composing","reparse","scheduleRender","afterRender","withEvent","inputTypes","inputType","selectionContainsAttachments","dragging","ArrowLeft","shouldManageMovingCursorInDirection","ArrowRight","Backspace","shouldManageDeletingInDirection","deleteByComposition","recordUndoEntry","deleteByCut","deleteByDrag","withTargetDOMRange","deleteByDragRange","deleteCompositionText","deleteContent","deleteContentBackward","deleteContentForward","deleteEntireSoftLine","deleteHardLineBackward","deleteHardLineForward","deleteSoftLineBackward","deleteSoftLineForward","deleteWordBackward","deleteWordForward","formatBackColor","activateAttributeIfSupported","formatBold","toggleAttributeIfSupported","formatFontColor","formatFontName","formatIndent","formatItalic","formatJustifyCenter","formatJustifyFull","formatJustifyLeft","formatJustifyRight","formatOutdent","formatRemove","getCurrentAttributes","removeCurrentAttribute","formatSetBlockTextDirection","formatSetInlineTextDirection","formatStrikeThrough","formatSubscript","formatSuperscript","formatUnderline","historyRedo","inputControllerWillPerformRedo","historyUndo","inputControllerWillPerformUndo","insertCompositionText","insertFromComposition","insertFromDrop","insertFromPaste","insertFromYank","insertLink","insertOrderedList","insertParagraph","insertReplacementText","insertText","insertTranspose","insertUnorderedList","inputControllerWillPerformFormatting","toggleCurrentAttribute","setCurrentAttribute","getTargetDOMRange","minLength","getTargetRanges","startOffset","endOffset","AttachmentEditorController","attachmentPiece","didBlurCaption","didChangeCaption","didInputCaption","didKeyDownCaption","didClickActionButton","didClickToolbar","install","undos","makeElementMutable","addToolbar","installCaptionEditor","uninstall","savePendingCaption","didUninstallAttachmentEditor","pendingCaption","attachmentEditorDidRequestUpdatingAttributesForAttachment","attachmentEditorDidRequestRemovingAttributeForAttachment","trixMutable","trixAction","getFilename","getFormattedFilesize","getCaption","editCaption","attachmentEditorDidRequestRemovalOfAttachment","attachmentEditorDidRequestDeselectingAttachment","uploadProgressDelegate","piece","createContentNodes","getClassName","getHref","getContent","createCaptionElement","isPending","getUploadProgress","getCaptionConfig","getType","trixAttachment","trixContentType","getContentType","trixId","trixAttributes","trixSerialize","findProgressElement","attachmentDidChangeUploadProgress","PreviewableAttachmentView","previewDelegate","updateAttributesForImage","getURL","getPreviewURL","getWidth","getHeight","attachmentDidChangeAttributes","PieceView","textConfig","createAttachmentNodes","createStringNodes","preserveSpaces","styleProperty","isLast","isFirst","followsWhitespace","_t11","TextView","getPieces","BlockView","block","getLastAttribute","shouldAddExtraNewlineElement","isRTL","getBlockBreakPosition","elementStore","sync","shadowElement","getBlocks","isSynced","createDocumentFragmentForSync","didSync","CompositionController","composition","didClickAttachment","didBlur","didFocus","documentView","focused","compositionControllerDidFocus","blurPromise","compositionControllerDidBlur","findAttachmentForElement","compositionControllerDidSelectAttachment","getSerializableElement","isEditingAttachment","revision","canSyncDocumentView","compositionControllerWillSyncDocumentView","compositionControllerDidSyncDocumentView","compositionControllerDidRender","rerenderViewForObject","refreshViewCache","attachmentEditor","installAttachmentEditorForAttachment","uninstallAttachmentEditor","getAttachmentPieceForAttachment","compositionControllerWillUpdateAttachment","updateAttributesForAttachment","removeAttributeForAttachment","compositionControllerDidRequestRemovalOfAttachment","compositionControllerDidRequestDeselectingAttachment","getAttachmentById","ToolbarController","didKeyDownDialogInput","didClickDialogButton","didClickAttributeButton","resetDialogInputs","toolbarDidClickButton","getDialog","toggleDialog","toolbarDidInvokeAction","toolbarDidToggleAttribute","refreshAttributeButtons","hideDialog","updateActions","refreshActionButtons","eachActionButton","updateAttributes","eachAttributeButton","dialogIsVisible","applyKeyboardCommand","showDialog","toolbarWillShowDialog","toolbarDidShowDialog","willValidate","checkValidity","toolbarDidUpdateAttribute","toolbarDidRemoveAttribute","toolbarDidHideDialog","_t12","ImagePreloadOperation","Image","naturalWidth","naturalHeight","_t13","Attachment","releaseFile","didChangeAttributes","previewablePattern","attachmentForFile","attributesForFile","setFile","filesize","setAttributes","preloadURL","getFilesize","getFile","preloadFile","releasePreloadedFile","uploadProgress","setUploadProgress","previewURL","preloadingURL","setPreviewURL","attachmentDidChangePreviewURL","preload","fileObjectURL","createObjectURL","revokeObjectURL","_t14","Piece","registerType","copyWithAttributes","copyWithAdditionalAttributes","copyWithoutAttribute","getAttributesHash","getCommonAttributes","pieceList","getPieceAtIndex","eachPiece","hasSameStringValueAsPiece","hasSameAttributesAsPiece","isBlockBreak","isSerializable","canBeConsolidatedWith","_t15","AttachmentPiece","ensureAttachmentExclusivelyHasAttribute","removeProhibitedAttributes","permittedAttributes","toConsole","StringPiece","consolidateWith","splitAtOffset","SplittableList","eachObject","insertObjectAtIndex","insertSplittableListAtIndex","insertSplittableListAtPosition","splitObjectAtPosition","editObjectAtIndex","replaceObjectAtIndex","removeObjectAtIndex","getObjectAtIndex","getSplittableListInRange","splitObjectsAtRange","selectSplittableList","removeObjectsInRange","transformObjectsInRange","getObjectAtPosition","findIndexAndOffsetAtPosition","consolidate","consolidateFromIndexToIndex","findPositionAtIndexAndOffset","getEndPosition","endPosition","_t16","Text","textForAttachmentWithAttributes","textForStringWithAttributes","copyWithPieceList","copyUsingObjectMap","appendText","insertTextAtPosition","removeTextAtRange","replaceTextAtRange","moveTextFromRangeToPosition","getTextAtRange","addAttributeAtRange","addAttributesAtRange","removeAttributeAtRange","setAttributesAtRange","getAttributesAtPosition","getCommonAttributesAtRange","getExpandedRangeForAttributeAtOffset","getStringAtRange","getStringAtPosition","startsWithString","endsWithString","getAttachmentPieces","getAttachments","getAttachmentAndPositionById","getRangeOfAttachment","getPieceAtPosition","toSerializableText","Block","copyWithText","copyWithoutText","copyWithoutAttributes","removeLastAttribute","getAttributeLevel","getAttributeAtLevel","hasAttributes","getLastNestableAttribute","getNestableAttributes","getNestingLevel","getListItemAttributes","isListItem","isTerminalBlock","breaksOnReturn","findLineBreakInDirectionFromPosition","getTextWithoutBlockBreak","blockBreak","HTMLSanitizer","allowedAttributes","forbiddenProtocols","sanitizeElements","normalizeListElementNesting","getHTML","getBody","nextNode","currentNode","sanitizeElement","previousElementSibling","HTMLParser","blocks","blockElements","processedElements","getDocument","createHiddenContainer","containerElement","processNode","translateBlockElementMarginsToNewlines","removeHiddenContainer","FILTER_REJECT","FILTER_ACCEPT","isInsignificantTextNode","appendBlockForTextNode","processTextNode","appendBlockForElement","processElement","currentBlockElement","isBlockElement","appendStringWithAttributes","getBlockAttributes","currentBlock","appendBlockForAttributesWithElement","findParentBlockElement","appendEmptyBlock","getTextAttributes","appendAttachmentWithAttributes","isExtraBR","appendPiece","appendStringToTextAtIndex","prependStringToTextAtIndex","findBlockElementAncestors","whiteSpace","getMarginOfDefaultBlockElement","getMarginOfBlockElementAtIndex","blockList","fromString","getBlockAtIndex","consolidateBlocks","copyUsingObjectsFromDocument","copyWithBaseBlockAttributes","replaceBlock","insertDocumentAtRange","locationFromPosition","getBlockAtPosition","mergeDocumentAtRange","getBaseBlockAttributes","getBlockCount","insertTextAtRange","locationRangeFromRange","getDocumentAtRange","eachBlockAtRange","eachBlock","getTextAtIndex","insertBlockBreakAtRange","applyBlockAttributeAtRange","expandRangeToLineBreaksAndSplitBlocks","removeLastListAttributeAtRange","exceptAttributeName","convertLineBreaksToBlockBreaksInRange","removeBlockAttributesAtRange","removeLastTerminalAttributeAtRange","consolidateBlocksAtRange","positionFromLocation","getTextAtPosition","getCharacterAtPosition","getEditCount","editCount","getCommonAttributesAtPosition","getRangeOfCommonAttributeAtPosition","getLocationRangeOfAttachment","findRangesForBlockAttribute","findRangesForTextAttribute","withValue","locationRangeFromPosition","rangeFromLocationRange","getTexts","LineBreakInsertion","startPosition","startLocation","endLocation","previousCharacter","nextCharacter","shouldInsertBlockBreak","shouldBreakFormattedBlock","shouldDecreaseListLevel","shouldPrependListItem","shouldRemoveLastBlockAttribute","Composition","currentAttributes","refreshAttachments","compositionDidChangeDocument","selectedRange","loadSnapshot","compositionWillLoadSnapshot","setSelection","compositionDidLoadSnapshot","notifyDelegateOfInsertionAtRange","insertBlock","getCurrentTextAttributes","insertBlockBreak","decreaseListLevel","removeLastBlockAttribute","breakFormattedBlock","replaceHTML","getLocationRange","compositionShouldAcceptFile","insertAttachments","insertAttachment","canDecreaseBlockAttributeLevel","getBlock","decreaseBlockAttributeLevel","getExpandedRangeInDirection","getAttachmentAtRange","editAttachment","removeAttachment","stopEditingAttachment","placeholderPosition","hasCurrentAttribute","canSetCurrentAttribute","canSetCurrentBlockAttribute","canSetCurrentTextAttribute","setBlockAttribute","setTextAttribute","notifyDelegateOfCurrentAttributesChange","removeBlockAttribute","updateCurrentAttributes","removeTextAttribute","getPreviousBlock","ignoreLock","freezeSelection","thawSelection","hasFrozenSelection","compositionDidRequestChangingSelectionToLocationRange","getSelectionManager","setLocationRange","targetLocationRange","withTargetLocationRange","withTargetRange","createLocationRangeFromDOMRange","translateUTF16PositionFromOffset","editingAttachment","expandSelectionForEditing","expandSelectionAroundCommonAttribute","getSelectedAttachments","positionIsCursorTarget","locationIsCursorTarget","compositionDidRemoveAttachment","compositionDidAddAttachment","compositionDidEditAttachment","compositionDidChangeAttachmentPreviewURL","compositionDidStartEditingAttachment","compositionDidStopEditingAttachment","compositionDidChangeCurrentAttributes","compositionDidPerformInsertionAtRange","_t17","UndoManager","undoEntries","redoEntries","consolidatable","createEntry","canUndo","canRedo","attachmentGalleryFilter","applyBlockAttribute","findRangesOfBlocks","findRangesOfPieces","moveSelectedRangeForward","Editor","selectionManager","_t18","undoManager","loadDocument","loadHTML","loadJSON","getClientRectAtPosition","getClientRectAtLocationRange","activateAttribute","attributeIsActive","canActivateAttribute","deactivateAttribute","_t19","ManagedAttachment","attachmentManager","requestRemovalOfAttachment","_t20","AttachmentManager","managedAttachments","manageAttachment","attachmentIsManaged","attachmentManagerDidRequestRemovalOfAttachment","unmanageAttachment","LocationMapper","findLocationFromContainerAndOffset","findAttachmentElementParentForNode","findContainerAndOffsetFromLocation","findNodeAndOffsetFromLocation","getSignificantNodesForIndex","PointMapper","createDOMRangeFromPoint","caretPositionFromPoint","offsetNode","caretRangeFromPoint","createTextRange","moveToPoint","getClientRectsForDOMRange","SelectionChangeObserver","selectionManagers","registerSelectionManager","unregisterSelectionManager","notifySelectionManagersOfSelectionChange","selectionDidChange","domRange","SelectionManager","didMouseDown","locationMapper","pointMapper","lockCount","currentLocationRange","lockedLocationRange","createDOMRangeFromLocationRange","updateCurrentLocationRange","getLocationAtPoint","unlock","clearSelection","selectionIsCollapsed","collapsed","domRangeWithinElement","pauseTemporarily","locationRangeDidChange","EditorController","editorElement","compositionController","toolbarController","toolbarElement","editor","notifyEditorElement","handlingInput","updateCurrentActions","pasting","pastedRange","attachmentLocationRange","loadingSnapshot","isFocused","requestedLocationRange","compositionRevisionWhenLocationRangeRequested","renderedCompositionRevision","runEditorFilters","isFocusedInvisibly","requestedRender","recordTypingUndoEntry","recordFormattingUndoEntry","locationRangeBeforeDrag","invokeAction","selectionFrozen","dialogName","canInvokeAction","actionIsExternal","actionName","getCurrentActions","currentActions","updateInputElement","setInputElementValue","documentChangedSinceLastRender","getUndoContext","getLocationContext","getTimeContext","queryCommandSupported","execCommand","labels","inputElement","editorController","registerResetListener","registerClickListener","unregisterResetListener","unregisterClickListener","resetListener","resetBubbled","clickListener","Timeout","clearFn","_clearFn","unref","enroll","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","registerImmediate","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","nextTick","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","onmessage","canUsePostMessage","MessageChannel","port1","port2","task","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","fun","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","env","argv","versions","addListener","removeListener","removeAllListeners","emit","prependListener","prependOnceListener","cwd","chdir","umask","AttachmentUpload","_classCallCheck","directUploadUrl","directUploadDidComplete","sgid","attachable_sgid","createBlobUrl","signedId","blobUrlTemplate"],"mappings":"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786CO,EA886Cfh5H,EAAQi5H,WA786CS,EA886CjBj5H,EAAQk5H,aA786CW,EA886CnBl5H,EAAQgrG,WA786CS,EA886CjBhrG,EAAQirG,eA786Ca,EA886CrBjrG,EAAQkrG,iBA786Ce,EA886CvBlrG,EAAQmrG,oBA786CkB,EA886C1BnrG,EAAQorG,iBA786Ce,EA886CvBprG,EAAQqrG,eA786Ca,EA886CrBrrG,EAAQm5H,YA786CU,IA886ClBn5H,EAAQo5H,iBA786Ce,IA886CvBp5H,EAAQq5H,wBA786CsB,IA886C9Br5H,EAAQs5H,YA786CU,IA886ClBt5H,EAAQu5H,YA786CU,IA886ClBv5H,EAAQw5H,WA786CS,IA886CjBx5H,EAAQy5H,UA786CQ,IA886ChBz5H,EAAQ05H,eA786Ca,IA886CrB15H,EAAQ25H,uBA786CqB,IA886C7B35H,EAAQ45H,eA786Ca,IA886CrB55H,EAAQ65H,uBA786CqB,IA886C7B75H,EAAQ85H,eA786Ca,IA886CrB95H,EAAQ+5H,uBA786CqB,IA886C7B/5H,EAAQg6H,eA786Ca,IA886CrBh6H,EAAQi6H,uBA786CqB,IA886C7Bj6H,EAAQk6H,uBA786CqB,IA886C7Bl6H,EAAQm6H,WA786CS,EA886CjBn6H,EAAQo6H,YA786CU,EA886ClBp6H,EAAQq6H,UA786CQ,EA886ChBr6H,EAAQs6H,eA786Ca,EA886CrBt6H,EAAQu6H,WA786CS,EA886CjBv6H,EAAQw6H,kBA786CgB,EA886CxBx6H,EAAQy6H,aA786CW,EA886CnBz6H,EAAQ06H,cA786CY,EA886CpB16H,EAAQ26H,kBA786CgB,EA886CxB36H,EAAQ46H,aA786CW,EA886CnB56H,EAAQ66H,aA786CW,EA886CnB76H,EAAQ86H,cA786CY,EA886CpB96H,EAAQ+6H,kBA786CgB,EA886CxB/6H,EAAQg7H,oBA786CkB,EA886C1Bh7H,EAAQi7H,sBA786CoB,EA886C5Bj7H,EAAQk7H,kBA786CgB,EA886CxBl7H,EAAQkxG,UA786CQ,IA886ChBlxG,EAAQmxG,sBA786CoB,IA886C5BnxG,EAAQoxG,sBA786CoB,IA886C5BpxG,EAAQqxG,iCA786C+B,IA886CvCrxG,EAAQsxG,iCA786C+B,IA886CvCtxG,EAAQuxG,2BA786CyB,IA886CjCvxG,EAAQwxG,wBA786CsB,IA886C9BxxG,EAAQyxG,wBA786CsB,IA886C9BzxG,EAAQ0xG,eA786Ca,IA886CrB1xG,EAAQ2xG,oBA786CkB,KA886C1B3xG,EAAQ4xG,uBA786CqB,KA886C7B5xG,EAAQ6xG,cA786CY,KA886CpB7xG,EAAQ8xG,2BA786CyB,KA886CjC9xG,EAAQ+xG,0BA786CwB,KA886ChC/xG,EAAQgyG,aA786CW,KA886CnBhyG,EAAQiyG,0BA786CwB,KA886ChCjyG,EAAQkyG,yBA786CuB,KA886C/BlyG,EAAQm7H,iBA786Ce,KA886CvBn7H,EAAQo7H,SA786CO,KA886Cfp7H,EAAQq7H,UA786CQ,KA886ChBr7H,EAAQs7H,kBA786CgB,KA886CxBt7H,EAAQu7H,QA786CM,KA886Cdv7H,EAAQw7H,gBA786Cc,KA886CtBx7H,EAAQy7H,UA786CQ,KA886ChBz7H,EAAQ07H,cA786CY,KA886CpB17H,EAAQ27H,sBA786CoB,KA886C5B37H,EAAQ47H,sBA786CoB,KA886C5B57H,EAAQ67H,qBA786CmB,KA886C3B77H,EAAQ87H,mBA786CiB,KA886CzB97H,EAAQ+7H,YA786CU,KA886ClB/7H,EAAQg8H,UA786CQ,KA886ChBh8H,EAAQi8H,WA786CS,KA886CjBj8H,EAAQk8H,gBA786Cc,KA886CtBl8H,EAAQm8H,qBA786CmB,KA886C3Bn8H,EAAQo8H,WAh96CS,KAi96CjBp8H,EAAQq8H,YA786CU,KA886ClBr8H,EAAQs8H,mBA786CiB,KA886CzBt8H,EAAQu8H,qBA786CmB,MA886C3Bv8H,EAAQw8H,sBA786CoB,MA886C5Bx8H,EAAQy8H,sBA786CoB,MA886C5Bz8H,EAAQ08H,sBA786CoB,MA886C5B18H,EAAQ28H,wBA786CsB,MA886C9B38H,EAAQ48H,wBA786CsB,MA886C9B58H,EAAQ68H,yBA786CuB,MA886C/B78H,EAAQ88H,yBA786CuB,MA886C/B98H,EAAQ+8H,gBA786Cc,MA886CtB/8H,EAAQg9H,qBA786CmB,MA886C3Bh9H,EAAQi9H,qBA786CmB,MA886C3Bj9H,EAAQk9H,qBA786CmB,MA886C3Bl9H,EAAQm9H,qBA786CmB,MA886C3Bn9H,EAAQo9H,qBA786CmB,MA886C3Bp9H,EAAQq9H,qBA786CmB,MA886C3Br9H,EAAQs9H,qBA786CmB,MA886C3Bt9H,EAAQu9H,qBA786CmB,MA886C3Bv9H,EAAQw9H,sBA786CoB,MA886C5Bx9H,EAAQy9H,sBA786CoB,MA886C5Bz9H,EAAQ09H,sBA786CoB,MA886C5B19H,EAAQ29H,uBA786CqB,MA886C7B39H,EAAQ49H,uBA786CqB,MA886C7B59H,EAAQ69H,uBA786CqB,MA886C7B79H,EAAQ89H,SA786CO,KA886Cf99H,EAAQ+9H,WA786CS,KA886CjB/9H,EAAQg+H,aA786CW,KA886CnBh+H,EAAQi+H,oBA786CkB,KA886C1Bj+H,EAAQk+H,kBA786CgB,KA886CxBl+H,EAAQm+H,kBA786CgB,KA886CxBn+H,EAAQo+H,oBA786CkB,KA886C1Bp+H,EAAQq+H,gBA786Cc,KA886CtBr+H,EAAQs+H,iBA786Ce,KA886CvBt+H,EAAQu+H,kBA786CgB,EA886CxBv+H,EAAQw+H,sBA786CoB,EA886C5Bx+H,EAAQy+H,oBA786CkB,EA886C1Bz+H,EAAQ0+H,eA786Ca,IA886CrB1+H,EAAQ2+H,aA786CW,KA886CnB3+H,EAAQ4+H,cA786CY,KA886CpB5+H,EAAQ6+H,aA786CW,KA886CnB7+H,EAAQ8+H,eA786Ca,KA886CrB9+H,EAAQ++H,cA786CY,KA886CpB/+H,EAAQg/H,eA786Ca,KA886CrBh/H,EAAQi/H,aA786CW,KA886CnBj/H,EAAQk/H,kBA786CgB,KA886CxBl/H,EAAQm/H,iBA786Ce,KA886CvBn/H,EAAQo/H,aAAe9wF,GACvBtuC,EAAQq/H,M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ACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,I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","file":"js/application-02918c11a66095b5b010.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 18);\n","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar g; // This works in non-strict mode\n\ng = function () {\n return this;\n}();\n\ntry {\n // This works if eval is allowed (see CSP)\n g = g || new Function(\"return this\")();\n} catch (e) {\n // This works if the window reference is available\n if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === \"object\") g = window;\n} // g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\n\nmodule.exports = g;","module.exports = global[\"$\"] = require(\"-!/tmp/build_2e052393/node_modules/expose-loader/index.js?jQuery!./jquery.js\");","(function (global, factory) {\n\ttypeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n\ttypeof define === 'function' && define.amd ? define(['exports'], factory) :\n\t(factory((global.THREE = {})));\n}(this, (function (exports) { 'use strict';\n\n\t// Polyfills\n\n\tif ( Number.EPSILON === undefined ) {\n\n\t\tNumber.EPSILON = Math.pow( 2, - 52 );\n\n\t}\n\n\tif ( Number.isInteger === undefined ) {\n\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger\n\n\t\tNumber.isInteger = function ( value ) {\n\n\t\t\treturn typeof value === 'number' && isFinite( value ) && Math.floor( value ) === value;\n\n\t\t};\n\n\t}\n\n\t//\n\n\tif ( Math.sign === undefined ) {\n\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/sign\n\n\t\tMath.sign = function ( x ) {\n\n\t\t\treturn ( x < 0 ) ? - 1 : ( x > 0 ) ? 1 : + x;\n\n\t\t};\n\n\t}\n\n\tif ( 'name' in Function.prototype === false ) {\n\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/name\n\n\t\tObject.defineProperty( Function.prototype, 'name', {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.toString().match( /^\\s*function\\s*([^\\(\\s]*)/ )[ 1 ];\n\n\t\t\t}\n\n\t\t} );\n\n\t}\n\n\tif ( Object.assign === undefined ) {\n\n\t\t// Missing in IE\n\t\t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/assign\n\n\t\t( function () {\n\n\t\t\tObject.assign = function ( target ) {\n\n\t\t\t\tif ( target === undefined || target === null ) {\n\n\t\t\t\t\tthrow new TypeError( 'Cannot convert undefined or null to object' );\n\n\t\t\t\t}\n\n\t\t\t\tvar output = Object( target );\n\n\t\t\t\tfor ( var index = 1; index < arguments.length; index ++ ) {\n\n\t\t\t\t\tvar source = arguments[ index ];\n\n\t\t\t\t\tif ( source !== undefined && source !== null ) {\n\n\t\t\t\t\t\tfor ( var nextKey in source ) {\n\n\t\t\t\t\t\t\tif ( Object.prototype.hasOwnProperty.call( source, nextKey ) ) {\n\n\t\t\t\t\t\t\t\toutput[ nextKey ] = source[ nextKey ];\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn output;\n\n\t\t\t};\n\n\t\t} )();\n\n\t}\n\n\t/**\n\t * https://github.com/mrdoob/eventdispatcher.js/\n\t */\n\n\tfunction EventDispatcher() {}\n\n\tObject.assign( EventDispatcher.prototype, {\n\n\t\taddEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) this._listeners = {};\n\n\t\t\tvar listeners = this._listeners;\n\n\t\t\tif ( listeners[ type ] === undefined ) {\n\n\t\t\t\tlisteners[ type ] = [];\n\n\t\t\t}\n\n\t\t\tif ( listeners[ type ].indexOf( listener ) === - 1 ) {\n\n\t\t\t\tlisteners[ type ].push( listener );\n\n\t\t\t}\n\n\t\t},\n\n\t\thasEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) return false;\n\n\t\t\tvar listeners = this._listeners;\n\n\t\t\treturn listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;\n\n\t\t},\n\n\t\tremoveEventListener: function ( type, listener ) {\n\n\t\t\tif ( this._listeners === undefined ) return;\n\n\t\t\tvar listeners = this._listeners;\n\t\t\tvar listenerArray = listeners[ type ];\n\n\t\t\tif ( listenerArray !== undefined ) {\n\n\t\t\t\tvar index = listenerArray.indexOf( listener );\n\n\t\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\t\tlistenerArray.splice( index, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tdispatchEvent: function ( event ) {\n\n\t\t\tif ( this._listeners === undefined ) return;\n\n\t\t\tvar listeners = this._listeners;\n\t\t\tvar listenerArray = listeners[ event.type ];\n\n\t\t\tif ( listenerArray !== undefined ) {\n\n\t\t\t\tevent.target = this;\n\n\t\t\t\tvar array = listenerArray.slice( 0 );\n\n\t\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\t\tarray[ i ].call( this, event );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tvar REVISION = '93';\n\tvar MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2 };\n\tvar CullFaceNone = 0;\n\tvar CullFaceBack = 1;\n\tvar CullFaceFront = 2;\n\tvar CullFaceFrontBack = 3;\n\tvar FrontFaceDirectionCW = 0;\n\tvar FrontFaceDirectionCCW = 1;\n\tvar BasicShadowMap = 0;\n\tvar PCFShadowMap = 1;\n\tvar PCFSoftShadowMap = 2;\n\tvar FrontSide = 0;\n\tvar BackSide = 1;\n\tvar DoubleSide = 2;\n\tvar FlatShading = 1;\n\tvar SmoothShading = 2;\n\tvar NoColors = 0;\n\tvar FaceColors = 1;\n\tvar VertexColors = 2;\n\tvar NoBlending = 0;\n\tvar NormalBlending = 1;\n\tvar AdditiveBlending = 2;\n\tvar SubtractiveBlending = 3;\n\tvar MultiplyBlending = 4;\n\tvar CustomBlending = 5;\n\tvar AddEquation = 100;\n\tvar SubtractEquation = 101;\n\tvar ReverseSubtractEquation = 102;\n\tvar MinEquation = 103;\n\tvar MaxEquation = 104;\n\tvar ZeroFactor = 200;\n\tvar OneFactor = 201;\n\tvar SrcColorFactor = 202;\n\tvar OneMinusSrcColorFactor = 203;\n\tvar SrcAlphaFactor = 204;\n\tvar OneMinusSrcAlphaFactor = 205;\n\tvar DstAlphaFactor = 206;\n\tvar OneMinusDstAlphaFactor = 207;\n\tvar DstColorFactor = 208;\n\tvar OneMinusDstColorFactor = 209;\n\tvar SrcAlphaSaturateFactor = 210;\n\tvar NeverDepth = 0;\n\tvar AlwaysDepth = 1;\n\tvar LessDepth = 2;\n\tvar LessEqualDepth = 3;\n\tvar EqualDepth = 4;\n\tvar GreaterEqualDepth = 5;\n\tvar GreaterDepth = 6;\n\tvar NotEqualDepth = 7;\n\tvar MultiplyOperation = 0;\n\tvar MixOperation = 1;\n\tvar AddOperation = 2;\n\tvar NoToneMapping = 0;\n\tvar LinearToneMapping = 1;\n\tvar ReinhardToneMapping = 2;\n\tvar Uncharted2ToneMapping = 3;\n\tvar CineonToneMapping = 4;\n\tvar UVMapping = 300;\n\tvar CubeReflectionMapping = 301;\n\tvar CubeRefractionMapping = 302;\n\tvar EquirectangularReflectionMapping = 303;\n\tvar EquirectangularRefractionMapping = 304;\n\tvar SphericalReflectionMapping = 305;\n\tvar CubeUVReflectionMapping = 306;\n\tvar CubeUVRefractionMapping = 307;\n\tvar RepeatWrapping = 1000;\n\tvar ClampToEdgeWrapping = 1001;\n\tvar MirroredRepeatWrapping = 1002;\n\tvar NearestFilter = 1003;\n\tvar NearestMipMapNearestFilter = 1004;\n\tvar NearestMipMapLinearFilter = 1005;\n\tvar LinearFilter = 1006;\n\tvar LinearMipMapNearestFilter = 1007;\n\tvar LinearMipMapLinearFilter = 1008;\n\tvar UnsignedByteType = 1009;\n\tvar ByteType = 1010;\n\tvar ShortType = 1011;\n\tvar UnsignedShortType = 1012;\n\tvar IntType = 1013;\n\tvar UnsignedIntType = 1014;\n\tvar FloatType = 1015;\n\tvar HalfFloatType = 1016;\n\tvar UnsignedShort4444Type = 1017;\n\tvar UnsignedShort5551Type = 1018;\n\tvar UnsignedShort565Type = 1019;\n\tvar UnsignedInt248Type = 1020;\n\tvar AlphaFormat = 1021;\n\tvar RGBFormat = 1022;\n\tvar RGBAFormat = 1023;\n\tvar LuminanceFormat = 1024;\n\tvar LuminanceAlphaFormat = 1025;\n\tvar RGBEFormat = RGBAFormat;\n\tvar DepthFormat = 1026;\n\tvar DepthStencilFormat = 1027;\n\tvar RGB_S3TC_DXT1_Format = 33776;\n\tvar RGBA_S3TC_DXT1_Format = 33777;\n\tvar RGBA_S3TC_DXT3_Format = 33778;\n\tvar RGBA_S3TC_DXT5_Format = 33779;\n\tvar RGB_PVRTC_4BPPV1_Format = 35840;\n\tvar RGB_PVRTC_2BPPV1_Format = 35841;\n\tvar RGBA_PVRTC_4BPPV1_Format = 35842;\n\tvar RGBA_PVRTC_2BPPV1_Format = 35843;\n\tvar RGB_ETC1_Format = 36196;\n\tvar RGBA_ASTC_4x4_Format = 37808;\n\tvar RGBA_ASTC_5x4_Format = 37809;\n\tvar RGBA_ASTC_5x5_Format = 37810;\n\tvar RGBA_ASTC_6x5_Format = 37811;\n\tvar RGBA_ASTC_6x6_Format = 37812;\n\tvar RGBA_ASTC_8x5_Format = 37813;\n\tvar RGBA_ASTC_8x6_Format = 37814;\n\tvar RGBA_ASTC_8x8_Format = 37815;\n\tvar RGBA_ASTC_10x5_Format = 37816;\n\tvar RGBA_ASTC_10x6_Format = 37817;\n\tvar RGBA_ASTC_10x8_Format = 37818;\n\tvar RGBA_ASTC_10x10_Format = 37819;\n\tvar RGBA_ASTC_12x10_Format = 37820;\n\tvar RGBA_ASTC_12x12_Format = 37821;\n\tvar LoopOnce = 2200;\n\tvar LoopRepeat = 2201;\n\tvar LoopPingPong = 2202;\n\tvar InterpolateDiscrete = 2300;\n\tvar InterpolateLinear = 2301;\n\tvar InterpolateSmooth = 2302;\n\tvar ZeroCurvatureEnding = 2400;\n\tvar ZeroSlopeEnding = 2401;\n\tvar WrapAroundEnding = 2402;\n\tvar TrianglesDrawMode = 0;\n\tvar TriangleStripDrawMode = 1;\n\tvar TriangleFanDrawMode = 2;\n\tvar LinearEncoding = 3000;\n\tvar sRGBEncoding = 3001;\n\tvar GammaEncoding = 3007;\n\tvar RGBEEncoding = 3002;\n\tvar LogLuvEncoding = 3003;\n\tvar RGBM7Encoding = 3004;\n\tvar RGBM16Encoding = 3005;\n\tvar RGBDEncoding = 3006;\n\tvar BasicDepthPacking = 3200;\n\tvar RGBADepthPacking = 3201;\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar _Math = {\n\n\t\tDEG2RAD: Math.PI / 180,\n\t\tRAD2DEG: 180 / Math.PI,\n\n\t\tgenerateUUID: ( function () {\n\n\t\t\t// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n\t\t\tvar lut = [];\n\n\t\t\tfor ( var i = 0; i < 256; i ++ ) {\n\n\t\t\t\tlut[ i ] = ( i < 16 ? '0' : '' ) + ( i ).toString( 16 );\n\n\t\t\t}\n\n\t\t\treturn function generateUUID() {\n\n\t\t\t\tvar d0 = Math.random() * 0xffffffff | 0;\n\t\t\t\tvar d1 = Math.random() * 0xffffffff | 0;\n\t\t\t\tvar d2 = Math.random() * 0xffffffff | 0;\n\t\t\t\tvar d3 = Math.random() * 0xffffffff | 0;\n\t\t\t\tvar uuid = lut[ d0 & 0xff ] + lut[ d0 >> 8 & 0xff ] + lut[ d0 >> 16 & 0xff ] + lut[ d0 >> 24 & 0xff ] + '-' +\n\t\t\t\t\tlut[ d1 & 0xff ] + lut[ d1 >> 8 & 0xff ] + '-' + lut[ d1 >> 16 & 0x0f | 0x40 ] + lut[ d1 >> 24 & 0xff ] + '-' +\n\t\t\t\t\tlut[ d2 & 0x3f | 0x80 ] + lut[ d2 >> 8 & 0xff ] + '-' + lut[ d2 >> 16 & 0xff ] + lut[ d2 >> 24 & 0xff ] +\n\t\t\t\t\tlut[ d3 & 0xff ] + lut[ d3 >> 8 & 0xff ] + lut[ d3 >> 16 & 0xff ] + lut[ d3 >> 24 & 0xff ];\n\n\t\t\t\t// .toUpperCase() here flattens concatenated strings to save heap memory space.\n\t\t\t\treturn uuid.toUpperCase();\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tclamp: function ( value, min, max ) {\n\n\t\t\treturn Math.max( min, Math.min( max, value ) );\n\n\t\t},\n\n\t\t// compute euclidian modulo of m % n\n\t\t// https://en.wikipedia.org/wiki/Modulo_operation\n\n\t\teuclideanModulo: function ( n, m ) {\n\n\t\t\treturn ( ( n % m ) + m ) % m;\n\n\t\t},\n\n\t\t// Linear mapping from range to range \n\n\t\tmapLinear: function ( x, a1, a2, b1, b2 ) {\n\n\t\t\treturn b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );\n\n\t\t},\n\n\t\t// https://en.wikipedia.org/wiki/Linear_interpolation\n\n\t\tlerp: function ( x, y, t ) {\n\n\t\t\treturn ( 1 - t ) * x + t * y;\n\n\t\t},\n\n\t\t// http://en.wikipedia.org/wiki/Smoothstep\n\n\t\tsmoothstep: function ( x, min, max ) {\n\n\t\t\tif ( x <= min ) return 0;\n\t\t\tif ( x >= max ) return 1;\n\n\t\t\tx = ( x - min ) / ( max - min );\n\n\t\t\treturn x * x * ( 3 - 2 * x );\n\n\t\t},\n\n\t\tsmootherstep: function ( x, min, max ) {\n\n\t\t\tif ( x <= min ) return 0;\n\t\t\tif ( x >= max ) return 1;\n\n\t\t\tx = ( x - min ) / ( max - min );\n\n\t\t\treturn x * x * x * ( x * ( x * 6 - 15 ) + 10 );\n\n\t\t},\n\n\t\t// Random integer from interval\n\n\t\trandInt: function ( low, high ) {\n\n\t\t\treturn low + Math.floor( Math.random() * ( high - low + 1 ) );\n\n\t\t},\n\n\t\t// Random float from interval\n\n\t\trandFloat: function ( low, high ) {\n\n\t\t\treturn low + Math.random() * ( high - low );\n\n\t\t},\n\n\t\t// Random float from <-range/2, range/2> interval\n\n\t\trandFloatSpread: function ( range ) {\n\n\t\t\treturn range * ( 0.5 - Math.random() );\n\n\t\t},\n\n\t\tdegToRad: function ( degrees ) {\n\n\t\t\treturn degrees * _Math.DEG2RAD;\n\n\t\t},\n\n\t\tradToDeg: function ( radians ) {\n\n\t\t\treturn radians * _Math.RAD2DEG;\n\n\t\t},\n\n\t\tisPowerOfTwo: function ( value ) {\n\n\t\t\treturn ( value & ( value - 1 ) ) === 0 && value !== 0;\n\n\t\t},\n\n\t\tceilPowerOfTwo: function ( value ) {\n\n\t\t\treturn Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );\n\n\t\t},\n\n\t\tfloorPowerOfTwo: function ( value ) {\n\n\t\t\treturn Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author egraether / http://egraether.com/\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t */\n\n\tfunction Vector2( x, y ) {\n\n\t\tthis.x = x || 0;\n\t\tthis.y = y || 0;\n\n\t}\n\n\tObject.defineProperties( Vector2.prototype, {\n\n\t\t\"width\": {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.x;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.x = value;\n\n\t\t\t}\n\n\t\t},\n\n\t\t\"height\": {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.y;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis.y = value;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector2.prototype, {\n\n\t\tisVector2: true,\n\n\t\tset: function ( x, y ) {\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetX: function ( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponent: function ( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetComponent: function ( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.x, this.y );\n\n\t\t},\n\n\t\tcopy: function ( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScaledVector: function ( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubScalar: function ( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( v ) {\n\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivide: function ( v ) {\n\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivideScalar: function ( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t},\n\n\t\tapplyMatrix3: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];\n\t\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmin: function ( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmax: function ( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclamp: function ( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclampScalar: function () {\n\n\t\t\tvar min = new Vector2();\n\t\t\tvar max = new Vector2();\n\n\t\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\t\tmin.set( minVal, minVal );\n\t\t\t\tmax.set( maxVal, maxVal );\n\n\t\t\t\treturn this.clamp( min, max );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclampLength: function ( min, max ) {\n\n\t\t\tvar length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t},\n\n\t\tfloor: function () {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tceil: function () {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tround: function () {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\troundToZero: function () {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y;\n\n\t\t},\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this.x * this.x + this.y * this.y;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y );\n\n\t\t},\n\n\t\tmanhattanLength: function () {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t},\n\n\t\tangle: function () {\n\n\t\t\t// computes the angle in radians with respect to the positive x-axis\n\n\t\t\tvar angle = Math.atan2( this.y, this.x );\n\n\t\t\tif ( angle < 0 ) angle += 2 * Math.PI;\n\n\t\t\treturn angle;\n\n\t\t},\n\n\t\tdistanceTo: function ( v ) {\n\n\t\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t\t},\n\n\t\tdistanceToSquared: function ( v ) {\n\n\t\t\tvar dx = this.x - v.x, dy = this.y - v.y;\n\t\t\treturn dx * dx + dy * dy;\n\n\t\t},\n\n\t\tmanhattanDistanceTo: function ( v ) {\n\n\t\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );\n\n\t\t},\n\n\t\tsetLength: function ( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t},\n\n\t\tlerp: function ( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t\t},\n\n\t\tequals: function ( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector2: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateAround: function ( center, angle ) {\n\n\t\t\tvar c = Math.cos( angle ), s = Math.sin( angle );\n\n\t\t\tvar x = this.x - center.x;\n\t\t\tvar y = this.y - center.y;\n\n\t\t\tthis.x = x * c - y * s + center.x;\n\t\t\tthis.y = x * s + y * c + center.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author supereggbert / http://www.paulbrunt.co.uk/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author jordi_ros / http://plattsoft.com\n\t * @author D1plo1d / http://github.com/D1plo1d\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author timknip / http://www.floorplanner.com/\n\t * @author bhouston / http://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Matrix4() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0, 0,\n\t\t\t0, 1, 0, 0,\n\t\t\t0, 0, 1, 0,\n\t\t\t0, 0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tObject.assign( Matrix4.prototype, {\n\n\t\tisMatrix4: true,\n\n\t\tset: function ( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;\n\t\t\tte[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;\n\t\t\tte[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;\n\t\t\tte[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tidentity: function () {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, 1, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new Matrix4().fromArray( this.elements );\n\n\t\t},\n\n\t\tcopy: function ( m ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];\n\t\t\tte[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];\n\t\t\tte[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];\n\t\t\tte[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyPosition: function ( m ) {\n\n\t\t\tvar te = this.elements, me = m.elements;\n\n\t\t\tte[ 12 ] = me[ 12 ];\n\t\t\tte[ 13 ] = me[ 13 ];\n\t\t\tte[ 14 ] = me[ 14 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\textractBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\t\txAxis.setFromMatrixColumn( this, 0 );\n\t\t\tyAxis.setFromMatrixColumn( this, 1 );\n\t\t\tzAxis.setFromMatrixColumn( this, 2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeBasis: function ( xAxis, yAxis, zAxis ) {\n\n\t\t\tthis.set(\n\t\t\t\txAxis.x, yAxis.x, zAxis.x, 0,\n\t\t\t\txAxis.y, yAxis.y, zAxis.y, 0,\n\t\t\t\txAxis.z, yAxis.z, zAxis.z, 0,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\textractRotation: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function extractRotation( m ) {\n\n\t\t\t\t// this method does not support reflection matrices\n\n\t\t\t\tvar te = this.elements;\n\t\t\t\tvar me = m.elements;\n\n\t\t\t\tvar scaleX = 1 / v1.setFromMatrixColumn( m, 0 ).length();\n\t\t\t\tvar scaleY = 1 / v1.setFromMatrixColumn( m, 1 ).length();\n\t\t\t\tvar scaleZ = 1 / v1.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\t\tte[ 0 ] = me[ 0 ] * scaleX;\n\t\t\t\tte[ 1 ] = me[ 1 ] * scaleX;\n\t\t\t\tte[ 2 ] = me[ 2 ] * scaleX;\n\t\t\t\tte[ 3 ] = 0;\n\n\t\t\t\tte[ 4 ] = me[ 4 ] * scaleY;\n\t\t\t\tte[ 5 ] = me[ 5 ] * scaleY;\n\t\t\t\tte[ 6 ] = me[ 6 ] * scaleY;\n\t\t\t\tte[ 7 ] = 0;\n\n\t\t\t\tte[ 8 ] = me[ 8 ] * scaleZ;\n\t\t\t\tte[ 9 ] = me[ 9 ] * scaleZ;\n\t\t\t\tte[ 10 ] = me[ 10 ] * scaleZ;\n\t\t\t\tte[ 11 ] = 0;\n\n\t\t\t\tte[ 12 ] = 0;\n\t\t\t\tte[ 13 ] = 0;\n\t\t\t\tte[ 14 ] = 0;\n\t\t\t\tte[ 15 ] = 1;\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmakeRotationFromEuler: function ( euler ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Matrix4: .makeRotationFromEuler() now expects a Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar x = euler.x, y = euler.y, z = euler.z;\n\t\t\tvar a = Math.cos( x ), b = Math.sin( x );\n\t\t\tvar c = Math.cos( y ), d = Math.sin( y );\n\t\t\tvar e = Math.cos( z ), f = Math.sin( z );\n\n\t\t\tif ( euler.order === 'XYZ' ) {\n\n\t\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = - c * f;\n\t\t\t\tte[ 8 ] = d;\n\n\t\t\t\tte[ 1 ] = af + be * d;\n\t\t\t\tte[ 5 ] = ae - bf * d;\n\t\t\t\tte[ 9 ] = - b * c;\n\n\t\t\t\tte[ 2 ] = bf - ae * d;\n\t\t\t\tte[ 6 ] = be + af * d;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'YXZ' ) {\n\n\t\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\t\tte[ 0 ] = ce + df * b;\n\t\t\t\tte[ 4 ] = de * b - cf;\n\t\t\t\tte[ 8 ] = a * d;\n\n\t\t\t\tte[ 1 ] = a * f;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = - b;\n\n\t\t\t\tte[ 2 ] = cf * b - de;\n\t\t\t\tte[ 6 ] = df + ce * b;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'ZXY' ) {\n\n\t\t\t\tvar ce = c * e, cf = c * f, de = d * e, df = d * f;\n\n\t\t\t\tte[ 0 ] = ce - df * b;\n\t\t\t\tte[ 4 ] = - a * f;\n\t\t\t\tte[ 8 ] = de + cf * b;\n\n\t\t\t\tte[ 1 ] = cf + de * b;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = df - ce * b;\n\n\t\t\t\tte[ 2 ] = - a * d;\n\t\t\t\tte[ 6 ] = b;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'ZYX' ) {\n\n\t\t\t\tvar ae = a * e, af = a * f, be = b * e, bf = b * f;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = be * d - af;\n\t\t\t\tte[ 8 ] = ae * d + bf;\n\n\t\t\t\tte[ 1 ] = c * f;\n\t\t\t\tte[ 5 ] = bf * d + ae;\n\t\t\t\tte[ 9 ] = af * d - be;\n\n\t\t\t\tte[ 2 ] = - d;\n\t\t\t\tte[ 6 ] = b * c;\n\t\t\t\tte[ 10 ] = a * c;\n\n\t\t\t} else if ( euler.order === 'YZX' ) {\n\n\t\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = bd - ac * f;\n\t\t\t\tte[ 8 ] = bc * f + ad;\n\n\t\t\t\tte[ 1 ] = f;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = - b * e;\n\n\t\t\t\tte[ 2 ] = - d * e;\n\t\t\t\tte[ 6 ] = ad * f + bc;\n\t\t\t\tte[ 10 ] = ac - bd * f;\n\n\t\t\t} else if ( euler.order === 'XZY' ) {\n\n\t\t\t\tvar ac = a * c, ad = a * d, bc = b * c, bd = b * d;\n\n\t\t\t\tte[ 0 ] = c * e;\n\t\t\t\tte[ 4 ] = - f;\n\t\t\t\tte[ 8 ] = d * e;\n\n\t\t\t\tte[ 1 ] = ac * f + bd;\n\t\t\t\tte[ 5 ] = a * e;\n\t\t\t\tte[ 9 ] = ad * f - bc;\n\n\t\t\t\tte[ 2 ] = bc * f - ad;\n\t\t\t\tte[ 6 ] = b * e;\n\t\t\t\tte[ 10 ] = bd * f + ac;\n\n\t\t\t}\n\n\t\t\t// bottom row\n\t\t\tte[ 3 ] = 0;\n\t\t\tte[ 7 ] = 0;\n\t\t\tte[ 11 ] = 0;\n\n\t\t\t// last column\n\t\t\tte[ 12 ] = 0;\n\t\t\tte[ 13 ] = 0;\n\t\t\tte[ 14 ] = 0;\n\t\t\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationFromQuaternion: function () {\n\n\t\t\tvar zero = new Vector3( 0, 0, 0 );\n\t\t\tvar one = new Vector3( 1, 1, 1 );\n\n\t\t\treturn function makeRotationFromQuaternion( q ) {\n\n\t\t\t\treturn this.compose( zero, q, one );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlookAt: function () {\n\n\t\t\tvar x = new Vector3();\n\t\t\tvar y = new Vector3();\n\t\t\tvar z = new Vector3();\n\n\t\t\treturn function lookAt( eye, target, up ) {\n\n\t\t\t\tvar te = this.elements;\n\n\t\t\t\tz.subVectors( eye, target );\n\n\t\t\t\tif ( z.lengthSq() === 0 ) {\n\n\t\t\t\t\t// eye and target are in the same position\n\n\t\t\t\t\tz.z = 1;\n\n\t\t\t\t}\n\n\t\t\t\tz.normalize();\n\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t\tif ( x.lengthSq() === 0 ) {\n\n\t\t\t\t\t// up and z are parallel\n\n\t\t\t\t\tif ( Math.abs( up.z ) === 1 ) {\n\n\t\t\t\t\t\tz.x += 0.0001;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tz.z += 0.0001;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tz.normalize();\n\t\t\t\t\tx.crossVectors( up, z );\n\n\t\t\t\t}\n\n\t\t\t\tx.normalize();\n\t\t\t\ty.crossVectors( z, x );\n\n\t\t\t\tte[ 0 ] = x.x; te[ 4 ] = y.x; te[ 8 ] = z.x;\n\t\t\t\tte[ 1 ] = x.y; te[ 5 ] = y.y; te[ 9 ] = z.y;\n\t\t\t\tte[ 2 ] = x.z; te[ 6 ] = y.z; te[ 10 ] = z.z;\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmultiply: function ( m, n ) {\n\n\t\t\tif ( n !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .multiply() now only accepts one argument. Use .multiplyMatrices( a, b ) instead.' );\n\t\t\t\treturn this.multiplyMatrices( m, n );\n\n\t\t\t}\n\n\t\t\treturn this.multiplyMatrices( this, m );\n\n\t\t},\n\n\t\tpremultiply: function ( m ) {\n\n\t\t\treturn this.multiplyMatrices( m, this );\n\n\t\t},\n\n\t\tmultiplyMatrices: function ( a, b ) {\n\n\t\t\tvar ae = a.elements;\n\t\t\tvar be = b.elements;\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];\n\t\t\tvar a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];\n\t\t\tvar a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];\n\t\t\tvar a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];\n\n\t\t\tvar b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];\n\t\t\tvar b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];\n\t\t\tvar b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];\n\t\t\tvar b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];\n\n\t\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;\n\t\t\tte[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;\n\t\t\tte[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;\n\t\t\tte[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;\n\n\t\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;\n\t\t\tte[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;\n\t\t\tte[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;\n\t\t\tte[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;\n\n\t\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;\n\t\t\tte[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;\n\t\t\tte[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;\n\t\t\tte[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;\n\n\t\t\tte[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;\n\t\t\tte[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;\n\t\t\tte[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;\n\t\t\tte[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( s ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;\n\t\t\tte[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;\n\t\t\tte[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;\n\t\t\tte[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyToBufferAttribute: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\t\tv1.applyMatrix4( this );\n\n\t\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t\t}\n\n\t\t\t\treturn attribute;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tdeterminant: function () {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];\n\t\t\tvar n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];\n\t\t\tvar n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];\n\t\t\tvar n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];\n\n\t\t\t//TODO: make this more efficient\n\t\t\t//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )\n\n\t\t\treturn (\n\t\t\t\tn41 * (\n\t\t\t\t\t+ n14 * n23 * n32\n\t\t\t\t\t - n13 * n24 * n32\n\t\t\t\t\t - n14 * n22 * n33\n\t\t\t\t\t + n12 * n24 * n33\n\t\t\t\t\t + n13 * n22 * n34\n\t\t\t\t\t - n12 * n23 * n34\n\t\t\t\t) +\n\t\t\t\tn42 * (\n\t\t\t\t\t+ n11 * n23 * n34\n\t\t\t\t\t - n11 * n24 * n33\n\t\t\t\t\t + n14 * n21 * n33\n\t\t\t\t\t - n13 * n21 * n34\n\t\t\t\t\t + n13 * n24 * n31\n\t\t\t\t\t - n14 * n23 * n31\n\t\t\t\t) +\n\t\t\t\tn43 * (\n\t\t\t\t\t+ n11 * n24 * n32\n\t\t\t\t\t - n11 * n22 * n34\n\t\t\t\t\t - n14 * n21 * n32\n\t\t\t\t\t + n12 * n21 * n34\n\t\t\t\t\t + n14 * n22 * n31\n\t\t\t\t\t - n12 * n24 * n31\n\t\t\t\t) +\n\t\t\t\tn44 * (\n\t\t\t\t\t- n13 * n22 * n31\n\t\t\t\t\t - n11 * n23 * n32\n\t\t\t\t\t + n11 * n22 * n33\n\t\t\t\t\t + n13 * n21 * n32\n\t\t\t\t\t - n12 * n21 * n33\n\t\t\t\t\t + n12 * n23 * n31\n\t\t\t\t)\n\n\t\t\t);\n\n\t\t},\n\n\t\ttranspose: function () {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar tmp;\n\n\t\t\ttmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;\n\t\t\ttmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;\n\t\t\ttmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;\n\n\t\t\ttmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;\n\t\t\ttmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;\n\t\t\ttmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPosition: function ( v ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 12 ] = v.x;\n\t\t\tte[ 13 ] = v.y;\n\t\t\tte[ 14 ] = v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetInverse: function ( m, throwOnDegenerate ) {\n\n\t\t\t// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm\n\t\t\tvar te = this.elements,\n\t\t\t\tme = m.elements,\n\n\t\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ], n41 = me[ 3 ],\n\t\t\t\tn12 = me[ 4 ], n22 = me[ 5 ], n32 = me[ 6 ], n42 = me[ 7 ],\n\t\t\t\tn13 = me[ 8 ], n23 = me[ 9 ], n33 = me[ 10 ], n43 = me[ 11 ],\n\t\t\t\tn14 = me[ 12 ], n24 = me[ 13 ], n34 = me[ 14 ], n44 = me[ 15 ],\n\n\t\t\t\tt11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,\n\t\t\t\tt12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,\n\t\t\t\tt13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,\n\t\t\t\tt14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;\n\n\t\t\tvar det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;\n\n\t\t\tif ( det === 0 ) {\n\n\t\t\t\tvar msg = \"THREE.Matrix4: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\t\tthrow new Error( msg );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( msg );\n\n\t\t\t\t}\n\n\t\t\t\treturn this.identity();\n\n\t\t\t}\n\n\t\t\tvar detInv = 1 / det;\n\n\t\t\tte[ 0 ] = t11 * detInv;\n\t\t\tte[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;\n\t\t\tte[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;\n\t\t\tte[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;\n\n\t\t\tte[ 4 ] = t12 * detInv;\n\t\t\tte[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;\n\t\t\tte[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;\n\t\t\tte[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;\n\n\t\t\tte[ 8 ] = t13 * detInv;\n\t\t\tte[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;\n\t\t\tte[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;\n\t\t\tte[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;\n\n\t\t\tte[ 12 ] = t14 * detInv;\n\t\t\tte[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;\n\t\t\tte[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;\n\t\t\tte[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tscale: function ( v ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar x = v.x, y = v.y, z = v.z;\n\n\t\t\tte[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;\n\t\t\tte[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;\n\t\t\tte[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;\n\t\t\tte[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetMaxScaleOnAxis: function () {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];\n\t\t\tvar scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];\n\t\t\tvar scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];\n\n\t\t\treturn Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );\n\n\t\t},\n\n\t\tmakeTranslation: function ( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, x,\n\t\t\t\t0, 1, 0, y,\n\t\t\t\t0, 0, 1, z,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationX: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0, 0,\n\t\t\t\t0, c, - s, 0,\n\t\t\t\t0, s, c, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationY: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\t c, 0, s, 0,\n\t\t\t\t 0, 1, 0, 0,\n\t\t\t\t- s, 0, c, 0,\n\t\t\t\t 0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationZ: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta ), s = Math.sin( theta );\n\n\t\t\tthis.set(\n\n\t\t\t\tc, - s, 0, 0,\n\t\t\t\ts, c, 0, 0,\n\t\t\t\t0, 0, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeRotationAxis: function ( axis, angle ) {\n\n\t\t\t// Based on http://www.gamedev.net/reference/articles/article1199.asp\n\n\t\t\tvar c = Math.cos( angle );\n\t\t\tvar s = Math.sin( angle );\n\t\t\tvar t = 1 - c;\n\t\t\tvar x = axis.x, y = axis.y, z = axis.z;\n\t\t\tvar tx = t * x, ty = t * y;\n\n\t\t\tthis.set(\n\n\t\t\t\ttx * x + c, tx * y - s * z, tx * z + s * y, 0,\n\t\t\t\ttx * y + s * z, ty * y + c, ty * z - s * x, 0,\n\t\t\t\ttx * z - s * y, ty * z + s * x, t * z * z + c, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\t return this;\n\n\t\t},\n\n\t\tmakeScale: function ( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\tx, 0, 0, 0,\n\t\t\t\t0, y, 0, 0,\n\t\t\t\t0, 0, z, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeShear: function ( x, y, z ) {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, y, z, 0,\n\t\t\t\tx, 1, z, 0,\n\t\t\t\tx, y, 1, 0,\n\t\t\t\t0, 0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcompose: function ( position, quaternion, scale ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;\n\t\t\tvar x2 = x + x,\ty2 = y + y, z2 = z + z;\n\t\t\tvar xx = x * x2, xy = x * y2, xz = x * z2;\n\t\t\tvar yy = y * y2, yz = y * z2, zz = z * z2;\n\t\t\tvar wx = w * x2, wy = w * y2, wz = w * z2;\n\n\t\t\tvar sx = scale.x, sy = scale.y, sz = scale.z;\n\n\t\t te[ 0 ] = ( 1 - ( yy + zz ) ) * sx;\n\t\t te[ 1 ] = ( xy + wz ) * sx;\n\t\t te[ 2 ] = ( xz - wy ) * sx;\n\t\t te[ 3 ] = 0;\n\n\t\t te[ 4 ] = ( xy - wz ) * sy;\n\t\t te[ 5 ] = ( 1 - ( xx + zz ) ) * sy;\n\t\t te[ 6 ] = ( yz + wx ) * sy;\n\t\t te[ 7 ] = 0;\n\n\t\t te[ 8 ] = ( xz + wy ) * sz;\n\t\t te[ 9 ] = ( yz - wx ) * sz;\n\t\t te[ 10 ] = ( 1 - ( xx + yy ) ) * sz;\n\t\t te[ 11 ] = 0;\n\n\t\t te[ 12 ] = position.x;\n\t\t te[ 13 ] = position.y;\n\t\t te[ 14 ] = position.z;\n\t\t te[ 15 ] = 1;\n\n\t\t return this;\n\n\t\t},\n\n\t\tdecompose: function () {\n\n\t\t\tvar vector = new Vector3();\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function decompose( position, quaternion, scale ) {\n\n\t\t\t\tvar te = this.elements;\n\n\t\t\t\tvar sx = vector.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();\n\t\t\t\tvar sy = vector.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();\n\t\t\t\tvar sz = vector.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();\n\n\t\t\t\t// if determine is negative, we need to invert one scale\n\t\t\t\tvar det = this.determinant();\n\t\t\t\tif ( det < 0 ) sx = - sx;\n\n\t\t\t\tposition.x = te[ 12 ];\n\t\t\t\tposition.y = te[ 13 ];\n\t\t\t\tposition.z = te[ 14 ];\n\n\t\t\t\t// scale the rotation part\n\t\t\t\tmatrix.copy( this );\n\n\t\t\t\tvar invSX = 1 / sx;\n\t\t\t\tvar invSY = 1 / sy;\n\t\t\t\tvar invSZ = 1 / sz;\n\n\t\t\t\tmatrix.elements[ 0 ] *= invSX;\n\t\t\t\tmatrix.elements[ 1 ] *= invSX;\n\t\t\t\tmatrix.elements[ 2 ] *= invSX;\n\n\t\t\t\tmatrix.elements[ 4 ] *= invSY;\n\t\t\t\tmatrix.elements[ 5 ] *= invSY;\n\t\t\t\tmatrix.elements[ 6 ] *= invSY;\n\n\t\t\t\tmatrix.elements[ 8 ] *= invSZ;\n\t\t\t\tmatrix.elements[ 9 ] *= invSZ;\n\t\t\t\tmatrix.elements[ 10 ] *= invSZ;\n\n\t\t\t\tquaternion.setFromRotationMatrix( matrix );\n\n\t\t\t\tscale.x = sx;\n\t\t\t\tscale.y = sy;\n\t\t\t\tscale.z = sz;\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmakePerspective: function ( left, right, top, bottom, near, far ) {\n\n\t\t\tif ( far === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .makePerspective() has been redefined and has a new signature. Please check the docs.' );\n\n\t\t\t}\n\n\t\t\tvar te = this.elements;\n\t\t\tvar x = 2 * near / ( right - left );\n\t\t\tvar y = 2 * near / ( top - bottom );\n\n\t\t\tvar a = ( right + left ) / ( right - left );\n\t\t\tvar b = ( top + bottom ) / ( top - bottom );\n\t\t\tvar c = - ( far + near ) / ( far - near );\n\t\t\tvar d = - 2 * far * near / ( far - near );\n\n\t\t\tte[ 0 ] = x;\tte[ 4 ] = 0;\tte[ 8 ] = a;\tte[ 12 ] = 0;\n\t\t\tte[ 1 ] = 0;\tte[ 5 ] = y;\tte[ 9 ] = b;\tte[ 13 ] = 0;\n\t\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = c;\tte[ 14 ] = d;\n\t\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = - 1;\tte[ 15 ] = 0;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeOrthographic: function ( left, right, top, bottom, near, far ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar w = 1.0 / ( right - left );\n\t\t\tvar h = 1.0 / ( top - bottom );\n\t\t\tvar p = 1.0 / ( far - near );\n\n\t\t\tvar x = ( right + left ) * w;\n\t\t\tvar y = ( top + bottom ) * h;\n\t\t\tvar z = ( far + near ) * p;\n\n\t\t\tte[ 0 ] = 2 * w;\tte[ 4 ] = 0;\tte[ 8 ] = 0;\tte[ 12 ] = - x;\n\t\t\tte[ 1 ] = 0;\tte[ 5 ] = 2 * h;\tte[ 9 ] = 0;\tte[ 13 ] = - y;\n\t\t\tte[ 2 ] = 0;\tte[ 6 ] = 0;\tte[ 10 ] = - 2 * p;\tte[ 14 ] = - z;\n\t\t\tte[ 3 ] = 0;\tte[ 7 ] = 0;\tte[ 11 ] = 0;\tte[ 15 ] = 1;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( matrix ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = matrix.elements;\n\n\t\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tfor ( var i = 0; i < 16; i ++ ) {\n\n\t\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tvar te = this.elements;\n\n\t\t\tarray[ offset ] = te[ 0 ];\n\t\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\t\tarray[ offset + 2 ] = te[ 2 ];\n\t\t\tarray[ offset + 3 ] = te[ 3 ];\n\n\t\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\t\tarray[ offset + 5 ] = te[ 5 ];\n\t\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\t\tarray[ offset + 7 ] = te[ 7 ];\n\n\t\t\tarray[ offset + 8 ] = te[ 8 ];\n\t\t\tarray[ offset + 9 ] = te[ 9 ];\n\t\t\tarray[ offset + 10 ] = te[ 10 ];\n\t\t\tarray[ offset + 11 ] = te[ 11 ];\n\n\t\t\tarray[ offset + 12 ] = te[ 12 ];\n\t\t\tarray[ offset + 13 ] = te[ 13 ];\n\t\t\tarray[ offset + 14 ] = te[ 14 ];\n\t\t\tarray[ offset + 15 ] = te[ 15 ];\n\n\t\t\treturn array;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Quaternion( x, y, z, w ) {\n\n\t\tthis._x = x || 0;\n\t\tthis._y = y || 0;\n\t\tthis._z = z || 0;\n\t\tthis._w = ( w !== undefined ) ? w : 1;\n\n\t}\n\n\tObject.assign( Quaternion, {\n\n\t\tslerp: function ( qa, qb, qm, t ) {\n\n\t\t\treturn qm.copy( qa ).slerp( qb, t );\n\n\t\t},\n\n\t\tslerpFlat: function ( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {\n\n\t\t\t// fuzz-free, array-based Quaternion SLERP operation\n\n\t\t\tvar x0 = src0[ srcOffset0 + 0 ],\n\t\t\t\ty0 = src0[ srcOffset0 + 1 ],\n\t\t\t\tz0 = src0[ srcOffset0 + 2 ],\n\t\t\t\tw0 = src0[ srcOffset0 + 3 ],\n\n\t\t\t\tx1 = src1[ srcOffset1 + 0 ],\n\t\t\t\ty1 = src1[ srcOffset1 + 1 ],\n\t\t\t\tz1 = src1[ srcOffset1 + 2 ],\n\t\t\t\tw1 = src1[ srcOffset1 + 3 ];\n\n\t\t\tif ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {\n\n\t\t\t\tvar s = 1 - t,\n\n\t\t\t\t\tcos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,\n\n\t\t\t\t\tdir = ( cos >= 0 ? 1 : - 1 ),\n\t\t\t\t\tsqrSin = 1 - cos * cos;\n\n\t\t\t\t// Skip the Slerp for tiny steps to avoid numeric problems:\n\t\t\t\tif ( sqrSin > Number.EPSILON ) {\n\n\t\t\t\t\tvar sin = Math.sqrt( sqrSin ),\n\t\t\t\t\t\tlen = Math.atan2( sin, cos * dir );\n\n\t\t\t\t\ts = Math.sin( s * len ) / sin;\n\t\t\t\t\tt = Math.sin( t * len ) / sin;\n\n\t\t\t\t}\n\n\t\t\t\tvar tDir = t * dir;\n\n\t\t\t\tx0 = x0 * s + x1 * tDir;\n\t\t\t\ty0 = y0 * s + y1 * tDir;\n\t\t\t\tz0 = z0 * s + z1 * tDir;\n\t\t\t\tw0 = w0 * s + w1 * tDir;\n\n\t\t\t\t// Normalize in case we just did a lerp:\n\t\t\t\tif ( s === 1 - t ) {\n\n\t\t\t\t\tvar f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );\n\n\t\t\t\t\tx0 *= f;\n\t\t\t\t\ty0 *= f;\n\t\t\t\t\tz0 *= f;\n\t\t\t\t\tw0 *= f;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdst[ dstOffset ] = x0;\n\t\t\tdst[ dstOffset + 1 ] = y0;\n\t\t\tdst[ dstOffset + 2 ] = z0;\n\t\t\tdst[ dstOffset + 3 ] = w0;\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( Quaternion.prototype, {\n\n\t\tx: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._x;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._x = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\ty: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._y;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._y = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\tz: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._z;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._z = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\tw: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._w;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._w = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Quaternion.prototype, {\n\n\t\tset: function ( x, y, z, w ) {\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._w = w;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this._x, this._y, this._z, this._w );\n\n\t\t},\n\n\t\tcopy: function ( quaternion ) {\n\n\t\t\tthis._x = quaternion.x;\n\t\t\tthis._y = quaternion.y;\n\t\t\tthis._z = quaternion.z;\n\t\t\tthis._w = quaternion.w;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromEuler: function ( euler, update ) {\n\n\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\tthrow new Error( 'THREE.Quaternion: .setFromEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t}\n\n\t\t\tvar x = euler._x, y = euler._y, z = euler._z, order = euler.order;\n\n\t\t\t// http://www.mathworks.com/matlabcentral/fileexchange/\n\t\t\t// \t20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/\n\t\t\t//\tcontent/SpinCalc.m\n\n\t\t\tvar cos = Math.cos;\n\t\t\tvar sin = Math.sin;\n\n\t\t\tvar c1 = cos( x / 2 );\n\t\t\tvar c2 = cos( y / 2 );\n\t\t\tvar c3 = cos( z / 2 );\n\n\t\t\tvar s1 = sin( x / 2 );\n\t\t\tvar s2 = sin( y / 2 );\n\t\t\tvar s3 = sin( z / 2 );\n\n\t\t\tif ( order === 'XYZ' ) {\n\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t\t} else if ( order === 'YZX' ) {\n\n\t\t\t\tthis._x = s1 * c2 * c3 + c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 + s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 - s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 - s1 * s2 * s3;\n\n\t\t\t} else if ( order === 'XZY' ) {\n\n\t\t\t\tthis._x = s1 * c2 * c3 - c1 * s2 * s3;\n\t\t\t\tthis._y = c1 * s2 * c3 - s1 * c2 * s3;\n\t\t\t\tthis._z = c1 * c2 * s3 + s1 * s2 * c3;\n\t\t\t\tthis._w = c1 * c2 * c3 + s1 * s2 * s3;\n\n\t\t\t}\n\n\t\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromAxisAngle: function ( axis, angle ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm\n\n\t\t\t// assumes axis is normalized\n\n\t\t\tvar halfAngle = angle / 2, s = Math.sin( halfAngle );\n\n\t\t\tthis._x = axis.x * s;\n\t\t\tthis._y = axis.y * s;\n\t\t\tthis._z = axis.z * s;\n\t\t\tthis._w = Math.cos( halfAngle );\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromRotationMatrix: function ( m ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tvar te = m.elements,\n\n\t\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],\n\n\t\t\t\ttrace = m11 + m22 + m33,\n\t\t\t\ts;\n\n\t\t\tif ( trace > 0 ) {\n\n\t\t\t\ts = 0.5 / Math.sqrt( trace + 1.0 );\n\n\t\t\t\tthis._w = 0.25 / s;\n\t\t\t\tthis._x = ( m32 - m23 ) * s;\n\t\t\t\tthis._y = ( m13 - m31 ) * s;\n\t\t\t\tthis._z = ( m21 - m12 ) * s;\n\n\t\t\t} else if ( m11 > m22 && m11 > m33 ) {\n\n\t\t\t\ts = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );\n\n\t\t\t\tthis._w = ( m32 - m23 ) / s;\n\t\t\t\tthis._x = 0.25 * s;\n\t\t\t\tthis._y = ( m12 + m21 ) / s;\n\t\t\t\tthis._z = ( m13 + m31 ) / s;\n\n\t\t\t} else if ( m22 > m33 ) {\n\n\t\t\t\ts = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );\n\n\t\t\t\tthis._w = ( m13 - m31 ) / s;\n\t\t\t\tthis._x = ( m12 + m21 ) / s;\n\t\t\t\tthis._y = 0.25 * s;\n\t\t\t\tthis._z = ( m23 + m32 ) / s;\n\n\t\t\t} else {\n\n\t\t\t\ts = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );\n\n\t\t\t\tthis._w = ( m21 - m12 ) / s;\n\t\t\t\tthis._x = ( m13 + m31 ) / s;\n\t\t\t\tthis._y = ( m23 + m32 ) / s;\n\t\t\t\tthis._z = 0.25 * s;\n\n\t\t\t}\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromUnitVectors: function () {\n\n\t\t\t// assumes direction vectors vFrom and vTo are normalized\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar r;\n\n\t\t\tvar EPS = 0.000001;\n\n\t\t\treturn function setFromUnitVectors( vFrom, vTo ) {\n\n\t\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\n\t\t\t\tr = vFrom.dot( vTo ) + 1;\n\n\t\t\t\tif ( r < EPS ) {\n\n\t\t\t\t\tr = 0;\n\n\t\t\t\t\tif ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {\n\n\t\t\t\t\t\tv1.set( - vFrom.y, vFrom.x, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv1.set( 0, - vFrom.z, vFrom.y );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tv1.crossVectors( vFrom, vTo );\n\n\t\t\t\t}\n\n\t\t\t\tthis._x = v1.x;\n\t\t\t\tthis._y = v1.y;\n\t\t\t\tthis._z = v1.z;\n\t\t\t\tthis._w = r;\n\n\t\t\t\treturn this.normalize();\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tinverse: function () {\n\n\t\t\t// quaternion is assumed to have unit length\n\n\t\t\treturn this.conjugate();\n\n\t\t},\n\n\t\tconjugate: function () {\n\n\t\t\tthis._x *= - 1;\n\t\t\tthis._y *= - 1;\n\t\t\tthis._z *= - 1;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;\n\n\t\t},\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\tvar l = this.length();\n\n\t\t\tif ( l === 0 ) {\n\n\t\t\t\tthis._x = 0;\n\t\t\t\tthis._y = 0;\n\t\t\t\tthis._z = 0;\n\t\t\t\tthis._w = 1;\n\n\t\t\t} else {\n\n\t\t\t\tl = 1 / l;\n\n\t\t\t\tthis._x = this._x * l;\n\t\t\t\tthis._y = this._y * l;\n\t\t\t\tthis._z = this._z * l;\n\t\t\t\tthis._w = this._w * l;\n\n\t\t\t}\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( q, p ) {\n\n\t\t\tif ( p !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Quaternion: .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead.' );\n\t\t\t\treturn this.multiplyQuaternions( q, p );\n\n\t\t\t}\n\n\t\t\treturn this.multiplyQuaternions( this, q );\n\n\t\t},\n\n\t\tpremultiply: function ( q ) {\n\n\t\t\treturn this.multiplyQuaternions( q, this );\n\n\t\t},\n\n\t\tmultiplyQuaternions: function ( a, b ) {\n\n\t\t\t// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm\n\n\t\t\tvar qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;\n\t\t\tvar qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;\n\n\t\t\tthis._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;\n\t\t\tthis._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;\n\t\t\tthis._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;\n\t\t\tthis._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tslerp: function ( qb, t ) {\n\n\t\t\tif ( t === 0 ) return this;\n\t\t\tif ( t === 1 ) return this.copy( qb );\n\n\t\t\tvar x = this._x, y = this._y, z = this._z, w = this._w;\n\n\t\t\t// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/\n\n\t\t\tvar cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;\n\n\t\t\tif ( cosHalfTheta < 0 ) {\n\n\t\t\t\tthis._w = - qb._w;\n\t\t\t\tthis._x = - qb._x;\n\t\t\t\tthis._y = - qb._y;\n\t\t\t\tthis._z = - qb._z;\n\n\t\t\t\tcosHalfTheta = - cosHalfTheta;\n\n\t\t\t} else {\n\n\t\t\t\tthis.copy( qb );\n\n\t\t\t}\n\n\t\t\tif ( cosHalfTheta >= 1.0 ) {\n\n\t\t\t\tthis._w = w;\n\t\t\t\tthis._x = x;\n\t\t\t\tthis._y = y;\n\t\t\t\tthis._z = z;\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar sinHalfTheta = Math.sqrt( 1.0 - cosHalfTheta * cosHalfTheta );\n\n\t\t\tif ( Math.abs( sinHalfTheta ) < 0.001 ) {\n\n\t\t\t\tthis._w = 0.5 * ( w + this._w );\n\t\t\t\tthis._x = 0.5 * ( x + this._x );\n\t\t\t\tthis._y = 0.5 * ( y + this._y );\n\t\t\t\tthis._z = 0.5 * ( z + this._z );\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );\n\t\t\tvar ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,\n\t\t\t\tratioB = Math.sin( t * halfTheta ) / sinHalfTheta;\n\n\t\t\tthis._w = ( w * ratioA + this._w * ratioB );\n\t\t\tthis._x = ( x * ratioA + this._x * ratioB );\n\t\t\tthis._y = ( y * ratioA + this._y * ratioB );\n\t\t\tthis._z = ( z * ratioA + this._z * ratioB );\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( quaternion ) {\n\n\t\t\treturn ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis._x = array[ offset ];\n\t\t\tthis._y = array[ offset + 1 ];\n\t\t\tthis._z = array[ offset + 2 ];\n\t\t\tthis._w = array[ offset + 3 ];\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this._x;\n\t\t\tarray[ offset + 1 ] = this._y;\n\t\t\tarray[ offset + 2 ] = this._z;\n\t\t\tarray[ offset + 3 ] = this._w;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tonChange: function ( callback ) {\n\n\t\t\tthis.onChangeCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tonChangeCallback: function () {}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author kile / http://kile.stravaganza.org/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author egraether / http://egraether.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Vector3( x, y, z ) {\n\n\t\tthis.x = x || 0;\n\t\tthis.y = y || 0;\n\t\tthis.z = z || 0;\n\n\t}\n\n\tObject.assign( Vector3.prototype, {\n\n\t\tisVector3: true,\n\n\t\tset: function ( x, y, z ) {\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetX: function ( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetZ: function ( z ) {\n\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponent: function ( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tcase 2: this.z = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetComponent: function ( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tcase 2: return this.z;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.x, this.y, this.z );\n\n\t\t},\n\n\t\tcopy: function ( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScaledVector: function ( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubScalar: function ( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead.' );\n\t\t\t\treturn this.multiplyVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x *= v.x;\n\t\t\tthis.y *= v.y;\n\t\t\tthis.z *= v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x * b.x;\n\t\t\tthis.y = a.y * b.y;\n\t\t\tthis.z = a.z * b.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyEuler: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function applyEuler( euler ) {\n\n\t\t\t\tif ( ! ( euler && euler.isEuler ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.Vector3: .applyEuler() now expects an Euler rotation rather than a Vector3 and order.' );\n\n\t\t\t\t}\n\n\t\t\t\treturn this.applyQuaternion( quaternion.setFromEuler( euler ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tapplyAxisAngle: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function applyAxisAngle( axis, angle ) {\n\n\t\t\t\treturn this.applyQuaternion( quaternion.setFromAxisAngle( axis, angle ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tapplyMatrix3: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;\n\t\t\tthis.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;\n\t\t\tthis.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar e = m.elements;\n\n\t\t\tvar w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );\n\n\t\t\tthis.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;\n\t\t\tthis.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;\n\t\t\tthis.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyQuaternion: function ( q ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar qx = q.x, qy = q.y, qz = q.z, qw = q.w;\n\n\t\t\t// calculate quat * vector\n\n\t\t\tvar ix = qw * x + qy * z - qz * y;\n\t\t\tvar iy = qw * y + qz * x - qx * z;\n\t\t\tvar iz = qw * z + qx * y - qy * x;\n\t\t\tvar iw = - qx * x - qy * y - qz * z;\n\n\t\t\t// calculate result * inverse quat\n\n\t\t\tthis.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;\n\t\t\tthis.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;\n\t\t\tthis.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tproject: function () {\n\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function project( camera ) {\n\n\t\t\t\tmatrix.multiplyMatrices( camera.projectionMatrix, matrix.getInverse( camera.matrixWorld ) );\n\t\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tunproject: function () {\n\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function unproject( camera ) {\n\n\t\t\t\tmatrix.multiplyMatrices( camera.matrixWorld, matrix.getInverse( camera.projectionMatrix ) );\n\t\t\t\treturn this.applyMatrix4( matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttransformDirection: function ( m ) {\n\n\t\t\t// input: THREE.Matrix4 affine matrix\n\t\t\t// vector interpreted as a direction\n\n\t\t\tvar x = this.x, y = this.y, z = this.z;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;\n\t\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;\n\t\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;\n\n\t\t\treturn this.normalize();\n\n\t\t},\n\n\t\tdivide: function ( v ) {\n\n\t\t\tthis.x /= v.x;\n\t\t\tthis.y /= v.y;\n\t\t\tthis.z /= v.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivideScalar: function ( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t},\n\n\t\tmin: function ( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\t\t\tthis.z = Math.min( this.z, v.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmax: function ( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\t\t\tthis.z = Math.max( this.z, v.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclamp: function ( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclampScalar: function () {\n\n\t\t\tvar min = new Vector3();\n\t\t\tvar max = new Vector3();\n\n\t\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\t\tmin.set( minVal, minVal, minVal );\n\t\t\t\tmax.set( maxVal, maxVal, maxVal );\n\n\t\t\t\treturn this.clamp( min, max );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclampLength: function ( min, max ) {\n\n\t\t\tvar length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t},\n\n\t\tfloor: function () {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\t\t\tthis.z = Math.floor( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tceil: function () {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\t\t\tthis.z = Math.ceil( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tround: function () {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\t\t\tthis.z = Math.round( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\troundToZero: function () {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\t\t\tthis.z = - this.z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z;\n\n\t\t},\n\n\t\t// TODO lengthSquared?\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );\n\n\t\t},\n\n\t\tmanhattanLength: function () {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t},\n\n\t\tsetLength: function ( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t},\n\n\t\tlerp: function ( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\t\tthis.z += ( v.z - this.z ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t\t},\n\n\t\tcross: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: .cross() now only accepts one argument. Use .crossVectors( a, b ) instead.' );\n\t\t\t\treturn this.crossVectors( v, w );\n\n\t\t\t}\n\n\t\t\treturn this.crossVectors( this, v );\n\n\t\t},\n\n\t\tcrossVectors: function ( a, b ) {\n\n\t\t\tvar ax = a.x, ay = a.y, az = a.z;\n\t\t\tvar bx = b.x, by = b.y, bz = b.z;\n\n\t\t\tthis.x = ay * bz - az * by;\n\t\t\tthis.y = az * bx - ax * bz;\n\t\t\tthis.z = ax * by - ay * bx;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tprojectOnVector: function ( vector ) {\n\n\t\t\tvar scalar = vector.dot( this ) / vector.lengthSq();\n\n\t\t\treturn this.copy( vector ).multiplyScalar( scalar );\n\n\t\t},\n\n\t\tprojectOnPlane: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function projectOnPlane( planeNormal ) {\n\n\t\t\t\tv1.copy( this ).projectOnVector( planeNormal );\n\n\t\t\t\treturn this.sub( v1 );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\treflect: function () {\n\n\t\t\t// reflect incident vector off plane orthogonal to normal\n\t\t\t// normal is assumed to have unit length\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function reflect( normal ) {\n\n\t\t\t\treturn this.sub( v1.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tangleTo: function ( v ) {\n\n\t\t\tvar theta = this.dot( v ) / ( Math.sqrt( this.lengthSq() * v.lengthSq() ) );\n\n\t\t\t// clamp, to handle numerical problems\n\n\t\t\treturn Math.acos( _Math.clamp( theta, - 1, 1 ) );\n\n\t\t},\n\n\t\tdistanceTo: function ( v ) {\n\n\t\t\treturn Math.sqrt( this.distanceToSquared( v ) );\n\n\t\t},\n\n\t\tdistanceToSquared: function ( v ) {\n\n\t\t\tvar dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;\n\n\t\t\treturn dx * dx + dy * dy + dz * dz;\n\n\t\t},\n\n\t\tmanhattanDistanceTo: function ( v ) {\n\n\t\t\treturn Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );\n\n\t\t},\n\n\t\tsetFromSpherical: function ( s ) {\n\n\t\t\tvar sinPhiRadius = Math.sin( s.phi ) * s.radius;\n\n\t\t\tthis.x = sinPhiRadius * Math.sin( s.theta );\n\t\t\tthis.y = Math.cos( s.phi ) * s.radius;\n\t\t\tthis.z = sinPhiRadius * Math.cos( s.theta );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCylindrical: function ( c ) {\n\n\t\t\tthis.x = c.radius * Math.sin( c.theta );\n\t\t\tthis.y = c.y;\n\t\t\tthis.z = c.radius * Math.cos( c.theta );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrixPosition: function ( m ) {\n\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 12 ];\n\t\t\tthis.y = e[ 13 ];\n\t\t\tthis.z = e[ 14 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrixScale: function ( m ) {\n\n\t\t\tvar sx = this.setFromMatrixColumn( m, 0 ).length();\n\t\t\tvar sy = this.setFromMatrixColumn( m, 1 ).length();\n\t\t\tvar sz = this.setFromMatrixColumn( m, 2 ).length();\n\n\t\t\tthis.x = sx;\n\t\t\tthis.y = sy;\n\t\t\tthis.z = sz;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrixColumn: function ( m, index ) {\n\n\t\t\treturn this.fromArray( m.elements, index * 4 );\n\n\t\t},\n\n\t\tequals: function ( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\t\t\tthis.z = array[ offset + 2 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\t\t\tarray[ offset + 2 ] = this.z;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector3: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\t\t\tthis.z = attribute.getZ( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author bhouston / http://clara.io\n\t * @author tschw\n\t */\n\n\tfunction Matrix3() {\n\n\t\tthis.elements = [\n\n\t\t\t1, 0, 0,\n\t\t\t0, 1, 0,\n\t\t\t0, 0, 1\n\n\t\t];\n\n\t\tif ( arguments.length > 0 ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: the constructor no longer reads arguments. use .set() instead.' );\n\n\t\t}\n\n\t}\n\n\tObject.assign( Matrix3.prototype, {\n\n\t\tisMatrix3: true,\n\n\t\tset: function ( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;\n\t\t\tte[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;\n\t\t\tte[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tidentity: function () {\n\n\t\t\tthis.set(\n\n\t\t\t\t1, 0, 0,\n\t\t\t\t0, 1, 0,\n\t\t\t\t0, 0, 1\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().fromArray( this.elements );\n\n\t\t},\n\n\t\tcopy: function ( m ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = m.elements;\n\n\t\t\tte[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];\n\t\t\tte[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];\n\t\t\tte[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrix4: function ( m ) {\n\n\t\t\tvar me = m.elements;\n\n\t\t\tthis.set(\n\n\t\t\t\tme[ 0 ], me[ 4 ], me[ 8 ],\n\t\t\t\tme[ 1 ], me[ 5 ], me[ 9 ],\n\t\t\t\tme[ 2 ], me[ 6 ], me[ 10 ]\n\n\t\t\t);\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyToBufferAttribute: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function applyToBufferAttribute( attribute ) {\n\n\t\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\tv1.x = attribute.getX( i );\n\t\t\t\t\tv1.y = attribute.getY( i );\n\t\t\t\t\tv1.z = attribute.getZ( i );\n\n\t\t\t\t\tv1.applyMatrix3( this );\n\n\t\t\t\t\tattribute.setXYZ( i, v1.x, v1.y, v1.z );\n\n\t\t\t\t}\n\n\t\t\t\treturn attribute;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tmultiply: function ( m ) {\n\n\t\t\treturn this.multiplyMatrices( this, m );\n\n\t\t},\n\n\t\tpremultiply: function ( m ) {\n\n\t\t\treturn this.multiplyMatrices( m, this );\n\n\t\t},\n\n\t\tmultiplyMatrices: function ( a, b ) {\n\n\t\t\tvar ae = a.elements;\n\t\t\tvar be = b.elements;\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];\n\t\t\tvar a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];\n\t\t\tvar a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];\n\n\t\t\tvar b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];\n\t\t\tvar b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];\n\t\t\tvar b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];\n\n\t\t\tte[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;\n\t\t\tte[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;\n\t\t\tte[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;\n\n\t\t\tte[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;\n\t\t\tte[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;\n\t\t\tte[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;\n\n\t\t\tte[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;\n\t\t\tte[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;\n\t\t\tte[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( s ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;\n\t\t\tte[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;\n\t\t\tte[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdeterminant: function () {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],\n\t\t\t\td = te[ 3 ], e = te[ 4 ], f = te[ 5 ],\n\t\t\t\tg = te[ 6 ], h = te[ 7 ], i = te[ 8 ];\n\n\t\t\treturn a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;\n\n\t\t},\n\n\t\tgetInverse: function ( matrix, throwOnDegenerate ) {\n\n\t\t\tif ( matrix && matrix.isMatrix4 ) {\n\n\t\t\t\tconsole.error( \"THREE.Matrix3: .getInverse() no longer takes a Matrix4 argument.\" );\n\n\t\t\t}\n\n\t\t\tvar me = matrix.elements,\n\t\t\t\tte = this.elements,\n\n\t\t\t\tn11 = me[ 0 ], n21 = me[ 1 ], n31 = me[ 2 ],\n\t\t\t\tn12 = me[ 3 ], n22 = me[ 4 ], n32 = me[ 5 ],\n\t\t\t\tn13 = me[ 6 ], n23 = me[ 7 ], n33 = me[ 8 ],\n\n\t\t\t\tt11 = n33 * n22 - n32 * n23,\n\t\t\t\tt12 = n32 * n13 - n33 * n12,\n\t\t\t\tt13 = n23 * n12 - n22 * n13,\n\n\t\t\t\tdet = n11 * t11 + n21 * t12 + n31 * t13;\n\n\t\t\tif ( det === 0 ) {\n\n\t\t\t\tvar msg = \"THREE.Matrix3: .getInverse() can't invert matrix, determinant is 0\";\n\n\t\t\t\tif ( throwOnDegenerate === true ) {\n\n\t\t\t\t\tthrow new Error( msg );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconsole.warn( msg );\n\n\t\t\t\t}\n\n\t\t\t\treturn this.identity();\n\n\t\t\t}\n\n\t\t\tvar detInv = 1 / det;\n\n\t\t\tte[ 0 ] = t11 * detInv;\n\t\t\tte[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;\n\t\t\tte[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;\n\n\t\t\tte[ 3 ] = t12 * detInv;\n\t\t\tte[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;\n\t\t\tte[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;\n\n\t\t\tte[ 6 ] = t13 * detInv;\n\t\t\tte[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;\n\t\t\tte[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranspose: function () {\n\n\t\t\tvar tmp, m = this.elements;\n\n\t\t\ttmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;\n\t\t\ttmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;\n\t\t\ttmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetNormalMatrix: function ( matrix4 ) {\n\n\t\t\treturn this.setFromMatrix4( matrix4 ).getInverse( this ).transpose();\n\n\t\t},\n\n\t\ttransposeIntoArray: function ( r ) {\n\n\t\t\tvar m = this.elements;\n\n\t\t\tr[ 0 ] = m[ 0 ];\n\t\t\tr[ 1 ] = m[ 3 ];\n\t\t\tr[ 2 ] = m[ 6 ];\n\t\t\tr[ 3 ] = m[ 1 ];\n\t\t\tr[ 4 ] = m[ 4 ];\n\t\t\tr[ 5 ] = m[ 7 ];\n\t\t\tr[ 6 ] = m[ 2 ];\n\t\t\tr[ 7 ] = m[ 5 ];\n\t\t\tr[ 8 ] = m[ 8 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetUvTransform: function ( tx, ty, sx, sy, rotation, cx, cy ) {\n\n\t\t\tvar c = Math.cos( rotation );\n\t\t\tvar s = Math.sin( rotation );\n\n\t\t\tthis.set(\n\t\t\t\tsx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,\n\t\t\t\t- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,\n\t\t\t\t0, 0, 1\n\t\t\t);\n\n\t\t},\n\n\t\tscale: function ( sx, sy ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] *= sx; te[ 3 ] *= sx; te[ 6 ] *= sx;\n\t\t\tte[ 1 ] *= sy; te[ 4 ] *= sy; te[ 7 ] *= sy;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotate: function ( theta ) {\n\n\t\t\tvar c = Math.cos( theta );\n\t\t\tvar s = Math.sin( theta );\n\n\t\t\tvar te = this.elements;\n\n\t\t\tvar a11 = te[ 0 ], a12 = te[ 3 ], a13 = te[ 6 ];\n\t\t\tvar a21 = te[ 1 ], a22 = te[ 4 ], a23 = te[ 7 ];\n\n\t\t\tte[ 0 ] = c * a11 + s * a21;\n\t\t\tte[ 3 ] = c * a12 + s * a22;\n\t\t\tte[ 6 ] = c * a13 + s * a23;\n\n\t\t\tte[ 1 ] = - s * a11 + c * a21;\n\t\t\tte[ 4 ] = - s * a12 + c * a22;\n\t\t\tte[ 7 ] = - s * a13 + c * a23;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( tx, ty ) {\n\n\t\t\tvar te = this.elements;\n\n\t\t\tte[ 0 ] += tx * te[ 2 ]; te[ 3 ] += tx * te[ 5 ]; te[ 6 ] += tx * te[ 8 ];\n\t\t\tte[ 1 ] += ty * te[ 2 ]; te[ 4 ] += ty * te[ 5 ]; te[ 7 ] += ty * te[ 8 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( matrix ) {\n\n\t\t\tvar te = this.elements;\n\t\t\tvar me = matrix.elements;\n\n\t\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\t\tif ( te[ i ] !== me[ i ] ) return false;\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tfor ( var i = 0; i < 9; i ++ ) {\n\n\t\t\t\tthis.elements[ i ] = array[ i + offset ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tvar te = this.elements;\n\n\t\t\tarray[ offset ] = te[ 0 ];\n\t\t\tarray[ offset + 1 ] = te[ 1 ];\n\t\t\tarray[ offset + 2 ] = te[ 2 ];\n\n\t\t\tarray[ offset + 3 ] = te[ 3 ];\n\t\t\tarray[ offset + 4 ] = te[ 4 ];\n\t\t\tarray[ offset + 5 ] = te[ 5 ];\n\n\t\t\tarray[ offset + 6 ] = te[ 6 ];\n\t\t\tarray[ offset + 7 ] = te[ 7 ];\n\t\t\tarray[ offset + 8 ] = te[ 8 ];\n\n\t\t\treturn array;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author szimek / https://github.com/szimek/\n\t */\n\n\tvar textureId = 0;\n\n\tfunction Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\tObject.defineProperty( this, 'id', { value: textureId ++ } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\n\t\tthis.image = image !== undefined ? image : Texture.DEFAULT_IMAGE;\n\t\tthis.mipmaps = [];\n\n\t\tthis.mapping = mapping !== undefined ? mapping : Texture.DEFAULT_MAPPING;\n\n\t\tthis.wrapS = wrapS !== undefined ? wrapS : ClampToEdgeWrapping;\n\t\tthis.wrapT = wrapT !== undefined ? wrapT : ClampToEdgeWrapping;\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : LinearFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : LinearMipMapLinearFilter;\n\n\t\tthis.anisotropy = anisotropy !== undefined ? anisotropy : 1;\n\n\t\tthis.format = format !== undefined ? format : RGBAFormat;\n\t\tthis.type = type !== undefined ? type : UnsignedByteType;\n\n\t\tthis.offset = new Vector2( 0, 0 );\n\t\tthis.repeat = new Vector2( 1, 1 );\n\t\tthis.center = new Vector2( 0, 0 );\n\t\tthis.rotation = 0;\n\n\t\tthis.matrixAutoUpdate = true;\n\t\tthis.matrix = new Matrix3();\n\n\t\tthis.generateMipmaps = true;\n\t\tthis.premultiplyAlpha = false;\n\t\tthis.flipY = true;\n\t\tthis.unpackAlignment = 4;\t// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)\n\n\t\t// Values of encoding !== THREE.LinearEncoding only supported on map, envMap and emissiveMap.\n\t\t//\n\t\t// Also changing the encoding after already used by a Material will not automatically make the Material\n\t\t// update. You need to explicitly call Material.needsUpdate to trigger it to recompile.\n\t\tthis.encoding = encoding !== undefined ? encoding : LinearEncoding;\n\n\t\tthis.version = 0;\n\t\tthis.onUpdate = null;\n\n\t}\n\n\tTexture.DEFAULT_IMAGE = undefined;\n\tTexture.DEFAULT_MAPPING = UVMapping;\n\n\tTexture.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\t\tconstructor: Texture,\n\n\t\tisTexture: true,\n\n\t\tupdateMatrix: function () {\n\n\t\t\tthis.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.image = source.image;\n\t\t\tthis.mipmaps = source.mipmaps.slice( 0 );\n\n\t\t\tthis.mapping = source.mapping;\n\n\t\t\tthis.wrapS = source.wrapS;\n\t\t\tthis.wrapT = source.wrapT;\n\n\t\t\tthis.magFilter = source.magFilter;\n\t\t\tthis.minFilter = source.minFilter;\n\n\t\t\tthis.anisotropy = source.anisotropy;\n\n\t\t\tthis.format = source.format;\n\t\t\tthis.type = source.type;\n\n\t\t\tthis.offset.copy( source.offset );\n\t\t\tthis.repeat.copy( source.repeat );\n\t\t\tthis.center.copy( source.center );\n\t\t\tthis.rotation = source.rotation;\n\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrix.copy( source.matrix );\n\n\t\t\tthis.generateMipmaps = source.generateMipmaps;\n\t\t\tthis.premultiplyAlpha = source.premultiplyAlpha;\n\t\t\tthis.flipY = source.flipY;\n\t\t\tthis.unpackAlignment = source.unpackAlignment;\n\t\t\tthis.encoding = source.encoding;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tif ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {\n\n\t\t\t\treturn meta.textures[ this.uuid ];\n\n\t\t\t}\n\n\t\t\tfunction getDataURL( image ) {\n\n\t\t\t\tvar canvas;\n\n\t\t\t\tif ( image instanceof HTMLCanvasElement ) {\n\n\t\t\t\t\tcanvas = image;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tcanvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\t\tcanvas.width = image.width;\n\t\t\t\t\tcanvas.height = image.height;\n\n\t\t\t\t\tvar context = canvas.getContext( '2d' );\n\n\t\t\t\t\tif ( image instanceof ImageData ) {\n\n\t\t\t\t\t\tcontext.putImageData( image, 0, 0 );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( canvas.width > 2048 || canvas.height > 2048 ) {\n\n\t\t\t\t\treturn canvas.toDataURL( 'image/jpeg', 0.6 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn canvas.toDataURL( 'image/png' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar output = {\n\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Texture',\n\t\t\t\t\tgenerator: 'Texture.toJSON'\n\t\t\t\t},\n\n\t\t\t\tuuid: this.uuid,\n\t\t\t\tname: this.name,\n\n\t\t\t\tmapping: this.mapping,\n\n\t\t\t\trepeat: [ this.repeat.x, this.repeat.y ],\n\t\t\t\toffset: [ this.offset.x, this.offset.y ],\n\t\t\t\tcenter: [ this.center.x, this.center.y ],\n\t\t\t\trotation: this.rotation,\n\n\t\t\t\twrap: [ this.wrapS, this.wrapT ],\n\n\t\t\t\tformat: this.format,\n\t\t\t\tminFilter: this.minFilter,\n\t\t\t\tmagFilter: this.magFilter,\n\t\t\t\tanisotropy: this.anisotropy,\n\n\t\t\t\tflipY: this.flipY\n\n\t\t\t};\n\n\t\t\tif ( this.image !== undefined ) {\n\n\t\t\t\t// TODO: Move to THREE.Image\n\n\t\t\t\tvar image = this.image;\n\n\t\t\t\tif ( image.uuid === undefined ) {\n\n\t\t\t\t\timage.uuid = _Math.generateUUID(); // UGH\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! isRootObject && meta.images[ image.uuid ] === undefined ) {\n\n\t\t\t\t\tmeta.images[ image.uuid ] = {\n\t\t\t\t\t\tuuid: image.uuid,\n\t\t\t\t\t\turl: getDataURL( image )\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\toutput.image = image.uuid;\n\n\t\t\t}\n\n\t\t\tif ( ! isRootObject ) {\n\n\t\t\t\tmeta.textures[ this.uuid ] = output;\n\n\t\t\t}\n\n\t\t\treturn output;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t},\n\n\t\ttransformUv: function ( uv ) {\n\n\t\t\tif ( this.mapping !== UVMapping ) return;\n\n\t\t\tuv.applyMatrix3( this.matrix );\n\n\t\t\tif ( uv.x < 0 || uv.x > 1 ) {\n\n\t\t\t\tswitch ( this.wrapS ) {\n\n\t\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\t\tuv.x = uv.x < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\t\tif ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\t\tuv.x = Math.ceil( uv.x ) - uv.x;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tuv.x = uv.x - Math.floor( uv.x );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( uv.y < 0 || uv.y > 1 ) {\n\n\t\t\t\tswitch ( this.wrapT ) {\n\n\t\t\t\t\tcase RepeatWrapping:\n\n\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase ClampToEdgeWrapping:\n\n\t\t\t\t\t\tuv.y = uv.y < 0 ? 0 : 1;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase MirroredRepeatWrapping:\n\n\t\t\t\t\t\tif ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {\n\n\t\t\t\t\t\t\tuv.y = Math.ceil( uv.y ) - uv.y;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tuv.y = uv.y - Math.floor( uv.y );\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.flipY ) {\n\n\t\t\t\tuv.y = 1 - uv.y;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Texture.prototype, \"needsUpdate\", {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author supereggbert / http://www.paulbrunt.co.uk/\n\t * @author philogb / http://blog.thejit.org/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author egraether / http://egraether.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Vector4( x, y, z, w ) {\n\n\t\tthis.x = x || 0;\n\t\tthis.y = y || 0;\n\t\tthis.z = z || 0;\n\t\tthis.w = ( w !== undefined ) ? w : 1;\n\n\t}\n\n\tObject.assign( Vector4.prototype, {\n\n\t\tisVector4: true,\n\n\t\tset: function ( x, y, z, w ) {\n\n\t\t\tthis.x = x;\n\t\t\tthis.y = y;\n\t\t\tthis.z = z;\n\t\t\tthis.w = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.x = scalar;\n\t\t\tthis.y = scalar;\n\t\t\tthis.z = scalar;\n\t\t\tthis.w = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetX: function ( x ) {\n\n\t\t\tthis.x = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( y ) {\n\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetZ: function ( z ) {\n\n\t\t\tthis.z = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetW: function ( w ) {\n\n\t\t\tthis.w = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponent: function ( index, value ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: this.x = value; break;\n\t\t\t\tcase 1: this.y = value; break;\n\t\t\t\tcase 2: this.z = value; break;\n\t\t\t\tcase 3: this.w = value; break;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetComponent: function ( index ) {\n\n\t\t\tswitch ( index ) {\n\n\t\t\t\tcase 0: return this.x;\n\t\t\t\tcase 1: return this.y;\n\t\t\t\tcase 2: return this.z;\n\t\t\t\tcase 3: return this.w;\n\t\t\t\tdefault: throw new Error( 'index is out of range: ' + index );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.x, this.y, this.z, this.w );\n\n\t\t},\n\n\t\tcopy: function ( v ) {\n\n\t\t\tthis.x = v.x;\n\t\t\tthis.y = v.y;\n\t\t\tthis.z = v.z;\n\t\t\tthis.w = ( v.w !== undefined ) ? v.w : 1;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tadd: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: .add() now only accepts one argument. Use .addVectors( a, b ) instead.' );\n\t\t\t\treturn this.addVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x += v.x;\n\t\t\tthis.y += v.y;\n\t\t\tthis.z += v.z;\n\t\t\tthis.w += v.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.x += s;\n\t\t\tthis.y += s;\n\t\t\tthis.z += s;\n\t\t\tthis.w += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x + b.x;\n\t\t\tthis.y = a.y + b.y;\n\t\t\tthis.z = a.z + b.z;\n\t\t\tthis.w = a.w + b.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScaledVector: function ( v, s ) {\n\n\t\t\tthis.x += v.x * s;\n\t\t\tthis.y += v.y * s;\n\t\t\tthis.z += v.z * s;\n\t\t\tthis.w += v.w * s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( v, w ) {\n\n\t\t\tif ( w !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: .sub() now only accepts one argument. Use .subVectors( a, b ) instead.' );\n\t\t\t\treturn this.subVectors( v, w );\n\n\t\t\t}\n\n\t\t\tthis.x -= v.x;\n\t\t\tthis.y -= v.y;\n\t\t\tthis.z -= v.z;\n\t\t\tthis.w -= v.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubScalar: function ( s ) {\n\n\t\t\tthis.x -= s;\n\t\t\tthis.y -= s;\n\t\t\tthis.z -= s;\n\t\t\tthis.w -= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsubVectors: function ( a, b ) {\n\n\t\t\tthis.x = a.x - b.x;\n\t\t\tthis.y = a.y - b.y;\n\t\t\tthis.z = a.z - b.z;\n\t\t\tthis.w = a.w - b.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( scalar ) {\n\n\t\t\tthis.x *= scalar;\n\t\t\tthis.y *= scalar;\n\t\t\tthis.z *= scalar;\n\t\t\tthis.w *= scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( m ) {\n\n\t\t\tvar x = this.x, y = this.y, z = this.z, w = this.w;\n\t\t\tvar e = m.elements;\n\n\t\t\tthis.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;\n\t\t\tthis.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;\n\t\t\tthis.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;\n\t\t\tthis.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdivideScalar: function ( scalar ) {\n\n\t\t\treturn this.multiplyScalar( 1 / scalar );\n\n\t\t},\n\n\t\tsetAxisAngleFromQuaternion: function ( q ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm\n\n\t\t\t// q is assumed to be normalized\n\n\t\t\tthis.w = 2 * Math.acos( q.w );\n\n\t\t\tvar s = Math.sqrt( 1 - q.w * q.w );\n\n\t\t\tif ( s < 0.0001 ) {\n\n\t\t\t\tthis.x = 1;\n\t\t\t\tthis.y = 0;\n\t\t\t\tthis.z = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.x = q.x / s;\n\t\t\t\tthis.y = q.y / s;\n\t\t\t\tthis.z = q.z / s;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetAxisAngleFromRotationMatrix: function ( m ) {\n\n\t\t\t// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tvar angle, x, y, z,\t\t// variables for result\n\t\t\t\tepsilon = 0.01,\t\t// margin to allow for rounding errors\n\t\t\t\tepsilon2 = 0.1,\t\t// margin to distinguish between 0 and 180 degrees\n\n\t\t\t\tte = m.elements,\n\n\t\t\t\tm11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],\n\t\t\t\tm21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],\n\t\t\t\tm31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\t\tif ( ( Math.abs( m12 - m21 ) < epsilon ) &&\n\t\t\t ( Math.abs( m13 - m31 ) < epsilon ) &&\n\t\t\t ( Math.abs( m23 - m32 ) < epsilon ) ) {\n\n\t\t\t\t// singularity found\n\t\t\t\t// first check for identity matrix which must have +1 for all terms\n\t\t\t\t// in leading diagonal and zero in other terms\n\n\t\t\t\tif ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&\n\t\t\t\t ( Math.abs( m13 + m31 ) < epsilon2 ) &&\n\t\t\t\t ( Math.abs( m23 + m32 ) < epsilon2 ) &&\n\t\t\t\t ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {\n\n\t\t\t\t\t// this singularity is identity matrix so angle = 0\n\n\t\t\t\t\tthis.set( 1, 0, 0, 0 );\n\n\t\t\t\t\treturn this; // zero angle, arbitrary axis\n\n\t\t\t\t}\n\n\t\t\t\t// otherwise this singularity is angle = 180\n\n\t\t\t\tangle = Math.PI;\n\n\t\t\t\tvar xx = ( m11 + 1 ) / 2;\n\t\t\t\tvar yy = ( m22 + 1 ) / 2;\n\t\t\t\tvar zz = ( m33 + 1 ) / 2;\n\t\t\t\tvar xy = ( m12 + m21 ) / 4;\n\t\t\t\tvar xz = ( m13 + m31 ) / 4;\n\t\t\t\tvar yz = ( m23 + m32 ) / 4;\n\n\t\t\t\tif ( ( xx > yy ) && ( xx > zz ) ) {\n\n\t\t\t\t\t// m11 is the largest diagonal term\n\n\t\t\t\t\tif ( xx < epsilon ) {\n\n\t\t\t\t\t\tx = 0;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tx = Math.sqrt( xx );\n\t\t\t\t\t\ty = xy / x;\n\t\t\t\t\t\tz = xz / x;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( yy > zz ) {\n\n\t\t\t\t\t// m22 is the largest diagonal term\n\n\t\t\t\t\tif ( yy < epsilon ) {\n\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0;\n\t\t\t\t\t\tz = 0.707106781;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ty = Math.sqrt( yy );\n\t\t\t\t\t\tx = xy / y;\n\t\t\t\t\t\tz = yz / y;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// m33 is the largest diagonal term so base result on this\n\n\t\t\t\t\tif ( zz < epsilon ) {\n\n\t\t\t\t\t\tx = 0.707106781;\n\t\t\t\t\t\ty = 0.707106781;\n\t\t\t\t\t\tz = 0;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tz = Math.sqrt( zz );\n\t\t\t\t\t\tx = xz / z;\n\t\t\t\t\t\ty = yz / z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.set( x, y, z, angle );\n\n\t\t\t\treturn this; // return 180 deg rotation\n\n\t\t\t}\n\n\t\t\t// as we have reached here there are no singularities so we can handle normally\n\n\t\t\tvar s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +\n\t\t\t ( m13 - m31 ) * ( m13 - m31 ) +\n\t\t\t ( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize\n\n\t\t\tif ( Math.abs( s ) < 0.001 ) s = 1;\n\n\t\t\t// prevent divide by zero, should not happen if matrix is orthogonal and should be\n\t\t\t// caught by singularity test above, but I've left it in just in case\n\n\t\t\tthis.x = ( m32 - m23 ) / s;\n\t\t\tthis.y = ( m13 - m31 ) / s;\n\t\t\tthis.z = ( m21 - m12 ) / s;\n\t\t\tthis.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmin: function ( v ) {\n\n\t\t\tthis.x = Math.min( this.x, v.x );\n\t\t\tthis.y = Math.min( this.y, v.y );\n\t\t\tthis.z = Math.min( this.z, v.z );\n\t\t\tthis.w = Math.min( this.w, v.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmax: function ( v ) {\n\n\t\t\tthis.x = Math.max( this.x, v.x );\n\t\t\tthis.y = Math.max( this.y, v.y );\n\t\t\tthis.z = Math.max( this.z, v.z );\n\t\t\tthis.w = Math.max( this.w, v.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclamp: function ( min, max ) {\n\n\t\t\t// assumes min < max, componentwise\n\n\t\t\tthis.x = Math.max( min.x, Math.min( max.x, this.x ) );\n\t\t\tthis.y = Math.max( min.y, Math.min( max.y, this.y ) );\n\t\t\tthis.z = Math.max( min.z, Math.min( max.z, this.z ) );\n\t\t\tthis.w = Math.max( min.w, Math.min( max.w, this.w ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclampScalar: function () {\n\n\t\t\tvar min, max;\n\n\t\t\treturn function clampScalar( minVal, maxVal ) {\n\n\t\t\t\tif ( min === undefined ) {\n\n\t\t\t\t\tmin = new Vector4();\n\t\t\t\t\tmax = new Vector4();\n\n\t\t\t\t}\n\n\t\t\t\tmin.set( minVal, minVal, minVal, minVal );\n\t\t\t\tmax.set( maxVal, maxVal, maxVal, maxVal );\n\n\t\t\t\treturn this.clamp( min, max );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclampLength: function ( min, max ) {\n\n\t\t\tvar length = this.length();\n\n\t\t\treturn this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );\n\n\t\t},\n\n\t\tfloor: function () {\n\n\t\t\tthis.x = Math.floor( this.x );\n\t\t\tthis.y = Math.floor( this.y );\n\t\t\tthis.z = Math.floor( this.z );\n\t\t\tthis.w = Math.floor( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tceil: function () {\n\n\t\t\tthis.x = Math.ceil( this.x );\n\t\t\tthis.y = Math.ceil( this.y );\n\t\t\tthis.z = Math.ceil( this.z );\n\t\t\tthis.w = Math.ceil( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tround: function () {\n\n\t\t\tthis.x = Math.round( this.x );\n\t\t\tthis.y = Math.round( this.y );\n\t\t\tthis.z = Math.round( this.z );\n\t\t\tthis.w = Math.round( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\troundToZero: function () {\n\n\t\t\tthis.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );\n\t\t\tthis.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );\n\t\t\tthis.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );\n\t\t\tthis.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.x = - this.x;\n\t\t\tthis.y = - this.y;\n\t\t\tthis.z = - this.z;\n\t\t\tthis.w = - this.w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdot: function ( v ) {\n\n\t\t\treturn this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;\n\n\t\t},\n\n\t\tlengthSq: function () {\n\n\t\t\treturn this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;\n\n\t\t},\n\n\t\tlength: function () {\n\n\t\t\treturn Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );\n\n\t\t},\n\n\t\tmanhattanLength: function () {\n\n\t\t\treturn Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\treturn this.divideScalar( this.length() || 1 );\n\n\t\t},\n\n\t\tsetLength: function ( length ) {\n\n\t\t\treturn this.normalize().multiplyScalar( length );\n\n\t\t},\n\n\t\tlerp: function ( v, alpha ) {\n\n\t\t\tthis.x += ( v.x - this.x ) * alpha;\n\t\t\tthis.y += ( v.y - this.y ) * alpha;\n\t\t\tthis.z += ( v.z - this.z ) * alpha;\n\t\t\tthis.w += ( v.w - this.w ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerpVectors: function ( v1, v2, alpha ) {\n\n\t\t\treturn this.subVectors( v2, v1 ).multiplyScalar( alpha ).add( v1 );\n\n\t\t},\n\n\t\tequals: function ( v ) {\n\n\t\t\treturn ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.x = array[ offset ];\n\t\t\tthis.y = array[ offset + 1 ];\n\t\t\tthis.z = array[ offset + 2 ];\n\t\t\tthis.w = array[ offset + 3 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.x;\n\t\t\tarray[ offset + 1 ] = this.y;\n\t\t\tarray[ offset + 2 ] = this.z;\n\t\t\tarray[ offset + 3 ] = this.w;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tfromBufferAttribute: function ( attribute, index, offset ) {\n\n\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Vector4: offset has been removed from .fromBufferAttribute().' );\n\n\t\t\t}\n\n\t\t\tthis.x = attribute.getX( index );\n\t\t\tthis.y = attribute.getY( index );\n\t\t\tthis.z = attribute.getZ( index );\n\t\t\tthis.w = attribute.getW( index );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author szimek / https://github.com/szimek/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author Marius Kintel / https://github.com/kintel\n\t */\n\n\t/*\n\t In options, we can specify:\n\t * Texture parameters for an auto-generated target texture\n\t * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers\n\t*/\n\tfunction WebGLRenderTarget( width, height, options ) {\n\n\t\tthis.width = width;\n\t\tthis.height = height;\n\n\t\tthis.scissor = new Vector4( 0, 0, width, height );\n\t\tthis.scissorTest = false;\n\n\t\tthis.viewport = new Vector4( 0, 0, width, height );\n\n\t\toptions = options || {};\n\n\t\tif ( options.minFilter === undefined ) options.minFilter = LinearFilter;\n\n\t\tthis.texture = new Texture( undefined, undefined, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.encoding );\n\n\t\tthis.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : true;\n\n\t\tthis.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;\n\t\tthis.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : true;\n\t\tthis.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;\n\n\t}\n\n\tWebGLRenderTarget.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\t\tconstructor: WebGLRenderTarget,\n\n\t\tisWebGLRenderTarget: true,\n\n\t\tsetSize: function ( width, height ) {\n\n\t\t\tif ( this.width !== width || this.height !== height ) {\n\n\t\t\t\tthis.width = width;\n\t\t\t\tthis.height = height;\n\n\t\t\t\tthis.dispose();\n\n\t\t\t}\n\n\t\t\tthis.viewport.set( 0, 0, width, height );\n\t\t\tthis.scissor.set( 0, 0, width, height );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\n\t\t\tthis.viewport.copy( source.viewport );\n\n\t\t\tthis.texture = source.texture.clone();\n\n\t\t\tthis.depthBuffer = source.depthBuffer;\n\t\t\tthis.stencilBuffer = source.stencilBuffer;\n\t\t\tthis.depthTexture = source.depthTexture;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com\n\t */\n\n\tfunction WebGLRenderTargetCube( width, height, options ) {\n\n\t\tWebGLRenderTarget.call( this, width, height, options );\n\n\t\tthis.activeCubeFace = 0; // PX 0, NX 1, PY 2, NY 3, PZ 4, NZ 5\n\t\tthis.activeMipMapLevel = 0;\n\n\t}\n\n\tWebGLRenderTargetCube.prototype = Object.create( WebGLRenderTarget.prototype );\n\tWebGLRenderTargetCube.prototype.constructor = WebGLRenderTargetCube;\n\n\tWebGLRenderTargetCube.prototype.isWebGLRenderTargetCube = true;\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction DataTexture( data, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { data: data, width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.generateMipmaps = false;\n\t\tthis.flipY = false;\n\t\tthis.unpackAlignment = 1;\n\n\t}\n\n\tDataTexture.prototype = Object.create( Texture.prototype );\n\tDataTexture.prototype.constructor = DataTexture;\n\n\tDataTexture.prototype.isDataTexture = true;\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Box3( min, max ) {\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector3( + Infinity, + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector3( - Infinity, - Infinity, - Infinity );\n\n\t}\n\n\tObject.assign( Box3.prototype, {\n\n\t\tisBox3: true,\n\n\t\tset: function ( min, max ) {\n\n\t\t\tthis.min.copy( min );\n\t\t\tthis.max.copy( max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromArray: function ( array ) {\n\n\t\t\tvar minX = + Infinity;\n\t\t\tvar minY = + Infinity;\n\t\t\tvar minZ = + Infinity;\n\n\t\t\tvar maxX = - Infinity;\n\t\t\tvar maxY = - Infinity;\n\t\t\tvar maxZ = - Infinity;\n\n\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\tvar x = array[ i ];\n\t\t\t\tvar y = array[ i + 1 ];\n\t\t\t\tvar z = array[ i + 2 ];\n\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\t\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t\t}\n\n\t\t\tthis.min.set( minX, minY, minZ );\n\t\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromBufferAttribute: function ( attribute ) {\n\n\t\t\tvar minX = + Infinity;\n\t\t\tvar minY = + Infinity;\n\t\t\tvar minZ = + Infinity;\n\n\t\t\tvar maxX = - Infinity;\n\t\t\tvar maxY = - Infinity;\n\t\t\tvar maxZ = - Infinity;\n\n\t\t\tfor ( var i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\tvar x = attribute.getX( i );\n\t\t\t\tvar y = attribute.getY( i );\n\t\t\t\tvar z = attribute.getZ( i );\n\n\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\tif ( z < minZ ) minZ = z;\n\n\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\tif ( y > maxY ) maxY = y;\n\t\t\t\tif ( z > maxZ ) maxZ = z;\n\n\t\t\t}\n\n\t\t\tthis.min.set( minX, minY, minZ );\n\t\t\tthis.max.set( maxX, maxY, maxZ );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCenterAndSize: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\n\t\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tsetFromObject: function ( object ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\treturn this.expandByObject( object );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( box ) {\n\n\t\t\tthis.min.copy( box.min );\n\t\t\tthis.max.copy( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeEmpty: function () {\n\n\t\t\tthis.min.x = this.min.y = this.min.z = + Infinity;\n\t\t\tthis.max.x = this.max.y = this.max.z = - Infinity;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tisEmpty: function () {\n\n\t\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );\n\n\t\t},\n\n\t\tgetCenter: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getCenter() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t\t},\n\n\t\tgetSize: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getSize() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t\t},\n\n\t\texpandByPoint: function ( point ) {\n\n\t\t\tthis.min.min( point );\n\t\t\tthis.max.max( point );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByVector: function ( vector ) {\n\n\t\t\tthis.min.sub( vector );\n\t\t\tthis.max.add( vector );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByScalar: function ( scalar ) {\n\n\t\t\tthis.min.addScalar( - scalar );\n\t\t\tthis.max.addScalar( scalar );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByObject: function () {\n\n\t\t\t// Computes the world-axis-aligned bounding box of an object (including its children),\n\t\t\t// accounting for both the object's, and children's, world transforms\n\n\t\t\tvar scope, i, l;\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\tfunction traverse( node ) {\n\n\t\t\t\tvar geometry = node.geometry;\n\n\t\t\t\tif ( geometry !== undefined ) {\n\n\t\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\t\tfor ( i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tv1.copy( vertices[ i ] );\n\t\t\t\t\t\t\tv1.applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\t\tvar attribute = geometry.attributes.position;\n\n\t\t\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\t\t\tfor ( i = 0, l = attribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tv1.fromBufferAttribute( attribute, i ).applyMatrix4( node.matrixWorld );\n\n\t\t\t\t\t\t\t\tscope.expandByPoint( v1 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn function expandByObject( object ) {\n\n\t\t\t\tscope = this;\n\n\t\t\t\tobject.updateMatrixWorld( true );\n\n\t\t\t\tobject.traverse( traverse );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\t\tpoint.y < this.min.y || point.y > this.max.y ||\n\t\t\t\tpoint.z < this.min.z || point.z > this.max.z ? false : true;\n\n\t\t},\n\n\t\tcontainsBox: function ( box ) {\n\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y &&\n\t\t\t\tthis.min.z <= box.min.z && box.max.z <= this.max.z;\n\n\t\t},\n\n\t\tgetParameter: function ( point, target ) {\n\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .getParameter() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.set(\n\t\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y ),\n\t\t\t\t( point.z - this.min.z ) / ( this.max.z - this.min.z )\n\t\t\t);\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\t// using 6 splitting planes to rule out intersections.\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ||\n\t\t\t\tbox.max.z < this.min.z || box.min.z > this.max.z ? false : true;\n\n\t\t},\n\n\t\tintersectsSphere: ( function () {\n\n\t\t\tvar closestPoint = new Vector3();\n\n\t\t\treturn function intersectsSphere( sphere ) {\n\n\t\t\t\t// Find the point on the AABB closest to the sphere center.\n\t\t\t\tthis.clampPoint( sphere.center, closestPoint );\n\n\t\t\t\t// If that point is inside the sphere, the AABB and sphere intersect.\n\t\t\t\treturn closestPoint.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tintersectsPlane: function ( plane ) {\n\n\t\t\t// We compute the minimum and maximum dot product values. If those values\n\t\t\t// are on the same side (back or front) of the plane, then there is no intersection.\n\n\t\t\tvar min, max;\n\n\t\t\tif ( plane.normal.x > 0 ) {\n\n\t\t\t\tmin = plane.normal.x * this.min.x;\n\t\t\t\tmax = plane.normal.x * this.max.x;\n\n\t\t\t} else {\n\n\t\t\t\tmin = plane.normal.x * this.max.x;\n\t\t\t\tmax = plane.normal.x * this.min.x;\n\n\t\t\t}\n\n\t\t\tif ( plane.normal.y > 0 ) {\n\n\t\t\t\tmin += plane.normal.y * this.min.y;\n\t\t\t\tmax += plane.normal.y * this.max.y;\n\n\t\t\t} else {\n\n\t\t\t\tmin += plane.normal.y * this.max.y;\n\t\t\t\tmax += plane.normal.y * this.min.y;\n\n\t\t\t}\n\n\t\t\tif ( plane.normal.z > 0 ) {\n\n\t\t\t\tmin += plane.normal.z * this.min.z;\n\t\t\t\tmax += plane.normal.z * this.max.z;\n\n\t\t\t} else {\n\n\t\t\t\tmin += plane.normal.z * this.max.z;\n\t\t\t\tmax += plane.normal.z * this.min.z;\n\n\t\t\t}\n\n\t\t\treturn ( min <= plane.constant && max >= plane.constant );\n\n\t\t},\n\n\t\tintersectsTriangle: ( function () {\n\n\t\t\t// triangle centered vertices\n\t\t\tvar v0 = new Vector3();\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar v2 = new Vector3();\n\n\t\t\t// triangle edge vectors\n\t\t\tvar f0 = new Vector3();\n\t\t\tvar f1 = new Vector3();\n\t\t\tvar f2 = new Vector3();\n\n\t\t\tvar testAxis = new Vector3();\n\n\t\t\tvar center = new Vector3();\n\t\t\tvar extents = new Vector3();\n\n\t\t\tvar triangleNormal = new Vector3();\n\n\t\t\tfunction satForAxes( axes ) {\n\n\t\t\t\tvar i, j;\n\n\t\t\t\tfor ( i = 0, j = axes.length - 3; i <= j; i += 3 ) {\n\n\t\t\t\t\ttestAxis.fromArray( axes, i );\n\t\t\t\t\t// project the aabb onto the seperating axis\n\t\t\t\t\tvar r = extents.x * Math.abs( testAxis.x ) + extents.y * Math.abs( testAxis.y ) + extents.z * Math.abs( testAxis.z );\n\t\t\t\t\t// project all 3 vertices of the triangle onto the seperating axis\n\t\t\t\t\tvar p0 = v0.dot( testAxis );\n\t\t\t\t\tvar p1 = v1.dot( testAxis );\n\t\t\t\t\tvar p2 = v2.dot( testAxis );\n\t\t\t\t\t// actual test, basically see if either of the most extreme of the triangle points intersects r\n\t\t\t\t\tif ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {\n\n\t\t\t\t\t\t// points of the projected triangle are outside the projected half-length of the aabb\n\t\t\t\t\t\t// the axis is seperating and we can exit\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn function intersectsTriangle( triangle ) {\n\n\t\t\t\tif ( this.isEmpty() ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\t// compute box center and extents\n\t\t\t\tthis.getCenter( center );\n\t\t\t\textents.subVectors( this.max, center );\n\n\t\t\t\t// translate triangle to aabb origin\n\t\t\t\tv0.subVectors( triangle.a, center );\n\t\t\t\tv1.subVectors( triangle.b, center );\n\t\t\t\tv2.subVectors( triangle.c, center );\n\n\t\t\t\t// compute edge vectors for triangle\n\t\t\t\tf0.subVectors( v1, v0 );\n\t\t\t\tf1.subVectors( v2, v1 );\n\t\t\t\tf2.subVectors( v0, v2 );\n\n\t\t\t\t// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb\n\t\t\t\t// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation\n\t\t\t\t// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)\n\t\t\t\tvar axes = [\n\t\t\t\t\t0, - f0.z, f0.y, 0, - f1.z, f1.y, 0, - f2.z, f2.y,\n\t\t\t\t\tf0.z, 0, - f0.x, f1.z, 0, - f1.x, f2.z, 0, - f2.x,\n\t\t\t\t\t- f0.y, f0.x, 0, - f1.y, f1.x, 0, - f2.y, f2.x, 0\n\t\t\t\t];\n\t\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\t// test 3 face normals from the aabb\n\t\t\t\taxes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];\n\t\t\t\tif ( ! satForAxes( axes ) ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t\t// finally testing the face normal of the triangle\n\t\t\t\t// use already existing triangle edge vectors here\n\t\t\t\ttriangleNormal.crossVectors( f0, f1 );\n\t\t\t\taxes = [ triangleNormal.x, triangleNormal.y, triangleNormal.z ];\n\t\t\t\treturn satForAxes( axes );\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tclampPoint: function ( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box3: .clampPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t\t},\n\n\t\tdistanceToPoint: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function distanceToPoint( point ) {\n\n\t\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetBoundingSphere: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function getBoundingSphere( target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Box3: .getBoundingSphere() target is now required' );\n\t\t\t\t\ttarget = new Sphere();\n\n\t\t\t\t}\n\n\t\t\t\tthis.getCenter( target.center );\n\n\t\t\t\ttarget.radius = this.getSize( v1 ).length() * 0.5;\n\n\t\t\t\treturn target;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersect: function ( box ) {\n\n\t\t\tthis.min.max( box.min );\n\t\t\tthis.max.min( box.max );\n\n\t\t\t// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.\n\t\t\tif ( this.isEmpty() ) this.makeEmpty();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tunion: function ( box ) {\n\n\t\t\tthis.min.min( box.min );\n\t\t\tthis.max.max( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\t// transform of empty box is an empty box.\n\t\t\tif ( this.isEmpty( ) ) return this;\n\n\t\t\tvar m = matrix.elements;\n\n\t\t\tvar xax = m[ 0 ] * this.min.x, xay = m[ 1 ] * this.min.x, xaz = m[ 2 ] * this.min.x;\n\t\t\tvar xbx = m[ 0 ] * this.max.x, xby = m[ 1 ] * this.max.x, xbz = m[ 2 ] * this.max.x;\n\t\t\tvar yax = m[ 4 ] * this.min.y, yay = m[ 5 ] * this.min.y, yaz = m[ 6 ] * this.min.y;\n\t\t\tvar ybx = m[ 4 ] * this.max.y, yby = m[ 5 ] * this.max.y, ybz = m[ 6 ] * this.max.y;\n\t\t\tvar zax = m[ 8 ] * this.min.z, zay = m[ 9 ] * this.min.z, zaz = m[ 10 ] * this.min.z;\n\t\t\tvar zbx = m[ 8 ] * this.max.z, zby = m[ 9 ] * this.max.z, zbz = m[ 10 ] * this.max.z;\n\n\t\t\tthis.min.x = Math.min( xax, xbx ) + Math.min( yax, ybx ) + Math.min( zax, zbx ) + m[ 12 ];\n\t\t\tthis.min.y = Math.min( xay, xby ) + Math.min( yay, yby ) + Math.min( zay, zby ) + m[ 13 ];\n\t\t\tthis.min.z = Math.min( xaz, xbz ) + Math.min( yaz, ybz ) + Math.min( zaz, zbz ) + m[ 14 ];\n\t\t\tthis.max.x = Math.max( xax, xbx ) + Math.max( yax, ybx ) + Math.max( zax, zbx ) + m[ 12 ];\n\t\t\tthis.max.y = Math.max( xay, xby ) + Math.max( yay, yby ) + Math.max( zay, zby ) + m[ 13 ];\n\t\t\tthis.max.z = Math.max( xaz, xbz ) + Math.max( yaz, ybz ) + Math.max( zaz, zbz ) + m[ 14 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.min.add( offset );\n\t\t\tthis.max.add( offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( box ) {\n\n\t\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Sphere( center, radius ) {\n\n\t\tthis.center = ( center !== undefined ) ? center : new Vector3();\n\t\tthis.radius = ( radius !== undefined ) ? radius : 0;\n\n\t}\n\n\tObject.assign( Sphere.prototype, {\n\n\t\tset: function ( center, radius ) {\n\n\t\t\tthis.center.copy( center );\n\t\t\tthis.radius = radius;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function () {\n\n\t\t\tvar box = new Box3();\n\n\t\t\treturn function setFromPoints( points, optionalCenter ) {\n\n\t\t\t\tvar center = this.center;\n\n\t\t\t\tif ( optionalCenter !== undefined ) {\n\n\t\t\t\t\tcenter.copy( optionalCenter );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbox.setFromPoints( points ).getCenter( center );\n\n\t\t\t\t}\n\n\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( sphere ) {\n\n\t\t\tthis.center.copy( sphere.center );\n\t\t\tthis.radius = sphere.radius;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tempty: function () {\n\n\t\t\treturn ( this.radius <= 0 );\n\n\t\t},\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );\n\n\t\t},\n\n\t\tdistanceToPoint: function ( point ) {\n\n\t\t\treturn ( point.distanceTo( this.center ) - this.radius );\n\n\t\t},\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\tvar radiusSum = this.radius + sphere.radius;\n\n\t\t\treturn sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\treturn box.intersectsSphere( this );\n\n\t\t},\n\n\t\tintersectsPlane: function ( plane ) {\n\n\t\t\treturn Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;\n\n\t\t},\n\n\t\tclampPoint: function ( point, target ) {\n\n\t\t\tvar deltaLengthSq = this.center.distanceToSquared( point );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Sphere: .clampPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.copy( point );\n\n\t\t\tif ( deltaLengthSq > ( this.radius * this.radius ) ) {\n\n\t\t\t\ttarget.sub( this.center ).normalize();\n\t\t\t\ttarget.multiplyScalar( this.radius ).add( this.center );\n\n\t\t\t}\n\n\t\t\treturn target;\n\n\t\t},\n\n\t\tgetBoundingBox: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Sphere: .getBoundingBox() target is now required' );\n\t\t\t\ttarget = new Box3();\n\n\t\t\t}\n\n\t\t\ttarget.set( this.center, this.center );\n\t\t\ttarget.expandByScalar( this.radius );\n\n\t\t\treturn target;\n\n\t\t},\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tthis.center.applyMatrix4( matrix );\n\t\t\tthis.radius = this.radius * matrix.getMaxScaleOnAxis();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.center.add( offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( sphere ) {\n\n\t\t\treturn sphere.center.equals( this.center ) && ( sphere.radius === this.radius );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Plane( normal, constant ) {\n\n\t\t// normal is assumed to be normalized\n\n\t\tthis.normal = ( normal !== undefined ) ? normal : new Vector3( 1, 0, 0 );\n\t\tthis.constant = ( constant !== undefined ) ? constant : 0;\n\n\t}\n\n\tObject.assign( Plane.prototype, {\n\n\t\tset: function ( normal, constant ) {\n\n\t\t\tthis.normal.copy( normal );\n\t\t\tthis.constant = constant;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetComponents: function ( x, y, z, w ) {\n\n\t\t\tthis.normal.set( x, y, z );\n\t\t\tthis.constant = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromNormalAndCoplanarPoint: function ( normal, point ) {\n\n\t\t\tthis.normal.copy( normal );\n\t\t\tthis.constant = - point.dot( this.normal );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCoplanarPoints: function () {\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar v2 = new Vector3();\n\n\t\t\treturn function setFromCoplanarPoints( a, b, c ) {\n\n\t\t\t\tvar normal = v1.subVectors( c, b ).cross( v2.subVectors( a, b ) ).normalize();\n\n\t\t\t\t// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?\n\n\t\t\t\tthis.setFromNormalAndCoplanarPoint( normal, a );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( plane ) {\n\n\t\t\tthis.normal.copy( plane.normal );\n\t\t\tthis.constant = plane.constant;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnormalize: function () {\n\n\t\t\t// Note: will lead to a divide by zero if the plane is invalid.\n\n\t\t\tvar inverseNormalLength = 1.0 / this.normal.length();\n\t\t\tthis.normal.multiplyScalar( inverseNormalLength );\n\t\t\tthis.constant *= inverseNormalLength;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnegate: function () {\n\n\t\t\tthis.constant *= - 1;\n\t\t\tthis.normal.negate();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdistanceToPoint: function ( point ) {\n\n\t\t\treturn this.normal.dot( point ) + this.constant;\n\n\t\t},\n\n\t\tdistanceToSphere: function ( sphere ) {\n\n\t\t\treturn this.distanceToPoint( sphere.center ) - sphere.radius;\n\n\t\t},\n\n\t\tprojectPoint: function ( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .projectPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.normal ).multiplyScalar( - this.distanceToPoint( point ) ).add( point );\n\n\t\t},\n\n\t\tintersectLine: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function intersectLine( line, target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Plane: .intersectLine() target is now required' );\n\t\t\t\t\ttarget = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tvar direction = line.delta( v1 );\n\n\t\t\t\tvar denominator = this.normal.dot( direction );\n\n\t\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t\t// line is coplanar, return origin\n\t\t\t\t\tif ( this.distanceToPoint( line.start ) === 0 ) {\n\n\t\t\t\t\t\treturn target.copy( line.start );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Unsure if this is the correct method to handle this case.\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t}\n\n\t\t\t\tvar t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;\n\n\t\t\t\tif ( t < 0 || t > 1 ) {\n\n\t\t\t\t\treturn undefined;\n\n\t\t\t\t}\n\n\t\t\t\treturn target.copy( direction ).multiplyScalar( t ).add( line.start );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsLine: function ( line ) {\n\n\t\t\t// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.\n\n\t\t\tvar startSign = this.distanceToPoint( line.start );\n\t\t\tvar endSign = this.distanceToPoint( line.end );\n\n\t\t\treturn ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\treturn box.intersectsPlane( this );\n\n\t\t},\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\treturn sphere.intersectsPlane( this );\n\n\t\t},\n\n\t\tcoplanarPoint: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Plane: .coplanarPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.normal ).multiplyScalar( - this.constant );\n\n\t\t},\n\n\t\tapplyMatrix4: function () {\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar m1 = new Matrix3();\n\n\t\t\treturn function applyMatrix4( matrix, optionalNormalMatrix ) {\n\n\t\t\t\tvar normalMatrix = optionalNormalMatrix || m1.getNormalMatrix( matrix );\n\n\t\t\t\tvar referencePoint = this.coplanarPoint( v1 ).applyMatrix4( matrix );\n\n\t\t\t\tvar normal = this.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\tthis.constant = - referencePoint.dot( normal );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.constant -= offset.dot( this.normal );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( plane ) {\n\n\t\t\treturn plane.normal.equals( this.normal ) && ( plane.constant === this.constant );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Frustum( p0, p1, p2, p3, p4, p5 ) {\n\n\t\tthis.planes = [\n\n\t\t\t( p0 !== undefined ) ? p0 : new Plane(),\n\t\t\t( p1 !== undefined ) ? p1 : new Plane(),\n\t\t\t( p2 !== undefined ) ? p2 : new Plane(),\n\t\t\t( p3 !== undefined ) ? p3 : new Plane(),\n\t\t\t( p4 !== undefined ) ? p4 : new Plane(),\n\t\t\t( p5 !== undefined ) ? p5 : new Plane()\n\n\t\t];\n\n\t}\n\n\tObject.assign( Frustum.prototype, {\n\n\t\tset: function ( p0, p1, p2, p3, p4, p5 ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tplanes[ 0 ].copy( p0 );\n\t\t\tplanes[ 1 ].copy( p1 );\n\t\t\tplanes[ 2 ].copy( p2 );\n\t\t\tplanes[ 3 ].copy( p3 );\n\t\t\tplanes[ 4 ].copy( p4 );\n\t\t\tplanes[ 5 ].copy( p5 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( frustum ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tplanes[ i ].copy( frustum.planes[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromMatrix: function ( m ) {\n\n\t\t\tvar planes = this.planes;\n\t\t\tvar me = m.elements;\n\t\t\tvar me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];\n\t\t\tvar me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];\n\t\t\tvar me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];\n\t\t\tvar me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];\n\n\t\t\tplanes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();\n\t\t\tplanes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();\n\t\t\tplanes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();\n\t\t\tplanes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();\n\t\t\tplanes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();\n\t\t\tplanes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tintersectsObject: function () {\n\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function intersectsObject( object ) {\n\n\t\t\t\tvar geometry = object.geometry;\n\n\t\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere )\n\t\t\t\t\t.applyMatrix4( object.matrixWorld );\n\n\t\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsSprite: function () {\n\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function intersectsSprite( sprite ) {\n\n\t\t\t\tsphere.center.set( 0, 0, 0 );\n\t\t\t\tsphere.radius = 0.7071067811865476;\n\t\t\t\tsphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\tvar planes = this.planes;\n\t\t\tvar center = sphere.center;\n\t\t\tvar negRadius = - sphere.radius;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tvar distance = planes[ i ].distanceToPoint( center );\n\n\t\t\t\tif ( distance < negRadius ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t},\n\n\t\tintersectsBox: function () {\n\n\t\t\tvar p1 = new Vector3(),\n\t\t\t\tp2 = new Vector3();\n\n\t\t\treturn function intersectsBox( box ) {\n\n\t\t\t\tvar planes = this.planes;\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tvar plane = planes[ i ];\n\n\t\t\t\t\tp1.x = plane.normal.x > 0 ? box.min.x : box.max.x;\n\t\t\t\t\tp2.x = plane.normal.x > 0 ? box.max.x : box.min.x;\n\t\t\t\t\tp1.y = plane.normal.y > 0 ? box.min.y : box.max.y;\n\t\t\t\t\tp2.y = plane.normal.y > 0 ? box.max.y : box.min.y;\n\t\t\t\t\tp1.z = plane.normal.z > 0 ? box.min.z : box.max.z;\n\t\t\t\t\tp2.z = plane.normal.z > 0 ? box.max.z : box.min.z;\n\n\t\t\t\t\tvar d1 = plane.distanceToPoint( p1 );\n\t\t\t\t\tvar d2 = plane.distanceToPoint( p2 );\n\n\t\t\t\t\t// if both outside plane, no intersection\n\n\t\t\t\t\tif ( d1 < 0 && d2 < 0 ) {\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\tvar planes = this.planes;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\tif ( planes[ i ].distanceToPoint( point ) < 0 ) {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t} );\n\n\tvar alphamap_fragment = \"#ifdef USE_ALPHAMAP\\n\\tdiffuseColor.a *= texture2D( alphaMap, vUv ).g;\\n#endif\\n\";\n\n\tvar alphamap_pars_fragment = \"#ifdef USE_ALPHAMAP\\n\\tuniform sampler2D alphaMap;\\n#endif\\n\";\n\n\tvar alphatest_fragment = \"#ifdef ALPHATEST\\n\\tif ( diffuseColor.a < ALPHATEST ) discard;\\n#endif\\n\";\n\n\tvar aomap_fragment = \"#ifdef USE_AOMAP\\n\\tfloat ambientOcclusion = ( texture2D( aoMap, vUv2 ).r - 1.0 ) * aoMapIntensity + 1.0;\\n\\treflectedLight.indirectDiffuse *= ambientOcclusion;\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.specularRoughness );\\n\\t#endif\\n#endif\\n\";\n\n\tvar aomap_pars_fragment = \"#ifdef USE_AOMAP\\n\\tuniform sampler2D aoMap;\\n\\tuniform float aoMapIntensity;\\n#endif\";\n\n\tvar begin_vertex = \"\\nvec3 transformed = vec3( position );\\n\";\n\n\tvar beginnormal_vertex = \"\\nvec3 objectNormal = vec3( normal );\\n\";\n\n\tvar bsdfs = \"float punctualLightIntensityToIrradianceFactor( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\\n\\tif( decayExponent > 0.0 ) {\\n#if defined ( PHYSICALLY_CORRECT_LIGHTS )\\n\\t\\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\\n\\t\\tfloat maxDistanceCutoffFactor = pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\\n\\t\\treturn distanceFalloff * maxDistanceCutoffFactor;\\n#else\\n\\t\\treturn pow( saturate( -lightDistance / cutoffDistance + 1.0 ), decayExponent );\\n#endif\\n\\t}\\n\\treturn 1.0;\\n}\\nvec3 BRDF_Diffuse_Lambert( const in vec3 diffuseColor ) {\\n\\treturn RECIPROCAL_PI * diffuseColor;\\n}\\nvec3 F_Schlick( const in vec3 specularColor, const in float dotLH ) {\\n\\tfloat fresnel = exp2( ( -5.55473 * dotLH - 6.98316 ) * dotLH );\\n\\treturn ( 1.0 - specularColor ) * fresnel + specularColor;\\n}\\nfloat G_GGX_Smith( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gl = dotNL + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\tfloat gv = dotNV + sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\treturn 1.0 / ( gl * gv );\\n}\\nfloat G_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\\n\\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\\n\\treturn 0.5 / max( gv + gl, EPSILON );\\n}\\nfloat D_GGX( const in float alpha, const in float dotNH ) {\\n\\tfloat a2 = pow2( alpha );\\n\\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\\n\\treturn RECIPROCAL_PI * a2 / pow2( denom );\\n}\\nvec3 BRDF_Specular_GGX( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat alpha = pow2( roughness );\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNL = saturate( dot( geometry.normal, incidentLight.direction ) );\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_GGX_SmithCorrelated( alpha, dotNL, dotNV );\\n\\tfloat D = D_GGX( alpha, dotNH );\\n\\treturn F * ( G * D );\\n}\\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\\n\\tconst float LUT_SIZE = 64.0;\\n\\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\\n\\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\\n\\tfloat dotNV = saturate( dot( N, V ) );\\n\\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\\n\\tuv = uv * LUT_SCALE + LUT_BIAS;\\n\\treturn uv;\\n}\\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\\n\\tfloat l = length( f );\\n\\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\\n}\\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\\n\\tfloat x = dot( v1, v2 );\\n\\tfloat y = abs( x );\\n\\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\\n\\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\\n\\tfloat v = a / b;\\n\\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\\n\\treturn cross( v1, v2 ) * theta_sintheta;\\n}\\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\\n\\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\\n\\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\\n\\tvec3 lightNormal = cross( v1, v2 );\\n\\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\\n\\tvec3 T1, T2;\\n\\tT1 = normalize( V - N * dot( V, N ) );\\n\\tT2 = - cross( N, T1 );\\n\\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\\n\\tvec3 coords[ 4 ];\\n\\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\\n\\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\\n\\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\\n\\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\\n\\tcoords[ 0 ] = normalize( coords[ 0 ] );\\n\\tcoords[ 1 ] = normalize( coords[ 1 ] );\\n\\tcoords[ 2 ] = normalize( coords[ 2 ] );\\n\\tcoords[ 3 ] = normalize( coords[ 3 ] );\\n\\tvec3 vectorFormFactor = vec3( 0.0 );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\\n\\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\\n\\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\\n\\treturn vec3( result );\\n}\\nvec3 BRDF_Specular_GGX_Environment( const in GeometricContext geometry, const in vec3 specularColor, const in float roughness ) {\\n\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\\n\\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\\n\\tvec4 r = roughness * c0 + c1;\\n\\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\\n\\tvec2 AB = vec2( -1.04, 1.04 ) * a004 + r.zw;\\n\\treturn specularColor * AB.x + AB.y;\\n}\\nfloat G_BlinnPhong_Implicit( ) {\\n\\treturn 0.25;\\n}\\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\\n\\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\\n}\\nvec3 BRDF_Specular_BlinnPhong( const in IncidentLight incidentLight, const in GeometricContext geometry, const in vec3 specularColor, const in float shininess ) {\\n\\tvec3 halfDir = normalize( incidentLight.direction + geometry.viewDir );\\n\\tfloat dotNH = saturate( dot( geometry.normal, halfDir ) );\\n\\tfloat dotLH = saturate( dot( incidentLight.direction, halfDir ) );\\n\\tvec3 F = F_Schlick( specularColor, dotLH );\\n\\tfloat G = G_BlinnPhong_Implicit( );\\n\\tfloat D = D_BlinnPhong( shininess, dotNH );\\n\\treturn F * ( G * D );\\n}\\nfloat GGXRoughnessToBlinnExponent( const in float ggxRoughness ) {\\n\\treturn ( 2.0 / pow2( ggxRoughness + 0.0001 ) - 2.0 );\\n}\\nfloat BlinnExponentToGGXRoughness( const in float blinnExponent ) {\\n\\treturn sqrt( 2.0 / ( blinnExponent + 2.0 ) );\\n}\\n\";\n\n\tvar bumpmap_pars_fragment = \"#ifdef USE_BUMPMAP\\n\\tuniform sampler2D bumpMap;\\n\\tuniform float bumpScale;\\n\\tvec2 dHdxy_fwd() {\\n\\t\\tvec2 dSTdx = dFdx( vUv );\\n\\t\\tvec2 dSTdy = dFdy( vUv );\\n\\t\\tfloat Hll = bumpScale * texture2D( bumpMap, vUv ).x;\\n\\t\\tfloat dBx = bumpScale * texture2D( bumpMap, vUv + dSTdx ).x - Hll;\\n\\t\\tfloat dBy = bumpScale * texture2D( bumpMap, vUv + dSTdy ).x - Hll;\\n\\t\\treturn vec2( dBx, dBy );\\n\\t}\\n\\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy ) {\\n\\t\\tvec3 vSigmaX = vec3( dFdx( surf_pos.x ), dFdx( surf_pos.y ), dFdx( surf_pos.z ) );\\n\\t\\tvec3 vSigmaY = vec3( dFdy( surf_pos.x ), dFdy( surf_pos.y ), dFdy( surf_pos.z ) );\\n\\t\\tvec3 vN = surf_norm;\\n\\t\\tvec3 R1 = cross( vSigmaY, vN );\\n\\t\\tvec3 R2 = cross( vN, vSigmaX );\\n\\t\\tfloat fDet = dot( vSigmaX, R1 );\\n\\t\\tfDet *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\\n\\t\\treturn normalize( abs( fDet ) * surf_norm - vGrad );\\n\\t}\\n#endif\\n\";\n\n\tvar clipping_planes_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\tvec4 plane;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\\n\\t\\tplane = clippingPlanes[ i ];\\n\\t\\tif ( dot( vViewPosition, plane.xyz ) > plane.w ) discard;\\n\\t}\\n\\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\\n\\t\\tbool clipped = true;\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\\n\\t\\t\\tplane = clippingPlanes[ i ];\\n\\t\\t\\tclipped = ( dot( vViewPosition, plane.xyz ) > plane.w ) && clipped;\\n\\t\\t}\\n\\t\\tif ( clipped ) discard;\\n\\t#endif\\n#endif\\n\";\n\n\tvar clipping_planes_pars_fragment = \"#if NUM_CLIPPING_PLANES > 0\\n\\t#if ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\t\\tvarying vec3 vViewPosition;\\n\\t#endif\\n\\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\\n#endif\\n\";\n\n\tvar clipping_planes_pars_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n\";\n\n\tvar clipping_planes_vertex = \"#if NUM_CLIPPING_PLANES > 0 && ! defined( PHYSICAL ) && ! defined( PHONG )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n\";\n\n\tvar color_fragment = \"#ifdef USE_COLOR\\n\\tdiffuseColor.rgb *= vColor;\\n#endif\";\n\n\tvar color_pars_fragment = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\\n\";\n\n\tvar color_pars_vertex = \"#ifdef USE_COLOR\\n\\tvarying vec3 vColor;\\n#endif\";\n\n\tvar color_vertex = \"#ifdef USE_COLOR\\n\\tvColor.xyz = color.xyz;\\n#endif\";\n\n\tvar common = \"#define PI 3.14159265359\\n#define PI2 6.28318530718\\n#define PI_HALF 1.5707963267949\\n#define RECIPROCAL_PI 0.31830988618\\n#define RECIPROCAL_PI2 0.15915494\\n#define LOG2 1.442695\\n#define EPSILON 1e-6\\n#define saturate(a) clamp( a, 0.0, 1.0 )\\n#define whiteCompliment(a) ( 1.0 - saturate( a ) )\\nfloat pow2( const in float x ) { return x*x; }\\nfloat pow3( const in float x ) { return x*x*x; }\\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\\nfloat average( const in vec3 color ) { return dot( color, vec3( 0.3333 ) ); }\\nhighp float rand( const in vec2 uv ) {\\n\\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\\n\\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\\n\\treturn fract(sin(sn) * c);\\n}\\nstruct IncidentLight {\\n\\tvec3 color;\\n\\tvec3 direction;\\n\\tbool visible;\\n};\\nstruct ReflectedLight {\\n\\tvec3 directDiffuse;\\n\\tvec3 directSpecular;\\n\\tvec3 indirectDiffuse;\\n\\tvec3 indirectSpecular;\\n};\\nstruct GeometricContext {\\n\\tvec3 position;\\n\\tvec3 normal;\\n\\tvec3 viewDir;\\n};\\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\\n}\\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\\n\\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\\n}\\nvec3 projectOnPlane(in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\tfloat distance = dot( planeNormal, point - pointOnPlane );\\n\\treturn - distance * planeNormal + point;\\n}\\nfloat sideOfPlane( in vec3 point, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn sign( dot( point - pointOnPlane, planeNormal ) );\\n}\\nvec3 linePlaneIntersect( in vec3 pointOnLine, in vec3 lineDirection, in vec3 pointOnPlane, in vec3 planeNormal ) {\\n\\treturn lineDirection * ( dot( planeNormal, pointOnPlane - pointOnLine ) / dot( planeNormal, lineDirection ) ) + pointOnLine;\\n}\\nmat3 transposeMat3( const in mat3 m ) {\\n\\tmat3 tmp;\\n\\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\\n\\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\\n\\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\\n\\treturn tmp;\\n}\\nfloat linearToRelativeLuminance( const in vec3 color ) {\\n\\tvec3 weights = vec3( 0.2126, 0.7152, 0.0722 );\\n\\treturn dot( weights, color.rgb );\\n}\\n\";\n\n\tvar cube_uv_reflection_fragment = \"#ifdef ENVMAP_TYPE_CUBE_UV\\n#define cubeUV_textureSize (1024.0)\\nint getFaceFromDirection(vec3 direction) {\\n\\tvec3 absDirection = abs(direction);\\n\\tint face = -1;\\n\\tif( absDirection.x > absDirection.z ) {\\n\\t\\tif(absDirection.x > absDirection.y )\\n\\t\\t\\tface = direction.x > 0.0 ? 0 : 3;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\telse {\\n\\t\\tif(absDirection.z > absDirection.y )\\n\\t\\t\\tface = direction.z > 0.0 ? 2 : 5;\\n\\t\\telse\\n\\t\\t\\tface = direction.y > 0.0 ? 1 : 4;\\n\\t}\\n\\treturn face;\\n}\\n#define cubeUV_maxLods1 (log2(cubeUV_textureSize*0.25) - 1.0)\\n#define cubeUV_rangeClamp (exp2((6.0 - 1.0) * 2.0))\\nvec2 MipLevelInfo( vec3 vec, float roughnessLevel, float roughness ) {\\n\\tfloat scale = exp2(cubeUV_maxLods1 - roughnessLevel);\\n\\tfloat dxRoughness = dFdx(roughness);\\n\\tfloat dyRoughness = dFdy(roughness);\\n\\tvec3 dx = dFdx( vec * scale * dxRoughness );\\n\\tvec3 dy = dFdy( vec * scale * dyRoughness );\\n\\tfloat d = max( dot( dx, dx ), dot( dy, dy ) );\\n\\td = clamp(d, 1.0, cubeUV_rangeClamp);\\n\\tfloat mipLevel = 0.5 * log2(d);\\n\\treturn vec2(floor(mipLevel), fract(mipLevel));\\n}\\n#define cubeUV_maxLods2 (log2(cubeUV_textureSize*0.25) - 2.0)\\n#define cubeUV_rcpTextureSize (1.0 / cubeUV_textureSize)\\nvec2 getCubeUV(vec3 direction, float roughnessLevel, float mipLevel) {\\n\\tmipLevel = roughnessLevel > cubeUV_maxLods2 - 3.0 ? 0.0 : mipLevel;\\n\\tfloat a = 16.0 * cubeUV_rcpTextureSize;\\n\\tvec2 exp2_packed = exp2( vec2( roughnessLevel, mipLevel ) );\\n\\tvec2 rcp_exp2_packed = vec2( 1.0 ) / exp2_packed;\\n\\tfloat powScale = exp2_packed.x * exp2_packed.y;\\n\\tfloat scale = rcp_exp2_packed.x * rcp_exp2_packed.y * 0.25;\\n\\tfloat mipOffset = 0.75*(1.0 - rcp_exp2_packed.y) * rcp_exp2_packed.x;\\n\\tbool bRes = mipLevel == 0.0;\\n\\tscale = bRes && (scale < a) ? a : scale;\\n\\tvec3 r;\\n\\tvec2 offset;\\n\\tint face = getFaceFromDirection(direction);\\n\\tfloat rcpPowScale = 1.0 / powScale;\\n\\tif( face == 0) {\\n\\t\\tr = vec3(direction.x, -direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 1) {\\n\\t\\tr = vec3(direction.y, direction.x, direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 2) {\\n\\t\\tr = vec3(direction.z, direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.75 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? a : offset.y;\\n\\t}\\n\\telse if( face == 3) {\\n\\t\\tr = vec3(direction.x, direction.z, direction.y);\\n\\t\\toffset = vec2(0.0+mipOffset,0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse if( face == 4) {\\n\\t\\tr = vec3(direction.y, direction.x, -direction.z);\\n\\t\\toffset = vec2(scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\telse {\\n\\t\\tr = vec3(direction.z, -direction.x, direction.y);\\n\\t\\toffset = vec2(2.0*scale+mipOffset, 0.5 * rcpPowScale);\\n\\t\\toffset.y = bRes && (offset.y < 2.0*a) ? 0.0 : offset.y;\\n\\t}\\n\\tr = normalize(r);\\n\\tfloat texelOffset = 0.5 * cubeUV_rcpTextureSize;\\n\\tvec2 s = ( r.yz / abs( r.x ) + vec2( 1.0 ) ) * 0.5;\\n\\tvec2 base = offset + vec2( texelOffset );\\n\\treturn base + s * ( scale - 2.0 * texelOffset );\\n}\\n#define cubeUV_maxLods3 (log2(cubeUV_textureSize*0.25) - 3.0)\\nvec4 textureCubeUV(vec3 reflectedDirection, float roughness ) {\\n\\tfloat roughnessVal = roughness* cubeUV_maxLods3;\\n\\tfloat r1 = floor(roughnessVal);\\n\\tfloat r2 = r1 + 1.0;\\n\\tfloat t = fract(roughnessVal);\\n\\tvec2 mipInfo = MipLevelInfo(reflectedDirection, r1, roughness);\\n\\tfloat s = mipInfo.y;\\n\\tfloat level0 = mipInfo.x;\\n\\tfloat level1 = level0 + 1.0;\\n\\tlevel1 = level1 > 5.0 ? 5.0 : level1;\\n\\tlevel0 += min( floor( s + 0.5 ), 5.0 );\\n\\tvec2 uv_10 = getCubeUV(reflectedDirection, r1, level0);\\n\\tvec4 color10 = envMapTexelToLinear(texture2D(envMap, uv_10));\\n\\tvec2 uv_20 = getCubeUV(reflectedDirection, r2, level0);\\n\\tvec4 color20 = envMapTexelToLinear(texture2D(envMap, uv_20));\\n\\tvec4 result = mix(color10, color20, t);\\n\\treturn vec4(result.rgb, 1.0);\\n}\\n#endif\\n\";\n\n\tvar defaultnormal_vertex = \"vec3 transformedNormal = normalMatrix * objectNormal;\\n#ifdef FLIP_SIDED\\n\\ttransformedNormal = - transformedNormal;\\n#endif\\n\";\n\n\tvar displacementmap_pars_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\tuniform sampler2D displacementMap;\\n\\tuniform float displacementScale;\\n\\tuniform float displacementBias;\\n#endif\\n\";\n\n\tvar displacementmap_vertex = \"#ifdef USE_DISPLACEMENTMAP\\n\\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, uv ).x * displacementScale + displacementBias );\\n#endif\\n\";\n\n\tvar emissivemap_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tvec4 emissiveColor = texture2D( emissiveMap, vUv );\\n\\temissiveColor.rgb = emissiveMapTexelToLinear( emissiveColor ).rgb;\\n\\ttotalEmissiveRadiance *= emissiveColor.rgb;\\n#endif\\n\";\n\n\tvar emissivemap_pars_fragment = \"#ifdef USE_EMISSIVEMAP\\n\\tuniform sampler2D emissiveMap;\\n#endif\\n\";\n\n\tvar encodings_fragment = \" gl_FragColor = linearToOutputTexel( gl_FragColor );\\n\";\n\n\tvar encodings_pars_fragment = \"\\nvec4 LinearToLinear( in vec4 value ) {\\n\\treturn value;\\n}\\nvec4 GammaToLinear( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( gammaFactor ) ), value.w );\\n}\\nvec4 LinearToGamma( in vec4 value, in float gammaFactor ) {\\n\\treturn vec4( pow( value.xyz, vec3( 1.0 / gammaFactor ) ), value.w );\\n}\\nvec4 sRGBToLinear( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb * 0.9478672986 + vec3( 0.0521327014 ), vec3( 2.4 ) ), value.rgb * 0.0773993808, vec3( lessThanEqual( value.rgb, vec3( 0.04045 ) ) ) ), value.w );\\n}\\nvec4 LinearTosRGB( in vec4 value ) {\\n\\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.w );\\n}\\nvec4 RGBEToLinear( in vec4 value ) {\\n\\treturn vec4( value.rgb * exp2( value.a * 255.0 - 128.0 ), 1.0 );\\n}\\nvec4 LinearToRGBE( in vec4 value ) {\\n\\tfloat maxComponent = max( max( value.r, value.g ), value.b );\\n\\tfloat fExp = clamp( ceil( log2( maxComponent ) ), -128.0, 127.0 );\\n\\treturn vec4( value.rgb / exp2( fExp ), ( fExp + 128.0 ) / 255.0 );\\n}\\nvec4 RGBMToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.xyz * value.w * maxRange, 1.0 );\\n}\\nvec4 LinearToRGBM( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat M = clamp( maxRGB / maxRange, 0.0, 1.0 );\\n\\tM = ceil( M * 255.0 ) / 255.0;\\n\\treturn vec4( value.rgb / ( M * maxRange ), M );\\n}\\nvec4 RGBDToLinear( in vec4 value, in float maxRange ) {\\n\\treturn vec4( value.rgb * ( ( maxRange / 255.0 ) / value.a ), 1.0 );\\n}\\nvec4 LinearToRGBD( in vec4 value, in float maxRange ) {\\n\\tfloat maxRGB = max( value.x, max( value.g, value.b ) );\\n\\tfloat D = max( maxRange / maxRGB, 1.0 );\\n\\tD = min( floor( D ) / 255.0, 1.0 );\\n\\treturn vec4( value.rgb * ( D * ( 255.0 / maxRange ) ), D );\\n}\\nconst mat3 cLogLuvM = mat3( 0.2209, 0.3390, 0.4184, 0.1138, 0.6780, 0.7319, 0.0102, 0.1130, 0.2969 );\\nvec4 LinearToLogLuv( in vec4 value ) {\\n\\tvec3 Xp_Y_XYZp = value.rgb * cLogLuvM;\\n\\tXp_Y_XYZp = max(Xp_Y_XYZp, vec3(1e-6, 1e-6, 1e-6));\\n\\tvec4 vResult;\\n\\tvResult.xy = Xp_Y_XYZp.xy / Xp_Y_XYZp.z;\\n\\tfloat Le = 2.0 * log2(Xp_Y_XYZp.y) + 127.0;\\n\\tvResult.w = fract(Le);\\n\\tvResult.z = (Le - (floor(vResult.w*255.0))/255.0)/255.0;\\n\\treturn vResult;\\n}\\nconst mat3 cLogLuvInverseM = mat3( 6.0014, -2.7008, -1.7996, -1.3320, 3.1029, -5.7721, 0.3008, -1.0882, 5.6268 );\\nvec4 LogLuvToLinear( in vec4 value ) {\\n\\tfloat Le = value.z * 255.0 + value.w;\\n\\tvec3 Xp_Y_XYZp;\\n\\tXp_Y_XYZp.y = exp2((Le - 127.0) / 2.0);\\n\\tXp_Y_XYZp.z = Xp_Y_XYZp.y / value.y;\\n\\tXp_Y_XYZp.x = value.x * Xp_Y_XYZp.z;\\n\\tvec3 vRGB = Xp_Y_XYZp.rgb * cLogLuvInverseM;\\n\\treturn vec4( max(vRGB, 0.0), 1.0 );\\n}\\n\";\n\n\tvar envmap_fragment = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#else\\n\\t\\tvec3 reflectVec = vReflect;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\\n\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\tvec2 sampleUV;\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\tvec4 envColor = texture2D( envMap, sampleUV );\\n\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\treflectVec = normalize( reflectVec );\\n\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0, 0.0, 1.0 ) );\\n\\t\\tvec4 envColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5 );\\n\\t#else\\n\\t\\tvec4 envColor = vec4( 0.0 );\\n\\t#endif\\n\\tenvColor = envMapTexelToLinear( envColor );\\n\\t#ifdef ENVMAP_BLENDING_MULTIPLY\\n\\t\\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_MIX )\\n\\t\\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\\n\\t#elif defined( ENVMAP_BLENDING_ADD )\\n\\t\\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\\n\\t#endif\\n#endif\\n\";\n\n\tvar envmap_pars_fragment = \"#if defined( USE_ENVMAP ) || defined( PHYSICAL )\\n\\tuniform float reflectivity;\\n\\tuniform float envMapIntensity;\\n#endif\\n#ifdef USE_ENVMAP\\n\\t#if ! defined( PHYSICAL ) && ( defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#endif\\n\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\tuniform samplerCube envMap;\\n\\t#else\\n\\t\\tuniform sampler2D envMap;\\n\\t#endif\\n\\tuniform float flipEnvMap;\\n\\tuniform int maxMipLevel;\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( PHYSICAL )\\n\\t\\tuniform float refractionRatio;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t#endif\\n#endif\\n\";\n\n\tvar envmap_pars_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvarying vec3 vWorldPosition;\\n\\t#else\\n\\t\\tvarying vec3 vReflect;\\n\\t\\tuniform float refractionRatio;\\n\\t#endif\\n#endif\\n\";\n\n\tvar envmap_vertex = \"#ifdef USE_ENVMAP\\n\\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG )\\n\\t\\tvWorldPosition = worldPosition.xyz;\\n\\t#else\\n\\t\\tvec3 cameraToVertex = normalize( worldPosition.xyz - cameraPosition );\\n\\t\\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvReflect = reflect( cameraToVertex, worldNormal );\\n\\t\\t#else\\n\\t\\t\\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\\n\\t\\t#endif\\n\\t#endif\\n#endif\\n\";\n\n\tvar fog_vertex = \"\\n#ifdef USE_FOG\\nfogDepth = -mvPosition.z;\\n#endif\";\n\n\tvar fog_pars_vertex = \"#ifdef USE_FOG\\n varying float fogDepth;\\n#endif\\n\";\n\n\tvar fog_fragment = \"#ifdef USE_FOG\\n\\t#ifdef FOG_EXP2\\n\\t\\tfloat fogFactor = whiteCompliment( exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 ) );\\n\\t#else\\n\\t\\tfloat fogFactor = smoothstep( fogNear, fogFar, fogDepth );\\n\\t#endif\\n\\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\\n#endif\\n\";\n\n\tvar fog_pars_fragment = \"#ifdef USE_FOG\\n\\tuniform vec3 fogColor;\\n\\tvarying float fogDepth;\\n\\t#ifdef FOG_EXP2\\n\\t\\tuniform float fogDensity;\\n\\t#else\\n\\t\\tuniform float fogNear;\\n\\t\\tuniform float fogFar;\\n\\t#endif\\n#endif\\n\";\n\n\tvar gradientmap_pars_fragment = \"#ifdef TOON\\n\\tuniform sampler2D gradientMap;\\n\\tvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\\n\\t\\tfloat dotNL = dot( normal, lightDirection );\\n\\t\\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\\n\\t\\t#ifdef USE_GRADIENTMAP\\n\\t\\t\\treturn texture2D( gradientMap, coord ).rgb;\\n\\t\\t#else\\n\\t\\t\\treturn ( coord.x < 0.7 ) ? vec3( 0.7 ) : vec3( 1.0 );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\n\tvar lightmap_fragment = \"#ifdef USE_LIGHTMAP\\n\\treflectedLight.indirectDiffuse += PI * texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n#endif\\n\";\n\n\tvar lightmap_pars_fragment = \"#ifdef USE_LIGHTMAP\\n\\tuniform sampler2D lightMap;\\n\\tuniform float lightMapIntensity;\\n#endif\";\n\n\tvar lights_lambert_vertex = \"vec3 diffuse = vec3( 1.0 );\\nGeometricContext geometry;\\ngeometry.position = mvPosition.xyz;\\ngeometry.normal = normalize( transformedNormal );\\ngeometry.viewDir = normalize( -mvPosition.xyz );\\nGeometricContext backGeometry;\\nbackGeometry.position = geometry.position;\\nbackGeometry.normal = -geometry.normal;\\nbackGeometry.viewDir = geometry.viewDir;\\nvLightFront = vec3( 0.0 );\\n#ifdef DOUBLE_SIDED\\n\\tvLightBack = vec3( 0.0 );\\n#endif\\nIncidentLight directLight;\\nfloat dotNL;\\nvec3 directLightColor_Diffuse;\\n#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tgetPointDirectLightIrradiance( pointLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tgetSpotDirectLightIrradiance( spotLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLights[ i ], geometry, directLight );\\n\\t\\tdotNL = dot( geometry.normal, directLight.direction );\\n\\t\\tdirectLightColor_Diffuse = PI * directLight.color;\\n\\t\\tvLightFront += saturate( dotNL ) * directLightColor_Diffuse;\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += saturate( -dotNL ) * directLightColor_Diffuse;\\n\\t\\t#endif\\n\\t}\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\tvLightFront += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t#ifdef DOUBLE_SIDED\\n\\t\\t\\tvLightBack += getHemisphereLightIrradiance( hemisphereLights[ i ], backGeometry );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\n\tvar lights_pars_begin = \"uniform vec3 ambientLightColor;\\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\\n\\tvec3 irradiance = ambientLightColor;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treturn irradiance;\\n}\\n#if NUM_DIR_LIGHTS > 0\\n\\tstruct DirectionalLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\\n\\tvoid getDirectionalDirectLightIrradiance( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tdirectLight.color = directionalLight.color;\\n\\t\\tdirectLight.direction = directionalLight.direction;\\n\\t\\tdirectLight.visible = true;\\n\\t}\\n#endif\\n#if NUM_POINT_LIGHTS > 0\\n\\tstruct PointLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t\\tfloat shadowCameraNear;\\n\\t\\tfloat shadowCameraFar;\\n\\t};\\n\\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\\n\\tvoid getPointDirectLightIrradiance( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = pointLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tdirectLight.color = pointLight.color;\\n\\t\\tdirectLight.color *= punctualLightIntensityToIrradianceFactor( lightDistance, pointLight.distance, pointLight.decay );\\n\\t\\tdirectLight.visible = ( directLight.color != vec3( 0.0 ) );\\n\\t}\\n#endif\\n#if NUM_SPOT_LIGHTS > 0\\n\\tstruct SpotLight {\\n\\t\\tvec3 position;\\n\\t\\tvec3 direction;\\n\\t\\tvec3 color;\\n\\t\\tfloat distance;\\n\\t\\tfloat decay;\\n\\t\\tfloat coneCos;\\n\\t\\tfloat penumbraCos;\\n\\t\\tint shadow;\\n\\t\\tfloat shadowBias;\\n\\t\\tfloat shadowRadius;\\n\\t\\tvec2 shadowMapSize;\\n\\t};\\n\\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\\n\\tvoid getSpotDirectLightIrradiance( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight directLight ) {\\n\\t\\tvec3 lVector = spotLight.position - geometry.position;\\n\\t\\tdirectLight.direction = normalize( lVector );\\n\\t\\tfloat lightDistance = length( lVector );\\n\\t\\tfloat angleCos = dot( directLight.direction, spotLight.direction );\\n\\t\\tif ( angleCos > spotLight.coneCos ) {\\n\\t\\t\\tfloat spotEffect = smoothstep( spotLight.coneCos, spotLight.penumbraCos, angleCos );\\n\\t\\t\\tdirectLight.color = spotLight.color;\\n\\t\\t\\tdirectLight.color *= spotEffect * punctualLightIntensityToIrradianceFactor( lightDistance, spotLight.distance, spotLight.decay );\\n\\t\\t\\tdirectLight.visible = true;\\n\\t\\t} else {\\n\\t\\t\\tdirectLight.color = vec3( 0.0 );\\n\\t\\t\\tdirectLight.visible = false;\\n\\t\\t}\\n\\t}\\n#endif\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tstruct RectAreaLight {\\n\\t\\tvec3 color;\\n\\t\\tvec3 position;\\n\\t\\tvec3 halfWidth;\\n\\t\\tvec3 halfHeight;\\n\\t};\\n\\tuniform sampler2D ltc_1;\\tuniform sampler2D ltc_2;\\n\\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\\n#endif\\n#if NUM_HEMI_LIGHTS > 0\\n\\tstruct HemisphereLight {\\n\\t\\tvec3 direction;\\n\\t\\tvec3 skyColor;\\n\\t\\tvec3 groundColor;\\n\\t};\\n\\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\\n\\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in GeometricContext geometry ) {\\n\\t\\tfloat dotNL = dot( geometry.normal, hemiLight.direction );\\n\\t\\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\\n\\t\\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tirradiance *= PI;\\n\\t\\t#endif\\n\\t\\treturn irradiance;\\n\\t}\\n#endif\\n\";\n\n\tvar lights_pars_maps = \"#if defined( USE_ENVMAP ) && defined( PHYSICAL )\\n\\tvec3 getLightProbeIndirectIrradiance( const in GeometricContext geometry, const in int maxMIPLevel ) {\\n\\t\\tvec3 worldNormal = inverseTransformDirection( geometry.normal, viewMatrix );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryVec, float( maxMIPLevel ) );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryVec = vec3( flipEnvMap * worldNormal.x, worldNormal.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV( queryVec, 1.0 );\\n\\t\\t#else\\n\\t\\t\\tvec4 envMapColor = vec4( 0.0 );\\n\\t\\t#endif\\n\\t\\treturn PI * envMapColor.rgb * envMapIntensity;\\n\\t}\\n\\tfloat getSpecularMIPLevel( const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\tfloat maxMIPLevelScalar = float( maxMIPLevel );\\n\\t\\tfloat desiredMIPLevel = maxMIPLevelScalar + 0.79248 - 0.5 * log2( pow2( blinnShininessExponent ) + 1.0 );\\n\\t\\treturn clamp( desiredMIPLevel, 0.0, maxMIPLevelScalar );\\n\\t}\\n\\tvec3 getLightProbeIndirectRadiance( const in GeometricContext geometry, const in float blinnShininessExponent, const in int maxMIPLevel ) {\\n\\t\\t#ifdef ENVMAP_MODE_REFLECTION\\n\\t\\t\\tvec3 reflectVec = reflect( -geometry.viewDir, geometry.normal );\\n\\t\\t#else\\n\\t\\t\\tvec3 reflectVec = refract( -geometry.viewDir, geometry.normal, refractionRatio );\\n\\t\\t#endif\\n\\t\\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\\n\\t\\tfloat specularMIPLevel = getSpecularMIPLevel( blinnShininessExponent, maxMIPLevel );\\n\\t\\t#ifdef ENVMAP_TYPE_CUBE\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = textureCubeLodEXT( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = textureCube( envMap, queryReflectVec, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\t\\tvec3 queryReflectVec = vec3( flipEnvMap * reflectVec.x, reflectVec.yz );\\n\\t\\t\\tvec4 envMapColor = textureCubeUV(queryReflectVec, BlinnExponentToGGXRoughness(blinnShininessExponent));\\n\\t\\t#elif defined( ENVMAP_TYPE_EQUIREC )\\n\\t\\t\\tvec2 sampleUV;\\n\\t\\t\\tsampleUV.y = asin( clamp( reflectVec.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\t\\t\\tsampleUV.x = atan( reflectVec.z, reflectVec.x ) * RECIPROCAL_PI2 + 0.5;\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, sampleUV, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#elif defined( ENVMAP_TYPE_SPHERE )\\n\\t\\t\\tvec3 reflectView = normalize( ( viewMatrix * vec4( reflectVec, 0.0 ) ).xyz + vec3( 0.0,0.0,1.0 ) );\\n\\t\\t\\t#ifdef TEXTURE_LOD_EXT\\n\\t\\t\\t\\tvec4 envMapColor = texture2DLodEXT( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#else\\n\\t\\t\\t\\tvec4 envMapColor = texture2D( envMap, reflectView.xy * 0.5 + 0.5, specularMIPLevel );\\n\\t\\t\\t#endif\\n\\t\\t\\tenvMapColor.rgb = envMapTexelToLinear( envMapColor ).rgb;\\n\\t\\t#endif\\n\\t\\treturn envMapColor.rgb * envMapIntensity;\\n\\t}\\n#endif\\n\";\n\n\tvar lights_phong_fragment = \"BlinnPhongMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb;\\nmaterial.specularColor = specular;\\nmaterial.specularShininess = shininess;\\nmaterial.specularStrength = specularStrength;\\n\";\n\n\tvar lights_phong_pars_fragment = \"varying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\nstruct BlinnPhongMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tvec3\\tspecularColor;\\n\\tfloat\\tspecularShininess;\\n\\tfloat\\tspecularStrength;\\n};\\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifdef TOON\\n\\t\\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\\n\\t#else\\n\\t\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\t\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#endif\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\treflectedLight.directDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\treflectedLight.directSpecular += irradiance * BRDF_Specular_BlinnPhong( directLight, geometry, material.specularColor, material.specularShininess ) * material.specularStrength;\\n}\\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_BlinnPhong\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_BlinnPhong\\n#define Material_LightProbeLOD( material )\\t(0)\\n\";\n\n\tvar lights_physical_fragment = \"PhysicalMaterial material;\\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\\nmaterial.specularRoughness = clamp( roughnessFactor, 0.04, 1.0 );\\n#ifdef STANDARD\\n\\tmaterial.specularColor = mix( vec3( DEFAULT_SPECULAR_COEFFICIENT ), diffuseColor.rgb, metalnessFactor );\\n#else\\n\\tmaterial.specularColor = mix( vec3( MAXIMUM_SPECULAR_COEFFICIENT * pow2( reflectivity ) ), diffuseColor.rgb, metalnessFactor );\\n\\tmaterial.clearCoat = saturate( clearCoat );\\tmaterial.clearCoatRoughness = clamp( clearCoatRoughness, 0.04, 1.0 );\\n#endif\\n\";\n\n\tvar lights_physical_pars_fragment = \"struct PhysicalMaterial {\\n\\tvec3\\tdiffuseColor;\\n\\tfloat\\tspecularRoughness;\\n\\tvec3\\tspecularColor;\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoat;\\n\\t\\tfloat clearCoatRoughness;\\n\\t#endif\\n};\\n#define MAXIMUM_SPECULAR_COEFFICIENT 0.16\\n#define DEFAULT_SPECULAR_COEFFICIENT 0.04\\nfloat clearCoatDHRApprox( const in float roughness, const in float dotNL ) {\\n\\treturn DEFAULT_SPECULAR_COEFFICIENT + ( 1.0 - DEFAULT_SPECULAR_COEFFICIENT ) * ( pow( 1.0 - dotNL, 5.0 ) * pow( 1.0 - roughness, 2.0 ) );\\n}\\n#if NUM_RECT_AREA_LIGHTS > 0\\n\\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t\\tvec3 normal = geometry.normal;\\n\\t\\tvec3 viewDir = geometry.viewDir;\\n\\t\\tvec3 position = geometry.position;\\n\\t\\tvec3 lightPos = rectAreaLight.position;\\n\\t\\tvec3 halfWidth = rectAreaLight.halfWidth;\\n\\t\\tvec3 halfHeight = rectAreaLight.halfHeight;\\n\\t\\tvec3 lightColor = rectAreaLight.color;\\n\\t\\tfloat roughness = material.specularRoughness;\\n\\t\\tvec3 rectCoords[ 4 ];\\n\\t\\trectCoords[ 0 ] = lightPos - halfWidth - halfHeight;\\t\\trectCoords[ 1 ] = lightPos + halfWidth - halfHeight;\\n\\t\\trectCoords[ 2 ] = lightPos + halfWidth + halfHeight;\\n\\t\\trectCoords[ 3 ] = lightPos - halfWidth + halfHeight;\\n\\t\\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\\n\\t\\tvec4 t1 = texture2D( ltc_1, uv );\\n\\t\\tvec4 t2 = texture2D( ltc_2, uv );\\n\\t\\tmat3 mInv = mat3(\\n\\t\\t\\tvec3( t1.x, 0, t1.y ),\\n\\t\\t\\tvec3( 0, 1, 0 ),\\n\\t\\t\\tvec3( t1.z, 0, t1.w )\\n\\t\\t);\\n\\t\\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\\n\\t\\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\\n\\t\\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\\n\\t}\\n#endif\\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\\n\\tvec3 irradiance = dotNL * directLight.color;\\n\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\tirradiance *= PI;\\n\\t#endif\\n\\t#ifndef STANDARD\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.directSpecular += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Specular_GGX( directLight, geometry, material.specularColor, material.specularRoughness );\\n\\treflectedLight.directDiffuse += ( 1.0 - clearCoatDHR ) * irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.directSpecular += irradiance * material.clearCoat * BRDF_Specular_GGX( directLight, geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\treflectedLight.indirectDiffuse += irradiance * BRDF_Diffuse_Lambert( material.diffuseColor );\\n}\\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 clearCoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\\n\\t#ifndef STANDARD\\n\\t\\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\\n\\t\\tfloat dotNL = dotNV;\\n\\t\\tfloat clearCoatDHR = material.clearCoat * clearCoatDHRApprox( material.clearCoatRoughness, dotNL );\\n\\t#else\\n\\t\\tfloat clearCoatDHR = 0.0;\\n\\t#endif\\n\\treflectedLight.indirectSpecular += ( 1.0 - clearCoatDHR ) * radiance * BRDF_Specular_GGX_Environment( geometry, material.specularColor, material.specularRoughness );\\n\\t#ifndef STANDARD\\n\\t\\treflectedLight.indirectSpecular += clearCoatRadiance * material.clearCoat * BRDF_Specular_GGX_Environment( geometry, vec3( DEFAULT_SPECULAR_COEFFICIENT ), material.clearCoatRoughness );\\n\\t#endif\\n}\\n#define RE_Direct\\t\\t\\t\\tRE_Direct_Physical\\n#define RE_Direct_RectArea\\t\\tRE_Direct_RectArea_Physical\\n#define RE_IndirectDiffuse\\t\\tRE_IndirectDiffuse_Physical\\n#define RE_IndirectSpecular\\t\\tRE_IndirectSpecular_Physical\\n#define Material_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.specularRoughness )\\n#define Material_ClearCoat_BlinnShininessExponent( material ) GGXRoughnessToBlinnExponent( material.clearCoatRoughness )\\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\\n\\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\\n}\\n\";\n\n\tvar lights_fragment_begin = \"\\nGeometricContext geometry;\\ngeometry.position = - vViewPosition;\\ngeometry.normal = normal;\\ngeometry.viewDir = normalize( vViewPosition );\\nIncidentLight directLight;\\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tgetPointDirectLightIrradiance( pointLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( pointLight.shadow, directLight.visible ) ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tgetSpotDirectLightIrradiance( spotLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( spotLight.shadow, directLight.visible ) ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tgetDirectionalDirectLightIrradiance( directionalLight, geometry, directLight );\\n\\t\\t#ifdef USE_SHADOWMAP\\n\\t\\tdirectLight.color *= all( bvec2( directionalLight.shadow, directLight.visible ) ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t\\t#endif\\n\\t\\tRE_Direct( directLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\\n\\tRectAreaLight rectAreaLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\\n\\t\\trectAreaLight = rectAreaLights[ i ];\\n\\t\\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\\n\\t}\\n#endif\\n#if defined( RE_IndirectDiffuse )\\n\\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\\n\\t#if ( NUM_HEMI_LIGHTS > 0 )\\n\\t\\t#pragma unroll_loop\\n\\t\\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\\n\\t\\t\\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry );\\n\\t\\t}\\n\\t#endif\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tvec3 radiance = vec3( 0.0 );\\n\\tvec3 clearCoatRadiance = vec3( 0.0 );\\n#endif\\n\";\n\n\tvar lights_fragment_maps = \"#if defined( RE_IndirectDiffuse )\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\tvec3 lightMapIrradiance = texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t\\t#ifndef PHYSICALLY_CORRECT_LIGHTS\\n\\t\\t\\tlightMapIrradiance *= PI;\\n\\t\\t#endif\\n\\t\\tirradiance += lightMapIrradiance;\\n\\t#endif\\n\\t#if defined( USE_ENVMAP ) && defined( PHYSICAL ) && defined( ENVMAP_TYPE_CUBE_UV )\\n\\t\\tirradiance += getLightProbeIndirectIrradiance( geometry, maxMipLevel );\\n\\t#endif\\n#endif\\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\\n\\tradiance += getLightProbeIndirectRadiance( geometry, Material_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#ifndef STANDARD\\n\\t\\tclearCoatRadiance += getLightProbeIndirectRadiance( geometry, Material_ClearCoat_BlinnShininessExponent( material ), maxMipLevel );\\n\\t#endif\\n#endif\\n\";\n\n\tvar lights_fragment_end = \"#if defined( RE_IndirectDiffuse )\\n\\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\\n#endif\\n#if defined( RE_IndirectSpecular )\\n\\tRE_IndirectSpecular( radiance, clearCoatRadiance, geometry, material, reflectedLight );\\n#endif\\n\";\n\n\tvar logdepthbuf_fragment = \"#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\\n\\tgl_FragDepthEXT = log2( vFragDepth ) * logDepthBufFC * 0.5;\\n#endif\";\n\n\tvar logdepthbuf_pars_fragment = \"#ifdef USE_LOGDEPTHBUF\\n\\tuniform float logDepthBufFC;\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n#endif\\n\";\n\n\tvar logdepthbuf_pars_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvarying float vFragDepth;\\n\\t#endif\\n\\tuniform float logDepthBufFC;\\n#endif\";\n\n\tvar logdepthbuf_vertex = \"#ifdef USE_LOGDEPTHBUF\\n\\t#ifdef USE_LOGDEPTHBUF_EXT\\n\\t\\tvFragDepth = 1.0 + gl_Position.w;\\n\\t#else\\n\\t\\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\\n\\t\\tgl_Position.z *= gl_Position.w;\\n\\t#endif\\n#endif\\n\";\n\n\tvar map_fragment = \"#ifdef USE_MAP\\n\\tvec4 texelColor = texture2D( map, vUv );\\n\\ttexelColor = mapTexelToLinear( texelColor );\\n\\tdiffuseColor *= texelColor;\\n#endif\\n\";\n\n\tvar map_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\n\tvar map_particle_fragment = \"#ifdef USE_MAP\\n\\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\\n\\tvec4 mapTexel = texture2D( map, uv );\\n\\tdiffuseColor *= mapTexelToLinear( mapTexel );\\n#endif\\n\";\n\n\tvar map_particle_pars_fragment = \"#ifdef USE_MAP\\n\\tuniform mat3 uvTransform;\\n\\tuniform sampler2D map;\\n#endif\\n\";\n\n\tvar metalnessmap_fragment = \"float metalnessFactor = metalness;\\n#ifdef USE_METALNESSMAP\\n\\tvec4 texelMetalness = texture2D( metalnessMap, vUv );\\n\\tmetalnessFactor *= texelMetalness.b;\\n#endif\\n\";\n\n\tvar metalnessmap_pars_fragment = \"#ifdef USE_METALNESSMAP\\n\\tuniform sampler2D metalnessMap;\\n#endif\";\n\n\tvar morphnormal_vertex = \"#ifdef USE_MORPHNORMALS\\n\\tobjectNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\\n\\tobjectNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\\n\\tobjectNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\\n\\tobjectNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\\n#endif\\n\";\n\n\tvar morphtarget_pars_vertex = \"#ifdef USE_MORPHTARGETS\\n\\t#ifndef USE_MORPHNORMALS\\n\\tuniform float morphTargetInfluences[ 8 ];\\n\\t#else\\n\\tuniform float morphTargetInfluences[ 4 ];\\n\\t#endif\\n#endif\";\n\n\tvar morphtarget_vertex = \"#ifdef USE_MORPHTARGETS\\n\\ttransformed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\\n\\ttransformed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\\n\\ttransformed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\\n\\ttransformed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\\n\\t#ifndef USE_MORPHNORMALS\\n\\ttransformed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\\n\\ttransformed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\\n\\ttransformed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\\n\\ttransformed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\\n\\t#endif\\n#endif\\n\";\n\n\tvar normal_fragment_begin = \"#ifdef FLAT_SHADED\\n\\tvec3 fdx = vec3( dFdx( vViewPosition.x ), dFdx( vViewPosition.y ), dFdx( vViewPosition.z ) );\\n\\tvec3 fdy = vec3( dFdy( vViewPosition.x ), dFdy( vViewPosition.y ), dFdy( vViewPosition.z ) );\\n\\tvec3 normal = normalize( cross( fdx, fdy ) );\\n#else\\n\\tvec3 normal = normalize( vNormal );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\tnormal = normal * ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t#endif\\n#endif\\n\";\n\n\tvar normal_fragment_maps = \"#ifdef USE_NORMALMAP\\n\\tnormal = perturbNormal2Arb( -vViewPosition, normal );\\n#elif defined( USE_BUMPMAP )\\n\\tnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\\n#endif\\n\";\n\n\tvar normalmap_pars_fragment = \"#ifdef USE_NORMALMAP\\n\\tuniform sampler2D normalMap;\\n\\tuniform vec2 normalScale;\\n\\tvec3 perturbNormal2Arb( vec3 eye_pos, vec3 surf_norm ) {\\n\\t\\tvec3 q0 = vec3( dFdx( eye_pos.x ), dFdx( eye_pos.y ), dFdx( eye_pos.z ) );\\n\\t\\tvec3 q1 = vec3( dFdy( eye_pos.x ), dFdy( eye_pos.y ), dFdy( eye_pos.z ) );\\n\\t\\tvec2 st0 = dFdx( vUv.st );\\n\\t\\tvec2 st1 = dFdy( vUv.st );\\n\\t\\tfloat scale = sign( st1.t * st0.s - st0.t * st1.s );\\n\\t\\tvec3 S = normalize( ( q0 * st1.t - q1 * st0.t ) * scale );\\n\\t\\tvec3 T = normalize( ( - q0 * st1.s + q1 * st0.s ) * scale );\\n\\t\\tvec3 N = normalize( surf_norm );\\n\\t\\tmat3 tsn = mat3( S, T, N );\\n\\t\\tvec3 mapN = texture2D( normalMap, vUv ).xyz * 2.0 - 1.0;\\n\\t\\tmapN.xy *= normalScale;\\n\\t\\tmapN.xy *= ( float( gl_FrontFacing ) * 2.0 - 1.0 );\\n\\t\\treturn normalize( tsn * mapN );\\n\\t}\\n#endif\\n\";\n\n\tvar packing = \"vec3 packNormalToRGB( const in vec3 normal ) {\\n\\treturn normalize( normal ) * 0.5 + 0.5;\\n}\\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\\n\\treturn 2.0 * rgb.xyz - 1.0;\\n}\\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\\nconst float ShiftRight8 = 1. / 256.;\\nvec4 packDepthToRGBA( const in float v ) {\\n\\tvec4 r = vec4( fract( v * PackFactors ), v );\\n\\tr.yzw -= r.xyz * ShiftRight8;\\treturn r * PackUpscale;\\n}\\nfloat unpackRGBAToDepth( const in vec4 v ) {\\n\\treturn dot( v, UnpackFactors );\\n}\\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn ( viewZ + near ) / ( near - far );\\n}\\nfloat orthographicDepthToViewZ( const in float linearClipZ, const in float near, const in float far ) {\\n\\treturn linearClipZ * ( near - far ) - near;\\n}\\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\\n\\treturn (( near + viewZ ) * far ) / (( far - near ) * viewZ );\\n}\\nfloat perspectiveDepthToViewZ( const in float invClipZ, const in float near, const in float far ) {\\n\\treturn ( near * far ) / ( ( far - near ) * invClipZ - far );\\n}\\n\";\n\n\tvar premultiplied_alpha_fragment = \"#ifdef PREMULTIPLIED_ALPHA\\n\\tgl_FragColor.rgb *= gl_FragColor.a;\\n#endif\\n\";\n\n\tvar project_vertex = \"vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\\ngl_Position = projectionMatrix * mvPosition;\\n\";\n\n\tvar dithering_fragment = \"#if defined( DITHERING )\\n gl_FragColor.rgb = dithering( gl_FragColor.rgb );\\n#endif\\n\";\n\n\tvar dithering_pars_fragment = \"#if defined( DITHERING )\\n\\tvec3 dithering( vec3 color ) {\\n\\t\\tfloat grid_position = rand( gl_FragCoord.xy );\\n\\t\\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\\n\\t\\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\\n\\t\\treturn color + dither_shift_RGB;\\n\\t}\\n#endif\\n\";\n\n\tvar roughnessmap_fragment = \"float roughnessFactor = roughness;\\n#ifdef USE_ROUGHNESSMAP\\n\\tvec4 texelRoughness = texture2D( roughnessMap, vUv );\\n\\troughnessFactor *= texelRoughness.g;\\n#endif\\n\";\n\n\tvar roughnessmap_pars_fragment = \"#ifdef USE_ROUGHNESSMAP\\n\\tuniform sampler2D roughnessMap;\\n#endif\";\n\n\tvar shadowmap_pars_fragment = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n\\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\\n\\t\\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\\n\\t}\\n\\tfloat texture2DShadowLerp( sampler2D depths, vec2 size, vec2 uv, float compare ) {\\n\\t\\tconst vec2 offset = vec2( 0.0, 1.0 );\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / size;\\n\\t\\tvec2 centroidUV = floor( uv * size + 0.5 ) / size;\\n\\t\\tfloat lb = texture2DCompare( depths, centroidUV + texelSize * offset.xx, compare );\\n\\t\\tfloat lt = texture2DCompare( depths, centroidUV + texelSize * offset.xy, compare );\\n\\t\\tfloat rb = texture2DCompare( depths, centroidUV + texelSize * offset.yx, compare );\\n\\t\\tfloat rt = texture2DCompare( depths, centroidUV + texelSize * offset.yy, compare );\\n\\t\\tvec2 f = fract( uv * size + 0.5 );\\n\\t\\tfloat a = mix( lb, lt, f.y );\\n\\t\\tfloat b = mix( rb, rt, f.y );\\n\\t\\tfloat c = mix( a, b, f.x );\\n\\t\\treturn c;\\n\\t}\\n\\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\\n\\t\\tfloat shadow = 1.0;\\n\\t\\tshadowCoord.xyz /= shadowCoord.w;\\n\\t\\tshadowCoord.z += shadowBias;\\n\\t\\tbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\\n\\t\\tbool inFrustum = all( inFrustumVec );\\n\\t\\tbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\\n\\t\\tbool frustumTest = all( frustumTestVec );\\n\\t\\tif ( frustumTest ) {\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\\n\\t\\t\\tfloat dx0 = - texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy0 = - texelSize.y * shadowRadius;\\n\\t\\t\\tfloat dx1 = + texelSize.x * shadowRadius;\\n\\t\\t\\tfloat dy1 = + texelSize.y * shadowRadius;\\n\\t\\t\\tshadow = (\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy, shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\\n\\t\\t\\t\\ttexture2DShadowLerp( shadowMap, shadowMapSize, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\\n\\t\\t#endif\\n\\t\\t}\\n\\t\\treturn shadow;\\n\\t}\\n\\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\\n\\t\\tvec3 absV = abs( v );\\n\\t\\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\\n\\t\\tabsV *= scaleToCube;\\n\\t\\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\\n\\t\\tvec2 planar = v.xy;\\n\\t\\tfloat almostATexel = 1.5 * texelSizeY;\\n\\t\\tfloat almostOne = 1.0 - almostATexel;\\n\\t\\tif ( absV.z >= almostOne ) {\\n\\t\\t\\tif ( v.z > 0.0 )\\n\\t\\t\\t\\tplanar.x = 4.0 - v.x;\\n\\t\\t} else if ( absV.x >= almostOne ) {\\n\\t\\t\\tfloat signX = sign( v.x );\\n\\t\\t\\tplanar.x = v.z * signX + 2.0 * signX;\\n\\t\\t} else if ( absV.y >= almostOne ) {\\n\\t\\t\\tfloat signY = sign( v.y );\\n\\t\\t\\tplanar.x = v.x + 2.0 * signY + 2.0;\\n\\t\\t\\tplanar.y = v.z * signY - 2.0;\\n\\t\\t}\\n\\t\\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\\n\\t}\\n\\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\\n\\t\\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\\n\\t\\tvec3 lightToPosition = shadowCoord.xyz;\\n\\t\\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\\t\\tdp += shadowBias;\\n\\t\\tvec3 bd3D = normalize( lightToPosition );\\n\\t\\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT )\\n\\t\\t\\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\\n\\t\\t\\treturn (\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\\n\\t\\t\\t\\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\\n\\t\\t\\t) * ( 1.0 / 9.0 );\\n\\t\\t#else\\n\\t\\t\\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\\n\\t\\t#endif\\n\\t}\\n#endif\\n\";\n\n\tvar shadowmap_pars_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t\\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHTS ];\\n\\t\\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t\\tuniform mat4 spotShadowMatrix[ NUM_SPOT_LIGHTS ];\\n\\t\\tvarying vec4 vSpotShadowCoord[ NUM_SPOT_LIGHTS ];\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t\\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHTS ];\\n\\t\\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHTS ];\\n\\t#endif\\n#endif\\n\";\n\n\tvar shadowmap_vertex = \"#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tvSpotShadowCoord[ i ] = spotShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * worldPosition;\\n\\t}\\n\\t#endif\\n#endif\\n\";\n\n\tvar shadowmask_pars_fragment = \"float getShadowMask() {\\n\\tfloat shadow = 1.0;\\n\\t#ifdef USE_SHADOWMAP\\n\\t#if NUM_DIR_LIGHTS > 0\\n\\tDirectionalLight directionalLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\\n\\t\\tdirectionalLight = directionalLights[ i ];\\n\\t\\tshadow *= bool( directionalLight.shadow ) ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_SPOT_LIGHTS > 0\\n\\tSpotLight spotLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\\n\\t\\tspotLight = spotLights[ i ];\\n\\t\\tshadow *= bool( spotLight.shadow ) ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#if NUM_POINT_LIGHTS > 0\\n\\tPointLight pointLight;\\n\\t#pragma unroll_loop\\n\\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\\n\\t\\tpointLight = pointLights[ i ];\\n\\t\\tshadow *= bool( pointLight.shadow ) ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\\n\\t}\\n\\t#endif\\n\\t#endif\\n\\treturn shadow;\\n}\\n\";\n\n\tvar skinbase_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\\n\\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\\n\\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\\n\\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\\n#endif\";\n\n\tvar skinning_pars_vertex = \"#ifdef USE_SKINNING\\n\\tuniform mat4 bindMatrix;\\n\\tuniform mat4 bindMatrixInverse;\\n\\t#ifdef BONE_TEXTURE\\n\\t\\tuniform sampler2D boneTexture;\\n\\t\\tuniform int boneTextureSize;\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tfloat j = i * 4.0;\\n\\t\\t\\tfloat x = mod( j, float( boneTextureSize ) );\\n\\t\\t\\tfloat y = floor( j / float( boneTextureSize ) );\\n\\t\\t\\tfloat dx = 1.0 / float( boneTextureSize );\\n\\t\\t\\tfloat dy = 1.0 / float( boneTextureSize );\\n\\t\\t\\ty = dy * ( y + 0.5 );\\n\\t\\t\\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\\n\\t\\t\\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\\n\\t\\t\\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\\n\\t\\t\\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\\n\\t\\t\\tmat4 bone = mat4( v1, v2, v3, v4 );\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#else\\n\\t\\tuniform mat4 boneMatrices[ MAX_BONES ];\\n\\t\\tmat4 getBoneMatrix( const in float i ) {\\n\\t\\t\\tmat4 bone = boneMatrices[ int(i) ];\\n\\t\\t\\treturn bone;\\n\\t\\t}\\n\\t#endif\\n#endif\\n\";\n\n\tvar skinning_vertex = \"#ifdef USE_SKINNING\\n\\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\\n\\tvec4 skinned = vec4( 0.0 );\\n\\tskinned += boneMatX * skinVertex * skinWeight.x;\\n\\tskinned += boneMatY * skinVertex * skinWeight.y;\\n\\tskinned += boneMatZ * skinVertex * skinWeight.z;\\n\\tskinned += boneMatW * skinVertex * skinWeight.w;\\n\\ttransformed = ( bindMatrixInverse * skinned ).xyz;\\n#endif\\n\";\n\n\tvar skinnormal_vertex = \"#ifdef USE_SKINNING\\n\\tmat4 skinMatrix = mat4( 0.0 );\\n\\tskinMatrix += skinWeight.x * boneMatX;\\n\\tskinMatrix += skinWeight.y * boneMatY;\\n\\tskinMatrix += skinWeight.z * boneMatZ;\\n\\tskinMatrix += skinWeight.w * boneMatW;\\n\\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\\n\\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\\n#endif\\n\";\n\n\tvar specularmap_fragment = \"float specularStrength;\\n#ifdef USE_SPECULARMAP\\n\\tvec4 texelSpecular = texture2D( specularMap, vUv );\\n\\tspecularStrength = texelSpecular.r;\\n#else\\n\\tspecularStrength = 1.0;\\n#endif\";\n\n\tvar specularmap_pars_fragment = \"#ifdef USE_SPECULARMAP\\n\\tuniform sampler2D specularMap;\\n#endif\";\n\n\tvar tonemapping_fragment = \"#if defined( TONE_MAPPING )\\n gl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\\n#endif\\n\";\n\n\tvar tonemapping_pars_fragment = \"#ifndef saturate\\n\\t#define saturate(a) clamp( a, 0.0, 1.0 )\\n#endif\\nuniform float toneMappingExposure;\\nuniform float toneMappingWhitePoint;\\nvec3 LinearToneMapping( vec3 color ) {\\n\\treturn toneMappingExposure * color;\\n}\\nvec3 ReinhardToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( color / ( vec3( 1.0 ) + color ) );\\n}\\n#define Uncharted2Helper( x ) max( ( ( x * ( 0.15 * x + 0.10 * 0.50 ) + 0.20 * 0.02 ) / ( x * ( 0.15 * x + 0.50 ) + 0.20 * 0.30 ) ) - 0.02 / 0.30, vec3( 0.0 ) )\\nvec3 Uncharted2ToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\treturn saturate( Uncharted2Helper( color ) / Uncharted2Helper( vec3( toneMappingWhitePoint ) ) );\\n}\\nvec3 OptimizedCineonToneMapping( vec3 color ) {\\n\\tcolor *= toneMappingExposure;\\n\\tcolor = max( vec3( 0.0 ), color - 0.004 );\\n\\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\\n}\\n\";\n\n\tvar uv_pars_fragment = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n#endif\";\n\n\tvar uv_pars_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvarying vec2 vUv;\\n\\tuniform mat3 uvTransform;\\n#endif\\n\";\n\n\tvar uv_vertex = \"#if defined( USE_MAP ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( USE_SPECULARMAP ) || defined( USE_ALPHAMAP ) || defined( USE_EMISSIVEMAP ) || defined( USE_ROUGHNESSMAP ) || defined( USE_METALNESSMAP )\\n\\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\\n#endif\";\n\n\tvar uv2_pars_fragment = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvarying vec2 vUv2;\\n#endif\";\n\n\tvar uv2_pars_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tattribute vec2 uv2;\\n\\tvarying vec2 vUv2;\\n#endif\";\n\n\tvar uv2_vertex = \"#if defined( USE_LIGHTMAP ) || defined( USE_AOMAP )\\n\\tvUv2 = uv2;\\n#endif\";\n\n\tvar worldpos_vertex = \"#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\\n\\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\\n#endif\\n\";\n\n\tvar cube_frag = \"uniform samplerCube tCube;\\nuniform float tFlip;\\nuniform float opacity;\\nvarying vec3 vWorldPosition;\\nvoid main() {\\n\\tgl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\\n\\tgl_FragColor.a *= opacity;\\n}\\n\";\n\n\tvar cube_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n\\tgl_Position.z = gl_Position.w;\\n}\\n\";\n\n\tvar depth_frag = \"#if DEPTH_PACKING == 3200\\n\\tuniform float opacity;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tdiffuseColor.a = opacity;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#if DEPTH_PACKING == 3200\\n\\t\\tgl_FragColor = vec4( vec3( 1.0 - gl_FragCoord.z ), opacity );\\n\\t#elif DEPTH_PACKING == 3201\\n\\t\\tgl_FragColor = packDepthToRGBA( gl_FragCoord.z );\\n\\t#endif\\n}\\n\";\n\n\tvar depth_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar distanceRGBA_frag = \"#define DISTANCE\\nuniform vec3 referencePosition;\\nuniform float nearDistance;\\nuniform float farDistance;\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main () {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( 1.0 );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tfloat dist = length( vWorldPosition - referencePosition );\\n\\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\\n\\tdist = saturate( dist );\\n\\tgl_FragColor = packDepthToRGBA( dist );\\n}\\n\";\n\n\tvar distanceRGBA_vert = \"#define DISTANCE\\nvarying vec3 vWorldPosition;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#ifdef USE_DISPLACEMENTMAP\\n\\t\\t#include \\n\\t\\t#include \\n\\t\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvWorldPosition = worldPosition.xyz;\\n}\\n\";\n\n\tvar equirect_frag = \"uniform sampler2D tEquirect;\\nvarying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvec3 direction = normalize( vWorldPosition );\\n\\tvec2 sampleUV;\\n\\tsampleUV.y = asin( clamp( direction.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\\n\\tsampleUV.x = atan( direction.z, direction.x ) * RECIPROCAL_PI2 + 0.5;\\n\\tgl_FragColor = texture2D( tEquirect, sampleUV );\\n}\\n\";\n\n\tvar equirect_vert = \"varying vec3 vWorldPosition;\\n#include \\nvoid main() {\\n\\tvWorldPosition = transformDirection( position, modelMatrix );\\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar linedashed_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\nuniform float dashSize;\\nuniform float totalSize;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\\n\\t\\tdiscard;\\n\\t}\\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar linedashed_vert = \"uniform float scale;\\nattribute float lineDistance;\\nvarying float vLineDistance;\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvLineDistance = scale * lineDistance;\\n\\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\\n\\tgl_Position = projectionMatrix * mvPosition;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshbasic_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\t#ifdef USE_LIGHTMAP\\n\\t\\treflectedLight.indirectDiffuse += texture2D( lightMap, vUv2 ).xyz * lightMapIntensity;\\n\\t#else\\n\\t\\treflectedLight.indirectDiffuse += vec3( 1.0 );\\n\\t#endif\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\\n\\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshbasic_vert = \"#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_ENVMAP\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshlambert_frag = \"uniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float opacity;\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\treflectedLight.indirectDiffuse = getAmbientLightIrradiance( ambientLightColor );\\n\\t#include \\n\\treflectedLight.indirectDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb );\\n\\t#ifdef DOUBLE_SIDED\\n\\t\\treflectedLight.directDiffuse = ( gl_FrontFacing ) ? vLightFront : vLightBack;\\n\\t#else\\n\\t\\treflectedLight.directDiffuse = vLightFront;\\n\\t#endif\\n\\treflectedLight.directDiffuse *= BRDF_Diffuse_Lambert( diffuseColor.rgb ) * getShadowMask();\\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshlambert_vert = \"#define LAMBERT\\nvarying vec3 vLightFront;\\n#ifdef DOUBLE_SIDED\\n\\tvarying vec3 vLightBack;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphong_frag = \"#define PHONG\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform vec3 specular;\\nuniform float shininess;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\t#include \\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphong_vert = \"#define PHONG\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphysical_frag = \"#define PHYSICAL\\nuniform vec3 diffuse;\\nuniform vec3 emissive;\\nuniform float roughness;\\nuniform float metalness;\\nuniform float opacity;\\n#ifndef STANDARD\\n\\tuniform float clearCoat;\\n\\tuniform float clearCoatRoughness;\\n#endif\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\\n\\tvec3 totalEmissiveRadiance = emissive;\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar meshphysical_vert = \"#define PHYSICAL\\nvarying vec3 vViewPosition;\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\tvViewPosition = - mvPosition.xyz;\\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar normal_frag = \"#define NORMAL\\nuniform float opacity;\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\\n}\\n\";\n\n\tvar normal_vert = \"#define NORMAL\\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvarying vec3 vViewPosition;\\n#endif\\n#ifndef FLAT_SHADED\\n\\tvarying vec3 vNormal;\\n#endif\\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#ifndef FLAT_SHADED\\n\\tvNormal = normalize( transformedNormal );\\n#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP )\\n\\tvViewPosition = - mvPosition.xyz;\\n#endif\\n}\\n\";\n\n\tvar points_frag = \"uniform vec3 diffuse;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\tvec3 outgoingLight = vec3( 0.0 );\\n\\tvec4 diffuseColor = vec4( diffuse, opacity );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\toutgoingLight = diffuseColor.rgb;\\n\\tgl_FragColor = vec4( outgoingLight, diffuseColor.a );\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar points_vert = \"uniform float size;\\nuniform float scale;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#ifdef USE_SIZEATTENUATION\\n\\t\\tgl_PointSize = size * ( scale / - mvPosition.z );\\n\\t#else\\n\\t\\tgl_PointSize = size;\\n\\t#endif\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar shadow_frag = \"uniform vec3 color;\\nuniform float opacity;\\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\n#include \\nvoid main() {\\n\\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\\n\\t#include \\n}\\n\";\n\n\tvar shadow_vert = \"#include \\n#include \\nvoid main() {\\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n\\t#include \\n}\\n\";\n\n\tvar ShaderChunk = {\n\t\talphamap_fragment: alphamap_fragment,\n\t\talphamap_pars_fragment: alphamap_pars_fragment,\n\t\talphatest_fragment: alphatest_fragment,\n\t\taomap_fragment: aomap_fragment,\n\t\taomap_pars_fragment: aomap_pars_fragment,\n\t\tbegin_vertex: begin_vertex,\n\t\tbeginnormal_vertex: beginnormal_vertex,\n\t\tbsdfs: bsdfs,\n\t\tbumpmap_pars_fragment: bumpmap_pars_fragment,\n\t\tclipping_planes_fragment: clipping_planes_fragment,\n\t\tclipping_planes_pars_fragment: clipping_planes_pars_fragment,\n\t\tclipping_planes_pars_vertex: clipping_planes_pars_vertex,\n\t\tclipping_planes_vertex: clipping_planes_vertex,\n\t\tcolor_fragment: color_fragment,\n\t\tcolor_pars_fragment: color_pars_fragment,\n\t\tcolor_pars_vertex: color_pars_vertex,\n\t\tcolor_vertex: color_vertex,\n\t\tcommon: common,\n\t\tcube_uv_reflection_fragment: cube_uv_reflection_fragment,\n\t\tdefaultnormal_vertex: defaultnormal_vertex,\n\t\tdisplacementmap_pars_vertex: displacementmap_pars_vertex,\n\t\tdisplacementmap_vertex: displacementmap_vertex,\n\t\temissivemap_fragment: emissivemap_fragment,\n\t\temissivemap_pars_fragment: emissivemap_pars_fragment,\n\t\tencodings_fragment: encodings_fragment,\n\t\tencodings_pars_fragment: encodings_pars_fragment,\n\t\tenvmap_fragment: envmap_fragment,\n\t\tenvmap_pars_fragment: envmap_pars_fragment,\n\t\tenvmap_pars_vertex: envmap_pars_vertex,\n\t\tenvmap_vertex: envmap_vertex,\n\t\tfog_vertex: fog_vertex,\n\t\tfog_pars_vertex: fog_pars_vertex,\n\t\tfog_fragment: fog_fragment,\n\t\tfog_pars_fragment: fog_pars_fragment,\n\t\tgradientmap_pars_fragment: gradientmap_pars_fragment,\n\t\tlightmap_fragment: lightmap_fragment,\n\t\tlightmap_pars_fragment: lightmap_pars_fragment,\n\t\tlights_lambert_vertex: lights_lambert_vertex,\n\t\tlights_pars_begin: lights_pars_begin,\n\t\tlights_pars_maps: lights_pars_maps,\n\t\tlights_phong_fragment: lights_phong_fragment,\n\t\tlights_phong_pars_fragment: lights_phong_pars_fragment,\n\t\tlights_physical_fragment: lights_physical_fragment,\n\t\tlights_physical_pars_fragment: lights_physical_pars_fragment,\n\t\tlights_fragment_begin: lights_fragment_begin,\n\t\tlights_fragment_maps: lights_fragment_maps,\n\t\tlights_fragment_end: lights_fragment_end,\n\t\tlogdepthbuf_fragment: logdepthbuf_fragment,\n\t\tlogdepthbuf_pars_fragment: logdepthbuf_pars_fragment,\n\t\tlogdepthbuf_pars_vertex: logdepthbuf_pars_vertex,\n\t\tlogdepthbuf_vertex: logdepthbuf_vertex,\n\t\tmap_fragment: map_fragment,\n\t\tmap_pars_fragment: map_pars_fragment,\n\t\tmap_particle_fragment: map_particle_fragment,\n\t\tmap_particle_pars_fragment: map_particle_pars_fragment,\n\t\tmetalnessmap_fragment: metalnessmap_fragment,\n\t\tmetalnessmap_pars_fragment: metalnessmap_pars_fragment,\n\t\tmorphnormal_vertex: morphnormal_vertex,\n\t\tmorphtarget_pars_vertex: morphtarget_pars_vertex,\n\t\tmorphtarget_vertex: morphtarget_vertex,\n\t\tnormal_fragment_begin: normal_fragment_begin,\n\t\tnormal_fragment_maps: normal_fragment_maps,\n\t\tnormalmap_pars_fragment: normalmap_pars_fragment,\n\t\tpacking: packing,\n\t\tpremultiplied_alpha_fragment: premultiplied_alpha_fragment,\n\t\tproject_vertex: project_vertex,\n\t\tdithering_fragment: dithering_fragment,\n\t\tdithering_pars_fragment: dithering_pars_fragment,\n\t\troughnessmap_fragment: roughnessmap_fragment,\n\t\troughnessmap_pars_fragment: roughnessmap_pars_fragment,\n\t\tshadowmap_pars_fragment: shadowmap_pars_fragment,\n\t\tshadowmap_pars_vertex: shadowmap_pars_vertex,\n\t\tshadowmap_vertex: shadowmap_vertex,\n\t\tshadowmask_pars_fragment: shadowmask_pars_fragment,\n\t\tskinbase_vertex: skinbase_vertex,\n\t\tskinning_pars_vertex: skinning_pars_vertex,\n\t\tskinning_vertex: skinning_vertex,\n\t\tskinnormal_vertex: skinnormal_vertex,\n\t\tspecularmap_fragment: specularmap_fragment,\n\t\tspecularmap_pars_fragment: specularmap_pars_fragment,\n\t\ttonemapping_fragment: tonemapping_fragment,\n\t\ttonemapping_pars_fragment: tonemapping_pars_fragment,\n\t\tuv_pars_fragment: uv_pars_fragment,\n\t\tuv_pars_vertex: uv_pars_vertex,\n\t\tuv_vertex: uv_vertex,\n\t\tuv2_pars_fragment: uv2_pars_fragment,\n\t\tuv2_pars_vertex: uv2_pars_vertex,\n\t\tuv2_vertex: uv2_vertex,\n\t\tworldpos_vertex: worldpos_vertex,\n\n\t\tcube_frag: cube_frag,\n\t\tcube_vert: cube_vert,\n\t\tdepth_frag: depth_frag,\n\t\tdepth_vert: depth_vert,\n\t\tdistanceRGBA_frag: distanceRGBA_frag,\n\t\tdistanceRGBA_vert: distanceRGBA_vert,\n\t\tequirect_frag: equirect_frag,\n\t\tequirect_vert: equirect_vert,\n\t\tlinedashed_frag: linedashed_frag,\n\t\tlinedashed_vert: linedashed_vert,\n\t\tmeshbasic_frag: meshbasic_frag,\n\t\tmeshbasic_vert: meshbasic_vert,\n\t\tmeshlambert_frag: meshlambert_frag,\n\t\tmeshlambert_vert: meshlambert_vert,\n\t\tmeshphong_frag: meshphong_frag,\n\t\tmeshphong_vert: meshphong_vert,\n\t\tmeshphysical_frag: meshphysical_frag,\n\t\tmeshphysical_vert: meshphysical_vert,\n\t\tnormal_frag: normal_frag,\n\t\tnormal_vert: normal_vert,\n\t\tpoints_frag: points_frag,\n\t\tpoints_vert: points_vert,\n\t\tshadow_frag: shadow_frag,\n\t\tshadow_vert: shadow_vert\n\t};\n\n\t/**\n\t * Uniform Utilities\n\t */\n\n\tvar UniformsUtils = {\n\n\t\tmerge: function ( uniforms ) {\n\n\t\t\tvar merged = {};\n\n\t\t\tfor ( var u = 0; u < uniforms.length; u ++ ) {\n\n\t\t\t\tvar tmp = this.clone( uniforms[ u ] );\n\n\t\t\t\tfor ( var p in tmp ) {\n\n\t\t\t\t\tmerged[ p ] = tmp[ p ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn merged;\n\n\t\t},\n\n\t\tclone: function ( uniforms_src ) {\n\n\t\t\tvar uniforms_dst = {};\n\n\t\t\tfor ( var u in uniforms_src ) {\n\n\t\t\t\tuniforms_dst[ u ] = {};\n\n\t\t\t\tfor ( var p in uniforms_src[ u ] ) {\n\n\t\t\t\t\tvar parameter_src = uniforms_src[ u ][ p ];\n\n\t\t\t\t\tif ( parameter_src && ( parameter_src.isColor ||\n\t\t\t\t\t\tparameter_src.isMatrix3 || parameter_src.isMatrix4 ||\n\t\t\t\t\t\tparameter_src.isVector2 || parameter_src.isVector3 || parameter_src.isVector4 ||\n\t\t\t\t\t\tparameter_src.isTexture ) ) {\n\n\t\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.clone();\n\n\t\t\t\t\t} else if ( Array.isArray( parameter_src ) ) {\n\n\t\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src.slice();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tuniforms_dst[ u ][ p ] = parameter_src;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn uniforms_dst;\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar ColorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,\n\t\t'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,\n\t\t'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,\n\t\t'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,\n\t\t'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,\n\t\t'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,\n\t\t'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,\n\t\t'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,\n\t\t'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,\n\t\t'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,\n\t\t'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,\n\t\t'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,\n\t\t'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,\n\t\t'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,\n\t\t'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,\n\t\t'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,\n\t\t'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,\n\t\t'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,\n\t\t'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,\n\t\t'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,\n\t\t'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,\n\t\t'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,\n\t\t'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,\n\t\t'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };\n\n\tfunction Color( r, g, b ) {\n\n\t\tif ( g === undefined && b === undefined ) {\n\n\t\t\t// r is THREE.Color, hex or string\n\t\t\treturn this.set( r );\n\n\t\t}\n\n\t\treturn this.setRGB( r, g, b );\n\n\t}\n\n\tObject.assign( Color.prototype, {\n\n\t\tisColor: true,\n\n\t\tr: 1, g: 1, b: 1,\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value && value.isColor ) {\n\n\t\t\t\tthis.copy( value );\n\n\t\t\t} else if ( typeof value === 'number' ) {\n\n\t\t\t\tthis.setHex( value );\n\n\t\t\t} else if ( typeof value === 'string' ) {\n\n\t\t\t\tthis.setStyle( value );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetScalar: function ( scalar ) {\n\n\t\t\tthis.r = scalar;\n\t\t\tthis.g = scalar;\n\t\t\tthis.b = scalar;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetHex: function ( hex ) {\n\n\t\t\thex = Math.floor( hex );\n\n\t\t\tthis.r = ( hex >> 16 & 255 ) / 255;\n\t\t\tthis.g = ( hex >> 8 & 255 ) / 255;\n\t\t\tthis.b = ( hex & 255 ) / 255;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRGB: function ( r, g, b ) {\n\n\t\t\tthis.r = r;\n\t\t\tthis.g = g;\n\t\t\tthis.b = b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetHSL: function () {\n\n\t\t\tfunction hue2rgb( p, q, t ) {\n\n\t\t\t\tif ( t < 0 ) t += 1;\n\t\t\t\tif ( t > 1 ) t -= 1;\n\t\t\t\tif ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;\n\t\t\t\tif ( t < 1 / 2 ) return q;\n\t\t\t\tif ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );\n\t\t\t\treturn p;\n\n\t\t\t}\n\n\t\t\treturn function setHSL( h, s, l ) {\n\n\t\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\t\t\t\th = _Math.euclideanModulo( h, 1 );\n\t\t\t\ts = _Math.clamp( s, 0, 1 );\n\t\t\t\tl = _Math.clamp( l, 0, 1 );\n\n\t\t\t\tif ( s === 0 ) {\n\n\t\t\t\t\tthis.r = this.g = this.b = l;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );\n\t\t\t\t\tvar q = ( 2 * l ) - p;\n\n\t\t\t\t\tthis.r = hue2rgb( q, p, h + 1 / 3 );\n\t\t\t\t\tthis.g = hue2rgb( q, p, h );\n\t\t\t\t\tthis.b = hue2rgb( q, p, h - 1 / 3 );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tsetStyle: function ( style ) {\n\n\t\t\tfunction handleAlpha( string ) {\n\n\t\t\t\tif ( string === undefined ) return;\n\n\t\t\t\tif ( parseFloat( string ) < 1 ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tvar m;\n\n\t\t\tif ( m = /^((?:rgb|hsl)a?)\\(\\s*([^\\)]*)\\)/.exec( style ) ) {\n\n\t\t\t\t// rgb / hsl\n\n\t\t\t\tvar color;\n\t\t\t\tvar name = m[ 1 ];\n\t\t\t\tvar components = m[ 2 ];\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'rgb':\n\t\t\t\t\tcase 'rgba':\n\n\t\t\t\t\t\tif ( color = /^(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// rgb(255,0,0) rgba(255,0,0,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255;\n\t\t\t\t\t\t\tthis.g = Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255;\n\t\t\t\t\t\t\tthis.b = Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( color = /^(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)\n\t\t\t\t\t\t\tthis.r = Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100;\n\t\t\t\t\t\t\tthis.g = Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100;\n\t\t\t\t\t\t\tthis.b = Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\t\treturn this;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'hsl':\n\t\t\t\t\tcase 'hsla':\n\n\t\t\t\t\t\tif ( color = /^([0-9]*\\.?[0-9]+)\\s*,\\s*(\\d+)\\%\\s*,\\s*(\\d+)\\%\\s*(,\\s*([0-9]*\\.?[0-9]+)\\s*)?$/.exec( components ) ) {\n\n\t\t\t\t\t\t\t// hsl(120,50%,50%) hsla(120,50%,50%,0.5)\n\t\t\t\t\t\t\tvar h = parseFloat( color[ 1 ] ) / 360;\n\t\t\t\t\t\t\tvar s = parseInt( color[ 2 ], 10 ) / 100;\n\t\t\t\t\t\t\tvar l = parseInt( color[ 3 ], 10 ) / 100;\n\n\t\t\t\t\t\t\thandleAlpha( color[ 5 ] );\n\n\t\t\t\t\t\t\treturn this.setHSL( h, s, l );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t} else if ( m = /^\\#([A-Fa-f0-9]+)$/.exec( style ) ) {\n\n\t\t\t\t// hex color\n\n\t\t\t\tvar hex = m[ 1 ];\n\t\t\t\tvar size = hex.length;\n\n\t\t\t\tif ( size === 3 ) {\n\n\t\t\t\t\t// #ff0\n\t\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 0 ), 16 ) / 255;\n\t\t\t\t\tthis.g = parseInt( hex.charAt( 1 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\t\tthis.b = parseInt( hex.charAt( 2 ) + hex.charAt( 2 ), 16 ) / 255;\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t} else if ( size === 6 ) {\n\n\t\t\t\t\t// #ff0000\n\t\t\t\t\tthis.r = parseInt( hex.charAt( 0 ) + hex.charAt( 1 ), 16 ) / 255;\n\t\t\t\t\tthis.g = parseInt( hex.charAt( 2 ) + hex.charAt( 3 ), 16 ) / 255;\n\t\t\t\t\tthis.b = parseInt( hex.charAt( 4 ) + hex.charAt( 5 ), 16 ) / 255;\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( style && style.length > 0 ) {\n\n\t\t\t\t// color keywords\n\t\t\t\tvar hex = ColorKeywords[ style ];\n\n\t\t\t\tif ( hex !== undefined ) {\n\n\t\t\t\t\t// red\n\t\t\t\t\tthis.setHex( hex );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// unknown color\n\t\t\t\t\tconsole.warn( 'THREE.Color: Unknown color ' + style );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.r, this.g, this.b );\n\n\t\t},\n\n\t\tcopy: function ( color ) {\n\n\t\t\tthis.r = color.r;\n\t\t\tthis.g = color.g;\n\t\t\tthis.b = color.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyGammaToLinear: function ( color, gammaFactor ) {\n\n\t\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\t\tthis.r = Math.pow( color.r, gammaFactor );\n\t\t\tthis.g = Math.pow( color.g, gammaFactor );\n\t\t\tthis.b = Math.pow( color.b, gammaFactor );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyLinearToGamma: function ( color, gammaFactor ) {\n\n\t\t\tif ( gammaFactor === undefined ) gammaFactor = 2.0;\n\n\t\t\tvar safeInverse = ( gammaFactor > 0 ) ? ( 1.0 / gammaFactor ) : 1.0;\n\n\t\t\tthis.r = Math.pow( color.r, safeInverse );\n\t\t\tthis.g = Math.pow( color.g, safeInverse );\n\t\t\tthis.b = Math.pow( color.b, safeInverse );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tconvertGammaToLinear: function ( gammaFactor ) {\n\n\t\t\tthis.copyGammaToLinear( this, gammaFactor );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tconvertLinearToGamma: function ( gammaFactor ) {\n\n\t\t\tthis.copyLinearToGamma( this, gammaFactor );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetHex: function () {\n\n\t\t\treturn ( this.r * 255 ) << 16 ^ ( this.g * 255 ) << 8 ^ ( this.b * 255 ) << 0;\n\n\t\t},\n\n\t\tgetHexString: function () {\n\n\t\t\treturn ( '000000' + this.getHex().toString( 16 ) ).slice( - 6 );\n\n\t\t},\n\n\t\tgetHSL: function ( target ) {\n\n\t\t\t// h,s,l ranges are in 0.0 - 1.0\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Color: .getHSL() target is now required' );\n\t\t\t\ttarget = { h: 0, s: 0, l: 0 };\n\n\t\t\t}\n\n\t\t\tvar r = this.r, g = this.g, b = this.b;\n\n\t\t\tvar max = Math.max( r, g, b );\n\t\t\tvar min = Math.min( r, g, b );\n\n\t\t\tvar hue, saturation;\n\t\t\tvar lightness = ( min + max ) / 2.0;\n\n\t\t\tif ( min === max ) {\n\n\t\t\t\thue = 0;\n\t\t\t\tsaturation = 0;\n\n\t\t\t} else {\n\n\t\t\t\tvar delta = max - min;\n\n\t\t\t\tsaturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );\n\n\t\t\t\tswitch ( max ) {\n\n\t\t\t\t\tcase r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;\n\t\t\t\t\tcase g: hue = ( b - r ) / delta + 2; break;\n\t\t\t\t\tcase b: hue = ( r - g ) / delta + 4; break;\n\n\t\t\t\t}\n\n\t\t\t\thue /= 6;\n\n\t\t\t}\n\n\t\t\ttarget.h = hue;\n\t\t\ttarget.s = saturation;\n\t\t\ttarget.l = lightness;\n\n\t\t\treturn target;\n\n\t\t},\n\n\t\tgetStyle: function () {\n\n\t\t\treturn 'rgb(' + ( ( this.r * 255 ) | 0 ) + ',' + ( ( this.g * 255 ) | 0 ) + ',' + ( ( this.b * 255 ) | 0 ) + ')';\n\n\t\t},\n\n\t\toffsetHSL: function () {\n\n\t\t\tvar hsl = {};\n\n\t\t\treturn function ( h, s, l ) {\n\n\t\t\t\tthis.getHSL( hsl );\n\n\t\t\t\thsl.h += h; hsl.s += s; hsl.l += l;\n\n\t\t\t\tthis.setHSL( hsl.h, hsl.s, hsl.l );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tadd: function ( color ) {\n\n\t\t\tthis.r += color.r;\n\t\t\tthis.g += color.g;\n\t\t\tthis.b += color.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddColors: function ( color1, color2 ) {\n\n\t\t\tthis.r = color1.r + color2.r;\n\t\t\tthis.g = color1.g + color2.g;\n\t\t\tthis.b = color1.b + color2.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddScalar: function ( s ) {\n\n\t\t\tthis.r += s;\n\t\t\tthis.g += s;\n\t\t\tthis.b += s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsub: function ( color ) {\n\n\t\t\tthis.r = Math.max( 0, this.r - color.r );\n\t\t\tthis.g = Math.max( 0, this.g - color.g );\n\t\t\tthis.b = Math.max( 0, this.b - color.b );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiply: function ( color ) {\n\n\t\t\tthis.r *= color.r;\n\t\t\tthis.g *= color.g;\n\t\t\tthis.b *= color.b;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmultiplyScalar: function ( s ) {\n\n\t\t\tthis.r *= s;\n\t\t\tthis.g *= s;\n\t\t\tthis.b *= s;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tlerp: function ( color, alpha ) {\n\n\t\t\tthis.r += ( color.r - this.r ) * alpha;\n\t\t\tthis.g += ( color.g - this.g ) * alpha;\n\t\t\tthis.b += ( color.b - this.b ) * alpha;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( c ) {\n\n\t\t\treturn ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );\n\n\t\t},\n\n\t\tfromArray: function ( array, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.r = array[ offset ];\n\t\t\tthis.g = array[ offset + 1 ];\n\t\t\tthis.b = array[ offset + 2 ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this.r;\n\t\t\tarray[ offset + 1 ] = this.g;\n\t\t\tarray[ offset + 2 ] = this.b;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\treturn this.getHex();\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * Uniforms library for shared webgl shaders\n\t */\n\n\tvar UniformsLib = {\n\n\t\tcommon: {\n\n\t\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\t\topacity: { value: 1.0 },\n\n\t\t\tmap: { value: null },\n\t\t\tuvTransform: { value: new Matrix3() },\n\n\t\t\talphaMap: { value: null },\n\n\t\t},\n\n\t\tspecularmap: {\n\n\t\t\tspecularMap: { value: null },\n\n\t\t},\n\n\t\tenvmap: {\n\n\t\t\tenvMap: { value: null },\n\t\t\tflipEnvMap: { value: - 1 },\n\t\t\treflectivity: { value: 1.0 },\n\t\t\trefractionRatio: { value: 0.98 },\n\t\t\tmaxMipLevel: { value: 0 }\n\n\t\t},\n\n\t\taomap: {\n\n\t\t\taoMap: { value: null },\n\t\t\taoMapIntensity: { value: 1 }\n\n\t\t},\n\n\t\tlightmap: {\n\n\t\t\tlightMap: { value: null },\n\t\t\tlightMapIntensity: { value: 1 }\n\n\t\t},\n\n\t\temissivemap: {\n\n\t\t\temissiveMap: { value: null }\n\n\t\t},\n\n\t\tbumpmap: {\n\n\t\t\tbumpMap: { value: null },\n\t\t\tbumpScale: { value: 1 }\n\n\t\t},\n\n\t\tnormalmap: {\n\n\t\t\tnormalMap: { value: null },\n\t\t\tnormalScale: { value: new Vector2( 1, 1 ) }\n\n\t\t},\n\n\t\tdisplacementmap: {\n\n\t\t\tdisplacementMap: { value: null },\n\t\t\tdisplacementScale: { value: 1 },\n\t\t\tdisplacementBias: { value: 0 }\n\n\t\t},\n\n\t\troughnessmap: {\n\n\t\t\troughnessMap: { value: null }\n\n\t\t},\n\n\t\tmetalnessmap: {\n\n\t\t\tmetalnessMap: { value: null }\n\n\t\t},\n\n\t\tgradientmap: {\n\n\t\t\tgradientMap: { value: null }\n\n\t\t},\n\n\t\tfog: {\n\n\t\t\tfogDensity: { value: 0.00025 },\n\t\t\tfogNear: { value: 1 },\n\t\t\tfogFar: { value: 2000 },\n\t\t\tfogColor: { value: new Color( 0xffffff ) }\n\n\t\t},\n\n\t\tlights: {\n\n\t\t\tambientLightColor: { value: [] },\n\n\t\t\tdirectionalLights: { value: [], properties: {\n\t\t\t\tdirection: {},\n\t\t\t\tcolor: {},\n\n\t\t\t\tshadow: {},\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {}\n\t\t\t} },\n\n\t\t\tdirectionalShadowMap: { value: [] },\n\t\t\tdirectionalShadowMatrix: { value: [] },\n\n\t\t\tspotLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\tdirection: {},\n\t\t\t\tdistance: {},\n\t\t\t\tconeCos: {},\n\t\t\t\tpenumbraCos: {},\n\t\t\t\tdecay: {},\n\n\t\t\t\tshadow: {},\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {}\n\t\t\t} },\n\n\t\t\tspotShadowMap: { value: [] },\n\t\t\tspotShadowMatrix: { value: [] },\n\n\t\t\tpointLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\tdecay: {},\n\t\t\t\tdistance: {},\n\n\t\t\t\tshadow: {},\n\t\t\t\tshadowBias: {},\n\t\t\t\tshadowRadius: {},\n\t\t\t\tshadowMapSize: {},\n\t\t\t\tshadowCameraNear: {},\n\t\t\t\tshadowCameraFar: {}\n\t\t\t} },\n\n\t\t\tpointShadowMap: { value: [] },\n\t\t\tpointShadowMatrix: { value: [] },\n\n\t\t\themisphereLights: { value: [], properties: {\n\t\t\t\tdirection: {},\n\t\t\t\tskyColor: {},\n\t\t\t\tgroundColor: {}\n\t\t\t} },\n\n\t\t\t// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src\n\t\t\trectAreaLights: { value: [], properties: {\n\t\t\t\tcolor: {},\n\t\t\t\tposition: {},\n\t\t\t\twidth: {},\n\t\t\t\theight: {}\n\t\t\t} }\n\n\t\t},\n\n\t\tpoints: {\n\n\t\t\tdiffuse: { value: new Color( 0xeeeeee ) },\n\t\t\topacity: { value: 1.0 },\n\t\t\tsize: { value: 1.0 },\n\t\t\tscale: { value: 1.0 },\n\t\t\tmap: { value: null },\n\t\t\tuvTransform: { value: new Matrix3() }\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t */\n\n\tvar ShaderLib = {\n\n\t\tbasic: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.fog\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshbasic_vert,\n\t\t\tfragmentShader: ShaderChunk.meshbasic_frag\n\n\t\t},\n\n\t\tlambert: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshlambert_vert,\n\t\t\tfragmentShader: ShaderChunk.meshlambert_frag\n\n\t\t},\n\n\t\tphong: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.specularmap,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.gradientmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\t\tspecular: { value: new Color( 0x111111 ) },\n\t\t\t\t\tshininess: { value: 30 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshphong_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphong_frag\n\n\t\t},\n\n\t\tstandard: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.envmap,\n\t\t\t\tUniformsLib.aomap,\n\t\t\t\tUniformsLib.lightmap,\n\t\t\t\tUniformsLib.emissivemap,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\tUniformsLib.roughnessmap,\n\t\t\t\tUniformsLib.metalnessmap,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\tUniformsLib.lights,\n\t\t\t\t{\n\t\t\t\t\temissive: { value: new Color( 0x000000 ) },\n\t\t\t\t\troughness: { value: 0.5 },\n\t\t\t\t\tmetalness: { value: 0.5 },\n\t\t\t\t\tenvMapIntensity: { value: 1 } // temporary\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t\t},\n\n\t\tpoints: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.points,\n\t\t\t\tUniformsLib.fog\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.points_vert,\n\t\t\tfragmentShader: ShaderChunk.points_frag\n\n\t\t},\n\n\t\tdashed: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tscale: { value: 1 },\n\t\t\t\t\tdashSize: { value: 1 },\n\t\t\t\t\ttotalSize: { value: 2 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.linedashed_vert,\n\t\t\tfragmentShader: ShaderChunk.linedashed_frag\n\n\t\t},\n\n\t\tdepth: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.displacementmap\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.depth_vert,\n\t\t\tfragmentShader: ShaderChunk.depth_frag\n\n\t\t},\n\n\t\tnormal: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.bumpmap,\n\t\t\t\tUniformsLib.normalmap,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\t{\n\t\t\t\t\topacity: { value: 1.0 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.normal_vert,\n\t\t\tfragmentShader: ShaderChunk.normal_frag\n\n\t\t},\n\n\t\t/* -------------------------------------------------------------------------\n\t\t//\tCube map shader\n\t\t ------------------------------------------------------------------------- */\n\n\t\tcube: {\n\n\t\t\tuniforms: {\n\t\t\t\ttCube: { value: null },\n\t\t\t\ttFlip: { value: - 1 },\n\t\t\t\topacity: { value: 1.0 }\n\t\t\t},\n\n\t\t\tvertexShader: ShaderChunk.cube_vert,\n\t\t\tfragmentShader: ShaderChunk.cube_frag\n\n\t\t},\n\n\t\tequirect: {\n\n\t\t\tuniforms: {\n\t\t\t\ttEquirect: { value: null },\n\t\t\t},\n\n\t\t\tvertexShader: ShaderChunk.equirect_vert,\n\t\t\tfragmentShader: ShaderChunk.equirect_frag\n\n\t\t},\n\n\t\tdistanceRGBA: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.common,\n\t\t\t\tUniformsLib.displacementmap,\n\t\t\t\t{\n\t\t\t\t\treferencePosition: { value: new Vector3() },\n\t\t\t\t\tnearDistance: { value: 1 },\n\t\t\t\t\tfarDistance: { value: 1000 }\n\t\t\t\t}\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.distanceRGBA_vert,\n\t\t\tfragmentShader: ShaderChunk.distanceRGBA_frag\n\n\t\t},\n\n\t\tshadow: {\n\n\t\t\tuniforms: UniformsUtils.merge( [\n\t\t\t\tUniformsLib.lights,\n\t\t\t\tUniformsLib.fog,\n\t\t\t\t{\n\t\t\t\t\tcolor: { value: new Color( 0x00000 ) },\n\t\t\t\t\topacity: { value: 1.0 }\n\t\t\t\t},\n\t\t\t] ),\n\n\t\t\tvertexShader: ShaderChunk.shadow_vert,\n\t\t\tfragmentShader: ShaderChunk.shadow_frag\n\n\t\t}\n\n\t};\n\n\tShaderLib.physical = {\n\n\t\tuniforms: UniformsUtils.merge( [\n\t\t\tShaderLib.standard.uniforms,\n\t\t\t{\n\t\t\t\tclearCoat: { value: 0 },\n\t\t\t\tclearCoatRoughness: { value: 0 }\n\t\t\t}\n\t\t] ),\n\n\t\tvertexShader: ShaderChunk.meshphysical_vert,\n\t\tfragmentShader: ShaderChunk.meshphysical_frag\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLAnimation() {\n\n\t\tvar context = null;\n\t\tvar isAnimating = false;\n\t\tvar animationLoop = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tif ( isAnimating === false ) return;\n\n\t\t\tanimationLoop( time, frame );\n\n\t\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tstart: function () {\n\n\t\t\t\tif ( isAnimating === true ) return;\n\t\t\t\tif ( animationLoop === null ) return;\n\n\t\t\t\tcontext.requestAnimationFrame( onAnimationFrame );\n\n\t\t\t\tisAnimating = true;\n\n\t\t\t},\n\n\t\t\tstop: function () {\n\n\t\t\t\tisAnimating = false;\n\n\t\t\t},\n\n\t\t\tsetAnimationLoop: function ( callback ) {\n\n\t\t\t\tanimationLoop = callback;\n\n\t\t\t},\n\n\t\t\tsetContext: function ( value ) {\n\n\t\t\t\tcontext = value;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLAttributes( gl ) {\n\n\t\tvar buffers = new WeakMap();\n\n\t\tfunction createBuffer( attribute, bufferType ) {\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar usage = attribute.dynamic ? gl.DYNAMIC_DRAW : gl.STATIC_DRAW;\n\n\t\t\tvar buffer = gl.createBuffer();\n\n\t\t\tgl.bindBuffer( bufferType, buffer );\n\t\t\tgl.bufferData( bufferType, array, usage );\n\n\t\t\tattribute.onUploadCallback();\n\n\t\t\tvar type = gl.FLOAT;\n\n\t\t\tif ( array instanceof Float32Array ) {\n\n\t\t\t\ttype = gl.FLOAT;\n\n\t\t\t} else if ( array instanceof Float64Array ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLAttributes: Unsupported data buffer format: Float64Array.' );\n\n\t\t\t} else if ( array instanceof Uint16Array ) {\n\n\t\t\t\ttype = gl.UNSIGNED_SHORT;\n\n\t\t\t} else if ( array instanceof Int16Array ) {\n\n\t\t\t\ttype = gl.SHORT;\n\n\t\t\t} else if ( array instanceof Uint32Array ) {\n\n\t\t\t\ttype = gl.UNSIGNED_INT;\n\n\t\t\t} else if ( array instanceof Int32Array ) {\n\n\t\t\t\ttype = gl.INT;\n\n\t\t\t} else if ( array instanceof Int8Array ) {\n\n\t\t\t\ttype = gl.BYTE;\n\n\t\t\t} else if ( array instanceof Uint8Array ) {\n\n\t\t\t\ttype = gl.UNSIGNED_BYTE;\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tbuffer: buffer,\n\t\t\t\ttype: type,\n\t\t\t\tbytesPerElement: array.BYTES_PER_ELEMENT,\n\t\t\t\tversion: attribute.version\n\t\t\t};\n\n\t\t}\n\n\t\tfunction updateBuffer( buffer, attribute, bufferType ) {\n\n\t\t\tvar array = attribute.array;\n\t\t\tvar updateRange = attribute.updateRange;\n\n\t\t\tgl.bindBuffer( bufferType, buffer );\n\n\t\t\tif ( attribute.dynamic === false ) {\n\n\t\t\t\tgl.bufferData( bufferType, array, gl.STATIC_DRAW );\n\n\t\t\t} else if ( updateRange.count === - 1 ) {\n\n\t\t\t\t// Not using update ranges\n\n\t\t\t\tgl.bufferSubData( bufferType, 0, array );\n\n\t\t\t} else if ( updateRange.count === 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLObjects.updateBuffer: dynamic THREE.BufferAttribute marked as needsUpdate but updateRange.count is 0, ensure you are using set methods or updating manually.' );\n\n\t\t\t} else {\n\n\t\t\t\tgl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,\n\t\t\t\t\tarray.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );\n\n\t\t\t\tupdateRange.count = - 1; // reset range\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction get( attribute ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\treturn buffers.get( attribute );\n\n\t\t}\n\n\t\tfunction remove( attribute ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\tvar data = buffers.get( attribute );\n\n\t\t\tif ( data ) {\n\n\t\t\t\tgl.deleteBuffer( data.buffer );\n\n\t\t\t\tbuffers.delete( attribute );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction update( attribute, bufferType ) {\n\n\t\t\tif ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;\n\n\t\t\tvar data = buffers.get( attribute );\n\n\t\t\tif ( data === undefined ) {\n\n\t\t\t\tbuffers.set( attribute, createBuffer( attribute, bufferType ) );\n\n\t\t\t} else if ( data.version < attribute.version ) {\n\n\t\t\t\tupdateBuffer( data.buffer, attribute, bufferType );\n\n\t\t\t\tdata.version = attribute.version;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tupdate: update\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Euler( x, y, z, order ) {\n\n\t\tthis._x = x || 0;\n\t\tthis._y = y || 0;\n\t\tthis._z = z || 0;\n\t\tthis._order = order || Euler.DefaultOrder;\n\n\t}\n\n\tEuler.RotationOrders = [ 'XYZ', 'YZX', 'ZXY', 'XZY', 'YXZ', 'ZYX' ];\n\n\tEuler.DefaultOrder = 'XYZ';\n\n\tObject.defineProperties( Euler.prototype, {\n\n\t\tx: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._x;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._x = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\ty: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._y;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._y = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\tz: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._z;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._z = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t},\n\n\t\torder: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this._order;\n\n\t\t\t},\n\n\t\t\tset: function ( value ) {\n\n\t\t\t\tthis._order = value;\n\t\t\t\tthis.onChangeCallback();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Euler.prototype, {\n\n\t\tisEuler: true,\n\n\t\tset: function ( x, y, z, order ) {\n\n\t\t\tthis._x = x;\n\t\t\tthis._y = y;\n\t\t\tthis._z = z;\n\t\t\tthis._order = order || this._order;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this._x, this._y, this._z, this._order );\n\n\t\t},\n\n\t\tcopy: function ( euler ) {\n\n\t\t\tthis._x = euler._x;\n\t\t\tthis._y = euler._y;\n\t\t\tthis._z = euler._z;\n\t\t\tthis._order = euler._order;\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromRotationMatrix: function ( m, order, update ) {\n\n\t\t\tvar clamp = _Math.clamp;\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tvar te = m.elements;\n\t\t\tvar m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];\n\t\t\tvar m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];\n\t\t\tvar m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];\n\n\t\t\torder = order || this._order;\n\n\t\t\tif ( order === 'XYZ' ) {\n\n\t\t\t\tthis._y = Math.asin( clamp( m13, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m13 ) < 0.99999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t} else if ( order === 'YXZ' ) {\n\n\t\t\t\tthis._x = Math.asin( - clamp( m23, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m23 ) < 0.99999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\t\t\t\t\tthis._z = 0;\n\n\t\t\t\t}\n\n\t\t\t} else if ( order === 'ZXY' ) {\n\n\t\t\t\tthis._x = Math.asin( clamp( m32, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m32 ) < 0.99999 ) {\n\n\t\t\t\t\tthis._y = Math.atan2( - m31, m33 );\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._y = 0;\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t}\n\n\t\t\t} else if ( order === 'ZYX' ) {\n\n\t\t\t\tthis._y = Math.asin( - clamp( m31, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m31 ) < 0.99999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m33 );\n\t\t\t\t\tthis._z = Math.atan2( m21, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._z = Math.atan2( - m12, m22 );\n\n\t\t\t\t}\n\n\t\t\t} else if ( order === 'YZX' ) {\n\n\t\t\t\tthis._z = Math.asin( clamp( m21, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m21 ) < 0.99999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m22 );\n\t\t\t\t\tthis._y = Math.atan2( - m31, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = 0;\n\t\t\t\t\tthis._y = Math.atan2( m13, m33 );\n\n\t\t\t\t}\n\n\t\t\t} else if ( order === 'XZY' ) {\n\n\t\t\t\tthis._z = Math.asin( - clamp( m12, - 1, 1 ) );\n\n\t\t\t\tif ( Math.abs( m12 ) < 0.99999 ) {\n\n\t\t\t\t\tthis._x = Math.atan2( m32, m22 );\n\t\t\t\t\tthis._y = Math.atan2( m13, m11 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis._x = Math.atan2( - m23, m33 );\n\t\t\t\t\tthis._y = 0;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Euler: .setFromRotationMatrix() given unsupported order: ' + order );\n\n\t\t\t}\n\n\t\t\tthis._order = order;\n\n\t\t\tif ( update !== false ) this.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromQuaternion: function () {\n\n\t\t\tvar matrix = new Matrix4();\n\n\t\t\treturn function setFromQuaternion( q, order, update ) {\n\n\t\t\t\tmatrix.makeRotationFromQuaternion( q );\n\n\t\t\t\treturn this.setFromRotationMatrix( matrix, order, update );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tsetFromVector3: function ( v, order ) {\n\n\t\t\treturn this.set( v.x, v.y, v.z, order || this._order );\n\n\t\t},\n\n\t\treorder: function () {\n\n\t\t\t// WARNING: this discards revolution information -bhouston\n\n\t\t\tvar q = new Quaternion();\n\n\t\t\treturn function reorder( newOrder ) {\n\n\t\t\t\tq.setFromEuler( this );\n\n\t\t\t\treturn this.setFromQuaternion( q, newOrder );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tequals: function ( euler ) {\n\n\t\t\treturn ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );\n\n\t\t},\n\n\t\tfromArray: function ( array ) {\n\n\t\t\tthis._x = array[ 0 ];\n\t\t\tthis._y = array[ 1 ];\n\t\t\tthis._z = array[ 2 ];\n\t\t\tif ( array[ 3 ] !== undefined ) this._order = array[ 3 ];\n\n\t\t\tthis.onChangeCallback();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoArray: function ( array, offset ) {\n\n\t\t\tif ( array === undefined ) array = [];\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tarray[ offset ] = this._x;\n\t\t\tarray[ offset + 1 ] = this._y;\n\t\t\tarray[ offset + 2 ] = this._z;\n\t\t\tarray[ offset + 3 ] = this._order;\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\ttoVector3: function ( optionalResult ) {\n\n\t\t\tif ( optionalResult ) {\n\n\t\t\t\treturn optionalResult.set( this._x, this._y, this._z );\n\n\t\t\t} else {\n\n\t\t\t\treturn new Vector3( this._x, this._y, this._z );\n\n\t\t\t}\n\n\t\t},\n\n\t\tonChange: function ( callback ) {\n\n\t\t\tthis.onChangeCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tonChangeCallback: function () {}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Layers() {\n\n\t\tthis.mask = 1 | 0;\n\n\t}\n\n\tObject.assign( Layers.prototype, {\n\n\t\tset: function ( channel ) {\n\n\t\t\tthis.mask = 1 << channel | 0;\n\n\t\t},\n\n\t\tenable: function ( channel ) {\n\n\t\t\tthis.mask |= 1 << channel | 0;\n\n\t\t},\n\n\t\ttoggle: function ( channel ) {\n\n\t\t\tthis.mask ^= 1 << channel | 0;\n\n\t\t},\n\n\t\tdisable: function ( channel ) {\n\n\t\t\tthis.mask &= ~ ( 1 << channel | 0 );\n\n\t\t},\n\n\t\ttest: function ( layers ) {\n\n\t\t\treturn ( this.mask & layers.mask ) !== 0;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author elephantatwork / www.elephantatwork.ch\n\t */\n\n\tvar object3DId = 0;\n\n\tfunction Object3D() {\n\n\t\tObject.defineProperty( this, 'id', { value: object3DId ++ } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Object3D';\n\n\t\tthis.parent = null;\n\t\tthis.children = [];\n\n\t\tthis.up = Object3D.DefaultUp.clone();\n\n\t\tvar position = new Vector3();\n\t\tvar rotation = new Euler();\n\t\tvar quaternion = new Quaternion();\n\t\tvar scale = new Vector3( 1, 1, 1 );\n\n\t\tfunction onRotationChange() {\n\n\t\t\tquaternion.setFromEuler( rotation, false );\n\n\t\t}\n\n\t\tfunction onQuaternionChange() {\n\n\t\t\trotation.setFromQuaternion( quaternion, undefined, false );\n\n\t\t}\n\n\t\trotation.onChange( onRotationChange );\n\t\tquaternion.onChange( onQuaternionChange );\n\n\t\tObject.defineProperties( this, {\n\t\t\tposition: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: position\n\t\t\t},\n\t\t\trotation: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: rotation\n\t\t\t},\n\t\t\tquaternion: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: quaternion\n\t\t\t},\n\t\t\tscale: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: scale\n\t\t\t},\n\t\t\tmodelViewMatrix: {\n\t\t\t\tvalue: new Matrix4()\n\t\t\t},\n\t\t\tnormalMatrix: {\n\t\t\t\tvalue: new Matrix3()\n\t\t\t}\n\t\t} );\n\n\t\tthis.matrix = new Matrix4();\n\t\tthis.matrixWorld = new Matrix4();\n\n\t\tthis.matrixAutoUpdate = Object3D.DefaultMatrixAutoUpdate;\n\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\tthis.layers = new Layers();\n\t\tthis.visible = true;\n\n\t\tthis.castShadow = false;\n\t\tthis.receiveShadow = false;\n\n\t\tthis.frustumCulled = true;\n\t\tthis.renderOrder = 0;\n\n\t\tthis.userData = {};\n\n\t}\n\n\tObject3D.DefaultUp = new Vector3( 0, 1, 0 );\n\tObject3D.DefaultMatrixAutoUpdate = true;\n\n\tObject3D.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\t\tconstructor: Object3D,\n\n\t\tisObject3D: true,\n\n\t\tonBeforeRender: function () {},\n\t\tonAfterRender: function () {},\n\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tthis.matrix.multiplyMatrices( matrix, this.matrix );\n\n\t\t\tthis.matrix.decompose( this.position, this.quaternion, this.scale );\n\n\t\t},\n\n\t\tapplyQuaternion: function ( q ) {\n\n\t\t\tthis.quaternion.premultiply( q );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRotationFromAxisAngle: function ( axis, angle ) {\n\n\t\t\t// assumes axis is normalized\n\n\t\t\tthis.quaternion.setFromAxisAngle( axis, angle );\n\n\t\t},\n\n\t\tsetRotationFromEuler: function ( euler ) {\n\n\t\t\tthis.quaternion.setFromEuler( euler, true );\n\n\t\t},\n\n\t\tsetRotationFromMatrix: function ( m ) {\n\n\t\t\t// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)\n\n\t\t\tthis.quaternion.setFromRotationMatrix( m );\n\n\t\t},\n\n\t\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t\t// assumes q is normalized\n\n\t\t\tthis.quaternion.copy( q );\n\n\t\t},\n\n\t\trotateOnAxis: function () {\n\n\t\t\t// rotate object on axis in object space\n\t\t\t// axis is assumed to be normalized\n\n\t\t\tvar q1 = new Quaternion();\n\n\t\t\treturn function rotateOnAxis( axis, angle ) {\n\n\t\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\t\tthis.quaternion.multiply( q1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateOnWorldAxis: function () {\n\n\t\t\t// rotate object on axis in world space\n\t\t\t// axis is assumed to be normalized\n\t\t\t// method assumes no rotated parent\n\n\t\t\tvar q1 = new Quaternion();\n\n\t\t\treturn function rotateOnWorldAxis( axis, angle ) {\n\n\t\t\t\tq1.setFromAxisAngle( axis, angle );\n\n\t\t\t\tthis.quaternion.premultiply( q1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateX: function () {\n\n\t\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\t\treturn function rotateX( angle ) {\n\n\t\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateY: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\t\treturn function rotateY( angle ) {\n\n\t\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateZ: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\t\treturn function rotateZ( angle ) {\n\n\t\t\t\treturn this.rotateOnAxis( v1, angle );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateOnAxis: function () {\n\n\t\t\t// translate object by distance along axis in object space\n\t\t\t// axis is assumed to be normalized\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function translateOnAxis( axis, distance ) {\n\n\t\t\t\tv1.copy( axis ).applyQuaternion( this.quaternion );\n\n\t\t\t\tthis.position.add( v1.multiplyScalar( distance ) );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateX: function () {\n\n\t\t\tvar v1 = new Vector3( 1, 0, 0 );\n\n\t\t\treturn function translateX( distance ) {\n\n\t\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateY: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 1, 0 );\n\n\t\t\treturn function translateY( distance ) {\n\n\t\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslateZ: function () {\n\n\t\t\tvar v1 = new Vector3( 0, 0, 1 );\n\n\t\t\treturn function translateZ( distance ) {\n\n\t\t\t\treturn this.translateOnAxis( v1, distance );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlocalToWorld: function ( vector ) {\n\n\t\t\treturn vector.applyMatrix4( this.matrixWorld );\n\n\t\t},\n\n\t\tworldToLocal: function () {\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function worldToLocal( vector ) {\n\n\t\t\t\treturn vector.applyMatrix4( m1.getInverse( this.matrixWorld ) );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlookAt: function () {\n\n\t\t\t// This method does not support objects with rotated and/or translated parent(s)\n\n\t\t\tvar m1 = new Matrix4();\n\t\t\tvar vector = new Vector3();\n\n\t\t\treturn function lookAt( x, y, z ) {\n\n\t\t\t\tif ( x.isVector3 ) {\n\n\t\t\t\t\tvector.copy( x );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvector.set( x, y, z );\n\n\t\t\t\t}\n\n\t\t\t\tif ( this.isCamera ) {\n\n\t\t\t\t\tm1.lookAt( this.position, vector, this.up );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tm1.lookAt( vector, this.position, this.up );\n\n\t\t\t\t}\n\n\t\t\t\tthis.quaternion.setFromRotationMatrix( m1 );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tadd: function ( object ) {\n\n\t\t\tif ( arguments.length > 1 ) {\n\n\t\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\t\tthis.add( arguments[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tif ( object === this ) {\n\n\t\t\t\tconsole.error( \"THREE.Object3D.add: object can't be added as a child of itself.\", object );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tif ( ( object && object.isObject3D ) ) {\n\n\t\t\t\tif ( object.parent !== null ) {\n\n\t\t\t\t\tobject.parent.remove( object );\n\n\t\t\t\t}\n\n\t\t\t\tobject.parent = this;\n\t\t\t\tobject.dispatchEvent( { type: 'added' } );\n\n\t\t\t\tthis.children.push( object );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( \"THREE.Object3D.add: object not an instance of THREE.Object3D.\", object );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tremove: function ( object ) {\n\n\t\t\tif ( arguments.length > 1 ) {\n\n\t\t\t\tfor ( var i = 0; i < arguments.length; i ++ ) {\n\n\t\t\t\t\tthis.remove( arguments[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar index = this.children.indexOf( object );\n\n\t\t\tif ( index !== - 1 ) {\n\n\t\t\t\tobject.parent = null;\n\n\t\t\t\tobject.dispatchEvent( { type: 'removed' } );\n\n\t\t\t\tthis.children.splice( index, 1 );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetObjectById: function ( id ) {\n\n\t\t\treturn this.getObjectByProperty( 'id', id );\n\n\t\t},\n\n\t\tgetObjectByName: function ( name ) {\n\n\t\t\treturn this.getObjectByProperty( 'name', name );\n\n\t\t},\n\n\t\tgetObjectByProperty: function ( name, value ) {\n\n\t\t\tif ( this[ name ] === value ) return this;\n\n\t\t\tfor ( var i = 0, l = this.children.length; i < l; i ++ ) {\n\n\t\t\t\tvar child = this.children[ i ];\n\t\t\t\tvar object = child.getObjectByProperty( name, value );\n\n\t\t\t\tif ( object !== undefined ) {\n\n\t\t\t\t\treturn object;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t},\n\n\t\tgetWorldPosition: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldPosition() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\treturn target.setFromMatrixPosition( this.matrixWorld );\n\n\t\t},\n\n\t\tgetWorldQuaternion: function () {\n\n\t\t\tvar position = new Vector3();\n\t\t\tvar scale = new Vector3();\n\n\t\t\treturn function getWorldQuaternion( target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldQuaternion() target is now required' );\n\t\t\t\t\ttarget = new Quaternion();\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\t\tthis.matrixWorld.decompose( position, target, scale );\n\n\t\t\t\treturn target;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetWorldScale: function () {\n\n\t\t\tvar position = new Vector3();\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function getWorldScale( target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldScale() target is now required' );\n\t\t\t\t\ttarget = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\t\tthis.matrixWorld.decompose( position, quaternion, target );\n\n\t\t\t\treturn target;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetWorldDirection: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function getWorldDirection( target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Object3D: .getWorldDirection() target is now required' );\n\t\t\t\t\ttarget = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\t\treturn target.set( 0, 0, 1 ).applyQuaternion( quaternion );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\traycast: function () {},\n\n\t\ttraverse: function ( callback ) {\n\n\t\t\tcallback( this );\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].traverse( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttraverseVisible: function ( callback ) {\n\n\t\t\tif ( this.visible === false ) return;\n\n\t\t\tcallback( this );\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].traverseVisible( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttraverseAncestors: function ( callback ) {\n\n\t\t\tvar parent = this.parent;\n\n\t\t\tif ( parent !== null ) {\n\n\t\t\t\tcallback( parent );\n\n\t\t\t\tparent.traverseAncestors( callback );\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMatrix: function () {\n\n\t\t\tthis.matrix.compose( this.position, this.quaternion, this.scale );\n\n\t\t\tthis.matrixWorldNeedsUpdate = true;\n\n\t\t},\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tif ( this.matrixAutoUpdate ) this.updateMatrix();\n\n\t\t\tif ( this.matrixWorldNeedsUpdate || force ) {\n\n\t\t\t\tif ( this.parent === null ) {\n\n\t\t\t\t\tthis.matrixWorld.copy( this.matrix );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );\n\n\t\t\t\t}\n\n\t\t\t\tthis.matrixWorldNeedsUpdate = false;\n\n\t\t\t\tforce = true;\n\n\t\t\t}\n\n\t\t\t// update children\n\n\t\t\tvar children = this.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tchildren[ i ].updateMatrixWorld( force );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\t// meta is a string when called from JSON.stringify\n\t\t\tvar isRootObject = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tvar output = {};\n\n\t\t\t// meta is a hash used to collect geometries, materials.\n\t\t\t// not providing it implies that this is the root object\n\t\t\t// being serialized.\n\t\t\tif ( isRootObject ) {\n\n\t\t\t\t// initialize meta obj\n\t\t\t\tmeta = {\n\t\t\t\t\tgeometries: {},\n\t\t\t\t\tmaterials: {},\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {},\n\t\t\t\t\tshapes: {}\n\t\t\t\t};\n\n\t\t\t\toutput.metadata = {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Object',\n\t\t\t\t\tgenerator: 'Object3D.toJSON'\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\t// standard Object3D serialization\n\n\t\t\tvar object = {};\n\n\t\t\tobject.uuid = this.uuid;\n\t\t\tobject.type = this.type;\n\n\t\t\tif ( this.name !== '' ) object.name = this.name;\n\t\t\tif ( this.castShadow === true ) object.castShadow = true;\n\t\t\tif ( this.receiveShadow === true ) object.receiveShadow = true;\n\t\t\tif ( this.visible === false ) object.visible = false;\n\t\t\tif ( this.frustumCulled === false ) object.frustumCulled = false;\n\t\t\tif ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;\n\t\t\tif ( JSON.stringify( this.userData ) !== '{}' ) object.userData = this.userData;\n\n\t\t\tobject.matrix = this.matrix.toArray();\n\n\t\t\tif ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;\n\n\t\t\t//\n\n\t\t\tfunction serialize( library, element ) {\n\n\t\t\t\tif ( library[ element.uuid ] === undefined ) {\n\n\t\t\t\t\tlibrary[ element.uuid ] = element.toJSON( meta );\n\n\t\t\t\t}\n\n\t\t\t\treturn element.uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.geometry !== undefined ) {\n\n\t\t\t\tobject.geometry = serialize( meta.geometries, this.geometry );\n\n\t\t\t\tvar parameters = this.geometry.parameters;\n\n\t\t\t\tif ( parameters !== undefined && parameters.shapes !== undefined ) {\n\n\t\t\t\t\tvar shapes = parameters.shapes;\n\n\t\t\t\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\t\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\t\t\t\tserialize( meta.shapes, shape );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tserialize( meta.shapes, shapes );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.material !== undefined ) {\n\n\t\t\t\tif ( Array.isArray( this.material ) ) {\n\n\t\t\t\t\tvar uuids = [];\n\n\t\t\t\t\tfor ( var i = 0, l = this.material.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tuuids.push( serialize( meta.materials, this.material[ i ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tobject.material = uuids;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tobject.material = serialize( meta.materials, this.material );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( this.children.length > 0 ) {\n\n\t\t\t\tobject.children = [];\n\n\t\t\t\tfor ( var i = 0; i < this.children.length; i ++ ) {\n\n\t\t\t\t\tobject.children.push( this.children[ i ].toJSON( meta ).object );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( isRootObject ) {\n\n\t\t\t\tvar geometries = extractFromCache( meta.geometries );\n\t\t\t\tvar materials = extractFromCache( meta.materials );\n\t\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\t\tvar images = extractFromCache( meta.images );\n\t\t\t\tvar shapes = extractFromCache( meta.shapes );\n\n\t\t\t\tif ( geometries.length > 0 ) output.geometries = geometries;\n\t\t\t\tif ( materials.length > 0 ) output.materials = materials;\n\t\t\t\tif ( textures.length > 0 ) output.textures = textures;\n\t\t\t\tif ( images.length > 0 ) output.images = images;\n\t\t\t\tif ( shapes.length > 0 ) output.shapes = shapes;\n\n\t\t\t}\n\n\t\t\toutput.object = object;\n\n\t\t\treturn output;\n\n\t\t\t// extract data from the cache hash\n\t\t\t// remove metadata on each item\n\t\t\t// and return as array\n\t\t\tfunction extractFromCache( cache ) {\n\n\t\t\t\tvar values = [];\n\t\t\t\tfor ( var key in cache ) {\n\n\t\t\t\t\tvar data = cache[ key ];\n\t\t\t\t\tdelete data.metadata;\n\t\t\t\t\tvalues.push( data );\n\n\t\t\t\t}\n\t\t\t\treturn values;\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function ( recursive ) {\n\n\t\t\treturn new this.constructor().copy( this, recursive );\n\n\t\t},\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tif ( recursive === undefined ) recursive = true;\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.up.copy( source.up );\n\n\t\t\tthis.position.copy( source.position );\n\t\t\tthis.quaternion.copy( source.quaternion );\n\t\t\tthis.scale.copy( source.scale );\n\n\t\t\tthis.matrix.copy( source.matrix );\n\t\t\tthis.matrixWorld.copy( source.matrixWorld );\n\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\t\t\tthis.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;\n\n\t\t\tthis.layers.mask = source.layers.mask;\n\t\t\tthis.visible = source.visible;\n\n\t\t\tthis.castShadow = source.castShadow;\n\t\t\tthis.receiveShadow = source.receiveShadow;\n\n\t\t\tthis.frustumCulled = source.frustumCulled;\n\t\t\tthis.renderOrder = source.renderOrder;\n\n\t\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\t\tif ( recursive === true ) {\n\n\t\t\t\tfor ( var i = 0; i < source.children.length; i ++ ) {\n\n\t\t\t\t\tvar child = source.children[ i ];\n\t\t\t\t\tthis.add( child.clone() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author WestLangley / http://github.com/WestLangley\n\t*/\n\n\tfunction Camera() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Camera';\n\n\t\tthis.matrixWorldInverse = new Matrix4();\n\t\tthis.projectionMatrix = new Matrix4();\n\n\t}\n\n\tCamera.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Camera,\n\n\t\tisCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.matrixWorldInverse.copy( source.matrixWorldInverse );\n\t\t\tthis.projectionMatrix.copy( source.projectionMatrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetWorldDirection: function () {\n\n\t\t\tvar quaternion = new Quaternion();\n\n\t\t\treturn function getWorldDirection( target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Camera: .getWorldDirection() target is now required' );\n\t\t\t\t\ttarget = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tthis.getWorldQuaternion( quaternion );\n\n\t\t\t\treturn target.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tthis.matrixWorldInverse.getInverse( this.matrixWorld );\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author arose / http://github.com/arose\n\t */\n\n\tfunction OrthographicCamera( left, right, top, bottom, near, far ) {\n\n\t\tCamera.call( this );\n\n\t\tthis.type = 'OrthographicCamera';\n\n\t\tthis.zoom = 1;\n\t\tthis.view = null;\n\n\t\tthis.left = left;\n\t\tthis.right = right;\n\t\tthis.top = top;\n\t\tthis.bottom = bottom;\n\n\t\tthis.near = ( near !== undefined ) ? near : 0.1;\n\t\tthis.far = ( far !== undefined ) ? far : 2000;\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tOrthographicCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\t\tconstructor: OrthographicCamera,\n\n\t\tisOrthographicCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.left = source.left;\n\t\t\tthis.right = source.right;\n\t\t\tthis.top = source.top;\n\t\t\tthis.bottom = source.bottom;\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\n\t\t\tthis.zoom = source.zoom;\n\t\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\t\tif ( this.view === null ) {\n\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tclearViewOffset: function () {\n\n\t\t\tif ( this.view !== null ) {\n\n\t\t\t\tthis.view.enabled = false;\n\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tupdateProjectionMatrix: function () {\n\n\t\t\tvar dx = ( this.right - this.left ) / ( 2 * this.zoom );\n\t\t\tvar dy = ( this.top - this.bottom ) / ( 2 * this.zoom );\n\t\t\tvar cx = ( this.right + this.left ) / 2;\n\t\t\tvar cy = ( this.top + this.bottom ) / 2;\n\n\t\t\tvar left = cx - dx;\n\t\t\tvar right = cx + dx;\n\t\t\tvar top = cy + dy;\n\t\t\tvar bottom = cy - dy;\n\n\t\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\t\tvar zoomW = this.zoom / ( this.view.width / this.view.fullWidth );\n\t\t\t\tvar zoomH = this.zoom / ( this.view.height / this.view.fullHeight );\n\t\t\t\tvar scaleW = ( this.right - this.left ) / this.view.width;\n\t\t\t\tvar scaleH = ( this.top - this.bottom ) / this.view.height;\n\n\t\t\t\tleft += scaleW * ( this.view.offsetX / zoomW );\n\t\t\t\tright = left + scaleW * ( this.view.width / zoomW );\n\t\t\t\ttop -= scaleH * ( this.view.offsetY / zoomH );\n\t\t\t\tbottom = top - scaleH * ( this.view.height / zoomH );\n\n\t\t\t}\n\n\t\t\tthis.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.zoom = this.zoom;\n\t\t\tdata.object.left = this.left;\n\t\t\tdata.object.right = this.right;\n\t\t\tdata.object.top = this.top;\n\t\t\tdata.object.bottom = this.bottom;\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\n\t\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Face3( a, b, c, normal, color, materialIndex ) {\n\n\t\tthis.a = a;\n\t\tthis.b = b;\n\t\tthis.c = c;\n\n\t\tthis.normal = ( normal && normal.isVector3 ) ? normal : new Vector3();\n\t\tthis.vertexNormals = Array.isArray( normal ) ? normal : [];\n\n\t\tthis.color = ( color && color.isColor ) ? color : new Color();\n\t\tthis.vertexColors = Array.isArray( color ) ? color : [];\n\n\t\tthis.materialIndex = materialIndex !== undefined ? materialIndex : 0;\n\n\t}\n\n\tObject.assign( Face3.prototype, {\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.a = source.a;\n\t\t\tthis.b = source.b;\n\t\t\tthis.c = source.c;\n\n\t\t\tthis.normal.copy( source.normal );\n\t\t\tthis.color.copy( source.color );\n\n\t\t\tthis.materialIndex = source.materialIndex;\n\n\t\t\tfor ( var i = 0, il = source.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertexNormals[ i ] = source.vertexNormals[ i ].clone();\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0, il = source.vertexColors.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertexColors[ i ] = source.vertexColors[ i ].clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author kile / http://kile.stravaganza.org/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author bhouston / http://clara.io\n\t */\n\n\tvar geometryId = 0; // Geometry uses even numbers as Id\n\n\tfunction Geometry() {\n\n\t\tObject.defineProperty( this, 'id', { value: geometryId += 2 } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Geometry';\n\n\t\tthis.vertices = [];\n\t\tthis.colors = [];\n\t\tthis.faces = [];\n\t\tthis.faceVertexUvs = [[]];\n\n\t\tthis.morphTargets = [];\n\t\tthis.morphNormals = [];\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\tthis.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.elementsNeedUpdate = false;\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.lineDistancesNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\t\tconstructor: Geometry,\n\n\t\tisGeometry: true,\n\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\tfor ( var i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\t\tvar vertex = this.vertices[ i ];\n\t\t\t\tvertex.applyMatrix4( matrix );\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\t\tvar face = this.faces[ i ];\n\t\t\t\tface.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tface.vertexNormals[ j ].applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tthis.computeBoundingSphere();\n\n\t\t\t}\n\n\t\t\tthis.verticesNeedUpdate = true;\n\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateX: function () {\n\n\t\t\t// rotate geometry around world x-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateX( angle ) {\n\n\t\t\t\tm1.makeRotationX( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateY: function () {\n\n\t\t\t// rotate geometry around world y-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateY( angle ) {\n\n\t\t\t\tm1.makeRotationY( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateZ: function () {\n\n\t\t\t// rotate geometry around world z-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateZ( angle ) {\n\n\t\t\t\tm1.makeRotationZ( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslate: function () {\n\n\t\t\t// translate geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function translate( x, y, z ) {\n\n\t\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tscale: function () {\n\n\t\t\t// scale geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function scale( x, y, z ) {\n\n\t\t\t\tm1.makeScale( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlookAt: function () {\n\n\t\t\tvar obj = new Object3D();\n\n\t\t\treturn function lookAt( vector ) {\n\n\t\t\t\tobj.lookAt( vector );\n\n\t\t\t\tobj.updateMatrix();\n\n\t\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tfromBufferGeometry: function ( geometry ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar indices = geometry.index !== null ? geometry.index.array : undefined;\n\t\t\tvar attributes = geometry.attributes;\n\n\t\t\tvar positions = attributes.position.array;\n\t\t\tvar normals = attributes.normal !== undefined ? attributes.normal.array : undefined;\n\t\t\tvar colors = attributes.color !== undefined ? attributes.color.array : undefined;\n\t\t\tvar uvs = attributes.uv !== undefined ? attributes.uv.array : undefined;\n\t\t\tvar uvs2 = attributes.uv2 !== undefined ? attributes.uv2.array : undefined;\n\n\t\t\tif ( uvs2 !== undefined ) this.faceVertexUvs[ 1 ] = [];\n\n\t\t\tvar tempNormals = [];\n\t\t\tvar tempUVs = [];\n\t\t\tvar tempUVs2 = [];\n\n\t\t\tfor ( var i = 0, j = 0; i < positions.length; i += 3, j += 2 ) {\n\n\t\t\t\tscope.vertices.push( new Vector3( positions[ i ], positions[ i + 1 ], positions[ i + 2 ] ) );\n\n\t\t\t\tif ( normals !== undefined ) {\n\n\t\t\t\t\ttempNormals.push( new Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( colors !== undefined ) {\n\n\t\t\t\t\tscope.colors.push( new Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\t\ttempUVs.push( new Vector2( uvs[ j ], uvs[ j + 1 ] ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\t\ttempUVs2.push( new Vector2( uvs2[ j ], uvs2[ j + 1 ] ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction addFace( a, b, c, materialIndex ) {\n\n\t\t\t\tvar vertexNormals = normals !== undefined ? [ tempNormals[ a ].clone(), tempNormals[ b ].clone(), tempNormals[ c ].clone() ] : [];\n\t\t\t\tvar vertexColors = colors !== undefined ? [ scope.colors[ a ].clone(), scope.colors[ b ].clone(), scope.colors[ c ].clone() ] : [];\n\n\t\t\t\tvar face = new Face3( a, b, c, vertexNormals, vertexColors, materialIndex );\n\n\t\t\t\tscope.faces.push( face );\n\n\t\t\t\tif ( uvs !== undefined ) {\n\n\t\t\t\t\tscope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ].clone(), tempUVs[ b ].clone(), tempUVs[ c ].clone() ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvs2 !== undefined ) {\n\n\t\t\t\t\tscope.faceVertexUvs[ 1 ].push( [ tempUVs2[ a ].clone(), tempUVs2[ b ].clone(), tempUVs2[ c ].clone() ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar groups = geometry.groups;\n\n\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\tfor ( var i = 0; i < groups.length; i ++ ) {\n\n\t\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\t\tvar start = group.start;\n\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\tfor ( var j = start, jl = start + count; j < jl; j += 3 ) {\n\n\t\t\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\t\t\taddFace( indices[ j ], indices[ j + 1 ], indices[ j + 2 ], group.materialIndex );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\taddFace( j, j + 1, j + 2, group.materialIndex );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( indices !== undefined ) {\n\n\t\t\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t\t\taddFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfor ( var i = 0; i < positions.length / 3; i += 3 ) {\n\n\t\t\t\t\t\taddFace( i, i + 1, i + 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcenter: function () {\n\n\t\t\tvar offset = new Vector3();\n\n\t\t\treturn function center() {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tnormalize: function () {\n\n\t\t\tthis.computeBoundingSphere();\n\n\t\t\tvar center = this.boundingSphere.center;\n\t\t\tvar radius = this.boundingSphere.radius;\n\n\t\t\tvar s = radius === 0 ? 1 : 1.0 / radius;\n\n\t\t\tvar matrix = new Matrix4();\n\t\t\tmatrix.set(\n\t\t\t\ts, 0, 0, - s * center.x,\n\t\t\t\t0, s, 0, - s * center.y,\n\t\t\t\t0, 0, s, - s * center.z,\n\t\t\t\t0, 0, 0, 1\n\t\t\t);\n\n\t\t\tthis.applyMatrix( matrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeFaceNormals: function () {\n\n\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\tfor ( var f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tvar face = this.faces[ f ];\n\n\t\t\t\tvar vA = this.vertices[ face.a ];\n\t\t\t\tvar vB = this.vertices[ face.b ];\n\t\t\t\tvar vC = this.vertices[ face.c ];\n\n\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\tcb.cross( ab );\n\n\t\t\t\tcb.normalize();\n\n\t\t\t\tface.normal.copy( cb );\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeVertexNormals: function ( areaWeighted ) {\n\n\t\t\tif ( areaWeighted === undefined ) areaWeighted = true;\n\n\t\t\tvar v, vl, f, fl, face, vertices;\n\n\t\t\tvertices = new Array( this.vertices.length );\n\n\t\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\t\tvertices[ v ] = new Vector3();\n\n\t\t\t}\n\n\t\t\tif ( areaWeighted ) {\n\n\t\t\t\t// vertex normals weighted by triangle areas\n\t\t\t\t// http://www.iquilezles.org/www/articles/normals/normals.htm\n\n\t\t\t\tvar vA, vB, vC;\n\t\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\t\tvA = this.vertices[ face.a ];\n\t\t\t\t\tvB = this.vertices[ face.b ];\n\t\t\t\t\tvC = this.vertices[ face.c ];\n\n\t\t\t\t\tcb.subVectors( vC, vB );\n\t\t\t\t\tab.subVectors( vA, vB );\n\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\tvertices[ face.a ].add( cb );\n\t\t\t\t\tvertices[ face.b ].add( cb );\n\t\t\t\t\tvertices[ face.c ].add( cb );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tthis.computeFaceNormals();\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\t\tvertices[ face.a ].add( face.normal );\n\t\t\t\t\tvertices[ face.b ].add( face.normal );\n\t\t\t\t\tvertices[ face.c ].add( face.normal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( v = 0, vl = this.vertices.length; v < vl; v ++ ) {\n\n\t\t\t\tvertices[ v ].normalize();\n\n\t\t\t}\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tvertexNormals[ 0 ].copy( vertices[ face.a ] );\n\t\t\t\t\tvertexNormals[ 1 ].copy( vertices[ face.b ] );\n\t\t\t\t\tvertexNormals[ 2 ].copy( vertices[ face.c ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvertexNormals[ 0 ] = vertices[ face.a ].clone();\n\t\t\t\t\tvertexNormals[ 1 ] = vertices[ face.b ].clone();\n\t\t\t\t\tvertexNormals[ 2 ] = vertices[ face.c ].clone();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.faces.length > 0 ) {\n\n\t\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeFlatVertexNormals: function () {\n\n\t\t\tvar f, fl, face;\n\n\t\t\tthis.computeFaceNormals();\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tvertexNormals[ 0 ].copy( face.normal );\n\t\t\t\t\tvertexNormals[ 1 ].copy( face.normal );\n\t\t\t\t\tvertexNormals[ 2 ].copy( face.normal );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvertexNormals[ 0 ] = face.normal.clone();\n\t\t\t\t\tvertexNormals[ 1 ] = face.normal.clone();\n\t\t\t\t\tvertexNormals[ 2 ] = face.normal.clone();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( this.faces.length > 0 ) {\n\n\t\t\t\tthis.normalsNeedUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeMorphNormals: function () {\n\n\t\t\tvar i, il, f, fl, face;\n\n\t\t\t// save original normals\n\t\t\t// - create temp variables on first access\n\t\t\t// otherwise just copy (for faster repeated calls)\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tif ( ! face.__originalFaceNormal ) {\n\n\t\t\t\t\tface.__originalFaceNormal = face.normal.clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tface.__originalFaceNormal.copy( face.normal );\n\n\t\t\t\t}\n\n\t\t\t\tif ( ! face.__originalVertexNormals ) face.__originalVertexNormals = [];\n\n\t\t\t\tfor ( i = 0, il = face.vertexNormals.length; i < il; i ++ ) {\n\n\t\t\t\t\tif ( ! face.__originalVertexNormals[ i ] ) {\n\n\t\t\t\t\t\tface.__originalVertexNormals[ i ] = face.vertexNormals[ i ].clone();\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tface.__originalVertexNormals[ i ].copy( face.vertexNormals[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// use temp geometry to compute face and vertex normals for each morph\n\n\t\t\tvar tmpGeo = new Geometry();\n\t\t\ttmpGeo.faces = this.faces;\n\n\t\t\tfor ( i = 0, il = this.morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\t// create on first access\n\n\t\t\t\tif ( ! this.morphNormals[ i ] ) {\n\n\t\t\t\t\tthis.morphNormals[ i ] = {};\n\t\t\t\t\tthis.morphNormals[ i ].faceNormals = [];\n\t\t\t\t\tthis.morphNormals[ i ].vertexNormals = [];\n\n\t\t\t\t\tvar dstNormalsFace = this.morphNormals[ i ].faceNormals;\n\t\t\t\t\tvar dstNormalsVertex = this.morphNormals[ i ].vertexNormals;\n\n\t\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\t\tfaceNormal = new Vector3();\n\t\t\t\t\t\tvertexNormals = { a: new Vector3(), b: new Vector3(), c: new Vector3() };\n\n\t\t\t\t\t\tdstNormalsFace.push( faceNormal );\n\t\t\t\t\t\tdstNormalsVertex.push( vertexNormals );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar morphNormals = this.morphNormals[ i ];\n\n\t\t\t\t// set vertices to morph target\n\n\t\t\t\ttmpGeo.vertices = this.morphTargets[ i ].vertices;\n\n\t\t\t\t// compute morph normals\n\n\t\t\t\ttmpGeo.computeFaceNormals();\n\t\t\t\ttmpGeo.computeVertexNormals();\n\n\t\t\t\t// store morph normals\n\n\t\t\t\tvar faceNormal, vertexNormals;\n\n\t\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\t\tfaceNormal = morphNormals.faceNormals[ f ];\n\t\t\t\t\tvertexNormals = morphNormals.vertexNormals[ f ];\n\n\t\t\t\t\tfaceNormal.copy( face.normal );\n\n\t\t\t\t\tvertexNormals.a.copy( face.vertexNormals[ 0 ] );\n\t\t\t\t\tvertexNormals.b.copy( face.vertexNormals[ 1 ] );\n\t\t\t\t\tvertexNormals.c.copy( face.vertexNormals[ 2 ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// restore original normals\n\n\t\t\tfor ( f = 0, fl = this.faces.length; f < fl; f ++ ) {\n\n\t\t\t\tface = this.faces[ f ];\n\n\t\t\t\tface.normal = face.__originalFaceNormal;\n\t\t\t\tface.vertexNormals = face.__originalVertexNormals;\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeBoundingBox: function () {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t}\n\n\t\t\tthis.boundingBox.setFromPoints( this.vertices );\n\n\t\t},\n\n\t\tcomputeBoundingSphere: function () {\n\n\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t}\n\n\t\t\tthis.boundingSphere.setFromPoints( this.vertices );\n\n\t\t},\n\n\t\tmerge: function ( geometry, matrix, materialIndexOffset ) {\n\n\t\t\tif ( ! ( geometry && geometry.isGeometry ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.', geometry );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar normalMatrix,\n\t\t\t\tvertexOffset = this.vertices.length,\n\t\t\t\tvertices1 = this.vertices,\n\t\t\t\tvertices2 = geometry.vertices,\n\t\t\t\tfaces1 = this.faces,\n\t\t\t\tfaces2 = geometry.faces,\n\t\t\t\tuvs1 = this.faceVertexUvs[ 0 ],\n\t\t\t\tuvs2 = geometry.faceVertexUvs[ 0 ],\n\t\t\t\tcolors1 = this.colors,\n\t\t\t\tcolors2 = geometry.colors;\n\n\t\t\tif ( materialIndexOffset === undefined ) materialIndexOffset = 0;\n\n\t\t\tif ( matrix !== undefined ) {\n\n\t\t\t\tnormalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\t}\n\n\t\t\t// vertices\n\n\t\t\tfor ( var i = 0, il = vertices2.length; i < il; i ++ ) {\n\n\t\t\t\tvar vertex = vertices2[ i ];\n\n\t\t\t\tvar vertexCopy = vertex.clone();\n\n\t\t\t\tif ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );\n\n\t\t\t\tvertices1.push( vertexCopy );\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tfor ( var i = 0, il = colors2.length; i < il; i ++ ) {\n\n\t\t\t\tcolors1.push( colors2[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tfor ( i = 0, il = faces2.length; i < il; i ++ ) {\n\n\t\t\t\tvar face = faces2[ i ], faceCopy, normal, color,\n\t\t\t\t\tfaceVertexNormals = face.vertexNormals,\n\t\t\t\t\tfaceVertexColors = face.vertexColors;\n\n\t\t\t\tfaceCopy = new Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );\n\t\t\t\tfaceCopy.normal.copy( face.normal );\n\n\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\tfaceCopy.normal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\tnormal = faceVertexNormals[ j ].clone();\n\n\t\t\t\t\tif ( normalMatrix !== undefined ) {\n\n\t\t\t\t\t\tnormal.applyMatrix3( normalMatrix ).normalize();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfaceCopy.vertexNormals.push( normal );\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.color.copy( face.color );\n\n\t\t\t\tfor ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {\n\n\t\t\t\t\tcolor = faceVertexColors[ j ];\n\t\t\t\t\tfaceCopy.vertexColors.push( color.clone() );\n\n\t\t\t\t}\n\n\t\t\t\tfaceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n\n\t\t\t\tfaces1.push( faceCopy );\n\n\t\t\t}\n\n\t\t\t// uvs\n\n\t\t\tfor ( i = 0, il = uvs2.length; i < il; i ++ ) {\n\n\t\t\t\tvar uv = uvs2[ i ], uvCopy = [];\n\n\t\t\t\tif ( uv === undefined ) {\n\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0, jl = uv.length; j < jl; j ++ ) {\n\n\t\t\t\t\tuvCopy.push( uv[ j ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tuvs1.push( uvCopy );\n\n\t\t\t}\n\n\t\t},\n\n\t\tmergeMesh: function ( mesh ) {\n\n\t\t\tif ( ! ( mesh && mesh.isMesh ) ) {\n\n\t\t\t\tconsole.error( 'THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.', mesh );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( mesh.matrixAutoUpdate ) mesh.updateMatrix();\n\n\t\t\tthis.merge( mesh.geometry, mesh.matrix );\n\n\t\t},\n\n\t\t/*\n\t\t * Checks for duplicate vertices with hashmap.\n\t\t * Duplicated vertices are removed\n\t\t * and faces' vertices are updated.\n\t\t */\n\n\t\tmergeVertices: function () {\n\n\t\t\tvar verticesMap = {}; // Hashmap for looking up vertices by position coordinates (and making sure they are unique)\n\t\t\tvar unique = [], changes = [];\n\n\t\t\tvar v, key;\n\t\t\tvar precisionPoints = 4; // number of decimal points, e.g. 4 for epsilon of 0.0001\n\t\t\tvar precision = Math.pow( 10, precisionPoints );\n\t\t\tvar i, il, face;\n\t\t\tvar indices, j, jl;\n\n\t\t\tfor ( i = 0, il = this.vertices.length; i < il; i ++ ) {\n\n\t\t\t\tv = this.vertices[ i ];\n\t\t\t\tkey = Math.round( v.x * precision ) + '_' + Math.round( v.y * precision ) + '_' + Math.round( v.z * precision );\n\n\t\t\t\tif ( verticesMap[ key ] === undefined ) {\n\n\t\t\t\t\tverticesMap[ key ] = i;\n\t\t\t\t\tunique.push( this.vertices[ i ] );\n\t\t\t\t\tchanges[ i ] = unique.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\t//console.log('Duplicate vertex found. ', i, ' could be using ', verticesMap[key]);\n\t\t\t\t\tchanges[ i ] = changes[ verticesMap[ key ] ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// if faces are completely degenerate after merging vertices, we\n\t\t\t// have to remove them from the geometry.\n\t\t\tvar faceIndicesToRemove = [];\n\n\t\t\tfor ( i = 0, il = this.faces.length; i < il; i ++ ) {\n\n\t\t\t\tface = this.faces[ i ];\n\n\t\t\t\tface.a = changes[ face.a ];\n\t\t\t\tface.b = changes[ face.b ];\n\t\t\t\tface.c = changes[ face.c ];\n\n\t\t\t\tindices = [ face.a, face.b, face.c ];\n\n\t\t\t\t// if any duplicate vertices are found in a Face3\n\t\t\t\t// we have to remove the face as nothing can be saved\n\t\t\t\tfor ( var n = 0; n < 3; n ++ ) {\n\n\t\t\t\t\tif ( indices[ n ] === indices[ ( n + 1 ) % 3 ] ) {\n\n\t\t\t\t\t\tfaceIndicesToRemove.push( i );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( i = faceIndicesToRemove.length - 1; i >= 0; i -- ) {\n\n\t\t\t\tvar idx = faceIndicesToRemove[ i ];\n\n\t\t\t\tthis.faces.splice( idx, 1 );\n\n\t\t\t\tfor ( j = 0, jl = this.faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\t\tthis.faceVertexUvs[ j ].splice( idx, 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Use unique set of vertices\n\n\t\t\tvar diff = this.vertices.length - unique.length;\n\t\t\tthis.vertices = unique;\n\t\t\treturn diff;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.vertices = [];\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tvar point = points[ i ];\n\t\t\t\tthis.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsortFacesByMaterialIndex: function () {\n\n\t\t\tvar faces = this.faces;\n\t\t\tvar length = faces.length;\n\n\t\t\t// tag faces\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tfaces[ i ]._id = i;\n\n\t\t\t}\n\n\t\t\t// sort faces\n\n\t\t\tfunction materialIndexSort( a, b ) {\n\n\t\t\t\treturn a.materialIndex - b.materialIndex;\n\n\t\t\t}\n\n\t\t\tfaces.sort( materialIndexSort );\n\n\t\t\t// sort uvs\n\n\t\t\tvar uvs1 = this.faceVertexUvs[ 0 ];\n\t\t\tvar uvs2 = this.faceVertexUvs[ 1 ];\n\n\t\t\tvar newUvs1, newUvs2;\n\n\t\t\tif ( uvs1 && uvs1.length === length ) newUvs1 = [];\n\t\t\tif ( uvs2 && uvs2.length === length ) newUvs2 = [];\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tvar id = faces[ i ]._id;\n\n\t\t\t\tif ( newUvs1 ) newUvs1.push( uvs1[ id ] );\n\t\t\t\tif ( newUvs2 ) newUvs2.push( uvs2[ id ] );\n\n\t\t\t}\n\n\t\t\tif ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1;\n\t\t\tif ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Geometry',\n\t\t\t\t\tgenerator: 'Geometry.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard Geometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\t\tif ( this.parameters !== undefined ) {\n\n\t\t\t\tvar parameters = this.parameters;\n\n\t\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\n\t\t\t}\n\n\t\t\tvar vertices = [];\n\n\t\t\tfor ( var i = 0; i < this.vertices.length; i ++ ) {\n\n\t\t\t\tvar vertex = this.vertices[ i ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t\tvar faces = [];\n\t\t\tvar normals = [];\n\t\t\tvar normalsHash = {};\n\t\t\tvar colors = [];\n\t\t\tvar colorsHash = {};\n\t\t\tvar uvs = [];\n\t\t\tvar uvsHash = {};\n\n\t\t\tfor ( var i = 0; i < this.faces.length; i ++ ) {\n\n\t\t\t\tvar face = this.faces[ i ];\n\n\t\t\t\tvar hasMaterial = true;\n\t\t\t\tvar hasFaceUv = false; // deprecated\n\t\t\t\tvar hasFaceVertexUv = this.faceVertexUvs[ 0 ][ i ] !== undefined;\n\t\t\t\tvar hasFaceNormal = face.normal.length() > 0;\n\t\t\t\tvar hasFaceVertexNormal = face.vertexNormals.length > 0;\n\t\t\t\tvar hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n\t\t\t\tvar hasFaceVertexColor = face.vertexColors.length > 0;\n\n\t\t\t\tvar faceType = 0;\n\n\t\t\t\tfaceType = setBit( faceType, 0, 0 ); // isQuad\n\t\t\t\tfaceType = setBit( faceType, 1, hasMaterial );\n\t\t\t\tfaceType = setBit( faceType, 2, hasFaceUv );\n\t\t\t\tfaceType = setBit( faceType, 3, hasFaceVertexUv );\n\t\t\t\tfaceType = setBit( faceType, 4, hasFaceNormal );\n\t\t\t\tfaceType = setBit( faceType, 5, hasFaceVertexNormal );\n\t\t\t\tfaceType = setBit( faceType, 6, hasFaceColor );\n\t\t\t\tfaceType = setBit( faceType, 7, hasFaceVertexColor );\n\n\t\t\t\tfaces.push( faceType );\n\t\t\t\tfaces.push( face.a, face.b, face.c );\n\t\t\t\tfaces.push( face.materialIndex );\n\n\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\tvar faceVertexUvs = this.faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 0 ] ),\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 1 ] ),\n\t\t\t\t\t\tgetUvIndex( faceVertexUvs[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\tfaces.push( getNormalIndex( face.normal ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 0 ] ),\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 1 ] ),\n\t\t\t\t\t\tgetNormalIndex( vertexNormals[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\tfaces.push( getColorIndex( face.color ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\t\tfaces.push(\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 0 ] ),\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 1 ] ),\n\t\t\t\t\t\tgetColorIndex( vertexColors[ 2 ] )\n\t\t\t\t\t);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction setBit( value, position, enabled ) {\n\n\t\t\t\treturn enabled ? value | ( 1 << position ) : value & ( ~ ( 1 << position ) );\n\n\t\t\t}\n\n\t\t\tfunction getNormalIndex( normal ) {\n\n\t\t\t\tvar hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n\n\t\t\t\tif ( normalsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tnormalsHash[ hash ] = normals.length / 3;\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\treturn normalsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tfunction getColorIndex( color ) {\n\n\t\t\t\tvar hash = color.r.toString() + color.g.toString() + color.b.toString();\n\n\t\t\t\tif ( colorsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tcolorsHash[ hash ] = colors.length;\n\t\t\t\tcolors.push( color.getHex() );\n\n\t\t\t\treturn colorsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tfunction getUvIndex( uv ) {\n\n\t\t\t\tvar hash = uv.x.toString() + uv.y.toString();\n\n\t\t\t\tif ( uvsHash[ hash ] !== undefined ) {\n\n\t\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t\t}\n\n\t\t\t\tuvsHash[ hash ] = uvs.length / 2;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\treturn uvsHash[ hash ];\n\n\t\t\t}\n\n\t\t\tdata.data = {};\n\n\t\t\tdata.data.vertices = vertices;\n\t\t\tdata.data.normals = normals;\n\t\t\tif ( colors.length > 0 ) data.data.colors = colors;\n\t\t\tif ( uvs.length > 0 ) data.data.uvs = [ uvs ]; // temporal backward compatibility\n\t\t\tdata.data.faces = faces;\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\t/*\n\t\t\t // Handle primitives\n\n\t\t\t var parameters = this.parameters;\n\n\t\t\t if ( parameters !== undefined ) {\n\n\t\t\t var values = [];\n\n\t\t\t for ( var key in parameters ) {\n\n\t\t\t values.push( parameters[ key ] );\n\n\t\t\t }\n\n\t\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\n\t\t\t }\n\n\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\n\t\t\treturn new Geometry().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tvar i, il, j, jl, k, kl;\n\n\t\t\t// reset\n\n\t\t\tthis.vertices = [];\n\t\t\tthis.colors = [];\n\t\t\tthis.faces = [];\n\t\t\tthis.faceVertexUvs = [[]];\n\t\t\tthis.morphTargets = [];\n\t\t\tthis.morphNormals = [];\n\t\t\tthis.skinWeights = [];\n\t\t\tthis.skinIndices = [];\n\t\t\tthis.lineDistances = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null;\n\n\t\t\t// name\n\n\t\t\tthis.name = source.name;\n\n\t\t\t// vertices\n\n\t\t\tvar vertices = source.vertices;\n\n\t\t\tfor ( i = 0, il = vertices.length; i < il; i ++ ) {\n\n\t\t\t\tthis.vertices.push( vertices[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// colors\n\n\t\t\tvar colors = source.colors;\n\n\t\t\tfor ( i = 0, il = colors.length; i < il; i ++ ) {\n\n\t\t\t\tthis.colors.push( colors[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// faces\n\n\t\t\tvar faces = source.faces;\n\n\t\t\tfor ( i = 0, il = faces.length; i < il; i ++ ) {\n\n\t\t\t\tthis.faces.push( faces[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// face vertex uvs\n\n\t\t\tfor ( i = 0, il = source.faceVertexUvs.length; i < il; i ++ ) {\n\n\t\t\t\tvar faceVertexUvs = source.faceVertexUvs[ i ];\n\n\t\t\t\tif ( this.faceVertexUvs[ i ] === undefined ) {\n\n\t\t\t\t\tthis.faceVertexUvs[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tfor ( j = 0, jl = faceVertexUvs.length; j < jl; j ++ ) {\n\n\t\t\t\t\tvar uvs = faceVertexUvs[ j ], uvsCopy = [];\n\n\t\t\t\t\tfor ( k = 0, kl = uvs.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\tvar uv = uvs[ k ];\n\n\t\t\t\t\t\tuvsCopy.push( uv.clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.faceVertexUvs[ i ].push( uvsCopy );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// morph targets\n\n\t\t\tvar morphTargets = source.morphTargets;\n\n\t\t\tfor ( i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\tvar morphTarget = {};\n\t\t\t\tmorphTarget.name = morphTargets[ i ].name;\n\n\t\t\t\t// vertices\n\n\t\t\t\tif ( morphTargets[ i ].vertices !== undefined ) {\n\n\t\t\t\t\tmorphTarget.vertices = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].vertices.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphTarget.vertices.push( morphTargets[ i ].vertices[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// normals\n\n\t\t\t\tif ( morphTargets[ i ].normals !== undefined ) {\n\n\t\t\t\t\tmorphTarget.normals = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphTargets[ i ].normals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphTarget.normals.push( morphTargets[ i ].normals[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.push( morphTarget );\n\n\t\t\t}\n\n\t\t\t// morph normals\n\n\t\t\tvar morphNormals = source.morphNormals;\n\n\t\t\tfor ( i = 0, il = morphNormals.length; i < il; i ++ ) {\n\n\t\t\t\tvar morphNormal = {};\n\n\t\t\t\t// vertex normals\n\n\t\t\t\tif ( morphNormals[ i ].vertexNormals !== undefined ) {\n\n\t\t\t\t\tmorphNormal.vertexNormals = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar srcVertexNormal = morphNormals[ i ].vertexNormals[ j ];\n\t\t\t\t\t\tvar destVertexNormal = {};\n\n\t\t\t\t\t\tdestVertexNormal.a = srcVertexNormal.a.clone();\n\t\t\t\t\t\tdestVertexNormal.b = srcVertexNormal.b.clone();\n\t\t\t\t\t\tdestVertexNormal.c = srcVertexNormal.c.clone();\n\n\t\t\t\t\t\tmorphNormal.vertexNormals.push( destVertexNormal );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// face normals\n\n\t\t\t\tif ( morphNormals[ i ].faceNormals !== undefined ) {\n\n\t\t\t\t\tmorphNormal.faceNormals = [];\n\n\t\t\t\t\tfor ( j = 0, jl = morphNormals[ i ].faceNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tmorphNormal.faceNormals.push( morphNormals[ i ].faceNormals[ j ].clone() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphNormals.push( morphNormal );\n\n\t\t\t}\n\n\t\t\t// skin weights\n\n\t\t\tvar skinWeights = source.skinWeights;\n\n\t\t\tfor ( i = 0, il = skinWeights.length; i < il; i ++ ) {\n\n\t\t\t\tthis.skinWeights.push( skinWeights[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// skin indices\n\n\t\t\tvar skinIndices = source.skinIndices;\n\n\t\t\tfor ( i = 0, il = skinIndices.length; i < il; i ++ ) {\n\n\t\t\t\tthis.skinIndices.push( skinIndices[ i ].clone() );\n\n\t\t\t}\n\n\t\t\t// line distances\n\n\t\t\tvar lineDistances = source.lineDistances;\n\n\t\t\tfor ( i = 0, il = lineDistances.length; i < il; i ++ ) {\n\n\t\t\t\tthis.lineDistances.push( lineDistances[ i ] );\n\n\t\t\t}\n\n\t\t\t// bounding box\n\n\t\t\tvar boundingBox = source.boundingBox;\n\n\t\t\tif ( boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t\t}\n\n\t\t\t// bounding sphere\n\n\t\t\tvar boundingSphere = source.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\t// update flags\n\n\t\t\tthis.elementsNeedUpdate = source.elementsNeedUpdate;\n\t\t\tthis.verticesNeedUpdate = source.verticesNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = source.uvsNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = source.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = source.colorsNeedUpdate;\n\t\t\tthis.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = source.groupsNeedUpdate;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction BufferAttribute( array, itemSize, normalized ) {\n\n\t\tif ( Array.isArray( array ) ) {\n\n\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t}\n\n\t\tthis.name = '';\n\n\t\tthis.array = array;\n\t\tthis.itemSize = itemSize;\n\t\tthis.count = array !== undefined ? array.length / itemSize : 0;\n\t\tthis.normalized = normalized === true;\n\n\t\tthis.dynamic = false;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tObject.defineProperty( BufferAttribute.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( BufferAttribute.prototype, {\n\n\t\tisBufferAttribute: true,\n\n\t\tonUploadCallback: function () {},\n\n\t\tsetArray: function ( array ) {\n\n\t\t\tif ( Array.isArray( array ) ) {\n\n\t\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t\t}\n\n\t\t\tthis.count = array !== undefined ? array.length / this.itemSize : 0;\n\t\t\tthis.array = array;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetDynamic: function ( value ) {\n\n\t\t\tthis.dynamic = value;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\t\t\tthis.array = new source.array.constructor( source.array );\n\t\t\tthis.itemSize = source.itemSize;\n\t\t\tthis.count = source.count;\n\t\t\tthis.normalized = source.normalized;\n\n\t\t\tthis.dynamic = source.dynamic;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\t\tindex1 *= this.itemSize;\n\t\t\tindex2 *= attribute.itemSize;\n\n\t\t\tfor ( var i = 0, l = this.itemSize; i < l; i ++ ) {\n\n\t\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyArray: function ( array ) {\n\n\t\t\tthis.array.set( array );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyColorsArray: function ( colors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = colors.length; i < l; i ++ ) {\n\n\t\t\t\tvar color = colors[ i ];\n\n\t\t\t\tif ( color === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyColorsArray(): color is undefined', i );\n\t\t\t\t\tcolor = new Color();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = color.r;\n\t\t\t\tarray[ offset ++ ] = color.g;\n\t\t\t\tarray[ offset ++ ] = color.b;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector2sArray: function ( vectors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tvar vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector2sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector2();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector3sArray: function ( vectors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tvar vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector3sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\t\tarray[ offset ++ ] = vector.z;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyVector4sArray: function ( vectors ) {\n\n\t\t\tvar array = this.array, offset = 0;\n\n\t\t\tfor ( var i = 0, l = vectors.length; i < l; i ++ ) {\n\n\t\t\t\tvar vector = vectors[ i ];\n\n\t\t\t\tif ( vector === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.BufferAttribute.copyVector4sArray(): vector is undefined', i );\n\t\t\t\t\tvector = new Vector4();\n\n\t\t\t\t}\n\n\t\t\t\tarray[ offset ++ ] = vector.x;\n\t\t\t\tarray[ offset ++ ] = vector.y;\n\t\t\t\tarray[ offset ++ ] = vector.z;\n\t\t\t\tarray[ offset ++ ] = vector.w;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tset: function ( value, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.array.set( value, offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetX: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize ];\n\n\t\t},\n\n\t\tsetX: function ( index, x ) {\n\n\t\t\tthis.array[ index * this.itemSize ] = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetY: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 1 ];\n\n\t\t},\n\n\t\tsetY: function ( index, y ) {\n\n\t\t\tthis.array[ index * this.itemSize + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetZ: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 2 ];\n\n\t\t},\n\n\t\tsetZ: function ( index, z ) {\n\n\t\t\tthis.array[ index * this.itemSize + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetW: function ( index ) {\n\n\t\t\treturn this.array[ index * this.itemSize + 3 ];\n\n\t\t},\n\n\t\tsetW: function ( index, w ) {\n\n\t\t\tthis.array[ index * this.itemSize + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXY: function ( index, x, y ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZ: function ( index, x, y, z ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\t\t\tthis.array[ index + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\t\tindex *= this.itemSize;\n\n\t\t\tthis.array[ index + 0 ] = x;\n\t\t\tthis.array[ index + 1 ] = y;\n\t\t\tthis.array[ index + 2 ] = z;\n\t\t\tthis.array[ index + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tonUpload: function ( callback ) {\n\n\t\t\tthis.onUploadCallback = callback;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.array, this.itemSize ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction Int8BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int8Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt8BufferAttribute.prototype.constructor = Int8BufferAttribute;\n\n\n\tfunction Uint8BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint8Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint8BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint8BufferAttribute.prototype.constructor = Uint8BufferAttribute;\n\n\n\tfunction Uint8ClampedBufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint8ClampedArray( array ), itemSize, normalized );\n\n\t}\n\n\tUint8ClampedBufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint8ClampedBufferAttribute.prototype.constructor = Uint8ClampedBufferAttribute;\n\n\n\tfunction Int16BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int16Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt16BufferAttribute.prototype.constructor = Int16BufferAttribute;\n\n\n\tfunction Uint16BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint16Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint16BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint16BufferAttribute.prototype.constructor = Uint16BufferAttribute;\n\n\n\tfunction Int32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Int32Array( array ), itemSize, normalized );\n\n\t}\n\n\tInt32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tInt32BufferAttribute.prototype.constructor = Int32BufferAttribute;\n\n\n\tfunction Uint32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Uint32Array( array ), itemSize, normalized );\n\n\t}\n\n\tUint32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tUint32BufferAttribute.prototype.constructor = Uint32BufferAttribute;\n\n\n\tfunction Float32BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Float32Array( array ), itemSize, normalized );\n\n\t}\n\n\tFloat32BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tFloat32BufferAttribute.prototype.constructor = Float32BufferAttribute;\n\n\n\tfunction Float64BufferAttribute( array, itemSize, normalized ) {\n\n\t\tBufferAttribute.call( this, new Float64Array( array ), itemSize, normalized );\n\n\t}\n\n\tFloat64BufferAttribute.prototype = Object.create( BufferAttribute.prototype );\n\tFloat64BufferAttribute.prototype.constructor = Float64BufferAttribute;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction DirectGeometry() {\n\n\t\tthis.vertices = [];\n\t\tthis.normals = [];\n\t\tthis.colors = [];\n\t\tthis.uvs = [];\n\t\tthis.uvs2 = [];\n\n\t\tthis.groups = [];\n\n\t\tthis.morphTargets = {};\n\n\t\tthis.skinWeights = [];\n\t\tthis.skinIndices = [];\n\n\t\t// this.lineDistances = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\t// update flags\n\n\t\tthis.verticesNeedUpdate = false;\n\t\tthis.normalsNeedUpdate = false;\n\t\tthis.colorsNeedUpdate = false;\n\t\tthis.uvsNeedUpdate = false;\n\t\tthis.groupsNeedUpdate = false;\n\n\t}\n\n\tObject.assign( DirectGeometry.prototype, {\n\n\t\tcomputeGroups: function ( geometry ) {\n\n\t\t\tvar group;\n\t\t\tvar groups = [];\n\t\t\tvar materialIndex = undefined;\n\n\t\t\tvar faces = geometry.faces;\n\n\t\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\t// materials\n\n\t\t\t\tif ( face.materialIndex !== materialIndex ) {\n\n\t\t\t\t\tmaterialIndex = face.materialIndex;\n\n\t\t\t\t\tif ( group !== undefined ) {\n\n\t\t\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\t\t\tgroups.push( group );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgroup = {\n\t\t\t\t\t\tstart: i * 3,\n\t\t\t\t\t\tmaterialIndex: materialIndex\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( group !== undefined ) {\n\n\t\t\t\tgroup.count = ( i * 3 ) - group.start;\n\t\t\t\tgroups.push( group );\n\n\t\t\t}\n\n\t\t\tthis.groups = groups;\n\n\t\t},\n\n\t\tfromGeometry: function ( geometry ) {\n\n\t\t\tvar faces = geometry.faces;\n\t\t\tvar vertices = geometry.vertices;\n\t\t\tvar faceVertexUvs = geometry.faceVertexUvs;\n\n\t\t\tvar hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0;\n\t\t\tvar hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0;\n\n\t\t\t// morphs\n\n\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\tvar morphTargetsLength = morphTargets.length;\n\n\t\t\tvar morphTargetsPosition;\n\n\t\t\tif ( morphTargetsLength > 0 ) {\n\n\t\t\t\tmorphTargetsPosition = [];\n\n\t\t\t\tfor ( var i = 0; i < morphTargetsLength; i ++ ) {\n\n\t\t\t\t\tmorphTargetsPosition[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.position = morphTargetsPosition;\n\n\t\t\t}\n\n\t\t\tvar morphNormals = geometry.morphNormals;\n\t\t\tvar morphNormalsLength = morphNormals.length;\n\n\t\t\tvar morphTargetsNormal;\n\n\t\t\tif ( morphNormalsLength > 0 ) {\n\n\t\t\t\tmorphTargetsNormal = [];\n\n\t\t\t\tfor ( var i = 0; i < morphNormalsLength; i ++ ) {\n\n\t\t\t\t\tmorphTargetsNormal[ i ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphTargets.normal = morphTargetsNormal;\n\n\t\t\t}\n\n\t\t\t// skins\n\n\t\t\tvar skinIndices = geometry.skinIndices;\n\t\t\tvar skinWeights = geometry.skinWeights;\n\n\t\t\tvar hasSkinIndices = skinIndices.length === vertices.length;\n\t\t\tvar hasSkinWeights = skinWeights.length === vertices.length;\n\n\t\t\t//\n\n\t\t\tif ( faces.length === 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.DirectGeometry: Faceless geometries are not supported.' );\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < faces.length; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tthis.vertices.push( vertices[ face.a ], vertices[ face.b ], vertices[ face.c ] );\n\n\t\t\t\tvar vertexNormals = face.vertexNormals;\n\n\t\t\t\tif ( vertexNormals.length === 3 ) {\n\n\t\t\t\t\tthis.normals.push( vertexNormals[ 0 ], vertexNormals[ 1 ], vertexNormals[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar normal = face.normal;\n\n\t\t\t\t\tthis.normals.push( normal, normal, normal );\n\n\t\t\t\t}\n\n\t\t\t\tvar vertexColors = face.vertexColors;\n\n\t\t\t\tif ( vertexColors.length === 3 ) {\n\n\t\t\t\t\tthis.colors.push( vertexColors[ 0 ], vertexColors[ 1 ], vertexColors[ 2 ] );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar color = face.color;\n\n\t\t\t\t\tthis.colors.push( color, color, color );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexUv === true ) {\n\n\t\t\t\t\tvar vertexUvs = faceVertexUvs[ 0 ][ i ];\n\n\t\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\t\tthis.uvs.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ', i );\n\n\t\t\t\t\t\tthis.uvs.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasFaceVertexUv2 === true ) {\n\n\t\t\t\t\tvar vertexUvs = faceVertexUvs[ 1 ][ i ];\n\n\t\t\t\t\tif ( vertexUvs !== undefined ) {\n\n\t\t\t\t\t\tthis.uvs2.push( vertexUvs[ 0 ], vertexUvs[ 1 ], vertexUvs[ 2 ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ', i );\n\n\t\t\t\t\t\tthis.uvs2.push( new Vector2(), new Vector2(), new Vector2() );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// morphs\n\n\t\t\t\tfor ( var j = 0; j < morphTargetsLength; j ++ ) {\n\n\t\t\t\t\tvar morphTarget = morphTargets[ j ].vertices;\n\n\t\t\t\t\tmorphTargetsPosition[ j ].push( morphTarget[ face.a ], morphTarget[ face.b ], morphTarget[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var j = 0; j < morphNormalsLength; j ++ ) {\n\n\t\t\t\t\tvar morphNormal = morphNormals[ j ].vertexNormals[ i ];\n\n\t\t\t\t\tmorphTargetsNormal[ j ].push( morphNormal.a, morphNormal.b, morphNormal.c );\n\n\t\t\t\t}\n\n\t\t\t\t// skins\n\n\t\t\t\tif ( hasSkinIndices ) {\n\n\t\t\t\t\tthis.skinIndices.push( skinIndices[ face.a ], skinIndices[ face.b ], skinIndices[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t\tif ( hasSkinWeights ) {\n\n\t\t\t\t\tthis.skinWeights.push( skinWeights[ face.a ], skinWeights[ face.b ], skinWeights[ face.c ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.computeGroups( geometry );\n\n\t\t\tthis.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\tthis.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\tthis.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\tthis.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\tthis.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction arrayMax( array ) {\n\n\t\tif ( array.length === 0 ) return - Infinity;\n\n\t\tvar max = array[ 0 ];\n\n\t\tfor ( var i = 1, l = array.length; i < l; ++ i ) {\n\n\t\t\tif ( array[ i ] > max ) max = array[ i ];\n\n\t\t}\n\n\t\treturn max;\n\n\t}\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar bufferGeometryId = 1; // BufferGeometry uses odd numbers as Id\n\n\tfunction BufferGeometry() {\n\n\t\tObject.defineProperty( this, 'id', { value: bufferGeometryId += 2 } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'BufferGeometry';\n\n\t\tthis.index = null;\n\t\tthis.attributes = {};\n\n\t\tthis.morphAttributes = {};\n\n\t\tthis.groups = [];\n\n\t\tthis.boundingBox = null;\n\t\tthis.boundingSphere = null;\n\n\t\tthis.drawRange = { start: 0, count: Infinity };\n\n\t\tthis.userData = {};\n\n\t}\n\n\tBufferGeometry.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\t\tconstructor: BufferGeometry,\n\n\t\tisBufferGeometry: true,\n\n\t\tgetIndex: function () {\n\n\t\t\treturn this.index;\n\n\t\t},\n\n\t\tsetIndex: function ( index ) {\n\n\t\t\tif ( Array.isArray( index ) ) {\n\n\t\t\t\tthis.index = new ( arrayMax( index ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );\n\n\t\t\t} else {\n\n\t\t\t\tthis.index = index;\n\n\t\t\t}\n\n\t\t},\n\n\t\taddAttribute: function ( name, attribute ) {\n\n\t\t\tif ( ! ( attribute && attribute.isBufferAttribute ) && ! ( attribute && attribute.isInterleavedBufferAttribute ) ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .addAttribute() now expects ( name, attribute ).' );\n\n\t\t\t\treturn this.addAttribute( name, new BufferAttribute( arguments[ 1 ], arguments[ 2 ] ) );\n\n\t\t\t}\n\n\t\t\tif ( name === 'index' ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry.addAttribute: Use .setIndex() for index attribute.' );\n\t\t\t\tthis.setIndex( attribute );\n\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tthis.attributes[ name ] = attribute;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetAttribute: function ( name ) {\n\n\t\t\treturn this.attributes[ name ];\n\n\t\t},\n\n\t\tremoveAttribute: function ( name ) {\n\n\t\t\tdelete this.attributes[ name ];\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddGroup: function ( start, count, materialIndex ) {\n\n\t\t\tthis.groups.push( {\n\n\t\t\t\tstart: start,\n\t\t\t\tcount: count,\n\t\t\t\tmaterialIndex: materialIndex !== undefined ? materialIndex : 0\n\n\t\t\t} );\n\n\t\t},\n\n\t\tclearGroups: function () {\n\n\t\t\tthis.groups = [];\n\n\t\t},\n\n\t\tsetDrawRange: function ( start, count ) {\n\n\t\t\tthis.drawRange.start = start;\n\t\t\tthis.drawRange.count = count;\n\n\t\t},\n\n\t\tapplyMatrix: function ( matrix ) {\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tmatrix.applyToBufferAttribute( position );\n\t\t\t\tposition.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tvar normal = this.attributes.normal;\n\n\t\t\tif ( normal !== undefined ) {\n\n\t\t\t\tvar normalMatrix = new Matrix3().getNormalMatrix( matrix );\n\n\t\t\t\tnormalMatrix.applyToBufferAttribute( normal );\n\t\t\t\tnormal.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tif ( this.boundingBox !== null ) {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t}\n\n\t\t\tif ( this.boundingSphere !== null ) {\n\n\t\t\t\tthis.computeBoundingSphere();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trotateX: function () {\n\n\t\t\t// rotate geometry around world x-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateX( angle ) {\n\n\t\t\t\tm1.makeRotationX( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateY: function () {\n\n\t\t\t// rotate geometry around world y-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateY( angle ) {\n\n\t\t\t\tm1.makeRotationY( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\trotateZ: function () {\n\n\t\t\t// rotate geometry around world z-axis\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function rotateZ( angle ) {\n\n\t\t\t\tm1.makeRotationZ( angle );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttranslate: function () {\n\n\t\t\t// translate geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function translate( x, y, z ) {\n\n\t\t\t\tm1.makeTranslation( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tscale: function () {\n\n\t\t\t// scale geometry\n\n\t\t\tvar m1 = new Matrix4();\n\n\t\t\treturn function scale( x, y, z ) {\n\n\t\t\t\tm1.makeScale( x, y, z );\n\n\t\t\t\tthis.applyMatrix( m1 );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tlookAt: function () {\n\n\t\t\tvar obj = new Object3D();\n\n\t\t\treturn function lookAt( vector ) {\n\n\t\t\t\tobj.lookAt( vector );\n\n\t\t\t\tobj.updateMatrix();\n\n\t\t\t\tthis.applyMatrix( obj.matrix );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcenter: function () {\n\n\t\t\tvar offset = new Vector3();\n\n\t\t\treturn function center() {\n\n\t\t\t\tthis.computeBoundingBox();\n\n\t\t\t\tthis.boundingBox.getCenter( offset ).negate();\n\n\t\t\t\tthis.translate( offset.x, offset.y, offset.z );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tsetFromObject: function ( object ) {\n\n\t\t\t// console.log( 'THREE.BufferGeometry.setFromObject(). Converting', object, this );\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( object.isPoints || object.isLine ) {\n\n\t\t\t\tvar positions = new Float32BufferAttribute( geometry.vertices.length * 3, 3 );\n\t\t\t\tvar colors = new Float32BufferAttribute( geometry.colors.length * 3, 3 );\n\n\t\t\t\tthis.addAttribute( 'position', positions.copyVector3sArray( geometry.vertices ) );\n\t\t\t\tthis.addAttribute( 'color', colors.copyColorsArray( geometry.colors ) );\n\n\t\t\t\tif ( geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length ) {\n\n\t\t\t\t\tvar lineDistances = new Float32BufferAttribute( geometry.lineDistances.length, 1 );\n\n\t\t\t\t\tthis.addAttribute( 'lineDistance', lineDistances.copyArray( geometry.lineDistances ) );\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isMesh ) {\n\n\t\t\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\tthis.fromGeometry( geometry );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tvar position = [];\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tvar point = points[ i ];\n\t\t\t\tposition.push( point.x, point.y, point.z || 0 );\n\n\t\t\t}\n\n\t\t\tthis.addAttribute( 'position', new Float32BufferAttribute( position, 3 ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tupdateFromObject: function ( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tvar direct = geometry.__directGeometry;\n\n\t\t\t\tif ( geometry.elementsNeedUpdate === true ) {\n\n\t\t\t\t\tdirect = undefined;\n\t\t\t\t\tgeometry.elementsNeedUpdate = false;\n\n\t\t\t\t}\n\n\t\t\t\tif ( direct === undefined ) {\n\n\t\t\t\t\treturn this.fromGeometry( geometry );\n\n\t\t\t\t}\n\n\t\t\t\tdirect.verticesNeedUpdate = geometry.verticesNeedUpdate;\n\t\t\t\tdirect.normalsNeedUpdate = geometry.normalsNeedUpdate;\n\t\t\t\tdirect.colorsNeedUpdate = geometry.colorsNeedUpdate;\n\t\t\t\tdirect.uvsNeedUpdate = geometry.uvsNeedUpdate;\n\t\t\t\tdirect.groupsNeedUpdate = geometry.groupsNeedUpdate;\n\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\t\tgeometry = direct;\n\n\t\t\t}\n\n\t\t\tvar attribute;\n\n\t\t\tif ( geometry.verticesNeedUpdate === true ) {\n\n\t\t\t\tattribute = this.attributes.position;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector3sArray( geometry.vertices );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.verticesNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.normalsNeedUpdate === true ) {\n\n\t\t\t\tattribute = this.attributes.normal;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector3sArray( geometry.normals );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.normalsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.colorsNeedUpdate === true ) {\n\n\t\t\t\tattribute = this.attributes.color;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyColorsArray( geometry.colors );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.colorsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvsNeedUpdate ) {\n\n\t\t\t\tattribute = this.attributes.uv;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyVector2sArray( geometry.uvs );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.uvsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.lineDistancesNeedUpdate ) {\n\n\t\t\t\tattribute = this.attributes.lineDistance;\n\n\t\t\t\tif ( attribute !== undefined ) {\n\n\t\t\t\t\tattribute.copyArray( geometry.lineDistances );\n\t\t\t\t\tattribute.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.lineDistancesNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\tif ( geometry.groupsNeedUpdate ) {\n\n\t\t\t\tgeometry.computeGroups( object.geometry );\n\t\t\t\tthis.groups = geometry.groups;\n\n\t\t\t\tgeometry.groupsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tfromGeometry: function ( geometry ) {\n\n\t\t\tgeometry.__directGeometry = new DirectGeometry().fromGeometry( geometry );\n\n\t\t\treturn this.fromDirectGeometry( geometry.__directGeometry );\n\n\t\t},\n\n\t\tfromDirectGeometry: function ( geometry ) {\n\n\t\t\tvar positions = new Float32Array( geometry.vertices.length * 3 );\n\t\t\tthis.addAttribute( 'position', new BufferAttribute( positions, 3 ).copyVector3sArray( geometry.vertices ) );\n\n\t\t\tif ( geometry.normals.length > 0 ) {\n\n\t\t\t\tvar normals = new Float32Array( geometry.normals.length * 3 );\n\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( normals, 3 ).copyVector3sArray( geometry.normals ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.colors.length > 0 ) {\n\n\t\t\t\tvar colors = new Float32Array( geometry.colors.length * 3 );\n\t\t\t\tthis.addAttribute( 'color', new BufferAttribute( colors, 3 ).copyColorsArray( geometry.colors ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvs.length > 0 ) {\n\n\t\t\t\tvar uvs = new Float32Array( geometry.uvs.length * 2 );\n\t\t\t\tthis.addAttribute( 'uv', new BufferAttribute( uvs, 2 ).copyVector2sArray( geometry.uvs ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.uvs2.length > 0 ) {\n\n\t\t\t\tvar uvs2 = new Float32Array( geometry.uvs2.length * 2 );\n\t\t\t\tthis.addAttribute( 'uv2', new BufferAttribute( uvs2, 2 ).copyVector2sArray( geometry.uvs2 ) );\n\n\t\t\t}\n\n\t\t\t// groups\n\n\t\t\tthis.groups = geometry.groups;\n\n\t\t\t// morphs\n\n\t\t\tfor ( var name in geometry.morphTargets ) {\n\n\t\t\t\tvar array = [];\n\t\t\t\tvar morphTargets = geometry.morphTargets[ name ];\n\n\t\t\t\tfor ( var i = 0, l = morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar morphTarget = morphTargets[ i ];\n\n\t\t\t\t\tvar attribute = new Float32BufferAttribute( morphTarget.length * 3, 3 );\n\n\t\t\t\t\tarray.push( attribute.copyVector3sArray( morphTarget ) );\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t\t}\n\n\t\t\t// skinning\n\n\t\t\tif ( geometry.skinIndices.length > 0 ) {\n\n\t\t\t\tvar skinIndices = new Float32BufferAttribute( geometry.skinIndices.length * 4, 4 );\n\t\t\t\tthis.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) );\n\n\t\t\t}\n\n\t\t\tif ( geometry.skinWeights.length > 0 ) {\n\n\t\t\t\tvar skinWeights = new Float32BufferAttribute( geometry.skinWeights.length * 4, 4 );\n\t\t\t\tthis.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( geometry.boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = geometry.boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = geometry.boundingBox.clone();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcomputeBoundingBox: function () {\n\n\t\t\tif ( this.boundingBox === null ) {\n\n\t\t\t\tthis.boundingBox = new Box3();\n\n\t\t\t}\n\n\t\t\tvar position = this.attributes.position;\n\n\t\t\tif ( position !== undefined ) {\n\n\t\t\t\tthis.boundingBox.setFromBufferAttribute( position );\n\n\t\t\t} else {\n\n\t\t\t\tthis.boundingBox.makeEmpty();\n\n\t\t\t}\n\n\t\t\tif ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingBox: Computed min/max have NaN values. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t}\n\n\t\t},\n\n\t\tcomputeBoundingSphere: function () {\n\n\t\t\tvar box = new Box3();\n\t\t\tvar vector = new Vector3();\n\n\t\t\treturn function computeBoundingSphere() {\n\n\t\t\t\tif ( this.boundingSphere === null ) {\n\n\t\t\t\t\tthis.boundingSphere = new Sphere();\n\n\t\t\t\t}\n\n\t\t\t\tvar position = this.attributes.position;\n\n\t\t\t\tif ( position ) {\n\n\t\t\t\t\tvar center = this.boundingSphere.center;\n\n\t\t\t\t\tbox.setFromBufferAttribute( position );\n\t\t\t\t\tbox.getCenter( center );\n\n\t\t\t\t\t// hoping to find a boundingSphere with a radius smaller than the\n\t\t\t\t\t// boundingSphere of the boundingBox: sqrt(3) smaller in the best case\n\n\t\t\t\t\tvar maxRadiusSq = 0;\n\n\t\t\t\t\tfor ( var i = 0, il = position.count; i < il; i ++ ) {\n\n\t\t\t\t\t\tvector.x = position.getX( i );\n\t\t\t\t\t\tvector.y = position.getY( i );\n\t\t\t\t\t\tvector.z = position.getZ( i );\n\t\t\t\t\t\tmaxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( vector ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.boundingSphere.radius = Math.sqrt( maxRadiusSq );\n\n\t\t\t\t\tif ( isNaN( this.boundingSphere.radius ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The \"position\" attribute is likely to have NaN values.', this );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcomputeFaceNormals: function () {\n\n\t\t\t// backwards compatibility\n\n\t\t},\n\n\t\tcomputeVertexNormals: function () {\n\n\t\t\tvar index = this.index;\n\t\t\tvar attributes = this.attributes;\n\t\t\tvar groups = this.groups;\n\n\t\t\tif ( attributes.position ) {\n\n\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\tif ( attributes.normal === undefined ) {\n\n\t\t\t\t\tthis.addAttribute( 'normal', new BufferAttribute( new Float32Array( positions.length ), 3 ) );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// reset existing normals to zero\n\n\t\t\t\t\tvar array = attributes.normal.array;\n\n\t\t\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tarray[ i ] = 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar normals = attributes.normal.array;\n\n\t\t\t\tvar vA, vB, vC;\n\t\t\t\tvar pA = new Vector3(), pB = new Vector3(), pC = new Vector3();\n\t\t\t\tvar cb = new Vector3(), ab = new Vector3();\n\n\t\t\t\t// indexed elements\n\n\t\t\t\tif ( index ) {\n\n\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\t\tthis.addGroup( 0, indices.length );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var j = 0, jl = groups.length; j < jl; ++ j ) {\n\n\t\t\t\t\t\tvar group = groups[ j ];\n\n\t\t\t\t\t\tvar start = group.start;\n\t\t\t\t\t\tvar count = group.count;\n\n\t\t\t\t\t\tfor ( var i = start, il = start + count; i < il; i += 3 ) {\n\n\t\t\t\t\t\t\tvA = indices[ i + 0 ] * 3;\n\t\t\t\t\t\t\tvB = indices[ i + 1 ] * 3;\n\t\t\t\t\t\t\tvC = indices[ i + 2 ] * 3;\n\n\t\t\t\t\t\t\tpA.fromArray( positions, vA );\n\t\t\t\t\t\t\tpB.fromArray( positions, vB );\n\t\t\t\t\t\t\tpC.fromArray( positions, vC );\n\n\t\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\t\tnormals[ vA ] += cb.x;\n\t\t\t\t\t\t\tnormals[ vA + 1 ] += cb.y;\n\t\t\t\t\t\t\tnormals[ vA + 2 ] += cb.z;\n\n\t\t\t\t\t\t\tnormals[ vB ] += cb.x;\n\t\t\t\t\t\t\tnormals[ vB + 1 ] += cb.y;\n\t\t\t\t\t\t\tnormals[ vB + 2 ] += cb.z;\n\n\t\t\t\t\t\t\tnormals[ vC ] += cb.x;\n\t\t\t\t\t\t\tnormals[ vC + 1 ] += cb.y;\n\t\t\t\t\t\t\tnormals[ vC + 2 ] += cb.z;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// non-indexed elements (unconnected triangle soup)\n\n\t\t\t\t\tfor ( var i = 0, il = positions.length; i < il; i += 9 ) {\n\n\t\t\t\t\t\tpA.fromArray( positions, i );\n\t\t\t\t\t\tpB.fromArray( positions, i + 3 );\n\t\t\t\t\t\tpC.fromArray( positions, i + 6 );\n\n\t\t\t\t\t\tcb.subVectors( pC, pB );\n\t\t\t\t\t\tab.subVectors( pA, pB );\n\t\t\t\t\t\tcb.cross( ab );\n\n\t\t\t\t\t\tnormals[ i ] = cb.x;\n\t\t\t\t\t\tnormals[ i + 1 ] = cb.y;\n\t\t\t\t\t\tnormals[ i + 2 ] = cb.z;\n\n\t\t\t\t\t\tnormals[ i + 3 ] = cb.x;\n\t\t\t\t\t\tnormals[ i + 4 ] = cb.y;\n\t\t\t\t\t\tnormals[ i + 5 ] = cb.z;\n\n\t\t\t\t\t\tnormals[ i + 6 ] = cb.x;\n\t\t\t\t\t\tnormals[ i + 7 ] = cb.y;\n\t\t\t\t\t\tnormals[ i + 8 ] = cb.z;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis.normalizeNormals();\n\n\t\t\t\tattributes.normal.needsUpdate = true;\n\n\t\t\t}\n\n\t\t},\n\n\t\tmerge: function ( geometry, offset ) {\n\n\t\t\tif ( ! ( geometry && geometry.isBufferGeometry ) ) {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry.merge(): geometry not an instance of THREE.BufferGeometry.', geometry );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( offset === undefined ) {\n\n\t\t\t\toffset = 0;\n\n\t\t\t\tconsole.warn(\n\t\t\t\t\t'THREE.BufferGeometry.merge(): Overwriting original geometry, starting at offset=0. '\n\t\t\t\t\t+ 'Use BufferGeometryUtils.mergeBufferGeometries() for lossless merge.'\n\t\t\t\t);\n\n\t\t\t}\n\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor ( var key in attributes ) {\n\n\t\t\t\tif ( geometry.attributes[ key ] === undefined ) continue;\n\n\t\t\t\tvar attribute1 = attributes[ key ];\n\t\t\t\tvar attributeArray1 = attribute1.array;\n\n\t\t\t\tvar attribute2 = geometry.attributes[ key ];\n\t\t\t\tvar attributeArray2 = attribute2.array;\n\n\t\t\t\tvar attributeSize = attribute2.itemSize;\n\n\t\t\t\tfor ( var i = 0, j = attributeSize * offset; i < attributeArray2.length; i ++, j ++ ) {\n\n\t\t\t\t\tattributeArray1[ j ] = attributeArray2[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tnormalizeNormals: function () {\n\n\t\t\tvar vector = new Vector3();\n\n\t\t\treturn function normalizeNormals() {\n\n\t\t\t\tvar normals = this.attributes.normal;\n\n\t\t\t\tfor ( var i = 0, il = normals.count; i < il; i ++ ) {\n\n\t\t\t\t\tvector.x = normals.getX( i );\n\t\t\t\t\tvector.y = normals.getY( i );\n\t\t\t\t\tvector.z = normals.getZ( i );\n\n\t\t\t\t\tvector.normalize();\n\n\t\t\t\t\tnormals.setXYZ( i, vector.x, vector.y, vector.z );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttoNonIndexed: function () {\n\n\t\t\tif ( this.index === null ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry.toNonIndexed(): Geometry is already non-indexed.' );\n\t\t\t\treturn this;\n\n\t\t\t}\n\n\t\t\tvar geometry2 = new BufferGeometry();\n\n\t\t\tvar indices = this.index.array;\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor ( var name in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ name ];\n\n\t\t\t\tvar array = attribute.array;\n\t\t\t\tvar itemSize = attribute.itemSize;\n\n\t\t\t\tvar array2 = new array.constructor( indices.length * itemSize );\n\n\t\t\t\tvar index = 0, index2 = 0;\n\n\t\t\t\tfor ( var i = 0, l = indices.length; i < l; i ++ ) {\n\n\t\t\t\t\tindex = indices[ i ] * itemSize;\n\n\t\t\t\t\tfor ( var j = 0; j < itemSize; j ++ ) {\n\n\t\t\t\t\t\tarray2[ index2 ++ ] = array[ index ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry2.addAttribute( name, new BufferAttribute( array2, itemSize ) );\n\n\t\t\t}\n\n\t\t\tvar groups = this.groups;\n\n\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\t\t\t\tgeometry2.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t\treturn geometry2;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'BufferGeometry',\n\t\t\t\t\tgenerator: 'BufferGeometry.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard BufferGeometry serialization\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\t\t\tif ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;\n\n\t\t\tif ( this.parameters !== undefined ) {\n\n\t\t\t\tvar parameters = this.parameters;\n\n\t\t\t\tfor ( var key in parameters ) {\n\n\t\t\t\t\tif ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];\n\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\n\t\t\t}\n\n\t\t\tdata.data = { attributes: {} };\n\n\t\t\tvar index = this.index;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tvar array = Array.prototype.slice.call( index.array );\n\n\t\t\t\tdata.data.index = {\n\t\t\t\t\ttype: index.array.constructor.name,\n\t\t\t\t\tarray: array\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tvar attributes = this.attributes;\n\n\t\t\tfor ( var key in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ key ];\n\n\t\t\t\tvar array = Array.prototype.slice.call( attribute.array );\n\n\t\t\t\tdata.data.attributes[ key ] = {\n\t\t\t\t\titemSize: attribute.itemSize,\n\t\t\t\t\ttype: attribute.array.constructor.name,\n\t\t\t\t\tarray: array,\n\t\t\t\t\tnormalized: attribute.normalized\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tvar groups = this.groups;\n\n\t\t\tif ( groups.length > 0 ) {\n\n\t\t\t\tdata.data.groups = JSON.parse( JSON.stringify( groups ) );\n\n\t\t\t}\n\n\t\t\tvar boundingSphere = this.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tdata.data.boundingSphere = {\n\t\t\t\t\tcenter: boundingSphere.center.toArray(),\n\t\t\t\t\tradius: boundingSphere.radius\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\t/*\n\t\t\t // Handle primitives\n\n\t\t\t var parameters = this.parameters;\n\n\t\t\t if ( parameters !== undefined ) {\n\n\t\t\t var values = [];\n\n\t\t\t for ( var key in parameters ) {\n\n\t\t\t values.push( parameters[ key ] );\n\n\t\t\t }\n\n\t\t\t var geometry = Object.create( this.constructor.prototype );\n\t\t\t this.constructor.apply( geometry, values );\n\t\t\t return geometry;\n\n\t\t\t }\n\n\t\t\t return new this.constructor().copy( this );\n\t\t\t */\n\n\t\t\treturn new BufferGeometry().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tvar name, i, l;\n\n\t\t\t// reset\n\n\t\t\tthis.index = null;\n\t\t\tthis.attributes = {};\n\t\t\tthis.morphAttributes = {};\n\t\t\tthis.groups = [];\n\t\t\tthis.boundingBox = null;\n\t\t\tthis.boundingSphere = null;\n\n\t\t\t// name\n\n\t\t\tthis.name = source.name;\n\n\t\t\t// index\n\n\t\t\tvar index = source.index;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tthis.setIndex( index.clone() );\n\n\t\t\t}\n\n\t\t\t// attributes\n\n\t\t\tvar attributes = source.attributes;\n\n\t\t\tfor ( name in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ name ];\n\t\t\t\tthis.addAttribute( name, attribute.clone() );\n\n\t\t\t}\n\n\t\t\t// morph attributes\n\n\t\t\tvar morphAttributes = source.morphAttributes;\n\n\t\t\tfor ( name in morphAttributes ) {\n\n\t\t\t\tvar array = [];\n\t\t\t\tvar morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes\n\n\t\t\t\tfor ( i = 0, l = morphAttribute.length; i < l; i ++ ) {\n\n\t\t\t\t\tarray.push( morphAttribute[ i ].clone() );\n\n\t\t\t\t}\n\n\t\t\t\tthis.morphAttributes[ name ] = array;\n\n\t\t\t}\n\n\t\t\t// groups\n\n\t\t\tvar groups = source.groups;\n\n\t\t\tfor ( i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\tvar group = groups[ i ];\n\t\t\t\tthis.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t}\n\n\t\t\t// bounding box\n\n\t\t\tvar boundingBox = source.boundingBox;\n\n\t\t\tif ( boundingBox !== null ) {\n\n\t\t\t\tthis.boundingBox = boundingBox.clone();\n\n\t\t\t}\n\n\t\t\t// bounding sphere\n\n\t\t\tvar boundingSphere = source.boundingSphere;\n\n\t\t\tif ( boundingSphere !== null ) {\n\n\t\t\t\tthis.boundingSphere = boundingSphere.clone();\n\n\t\t\t}\n\n\t\t\t// draw range\n\n\t\t\tthis.drawRange.start = source.drawRange.start;\n\t\t\tthis.drawRange.count = source.drawRange.count;\n\n\t\t\t// user data\n\n\t\t\tthis.userData = source.userData;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// BoxGeometry\n\n\tfunction BoxGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'BoxGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tBoxGeometry.prototype = Object.create( Geometry.prototype );\n\tBoxGeometry.prototype.constructor = BoxGeometry;\n\n\t// BoxBufferGeometry\n\n\tfunction BoxBufferGeometry( width, height, depth, widthSegments, heightSegments, depthSegments ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'BoxBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\tdepth: depth,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tdepthSegments: depthSegments\n\t\t};\n\n\t\tvar scope = this;\n\n\t\twidth = width || 1;\n\t\theight = height || 1;\n\t\tdepth = depth || 1;\n\n\t\t// segments\n\n\t\twidthSegments = Math.floor( widthSegments ) || 1;\n\t\theightSegments = Math.floor( heightSegments ) || 1;\n\t\tdepthSegments = Math.floor( depthSegments ) || 1;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar numberOfVertices = 0;\n\t\tvar groupStart = 0;\n\n\t\t// build each side of the box geometry\n\n\t\tbuildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px\n\t\tbuildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx\n\t\tbuildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py\n\t\tbuildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny\n\t\tbuildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz\n\t\tbuildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {\n\n\t\t\tvar segmentWidth = width / gridX;\n\t\t\tvar segmentHeight = height / gridY;\n\n\t\t\tvar widthHalf = width / 2;\n\t\t\tvar heightHalf = height / 2;\n\t\t\tvar depthHalf = depth / 2;\n\n\t\t\tvar gridX1 = gridX + 1;\n\t\t\tvar gridY1 = gridY + 1;\n\n\t\t\tvar vertexCounter = 0;\n\t\t\tvar groupCount = 0;\n\n\t\t\tvar ix, iy;\n\n\t\t\tvar vector = new Vector3();\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\t\tvar y = iy * segmentHeight - heightHalf;\n\n\t\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\t\tvar x = ix * segmentWidth - widthHalf;\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = x * udir;\n\t\t\t\t\tvector[ v ] = y * vdir;\n\t\t\t\t\tvector[ w ] = depthHalf;\n\n\t\t\t\t\t// now apply vector to vertex buffer\n\n\t\t\t\t\tvertices.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// set values to correct vector component\n\n\t\t\t\t\tvector[ u ] = 0;\n\t\t\t\t\tvector[ v ] = 0;\n\t\t\t\t\tvector[ w ] = depth > 0 ? 1 : - 1;\n\n\t\t\t\t\t// now apply vector to normal buffer\n\n\t\t\t\t\tnormals.push( vector.x, vector.y, vector.z );\n\n\t\t\t\t\t// uvs\n\n\t\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t\t\t// counters\n\n\t\t\t\t\tvertexCounter += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// indices\n\n\t\t\t// 1. you need three indices to draw a single face\n\t\t\t// 2. a single segment consists of two faces\n\t\t\t// 3. so we need to generate six (2*3) indices per segment\n\n\t\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\t\tvar a = numberOfVertices + ix + gridX1 * iy;\n\t\t\t\t\tvar b = numberOfVertices + ix + gridX1 * ( iy + 1 );\n\t\t\t\t\tvar c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\t\tvar d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// increase counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, materialIndex );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t\t// update total number of vertices\n\n\t\t\tnumberOfVertices += vertexCounter;\n\n\t\t}\n\n\t}\n\n\tBoxBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tBoxBufferGeometry.prototype.constructor = BoxBufferGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// PlaneGeometry\n\n\tfunction PlaneGeometry( width, height, widthSegments, heightSegments ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'PlaneGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PlaneBufferGeometry( width, height, widthSegments, heightSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tPlaneGeometry.prototype = Object.create( Geometry.prototype );\n\tPlaneGeometry.prototype.constructor = PlaneGeometry;\n\n\t// PlaneBufferGeometry\n\n\tfunction PlaneBufferGeometry( width, height, widthSegments, heightSegments ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'PlaneBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\twidth: width,\n\t\t\theight: height,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments\n\t\t};\n\n\t\twidth = width || 1;\n\t\theight = height || 1;\n\n\t\tvar width_half = width / 2;\n\t\tvar height_half = height / 2;\n\n\t\tvar gridX = Math.floor( widthSegments ) || 1;\n\t\tvar gridY = Math.floor( heightSegments ) || 1;\n\n\t\tvar gridX1 = gridX + 1;\n\t\tvar gridY1 = gridY + 1;\n\n\t\tvar segment_width = width / gridX;\n\t\tvar segment_height = height / gridY;\n\n\t\tvar ix, iy;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy < gridY1; iy ++ ) {\n\n\t\t\tvar y = iy * segment_height - height_half;\n\n\t\t\tfor ( ix = 0; ix < gridX1; ix ++ ) {\n\n\t\t\t\tvar x = ix * segment_width - width_half;\n\n\t\t\t\tvertices.push( x, - y, 0 );\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\tuvs.push( ix / gridX );\n\t\t\t\tuvs.push( 1 - ( iy / gridY ) );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( iy = 0; iy < gridY; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < gridX; ix ++ ) {\n\n\t\t\t\tvar a = ix + gridX1 * iy;\n\t\t\t\tvar b = ix + gridX1 * ( iy + 1 );\n\t\t\t\tvar c = ( ix + 1 ) + gridX1 * ( iy + 1 );\n\t\t\t\tvar d = ( ix + 1 ) + gridX1 * iy;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tPlaneBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tPlaneBufferGeometry.prototype.constructor = PlaneBufferGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tvar materialId = 0;\n\n\tfunction Material() {\n\n\t\tObject.defineProperty( this, 'id', { value: materialId ++ } );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.name = '';\n\t\tthis.type = 'Material';\n\n\t\tthis.fog = true;\n\t\tthis.lights = true;\n\n\t\tthis.blending = NormalBlending;\n\t\tthis.side = FrontSide;\n\t\tthis.flatShading = false;\n\t\tthis.vertexColors = NoColors; // THREE.NoColors, THREE.VertexColors, THREE.FaceColors\n\n\t\tthis.opacity = 1;\n\t\tthis.transparent = false;\n\n\t\tthis.blendSrc = SrcAlphaFactor;\n\t\tthis.blendDst = OneMinusSrcAlphaFactor;\n\t\tthis.blendEquation = AddEquation;\n\t\tthis.blendSrcAlpha = null;\n\t\tthis.blendDstAlpha = null;\n\t\tthis.blendEquationAlpha = null;\n\n\t\tthis.depthFunc = LessEqualDepth;\n\t\tthis.depthTest = true;\n\t\tthis.depthWrite = true;\n\n\t\tthis.clippingPlanes = null;\n\t\tthis.clipIntersection = false;\n\t\tthis.clipShadows = false;\n\n\t\tthis.shadowSide = null;\n\n\t\tthis.colorWrite = true;\n\n\t\tthis.precision = null; // override the renderer's default precision for this material\n\n\t\tthis.polygonOffset = false;\n\t\tthis.polygonOffsetFactor = 0;\n\t\tthis.polygonOffsetUnits = 0;\n\n\t\tthis.dithering = false;\n\n\t\tthis.alphaTest = 0;\n\t\tthis.premultipliedAlpha = false;\n\n\t\tthis.overdraw = 0; // Overdrawn pixels (typically between 0 and 1) for fixing antialiasing gaps in CanvasRenderer\n\n\t\tthis.visible = true;\n\n\t\tthis.userData = {};\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tMaterial.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\t\tconstructor: Material,\n\n\t\tisMaterial: true,\n\n\t\tonBeforeCompile: function () {},\n\n\t\tsetValues: function ( values ) {\n\n\t\t\tif ( values === undefined ) return;\n\n\t\t\tfor ( var key in values ) {\n\n\t\t\t\tvar newValue = values[ key ];\n\n\t\t\t\tif ( newValue === undefined ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.Material: '\" + key + \"' parameter is undefined.\" );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\t// for backward compatability if shading is set in the constructor\n\t\t\t\tif ( key === 'shading' ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\t\tthis.flatShading = ( newValue === FlatShading ) ? true : false;\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar currentValue = this[ key ];\n\n\t\t\t\tif ( currentValue === undefined ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.\" + this.type + \": '\" + key + \"' is not a property of this material.\" );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tif ( currentValue && currentValue.isColor ) {\n\n\t\t\t\t\tcurrentValue.set( newValue );\n\n\t\t\t\t} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {\n\n\t\t\t\t\tcurrentValue.copy( newValue );\n\n\t\t\t\t} else if ( key === 'overdraw' ) {\n\n\t\t\t\t\t// ensure overdraw is backwards-compatible with legacy boolean type\n\t\t\t\t\tthis[ key ] = Number( newValue );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthis[ key ] = newValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar isRoot = ( meta === undefined || typeof meta === 'string' );\n\n\t\t\tif ( isRoot ) {\n\n\t\t\t\tmeta = {\n\t\t\t\t\ttextures: {},\n\t\t\t\t\timages: {}\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Material',\n\t\t\t\t\tgenerator: 'Material.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\t// standard Material serialization\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.type = this.type;\n\n\t\t\tif ( this.name !== '' ) data.name = this.name;\n\n\t\t\tif ( this.color && this.color.isColor ) data.color = this.color.getHex();\n\n\t\t\tif ( this.roughness !== undefined ) data.roughness = this.roughness;\n\t\t\tif ( this.metalness !== undefined ) data.metalness = this.metalness;\n\n\t\t\tif ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();\n\t\t\tif ( this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;\n\n\t\t\tif ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();\n\t\t\tif ( this.shininess !== undefined ) data.shininess = this.shininess;\n\t\t\tif ( this.clearCoat !== undefined ) data.clearCoat = this.clearCoat;\n\t\t\tif ( this.clearCoatRoughness !== undefined ) data.clearCoatRoughness = this.clearCoatRoughness;\n\n\t\t\tif ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;\n\t\t\tif ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;\n\t\t\tif ( this.lightMap && this.lightMap.isTexture ) data.lightMap = this.lightMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.aoMap && this.aoMap.isTexture ) {\n\n\t\t\t\tdata.aoMap = this.aoMap.toJSON( meta ).uuid;\n\t\t\t\tdata.aoMapIntensity = this.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\tif ( this.bumpMap && this.bumpMap.isTexture ) {\n\n\t\t\t\tdata.bumpMap = this.bumpMap.toJSON( meta ).uuid;\n\t\t\t\tdata.bumpScale = this.bumpScale;\n\n\t\t\t}\n\n\t\t\tif ( this.normalMap && this.normalMap.isTexture ) {\n\n\t\t\t\tdata.normalMap = this.normalMap.toJSON( meta ).uuid;\n\t\t\t\tdata.normalScale = this.normalScale.toArray();\n\n\t\t\t}\n\n\t\t\tif ( this.displacementMap && this.displacementMap.isTexture ) {\n\n\t\t\t\tdata.displacementMap = this.displacementMap.toJSON( meta ).uuid;\n\t\t\t\tdata.displacementScale = this.displacementScale;\n\t\t\t\tdata.displacementBias = this.displacementBias;\n\n\t\t\t}\n\n\t\t\tif ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;\n\t\t\tif ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;\n\t\t\tif ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;\n\n\t\t\tif ( this.envMap && this.envMap.isTexture ) {\n\n\t\t\t\tdata.envMap = this.envMap.toJSON( meta ).uuid;\n\t\t\t\tdata.reflectivity = this.reflectivity; // Scale behind envMap\n\n\t\t\t}\n\n\t\t\tif ( this.gradientMap && this.gradientMap.isTexture ) {\n\n\t\t\t\tdata.gradientMap = this.gradientMap.toJSON( meta ).uuid;\n\n\t\t\t}\n\n\t\t\tif ( this.size !== undefined ) data.size = this.size;\n\t\t\tif ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;\n\n\t\t\tif ( this.blending !== NormalBlending ) data.blending = this.blending;\n\t\t\tif ( this.flatShading === true ) data.flatShading = this.flatShading;\n\t\t\tif ( this.side !== FrontSide ) data.side = this.side;\n\t\t\tif ( this.vertexColors !== NoColors ) data.vertexColors = this.vertexColors;\n\n\t\t\tif ( this.opacity < 1 ) data.opacity = this.opacity;\n\t\t\tif ( this.transparent === true ) data.transparent = this.transparent;\n\n\t\t\tdata.depthFunc = this.depthFunc;\n\t\t\tdata.depthTest = this.depthTest;\n\t\t\tdata.depthWrite = this.depthWrite;\n\n\t\t\t// rotation (SpriteMaterial)\n\t\t\tif ( this.rotation !== 0 ) data.rotation = this.rotation;\n\n\t\t\tif ( this.linewidth !== 1 ) data.linewidth = this.linewidth;\n\t\t\tif ( this.dashSize !== undefined ) data.dashSize = this.dashSize;\n\t\t\tif ( this.gapSize !== undefined ) data.gapSize = this.gapSize;\n\t\t\tif ( this.scale !== undefined ) data.scale = this.scale;\n\n\t\t\tif ( this.dithering === true ) data.dithering = true;\n\n\t\t\tif ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;\n\t\t\tif ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;\n\n\t\t\tif ( this.wireframe === true ) data.wireframe = this.wireframe;\n\t\t\tif ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;\n\t\t\tif ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;\n\t\t\tif ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;\n\n\t\t\tif ( this.morphTargets === true ) data.morphTargets = true;\n\t\t\tif ( this.skinning === true ) data.skinning = true;\n\n\t\t\tif ( this.visible === false ) data.visible = false;\n\t\t\tif ( JSON.stringify( this.userData ) !== '{}' ) data.userData = this.userData;\n\n\t\t\t// TODO: Copied from Object3D.toJSON\n\n\t\t\tfunction extractFromCache( cache ) {\n\n\t\t\t\tvar values = [];\n\n\t\t\t\tfor ( var key in cache ) {\n\n\t\t\t\t\tvar data = cache[ key ];\n\t\t\t\t\tdelete data.metadata;\n\t\t\t\t\tvalues.push( data );\n\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\n\t\t\t}\n\n\t\t\tif ( isRoot ) {\n\n\t\t\t\tvar textures = extractFromCache( meta.textures );\n\t\t\t\tvar images = extractFromCache( meta.images );\n\n\t\t\t\tif ( textures.length > 0 ) data.textures = textures;\n\t\t\t\tif ( images.length > 0 ) data.images = images;\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.name = source.name;\n\n\t\t\tthis.fog = source.fog;\n\t\t\tthis.lights = source.lights;\n\n\t\t\tthis.blending = source.blending;\n\t\t\tthis.side = source.side;\n\t\t\tthis.flatShading = source.flatShading;\n\t\t\tthis.vertexColors = source.vertexColors;\n\n\t\t\tthis.opacity = source.opacity;\n\t\t\tthis.transparent = source.transparent;\n\n\t\t\tthis.blendSrc = source.blendSrc;\n\t\t\tthis.blendDst = source.blendDst;\n\t\t\tthis.blendEquation = source.blendEquation;\n\t\t\tthis.blendSrcAlpha = source.blendSrcAlpha;\n\t\t\tthis.blendDstAlpha = source.blendDstAlpha;\n\t\t\tthis.blendEquationAlpha = source.blendEquationAlpha;\n\n\t\t\tthis.depthFunc = source.depthFunc;\n\t\t\tthis.depthTest = source.depthTest;\n\t\t\tthis.depthWrite = source.depthWrite;\n\n\t\t\tthis.colorWrite = source.colorWrite;\n\n\t\t\tthis.precision = source.precision;\n\n\t\t\tthis.polygonOffset = source.polygonOffset;\n\t\t\tthis.polygonOffsetFactor = source.polygonOffsetFactor;\n\t\t\tthis.polygonOffsetUnits = source.polygonOffsetUnits;\n\n\t\t\tthis.dithering = source.dithering;\n\n\t\t\tthis.alphaTest = source.alphaTest;\n\t\t\tthis.premultipliedAlpha = source.premultipliedAlpha;\n\n\t\t\tthis.overdraw = source.overdraw;\n\n\t\t\tthis.visible = source.visible;\n\t\t\tthis.userData = JSON.parse( JSON.stringify( source.userData ) );\n\n\t\t\tthis.clipShadows = source.clipShadows;\n\t\t\tthis.clipIntersection = source.clipIntersection;\n\n\t\t\tvar srcPlanes = source.clippingPlanes,\n\t\t\t\tdstPlanes = null;\n\n\t\t\tif ( srcPlanes !== null ) {\n\n\t\t\t\tvar n = srcPlanes.length;\n\t\t\t\tdstPlanes = new Array( n );\n\n\t\t\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\t\t\tdstPlanes[ i ] = srcPlanes[ i ].clone();\n\n\t\t\t}\n\n\t\t\tthis.clippingPlanes = dstPlanes;\n\n\t\t\tthis.shadowSide = source.shadowSide;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdispose: function () {\n\n\t\t\tthis.dispatchEvent( { type: 'dispose' } );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * specularMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t * combine: THREE.Multiply,\n\t * reflectivity: ,\n\t * refractionRatio: ,\n\t *\n\t * depthTest: ,\n\t * depthWrite: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: \n\t * }\n\t */\n\n\tfunction MeshBasicMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // emissive\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshBasicMaterial.prototype = Object.create( Material.prototype );\n\tMeshBasicMaterial.prototype.constructor = MeshBasicMaterial;\n\n\tMeshBasicMaterial.prototype.isMeshBasicMaterial = true;\n\n\tMeshBasicMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * defines: { \"label\" : \"value\" },\n\t * uniforms: { \"parameter1\": { value: 1.0 }, \"parameter2\": { value2: 2 } },\n\t *\n\t * fragmentShader: ,\n\t * vertexShader: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * lights: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction ShaderMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'ShaderMaterial';\n\n\t\tthis.defines = {};\n\t\tthis.uniforms = {};\n\n\t\tthis.vertexShader = 'void main() {\\n\\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\\n}';\n\t\tthis.fragmentShader = 'void main() {\\n\\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\\n}';\n\n\t\tthis.linewidth = 1;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false; // set to use scene fog\n\t\tthis.lights = false; // set to use scene lights\n\t\tthis.clipping = false; // set to use user-defined clipping planes\n\n\t\tthis.skinning = false; // set to use skinning attribute streams\n\t\tthis.morphTargets = false; // set to use morph targets\n\t\tthis.morphNormals = false; // set to use morph normals\n\n\t\tthis.extensions = {\n\t\t\tderivatives: false, // set to use derivatives\n\t\t\tfragDepth: false, // set to use fragment depth values\n\t\t\tdrawBuffers: false, // set to use draw buffers\n\t\t\tshaderTextureLOD: false // set to use shader texture LOD\n\t\t};\n\n\t\t// When rendered geometry doesn't include these attributes but the material does,\n\t\t// use these default values in WebGL. This avoids errors when buffer data is missing.\n\t\tthis.defaultAttributeValues = {\n\t\t\t'color': [ 1, 1, 1 ],\n\t\t\t'uv': [ 0, 0 ],\n\t\t\t'uv2': [ 0, 0 ]\n\t\t};\n\n\t\tthis.index0AttributeName = undefined;\n\t\tthis.uniformsNeedUpdate = false;\n\n\t\tif ( parameters !== undefined ) {\n\n\t\t\tif ( parameters.attributes !== undefined ) {\n\n\t\t\t\tconsole.error( 'THREE.ShaderMaterial: attributes should now be defined in THREE.BufferGeometry instead.' );\n\n\t\t\t}\n\n\t\t\tthis.setValues( parameters );\n\n\t\t}\n\n\t}\n\n\tShaderMaterial.prototype = Object.create( Material.prototype );\n\tShaderMaterial.prototype.constructor = ShaderMaterial;\n\n\tShaderMaterial.prototype.isShaderMaterial = true;\n\n\tShaderMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.fragmentShader = source.fragmentShader;\n\t\tthis.vertexShader = source.vertexShader;\n\n\t\tthis.uniforms = UniformsUtils.clone( source.uniforms );\n\n\t\tthis.defines = Object.assign( {}, source.defines );\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.lights = source.lights;\n\t\tthis.clipping = source.clipping;\n\n\t\tthis.skinning = source.skinning;\n\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\tthis.extensions = source.extensions;\n\n\t\treturn this;\n\n\t};\n\n\tShaderMaterial.prototype.toJSON = function ( meta ) {\n\n\t\tvar data = Material.prototype.toJSON.call( this, meta );\n\n\t\tdata.uniforms = this.uniforms;\n\t\tdata.vertexShader = this.vertexShader;\n\t\tdata.fragmentShader = this.fragmentShader;\n\n\t\treturn data;\n\n\t};\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Ray( origin, direction ) {\n\n\t\tthis.origin = ( origin !== undefined ) ? origin : new Vector3();\n\t\tthis.direction = ( direction !== undefined ) ? direction : new Vector3();\n\n\t}\n\n\tObject.assign( Ray.prototype, {\n\n\t\tset: function ( origin, direction ) {\n\n\t\t\tthis.origin.copy( origin );\n\t\t\tthis.direction.copy( direction );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( ray ) {\n\n\t\t\tthis.origin.copy( ray.origin );\n\t\t\tthis.direction.copy( ray.direction );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tat: function ( t, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Ray: .at() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.direction ).multiplyScalar( t ).add( this.origin );\n\n\t\t},\n\n\t\tlookAt: function ( v ) {\n\n\t\t\tthis.direction.copy( v ).sub( this.origin ).normalize();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\trecast: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function recast( t ) {\n\n\t\t\t\tthis.origin.copy( this.at( t, v1 ) );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclosestPointToPoint: function ( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Ray: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\ttarget.subVectors( point, this.origin );\n\n\t\t\tvar directionDistance = target.dot( this.direction );\n\n\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\treturn target.copy( this.origin );\n\n\t\t\t}\n\n\t\t\treturn target.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t},\n\n\t\tdistanceToPoint: function ( point ) {\n\n\t\t\treturn Math.sqrt( this.distanceSqToPoint( point ) );\n\n\t\t},\n\n\t\tdistanceSqToPoint: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function distanceSqToPoint( point ) {\n\n\t\t\t\tvar directionDistance = v1.subVectors( point, this.origin ).dot( this.direction );\n\n\t\t\t\t// point behind the ray\n\n\t\t\t\tif ( directionDistance < 0 ) {\n\n\t\t\t\t\treturn this.origin.distanceToSquared( point );\n\n\t\t\t\t}\n\n\t\t\t\tv1.copy( this.direction ).multiplyScalar( directionDistance ).add( this.origin );\n\n\t\t\t\treturn v1.distanceToSquared( point );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tdistanceSqToSegment: function () {\n\n\t\t\tvar segCenter = new Vector3();\n\t\t\tvar segDir = new Vector3();\n\t\t\tvar diff = new Vector3();\n\n\t\t\treturn function distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {\n\n\t\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteDistRaySegment.h\n\t\t\t\t// It returns the min distance between the ray and the segment\n\t\t\t\t// defined by v0 and v1\n\t\t\t\t// It can also set two optional targets :\n\t\t\t\t// - The closest point on the ray\n\t\t\t\t// - The closest point on the segment\n\n\t\t\t\tsegCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );\n\t\t\t\tsegDir.copy( v1 ).sub( v0 ).normalize();\n\t\t\t\tdiff.copy( this.origin ).sub( segCenter );\n\n\t\t\t\tvar segExtent = v0.distanceTo( v1 ) * 0.5;\n\t\t\t\tvar a01 = - this.direction.dot( segDir );\n\t\t\t\tvar b0 = diff.dot( this.direction );\n\t\t\t\tvar b1 = - diff.dot( segDir );\n\t\t\t\tvar c = diff.lengthSq();\n\t\t\t\tvar det = Math.abs( 1 - a01 * a01 );\n\t\t\t\tvar s0, s1, sqrDist, extDet;\n\n\t\t\t\tif ( det > 0 ) {\n\n\t\t\t\t\t// The ray and segment are not parallel.\n\n\t\t\t\t\ts0 = a01 * b1 - b0;\n\t\t\t\t\ts1 = a01 * b0 - b1;\n\t\t\t\t\textDet = segExtent * det;\n\n\t\t\t\t\tif ( s0 >= 0 ) {\n\n\t\t\t\t\t\tif ( s1 >= - extDet ) {\n\n\t\t\t\t\t\t\tif ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t\t// region 0\n\t\t\t\t\t\t\t\t// Minimum at interior points of ray and segment.\n\n\t\t\t\t\t\t\t\tvar invDet = 1 / det;\n\t\t\t\t\t\t\t\ts0 *= invDet;\n\t\t\t\t\t\t\t\ts1 *= invDet;\n\t\t\t\t\t\t\t\tsqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t// region 1\n\n\t\t\t\t\t\t\t\ts1 = segExtent;\n\t\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 5\n\n\t\t\t\t\t\t\ts1 = - segExtent;\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( s1 <= - extDet ) {\n\n\t\t\t\t\t\t\t// region 4\n\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );\n\t\t\t\t\t\t\ts1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else if ( s1 <= extDet ) {\n\n\t\t\t\t\t\t\t// region 3\n\n\t\t\t\t\t\t\ts0 = 0;\n\t\t\t\t\t\t\ts1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\t\tsqrDist = s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// region 2\n\n\t\t\t\t\t\t\ts0 = Math.max( 0, - ( a01 * segExtent + b0 ) );\n\t\t\t\t\t\t\ts1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );\n\t\t\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Ray and segment are parallel.\n\n\t\t\t\t\ts1 = ( a01 > 0 ) ? - segExtent : segExtent;\n\t\t\t\t\ts0 = Math.max( 0, - ( a01 * s1 + b0 ) );\n\t\t\t\t\tsqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;\n\n\t\t\t\t}\n\n\t\t\t\tif ( optionalPointOnRay ) {\n\n\t\t\t\t\toptionalPointOnRay.copy( this.direction ).multiplyScalar( s0 ).add( this.origin );\n\n\t\t\t\t}\n\n\t\t\t\tif ( optionalPointOnSegment ) {\n\n\t\t\t\t\toptionalPointOnSegment.copy( segDir ).multiplyScalar( s1 ).add( segCenter );\n\n\t\t\t\t}\n\n\t\t\t\treturn sqrDist;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectSphere: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function intersectSphere( sphere, target ) {\n\n\t\t\t\tv1.subVectors( sphere.center, this.origin );\n\t\t\t\tvar tca = v1.dot( this.direction );\n\t\t\t\tvar d2 = v1.dot( v1 ) - tca * tca;\n\t\t\t\tvar radius2 = sphere.radius * sphere.radius;\n\n\t\t\t\tif ( d2 > radius2 ) return null;\n\n\t\t\t\tvar thc = Math.sqrt( radius2 - d2 );\n\n\t\t\t\t// t0 = first intersect point - entrance on front of sphere\n\t\t\t\tvar t0 = tca - thc;\n\n\t\t\t\t// t1 = second intersect point - exit point on back of sphere\n\t\t\t\tvar t1 = tca + thc;\n\n\t\t\t\t// test to see if both t0 and t1 are behind the ray - if so, return null\n\t\t\t\tif ( t0 < 0 && t1 < 0 ) return null;\n\n\t\t\t\t// test to see if t0 is behind the ray:\n\t\t\t\t// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,\n\t\t\t\t// in order to always return an intersect point that is in front of the ray.\n\t\t\t\tif ( t0 < 0 ) return this.at( t1, target );\n\n\t\t\t\t// else t0 is in front of the ray, so return the first collision point scaled by t0\n\t\t\t\treturn this.at( t0, target );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersectsSphere: function ( sphere ) {\n\n\t\t\treturn this.distanceToPoint( sphere.center ) <= sphere.radius;\n\n\t\t},\n\n\t\tdistanceToPlane: function ( plane ) {\n\n\t\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\t\tif ( denominator === 0 ) {\n\n\t\t\t\t// line is coplanar, return origin\n\t\t\t\tif ( plane.distanceToPoint( this.origin ) === 0 ) {\n\n\t\t\t\t\treturn 0;\n\n\t\t\t\t}\n\n\t\t\t\t// Null is preferable to undefined since undefined means.... it is undefined\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;\n\n\t\t\t// Return if the ray never intersects the plane\n\n\t\t\treturn t >= 0 ? t : null;\n\n\t\t},\n\n\t\tintersectPlane: function ( plane, target ) {\n\n\t\t\tvar t = this.distanceToPlane( plane );\n\n\t\t\tif ( t === null ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\treturn this.at( t, target );\n\n\t\t},\n\n\t\tintersectsPlane: function ( plane ) {\n\n\t\t\t// check if the ray lies on the plane first\n\n\t\t\tvar distToPoint = plane.distanceToPoint( this.origin );\n\n\t\t\tif ( distToPoint === 0 ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\tvar denominator = plane.normal.dot( this.direction );\n\n\t\t\tif ( denominator * distToPoint < 0 ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\t// ray origin is behind the plane (and is pointing behind it)\n\n\t\t\treturn false;\n\n\t\t},\n\n\t\tintersectBox: function ( box, target ) {\n\n\t\t\tvar tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\t\t\tvar invdirx = 1 / this.direction.x,\n\t\t\t\tinvdiry = 1 / this.direction.y,\n\t\t\t\tinvdirz = 1 / this.direction.z;\n\n\t\t\tvar origin = this.origin;\n\n\t\t\tif ( invdirx >= 0 ) {\n\n\t\t\t\ttmin = ( box.min.x - origin.x ) * invdirx;\n\t\t\t\ttmax = ( box.max.x - origin.x ) * invdirx;\n\n\t\t\t} else {\n\n\t\t\t\ttmin = ( box.max.x - origin.x ) * invdirx;\n\t\t\t\ttmax = ( box.min.x - origin.x ) * invdirx;\n\n\t\t\t}\n\n\t\t\tif ( invdiry >= 0 ) {\n\n\t\t\t\ttymin = ( box.min.y - origin.y ) * invdiry;\n\t\t\t\ttymax = ( box.max.y - origin.y ) * invdiry;\n\n\t\t\t} else {\n\n\t\t\t\ttymin = ( box.max.y - origin.y ) * invdiry;\n\t\t\t\ttymax = ( box.min.y - origin.y ) * invdiry;\n\n\t\t\t}\n\n\t\t\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;\n\n\t\t\t// These lines also handle the case where tmin or tmax is NaN\n\t\t\t// (result of 0 * Infinity). x !== x returns true if x is NaN\n\n\t\t\tif ( tymin > tmin || tmin !== tmin ) tmin = tymin;\n\n\t\t\tif ( tymax < tmax || tmax !== tmax ) tmax = tymax;\n\n\t\t\tif ( invdirz >= 0 ) {\n\n\t\t\t\ttzmin = ( box.min.z - origin.z ) * invdirz;\n\t\t\t\ttzmax = ( box.max.z - origin.z ) * invdirz;\n\n\t\t\t} else {\n\n\t\t\t\ttzmin = ( box.max.z - origin.z ) * invdirz;\n\t\t\t\ttzmax = ( box.min.z - origin.z ) * invdirz;\n\n\t\t\t}\n\n\t\t\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;\n\n\t\t\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\t\t\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t\t\t//return point closest to the ray (positive side)\n\n\t\t\tif ( tmax < 0 ) return null;\n\n\t\t\treturn this.at( tmin >= 0 ? tmin : tmax, target );\n\n\t\t},\n\n\t\tintersectsBox: ( function () {\n\n\t\t\tvar v = new Vector3();\n\n\t\t\treturn function intersectsBox( box ) {\n\n\t\t\t\treturn this.intersectBox( box, v ) !== null;\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tintersectTriangle: function () {\n\n\t\t\t// Compute the offset origin, edges, and normal.\n\t\t\tvar diff = new Vector3();\n\t\t\tvar edge1 = new Vector3();\n\t\t\tvar edge2 = new Vector3();\n\t\t\tvar normal = new Vector3();\n\n\t\t\treturn function intersectTriangle( a, b, c, backfaceCulling, target ) {\n\n\t\t\t\t// from http://www.geometrictools.com/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h\n\n\t\t\t\tedge1.subVectors( b, a );\n\t\t\t\tedge2.subVectors( c, a );\n\t\t\t\tnormal.crossVectors( edge1, edge2 );\n\n\t\t\t\t// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,\n\t\t\t\t// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by\n\t\t\t\t// |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))\n\t\t\t\t// |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))\n\t\t\t\t// |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)\n\t\t\t\tvar DdN = this.direction.dot( normal );\n\t\t\t\tvar sign;\n\n\t\t\t\tif ( DdN > 0 ) {\n\n\t\t\t\t\tif ( backfaceCulling ) return null;\n\t\t\t\t\tsign = 1;\n\n\t\t\t\t} else if ( DdN < 0 ) {\n\n\t\t\t\t\tsign = - 1;\n\t\t\t\t\tDdN = - DdN;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\tdiff.subVectors( this.origin, a );\n\t\t\t\tvar DdQxE2 = sign * this.direction.dot( edge2.crossVectors( diff, edge2 ) );\n\n\t\t\t\t// b1 < 0, no intersection\n\t\t\t\tif ( DdQxE2 < 0 ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\tvar DdE1xQ = sign * this.direction.dot( edge1.cross( diff ) );\n\n\t\t\t\t// b2 < 0, no intersection\n\t\t\t\tif ( DdE1xQ < 0 ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\t// b1+b2 > 1, no intersection\n\t\t\t\tif ( DdQxE2 + DdE1xQ > DdN ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\t// Line intersects triangle, check if ray does.\n\t\t\t\tvar QdN = - sign * diff.dot( normal );\n\n\t\t\t\t// t < 0, no intersection\n\t\t\t\tif ( QdN < 0 ) {\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t}\n\n\t\t\t\t// Ray intersects triangle.\n\t\t\t\treturn this.at( QdN / DdN, target );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tapplyMatrix4: function ( matrix4 ) {\n\n\t\t\tthis.origin.applyMatrix4( matrix4 );\n\t\t\tthis.direction.transformDirection( matrix4 );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( ray ) {\n\n\t\t\treturn ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Line3( start, end ) {\n\n\t\tthis.start = ( start !== undefined ) ? start : new Vector3();\n\t\tthis.end = ( end !== undefined ) ? end : new Vector3();\n\n\t}\n\n\tObject.assign( Line3.prototype, {\n\n\t\tset: function ( start, end ) {\n\n\t\t\tthis.start.copy( start );\n\t\t\tthis.end.copy( end );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( line ) {\n\n\t\t\tthis.start.copy( line.start );\n\t\t\tthis.end.copy( line.end );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetCenter: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .getCenter() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );\n\n\t\t},\n\n\t\tdelta: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .delta() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.subVectors( this.end, this.start );\n\n\t\t},\n\n\t\tdistanceSq: function () {\n\n\t\t\treturn this.start.distanceToSquared( this.end );\n\n\t\t},\n\n\t\tdistance: function () {\n\n\t\t\treturn this.start.distanceTo( this.end );\n\n\t\t},\n\n\t\tat: function ( t, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .at() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t\t},\n\n\t\tclosestPointToPointParameter: function () {\n\n\t\t\tvar startP = new Vector3();\n\t\t\tvar startEnd = new Vector3();\n\n\t\t\treturn function closestPointToPointParameter( point, clampToLine ) {\n\n\t\t\t\tstartP.subVectors( point, this.start );\n\t\t\t\tstartEnd.subVectors( this.end, this.start );\n\n\t\t\t\tvar startEnd2 = startEnd.dot( startEnd );\n\t\t\t\tvar startEnd_startP = startEnd.dot( startP );\n\n\t\t\t\tvar t = startEnd_startP / startEnd2;\n\n\t\t\t\tif ( clampToLine ) {\n\n\t\t\t\t\tt = _Math.clamp( t, 0, 1 );\n\n\t\t\t\t}\n\n\t\t\t\treturn t;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclosestPointToPoint: function ( point, clampToLine, target ) {\n\n\t\t\tvar t = this.closestPointToPointParameter( point, clampToLine );\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Line3: .closestPointToPoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn this.delta( target ).multiplyScalar( t ).add( this.start );\n\n\t\t},\n\n\t\tapplyMatrix4: function ( matrix ) {\n\n\t\t\tthis.start.applyMatrix4( matrix );\n\t\t\tthis.end.applyMatrix4( matrix );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( line ) {\n\n\t\t\treturn line.start.equals( this.start ) && line.end.equals( this.end );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Triangle( a, b, c ) {\n\n\t\tthis.a = ( a !== undefined ) ? a : new Vector3();\n\t\tthis.b = ( b !== undefined ) ? b : new Vector3();\n\t\tthis.c = ( c !== undefined ) ? c : new Vector3();\n\n\t}\n\n\tObject.assign( Triangle, {\n\n\t\tgetNormal: function () {\n\n\t\t\tvar v0 = new Vector3();\n\n\t\t\treturn function getNormal( a, b, c, target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Triangle: .getNormal() target is now required' );\n\t\t\t\t\ttarget = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\ttarget.subVectors( c, b );\n\t\t\t\tv0.subVectors( a, b );\n\t\t\t\ttarget.cross( v0 );\n\n\t\t\t\tvar targetLengthSq = target.lengthSq();\n\t\t\t\tif ( targetLengthSq > 0 ) {\n\n\t\t\t\t\treturn target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );\n\n\t\t\t\t}\n\n\t\t\t\treturn target.set( 0, 0, 0 );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\t// static/instance method to calculate barycentric coordinates\n\t\t// based on: http://www.blackpawn.com/texts/pointinpoly/default.html\n\t\tgetBarycoord: function () {\n\n\t\t\tvar v0 = new Vector3();\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar v2 = new Vector3();\n\n\t\t\treturn function getBarycoord( point, a, b, c, target ) {\n\n\t\t\t\tv0.subVectors( c, a );\n\t\t\t\tv1.subVectors( b, a );\n\t\t\t\tv2.subVectors( point, a );\n\n\t\t\t\tvar dot00 = v0.dot( v0 );\n\t\t\t\tvar dot01 = v0.dot( v1 );\n\t\t\t\tvar dot02 = v0.dot( v2 );\n\t\t\t\tvar dot11 = v1.dot( v1 );\n\t\t\t\tvar dot12 = v1.dot( v2 );\n\n\t\t\t\tvar denom = ( dot00 * dot11 - dot01 * dot01 );\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Triangle: .getBarycoord() target is now required' );\n\t\t\t\t\ttarget = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\t// collinear or singular triangle\n\t\t\t\tif ( denom === 0 ) {\n\n\t\t\t\t\t// arbitrary location outside of triangle?\n\t\t\t\t\t// not sure if this is the best idea, maybe should be returning undefined\n\t\t\t\t\treturn target.set( - 2, - 1, - 1 );\n\n\t\t\t\t}\n\n\t\t\t\tvar invDenom = 1 / denom;\n\t\t\t\tvar u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;\n\t\t\t\tvar v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;\n\n\t\t\t\t// barycentric coordinates must always sum to 1\n\t\t\t\treturn target.set( 1 - u - v, v, u );\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tcontainsPoint: function () {\n\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function containsPoint( point, a, b, c ) {\n\n\t\t\t\tTriangle.getBarycoord( point, a, b, c, v1 );\n\n\t\t\t\treturn ( v1.x >= 0 ) && ( v1.y >= 0 ) && ( ( v1.x + v1.y ) <= 1 );\n\n\t\t\t};\n\n\t\t}()\n\n\t} );\n\n\tObject.assign( Triangle.prototype, {\n\n\t\tset: function ( a, b, c ) {\n\n\t\t\tthis.a.copy( a );\n\t\t\tthis.b.copy( b );\n\t\t\tthis.c.copy( c );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPointsAndIndices: function ( points, i0, i1, i2 ) {\n\n\t\t\tthis.a.copy( points[ i0 ] );\n\t\t\tthis.b.copy( points[ i1 ] );\n\t\t\tthis.c.copy( points[ i2 ] );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( triangle ) {\n\n\t\t\tthis.a.copy( triangle.a );\n\t\t\tthis.b.copy( triangle.b );\n\t\t\tthis.c.copy( triangle.c );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetArea: function () {\n\n\t\t\tvar v0 = new Vector3();\n\t\t\tvar v1 = new Vector3();\n\n\t\t\treturn function getArea() {\n\n\t\t\t\tv0.subVectors( this.c, this.b );\n\t\t\t\tv1.subVectors( this.a, this.b );\n\n\t\t\t\treturn v0.cross( v1 ).length() * 0.5;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tgetMidpoint: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getMidpoint() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );\n\n\t\t},\n\n\t\tgetNormal: function ( target ) {\n\n\t\t\treturn Triangle.getNormal( this.a, this.b, this.c, target );\n\n\t\t},\n\n\t\tgetPlane: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Triangle: .getPlane() target is now required' );\n\t\t\t\ttarget = new Vector3();\n\n\t\t\t}\n\n\t\t\treturn target.setFromCoplanarPoints( this.a, this.b, this.c );\n\n\t\t},\n\n\t\tgetBarycoord: function ( point, target ) {\n\n\t\t\treturn Triangle.getBarycoord( point, this.a, this.b, this.c, target );\n\n\t\t},\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn Triangle.containsPoint( point, this.a, this.b, this.c );\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\treturn box.intersectsTriangle( this );\n\n\t\t},\n\n\t\tclosestPointToPoint: function () {\n\n\t\t\tvar plane = new Plane();\n\t\t\tvar edgeList = [ new Line3(), new Line3(), new Line3() ];\n\t\t\tvar projectedPoint = new Vector3();\n\t\t\tvar closestPoint = new Vector3();\n\n\t\t\treturn function closestPointToPoint( point, target ) {\n\n\t\t\t\tif ( target === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.Triangle: .closestPointToPoint() target is now required' );\n\t\t\t\t\ttarget = new Vector3();\n\n\t\t\t\t}\n\n\t\t\t\tvar minDistance = Infinity;\n\n\t\t\t\t// project the point onto the plane of the triangle\n\n\t\t\t\tplane.setFromCoplanarPoints( this.a, this.b, this.c );\n\t\t\t\tplane.projectPoint( point, projectedPoint );\n\n\t\t\t\t// check if the projection lies within the triangle\n\n\t\t\t\tif ( this.containsPoint( projectedPoint ) === true ) {\n\n\t\t\t\t\t// if so, this is the closest point\n\n\t\t\t\t\ttarget.copy( projectedPoint );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// if not, the point falls outside the triangle. the target is the closest point to the triangle's edges or vertices\n\n\t\t\t\t\tedgeList[ 0 ].set( this.a, this.b );\n\t\t\t\t\tedgeList[ 1 ].set( this.b, this.c );\n\t\t\t\t\tedgeList[ 2 ].set( this.c, this.a );\n\n\t\t\t\t\tfor ( var i = 0; i < edgeList.length; i ++ ) {\n\n\t\t\t\t\t\tedgeList[ i ].closestPointToPoint( projectedPoint, true, closestPoint );\n\n\t\t\t\t\t\tvar distance = projectedPoint.distanceToSquared( closestPoint );\n\n\t\t\t\t\t\tif ( distance < minDistance ) {\n\n\t\t\t\t\t\t\tminDistance = distance;\n\n\t\t\t\t\t\t\ttarget.copy( closestPoint );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn target;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tequals: function ( triangle ) {\n\n\t\t\treturn triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author jonobr1 / http://jonobr1.com/\n\t */\n\n\tfunction Mesh( geometry, material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Mesh';\n\n\t\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\t\tthis.material = material !== undefined ? material : new MeshBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\t\tthis.drawMode = TrianglesDrawMode;\n\n\t\tthis.updateMorphTargets();\n\n\t}\n\n\tMesh.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Mesh,\n\n\t\tisMesh: true,\n\n\t\tsetDrawMode: function ( value ) {\n\n\t\t\tthis.drawMode = value;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.drawMode = source.drawMode;\n\n\t\t\tif ( source.morphTargetInfluences !== undefined ) {\n\n\t\t\t\tthis.morphTargetInfluences = source.morphTargetInfluences.slice();\n\n\t\t\t}\n\n\t\t\tif ( source.morphTargetDictionary !== undefined ) {\n\n\t\t\t\tthis.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tupdateMorphTargets: function () {\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar m, ml, name;\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tvar morphAttributes = geometry.morphAttributes;\n\t\t\t\tvar keys = Object.keys( morphAttributes );\n\n\t\t\t\tif ( keys.length > 0 ) {\n\n\t\t\t\t\tvar morphAttribute = morphAttributes[ keys[ 0 ] ];\n\n\t\t\t\t\tif ( morphAttribute !== undefined ) {\n\n\t\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\t\tfor ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\t\tname = morphAttribute[ m ].name || String( m );\n\n\t\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar morphTargets = geometry.morphTargets;\n\n\t\t\t\tif ( morphTargets !== undefined && morphTargets.length > 0 ) {\n\n\t\t\t\t\tthis.morphTargetInfluences = [];\n\t\t\t\t\tthis.morphTargetDictionary = {};\n\n\t\t\t\t\tfor ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {\n\n\t\t\t\t\t\tname = morphTargets[ m ].name || String( m );\n\n\t\t\t\t\t\tthis.morphTargetInfluences.push( 0 );\n\t\t\t\t\t\tthis.morphTargetDictionary[ name ] = m;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\traycast: ( function () {\n\n\t\t\tvar inverseMatrix = new Matrix4();\n\t\t\tvar ray = new Ray();\n\t\t\tvar sphere = new Sphere();\n\n\t\t\tvar vA = new Vector3();\n\t\t\tvar vB = new Vector3();\n\t\t\tvar vC = new Vector3();\n\n\t\t\tvar tempA = new Vector3();\n\t\t\tvar tempB = new Vector3();\n\t\t\tvar tempC = new Vector3();\n\n\t\t\tvar uvA = new Vector2();\n\t\t\tvar uvB = new Vector2();\n\t\t\tvar uvC = new Vector2();\n\n\t\t\tvar barycoord = new Vector3();\n\n\t\t\tvar intersectionPoint = new Vector3();\n\t\t\tvar intersectionPointWorld = new Vector3();\n\n\t\t\tfunction uvIntersection( point, p1, p2, p3, uv1, uv2, uv3 ) {\n\n\t\t\t\tTriangle.getBarycoord( point, p1, p2, p3, barycoord );\n\n\t\t\t\tuv1.multiplyScalar( barycoord.x );\n\t\t\t\tuv2.multiplyScalar( barycoord.y );\n\t\t\t\tuv3.multiplyScalar( barycoord.z );\n\n\t\t\t\tuv1.add( uv2 ).add( uv3 );\n\n\t\t\t\treturn uv1.clone();\n\n\t\t\t}\n\n\t\t\tfunction checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {\n\n\t\t\t\tvar intersect;\n\n\t\t\t\tif ( material.side === BackSide ) {\n\n\t\t\t\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tintersect = ray.intersectTriangle( pA, pB, pC, material.side !== DoubleSide, point );\n\n\t\t\t\t}\n\n\t\t\t\tif ( intersect === null ) return null;\n\n\t\t\t\tintersectionPointWorld.copy( point );\n\t\t\t\tintersectionPointWorld.applyMatrix4( object.matrixWorld );\n\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectionPointWorld );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return null;\n\n\t\t\t\treturn {\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\tpoint: intersectionPointWorld.clone(),\n\t\t\t\t\tobject: object\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tfunction checkBufferGeometryIntersection( object, raycaster, ray, position, uv, a, b, c ) {\n\n\t\t\t\tvA.fromBufferAttribute( position, a );\n\t\t\t\tvB.fromBufferAttribute( position, b );\n\t\t\t\tvC.fromBufferAttribute( position, c );\n\n\t\t\t\tvar intersection = checkIntersection( object, object.material, raycaster, ray, vA, vB, vC, intersectionPoint );\n\n\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\tif ( uv ) {\n\n\t\t\t\t\t\tuvA.fromBufferAttribute( uv, a );\n\t\t\t\t\t\tuvB.fromBufferAttribute( uv, b );\n\t\t\t\t\t\tuvC.fromBufferAttribute( uv, c );\n\n\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, vA, vB, vC, uvA, uvB, uvC );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar face = new Face3( a, b, c );\n\t\t\t\t\tTriangle.getNormal( vA, vB, vC, face.normal );\n\n\t\t\t\t\tintersection.face = face;\n\n\t\t\t\t}\n\n\t\t\t\treturn intersection;\n\n\t\t\t}\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tvar geometry = this.geometry;\n\t\t\t\tvar material = this.material;\n\t\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t\tif ( material === undefined ) return;\n\n\t\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t\t//\n\n\t\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t\t// Check boundingBox before continuing\n\n\t\t\t\tif ( geometry.boundingBox !== null ) {\n\n\t\t\t\t\tif ( ray.intersectsBox( geometry.boundingBox ) === false ) return;\n\n\t\t\t\t}\n\n\t\t\t\tvar intersection;\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar a, b, c;\n\t\t\t\t\tvar index = geometry.index;\n\t\t\t\t\tvar position = geometry.attributes.position;\n\t\t\t\t\tvar uv = geometry.attributes.uv;\n\t\t\t\t\tvar i, l;\n\n\t\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t\t// indexed buffer geometry\n\n\t\t\t\t\t\tfor ( i = 0, l = index.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\ta = index.getX( i );\n\t\t\t\t\t\t\tb = index.getX( i + 1 );\n\t\t\t\t\t\t\tc = index.getX( i + 2 );\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\t\t\t// non-indexed buffer geometry\n\n\t\t\t\t\t\tfor ( i = 0, l = position.count; i < l; i += 3 ) {\n\n\t\t\t\t\t\t\ta = i;\n\t\t\t\t\t\t\tb = i + 1;\n\t\t\t\t\t\t\tc = i + 2;\n\n\t\t\t\t\t\t\tintersection = checkBufferGeometryIntersection( this, raycaster, ray, position, uv, a, b, c );\n\n\t\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\t\tintersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics\n\t\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar fvA, fvB, fvC;\n\t\t\t\t\tvar isMultiMaterial = Array.isArray( material );\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\t\tvar faces = geometry.faces;\n\t\t\t\t\tvar uvs;\n\n\t\t\t\t\tvar faceVertexUvs = geometry.faceVertexUvs[ 0 ];\n\t\t\t\t\tif ( faceVertexUvs.length > 0 ) uvs = faceVertexUvs;\n\n\t\t\t\t\tfor ( var f = 0, fl = faces.length; f < fl; f ++ ) {\n\n\t\t\t\t\t\tvar face = faces[ f ];\n\t\t\t\t\t\tvar faceMaterial = isMultiMaterial ? material[ face.materialIndex ] : material;\n\n\t\t\t\t\t\tif ( faceMaterial === undefined ) continue;\n\n\t\t\t\t\t\tfvA = vertices[ face.a ];\n\t\t\t\t\t\tfvB = vertices[ face.b ];\n\t\t\t\t\t\tfvC = vertices[ face.c ];\n\n\t\t\t\t\t\tif ( faceMaterial.morphTargets === true ) {\n\n\t\t\t\t\t\t\tvar morphTargets = geometry.morphTargets;\n\t\t\t\t\t\t\tvar morphInfluences = this.morphTargetInfluences;\n\n\t\t\t\t\t\t\tvA.set( 0, 0, 0 );\n\t\t\t\t\t\t\tvB.set( 0, 0, 0 );\n\t\t\t\t\t\t\tvC.set( 0, 0, 0 );\n\n\t\t\t\t\t\t\tfor ( var t = 0, tl = morphTargets.length; t < tl; t ++ ) {\n\n\t\t\t\t\t\t\t\tvar influence = morphInfluences[ t ];\n\n\t\t\t\t\t\t\t\tif ( influence === 0 ) continue;\n\n\t\t\t\t\t\t\t\tvar targets = morphTargets[ t ].vertices;\n\n\t\t\t\t\t\t\t\tvA.addScaledVector( tempA.subVectors( targets[ face.a ], fvA ), influence );\n\t\t\t\t\t\t\t\tvB.addScaledVector( tempB.subVectors( targets[ face.b ], fvB ), influence );\n\t\t\t\t\t\t\t\tvC.addScaledVector( tempC.subVectors( targets[ face.c ], fvC ), influence );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvA.add( fvA );\n\t\t\t\t\t\t\tvB.add( fvB );\n\t\t\t\t\t\t\tvC.add( fvC );\n\n\t\t\t\t\t\t\tfvA = vA;\n\t\t\t\t\t\t\tfvB = vB;\n\t\t\t\t\t\t\tfvC = vC;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tintersection = checkIntersection( this, faceMaterial, raycaster, ray, fvA, fvB, fvC, intersectionPoint );\n\n\t\t\t\t\t\tif ( intersection ) {\n\n\t\t\t\t\t\t\tif ( uvs && uvs[ f ] ) {\n\n\t\t\t\t\t\t\t\tvar uvs_f = uvs[ f ];\n\t\t\t\t\t\t\t\tuvA.copy( uvs_f[ 0 ] );\n\t\t\t\t\t\t\t\tuvB.copy( uvs_f[ 1 ] );\n\t\t\t\t\t\t\t\tuvC.copy( uvs_f[ 2 ] );\n\n\t\t\t\t\t\t\t\tintersection.uv = uvIntersection( intersectionPoint, fvA, fvB, fvC, uvA, uvB, uvC );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tintersection.face = face;\n\t\t\t\t\t\t\tintersection.faceIndex = f;\n\t\t\t\t\t\t\tintersects.push( intersection );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLBackground( renderer, state, objects, premultipliedAlpha ) {\n\n\t\tvar clearColor = new Color( 0x000000 );\n\t\tvar clearAlpha = 0;\n\n\t\tvar planeCamera, planeMesh;\n\t\tvar boxMesh;\n\n\t\tfunction render( renderList, scene, camera, forceClear ) {\n\n\t\t\tvar background = scene.background;\n\n\t\t\tif ( background === null ) {\n\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t} else if ( background && background.isColor ) {\n\n\t\t\t\tsetClear( background, 1 );\n\t\t\t\tforceClear = true;\n\n\t\t\t}\n\n\t\t\tif ( renderer.autoClear || forceClear ) {\n\n\t\t\t\trenderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );\n\n\t\t\t}\n\n\t\t\tif ( background && background.isCubeTexture ) {\n\n\t\t\t\tif ( boxMesh === undefined ) {\n\n\t\t\t\t\tboxMesh = new Mesh(\n\t\t\t\t\t\tnew BoxBufferGeometry( 1, 1, 1 ),\n\t\t\t\t\t\tnew ShaderMaterial( {\n\t\t\t\t\t\t\tuniforms: ShaderLib.cube.uniforms,\n\t\t\t\t\t\t\tvertexShader: ShaderLib.cube.vertexShader,\n\t\t\t\t\t\t\tfragmentShader: ShaderLib.cube.fragmentShader,\n\t\t\t\t\t\t\tside: BackSide,\n\t\t\t\t\t\t\tdepthTest: true,\n\t\t\t\t\t\t\tdepthWrite: false,\n\t\t\t\t\t\t\tfog: false\n\t\t\t\t\t\t} )\n\t\t\t\t\t);\n\n\t\t\t\t\tboxMesh.geometry.removeAttribute( 'normal' );\n\t\t\t\t\tboxMesh.geometry.removeAttribute( 'uv' );\n\n\t\t\t\t\tboxMesh.onBeforeRender = function ( renderer, scene, camera ) {\n\n\t\t\t\t\t\tthis.matrixWorld.copyPosition( camera.matrixWorld );\n\n\t\t\t\t\t};\n\n\t\t\t\t\tobjects.update( boxMesh );\n\n\t\t\t\t}\n\n\t\t\t\tboxMesh.material.uniforms.tCube.value = background;\n\n\t\t\t\trenderList.push( boxMesh, boxMesh.geometry, boxMesh.material, 0, null );\n\n\t\t\t} else if ( background && background.isTexture ) {\n\n\t\t\t\tif ( planeCamera === undefined ) {\n\n\t\t\t\t\tplaneCamera = new OrthographicCamera( - 1, 1, 1, - 1, 0, 1 );\n\n\t\t\t\t\tplaneMesh = new Mesh(\n\t\t\t\t\t\tnew PlaneBufferGeometry( 2, 2 ),\n\t\t\t\t\t\tnew MeshBasicMaterial( { depthTest: false, depthWrite: false, fog: false } )\n\t\t\t\t\t);\n\n\t\t\t\t\tobjects.update( planeMesh );\n\n\t\t\t\t}\n\n\t\t\t\tplaneMesh.material.map = background;\n\n\t\t\t\t// TODO Push this to renderList\n\n\t\t\t\trenderer.renderBufferDirect( planeCamera, null, planeMesh.geometry, planeMesh.material, planeMesh, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setClear( color, alpha ) {\n\n\t\t\tstate.buffers.color.setClear( color.r, color.g, color.b, alpha, premultipliedAlpha );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tgetClearColor: function () {\n\n\t\t\t\treturn clearColor;\n\n\t\t\t},\n\t\t\tsetClearColor: function ( color, alpha ) {\n\n\t\t\t\tclearColor.set( color );\n\t\t\t\tclearAlpha = alpha !== undefined ? alpha : 1;\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t},\n\t\t\tgetClearAlpha: function () {\n\n\t\t\t\treturn clearAlpha;\n\n\t\t\t},\n\t\t\tsetClearAlpha: function ( alpha ) {\n\n\t\t\t\tclearAlpha = alpha;\n\t\t\t\tsetClear( clearColor, clearAlpha );\n\n\t\t\t},\n\t\t\trender: render\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLBufferRenderer( gl, extensions, info ) {\n\n\t\tvar mode;\n\n\t\tfunction setMode( value ) {\n\n\t\t\tmode = value;\n\n\t\t}\n\n\t\tfunction render( start, count ) {\n\n\t\t\tgl.drawArrays( mode, start, count );\n\n\t\t\tinfo.update( count, mode );\n\n\t\t}\n\n\t\tfunction renderInstances( geometry, start, count ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\textension.drawArraysInstancedANGLE( mode, start, count, geometry.maxInstancedCount );\n\n\t\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.setMode = setMode;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLCapabilities( gl, extensions, parameters ) {\n\n\t\tvar maxAnisotropy;\n\n\t\tfunction getMaxAnisotropy() {\n\n\t\t\tif ( maxAnisotropy !== undefined ) return maxAnisotropy;\n\n\t\t\tvar extension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( extension !== null ) {\n\n\t\t\t\tmaxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );\n\n\t\t\t} else {\n\n\t\t\t\tmaxAnisotropy = 0;\n\n\t\t\t}\n\n\t\t\treturn maxAnisotropy;\n\n\t\t}\n\n\t\tfunction getMaxPrecision( precision ) {\n\n\t\t\tif ( precision === 'highp' ) {\n\n\t\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&\n\t\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {\n\n\t\t\t\t\treturn 'highp';\n\n\t\t\t\t}\n\n\t\t\t\tprecision = 'mediump';\n\n\t\t\t}\n\n\t\t\tif ( precision === 'mediump' ) {\n\n\t\t\t\tif ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&\n\t\t\t\t gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {\n\n\t\t\t\t\treturn 'mediump';\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn 'lowp';\n\n\t\t}\n\n\t\tvar precision = parameters.precision !== undefined ? parameters.precision : 'highp';\n\t\tvar maxPrecision = getMaxPrecision( precision );\n\n\t\tif ( maxPrecision !== precision ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );\n\t\t\tprecision = maxPrecision;\n\n\t\t}\n\n\t\tvar logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;\n\n\t\tvar maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );\n\t\tvar maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );\n\t\tvar maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );\n\t\tvar maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );\n\n\t\tvar maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\t\tvar maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );\n\t\tvar maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );\n\t\tvar maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );\n\n\t\tvar vertexTextures = maxVertexTextures > 0;\n\t\tvar floatFragmentTextures = !! extensions.get( 'OES_texture_float' );\n\t\tvar floatVertexTextures = vertexTextures && floatFragmentTextures;\n\n\t\treturn {\n\n\t\t\tgetMaxAnisotropy: getMaxAnisotropy,\n\t\t\tgetMaxPrecision: getMaxPrecision,\n\n\t\t\tprecision: precision,\n\t\t\tlogarithmicDepthBuffer: logarithmicDepthBuffer,\n\n\t\t\tmaxTextures: maxTextures,\n\t\t\tmaxVertexTextures: maxVertexTextures,\n\t\t\tmaxTextureSize: maxTextureSize,\n\t\t\tmaxCubemapSize: maxCubemapSize,\n\n\t\t\tmaxAttributes: maxAttributes,\n\t\t\tmaxVertexUniforms: maxVertexUniforms,\n\t\t\tmaxVaryings: maxVaryings,\n\t\t\tmaxFragmentUniforms: maxFragmentUniforms,\n\n\t\t\tvertexTextures: vertexTextures,\n\t\t\tfloatFragmentTextures: floatFragmentTextures,\n\t\t\tfloatVertexTextures: floatVertexTextures\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author tschw\n\t */\n\n\tfunction WebGLClipping() {\n\n\t\tvar scope = this,\n\n\t\t\tglobalState = null,\n\t\t\tnumGlobalPlanes = 0,\n\t\t\tlocalClippingEnabled = false,\n\t\t\trenderingShadows = false,\n\n\t\t\tplane = new Plane(),\n\t\t\tviewNormalMatrix = new Matrix3(),\n\n\t\t\tuniform = { value: null, needsUpdate: false };\n\n\t\tthis.uniform = uniform;\n\t\tthis.numPlanes = 0;\n\t\tthis.numIntersection = 0;\n\n\t\tthis.init = function ( planes, enableLocalClipping, camera ) {\n\n\t\t\tvar enabled =\n\t\t\t\tplanes.length !== 0 ||\n\t\t\t\tenableLocalClipping ||\n\t\t\t\t// enable state of previous frame - the clipping code has to\n\t\t\t\t// run another frame in order to reset the state:\n\t\t\t\tnumGlobalPlanes !== 0 ||\n\t\t\t\tlocalClippingEnabled;\n\n\t\t\tlocalClippingEnabled = enableLocalClipping;\n\n\t\t\tglobalState = projectPlanes( planes, camera, 0 );\n\t\t\tnumGlobalPlanes = planes.length;\n\n\t\t\treturn enabled;\n\n\t\t};\n\n\t\tthis.beginShadows = function () {\n\n\t\t\trenderingShadows = true;\n\t\t\tprojectPlanes( null );\n\n\t\t};\n\n\t\tthis.endShadows = function () {\n\n\t\t\trenderingShadows = false;\n\t\t\tresetGlobalState();\n\n\t\t};\n\n\t\tthis.setState = function ( planes, clipIntersection, clipShadows, camera, cache, fromCache ) {\n\n\t\t\tif ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {\n\n\t\t\t\t// there's no local clipping\n\n\t\t\t\tif ( renderingShadows ) {\n\n\t\t\t\t\t// there's no global clipping\n\n\t\t\t\t\tprojectPlanes( null );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tresetGlobalState();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar nGlobal = renderingShadows ? 0 : numGlobalPlanes,\n\t\t\t\t\tlGlobal = nGlobal * 4,\n\n\t\t\t\t\tdstArray = cache.clippingState || null;\n\n\t\t\t\tuniform.value = dstArray; // ensure unique state\n\n\t\t\t\tdstArray = projectPlanes( planes, camera, lGlobal, fromCache );\n\n\t\t\t\tfor ( var i = 0; i !== lGlobal; ++ i ) {\n\n\t\t\t\t\tdstArray[ i ] = globalState[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcache.clippingState = dstArray;\n\t\t\t\tthis.numIntersection = clipIntersection ? this.numPlanes : 0;\n\t\t\t\tthis.numPlanes += nGlobal;\n\n\t\t\t}\n\n\n\t\t};\n\n\t\tfunction resetGlobalState() {\n\n\t\t\tif ( uniform.value !== globalState ) {\n\n\t\t\t\tuniform.value = globalState;\n\t\t\t\tuniform.needsUpdate = numGlobalPlanes > 0;\n\n\t\t\t}\n\n\t\t\tscope.numPlanes = numGlobalPlanes;\n\t\t\tscope.numIntersection = 0;\n\n\t\t}\n\n\t\tfunction projectPlanes( planes, camera, dstOffset, skipTransform ) {\n\n\t\t\tvar nPlanes = planes !== null ? planes.length : 0,\n\t\t\t\tdstArray = null;\n\n\t\t\tif ( nPlanes !== 0 ) {\n\n\t\t\t\tdstArray = uniform.value;\n\n\t\t\t\tif ( skipTransform !== true || dstArray === null ) {\n\n\t\t\t\t\tvar flatSize = dstOffset + nPlanes * 4,\n\t\t\t\t\t\tviewMatrix = camera.matrixWorldInverse;\n\n\t\t\t\t\tviewNormalMatrix.getNormalMatrix( viewMatrix );\n\n\t\t\t\t\tif ( dstArray === null || dstArray.length < flatSize ) {\n\n\t\t\t\t\t\tdstArray = new Float32Array( flatSize );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {\n\n\t\t\t\t\t\tplane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );\n\n\t\t\t\t\t\tplane.normal.toArray( dstArray, i4 );\n\t\t\t\t\t\tdstArray[ i4 + 3 ] = plane.constant;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tuniform.value = dstArray;\n\t\t\t\tuniform.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tscope.numPlanes = nPlanes;\n\n\t\t\treturn dstArray;\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLExtensions( gl ) {\n\n\t\tvar extensions = {};\n\n\t\treturn {\n\n\t\t\tget: function ( name ) {\n\n\t\t\t\tif ( extensions[ name ] !== undefined ) {\n\n\t\t\t\t\treturn extensions[ name ];\n\n\t\t\t\t}\n\n\t\t\t\tvar extension;\n\n\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\tcase 'WEBGL_depth_texture':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'EXT_texture_filter_anisotropic':\n\t\t\t\t\t\textension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_s3tc':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'WEBGL_compressed_texture_pvrtc':\n\t\t\t\t\t\textension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\textension = gl.getExtension( name );\n\n\t\t\t\t}\n\n\t\t\t\tif ( extension === null ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );\n\n\t\t\t\t}\n\n\t\t\t\textensions[ name ] = extension;\n\n\t\t\t\treturn extension;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLGeometries( gl, attributes, info ) {\n\n\t\tvar geometries = {};\n\t\tvar wireframeAttributes = {};\n\n\t\tfunction onGeometryDispose( event ) {\n\n\t\t\tvar geometry = event.target;\n\t\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\t\tif ( buffergeometry.index !== null ) {\n\n\t\t\t\tattributes.remove( buffergeometry.index );\n\n\t\t\t}\n\n\t\t\tfor ( var name in buffergeometry.attributes ) {\n\n\t\t\t\tattributes.remove( buffergeometry.attributes[ name ] );\n\n\t\t\t}\n\n\t\t\tgeometry.removeEventListener( 'dispose', onGeometryDispose );\n\n\t\t\tdelete geometries[ geometry.id ];\n\n\t\t\t// TODO Remove duplicate code\n\n\t\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\t\tif ( attribute ) {\n\n\t\t\t\tattributes.remove( attribute );\n\t\t\t\tdelete wireframeAttributes[ geometry.id ];\n\n\t\t\t}\n\n\t\t\tattribute = wireframeAttributes[ buffergeometry.id ];\n\n\t\t\tif ( attribute ) {\n\n\t\t\t\tattributes.remove( attribute );\n\t\t\t\tdelete wireframeAttributes[ buffergeometry.id ];\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tinfo.memory.geometries --;\n\n\t\t}\n\n\t\tfunction get( object, geometry ) {\n\n\t\t\tvar buffergeometry = geometries[ geometry.id ];\n\n\t\t\tif ( buffergeometry ) return buffergeometry;\n\n\t\t\tgeometry.addEventListener( 'dispose', onGeometryDispose );\n\n\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\tbuffergeometry = geometry;\n\n\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\tif ( geometry._bufferGeometry === undefined ) {\n\n\t\t\t\t\tgeometry._bufferGeometry = new BufferGeometry().setFromObject( object );\n\n\t\t\t\t}\n\n\t\t\t\tbuffergeometry = geometry._bufferGeometry;\n\n\t\t\t}\n\n\t\t\tgeometries[ geometry.id ] = buffergeometry;\n\n\t\t\tinfo.memory.geometries ++;\n\n\t\t\treturn buffergeometry;\n\n\t\t}\n\n\t\tfunction update( geometry ) {\n\n\t\t\tvar index = geometry.index;\n\t\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattributes.update( index, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t\tfor ( var name in geometryAttributes ) {\n\n\t\t\t\tattributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );\n\n\t\t\t}\n\n\t\t\t// morph targets\n\n\t\t\tvar morphAttributes = geometry.morphAttributes;\n\n\t\t\tfor ( var name in morphAttributes ) {\n\n\t\t\t\tvar array = morphAttributes[ name ];\n\n\t\t\t\tfor ( var i = 0, l = array.length; i < l; i ++ ) {\n\n\t\t\t\t\tattributes.update( array[ i ], gl.ARRAY_BUFFER );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getWireframeAttribute( geometry ) {\n\n\t\t\tvar attribute = wireframeAttributes[ geometry.id ];\n\n\t\t\tif ( attribute ) return attribute;\n\n\t\t\tvar indices = [];\n\n\t\t\tvar geometryIndex = geometry.index;\n\t\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t\t// console.time( 'wireframe' );\n\n\t\t\tif ( geometryIndex !== null ) {\n\n\t\t\t\tvar array = geometryIndex.array;\n\n\t\t\t\tfor ( var i = 0, l = array.length; i < l; i += 3 ) {\n\n\t\t\t\t\tvar a = array[ i + 0 ];\n\t\t\t\t\tvar b = array[ i + 1 ];\n\t\t\t\t\tvar c = array[ i + 2 ];\n\n\t\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tvar array = geometryAttributes.position.array;\n\n\t\t\t\tfor ( var i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {\n\n\t\t\t\t\tvar a = i + 0;\n\t\t\t\t\tvar b = i + 1;\n\t\t\t\t\tvar c = i + 2;\n\n\t\t\t\t\tindices.push( a, b, b, c, c, a );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// console.timeEnd( 'wireframe' );\n\n\t\t\tattribute = new ( arrayMax( indices ) > 65535 ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );\n\n\t\t\tattributes.update( attribute, gl.ELEMENT_ARRAY_BUFFER );\n\n\t\t\twireframeAttributes[ geometry.id ] = attribute;\n\n\t\t\treturn attribute;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tget: get,\n\t\t\tupdate: update,\n\n\t\t\tgetWireframeAttribute: getWireframeAttribute\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLIndexedBufferRenderer( gl, extensions, info ) {\n\n\t\tvar mode;\n\n\t\tfunction setMode( value ) {\n\n\t\t\tmode = value;\n\n\t\t}\n\n\t\tvar type, bytesPerElement;\n\n\t\tfunction setIndex( value ) {\n\n\t\t\ttype = value.type;\n\t\t\tbytesPerElement = value.bytesPerElement;\n\n\t\t}\n\n\t\tfunction render( start, count ) {\n\n\t\t\tgl.drawElements( mode, count, type, start * bytesPerElement );\n\n\t\t\tinfo.update( count, mode );\n\n\t\t}\n\n\t\tfunction renderInstances( geometry, start, count ) {\n\n\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\tif ( extension === null ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\textension.drawElementsInstancedANGLE( mode, count, type, start * bytesPerElement, geometry.maxInstancedCount );\n\n\t\t\tinfo.update( count, mode, geometry.maxInstancedCount );\n\n\t\t}\n\n\t\t//\n\n\t\tthis.setMode = setMode;\n\t\tthis.setIndex = setIndex;\n\t\tthis.render = render;\n\t\tthis.renderInstances = renderInstances;\n\n\t}\n\n\t/**\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction WebGLInfo( gl ) {\n\n\t\tvar memory = {\n\t\t\tgeometries: 0,\n\t\t\ttextures: 0\n\t\t};\n\n\t\tvar render = {\n\t\t\tframe: 0,\n\t\t\tcalls: 0,\n\t\t\ttriangles: 0,\n\t\t\tpoints: 0,\n\t\t\tlines: 0\n\t\t};\n\n\t\tfunction update( count, mode, instanceCount ) {\n\n\t\t\tinstanceCount = instanceCount || 1;\n\n\t\t\trender.calls ++;\n\n\t\t\tswitch ( mode ) {\n\n\t\t\t\tcase gl.TRIANGLES:\n\t\t\t\t\trender.triangles += instanceCount * ( count / 3 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.TRIANGLE_STRIP:\n\t\t\t\tcase gl.TRIANGLE_FAN:\n\t\t\t\t\trender.triangles += instanceCount * ( count - 2 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.LINES:\n\t\t\t\t\trender.lines += instanceCount * ( count / 2 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.LINE_STRIP:\n\t\t\t\t\trender.lines += instanceCount * ( count - 1 );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.LINE_LOOP:\n\t\t\t\t\trender.lines += instanceCount * count;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase gl.POINTS:\n\t\t\t\t\trender.points += instanceCount * count;\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tconsole.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction reset() {\n\n\t\t\trender.frame ++;\n\t\t\trender.calls = 0;\n\t\t\trender.triangles = 0;\n\t\t\trender.points = 0;\n\t\t\trender.lines = 0;\n\n\t\t}\n\n\t\treturn {\n\t\t\tmemory: memory,\n\t\t\trender: render,\n\t\t\tprograms: null,\n\t\t\tautoReset: true,\n\t\t\treset: reset,\n\t\t\tupdate: update\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction absNumericalSort( a, b ) {\n\n\t\treturn Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );\n\n\t}\n\n\tfunction WebGLMorphtargets( gl ) {\n\n\t\tvar influencesList = {};\n\t\tvar morphInfluences = new Float32Array( 8 );\n\n\t\tfunction update( object, geometry, material, program ) {\n\n\t\t\tvar objectInfluences = object.morphTargetInfluences;\n\n\t\t\tvar length = objectInfluences.length;\n\n\t\t\tvar influences = influencesList[ geometry.id ];\n\n\t\t\tif ( influences === undefined ) {\n\n\t\t\t\t// initialise list\n\n\t\t\t\tinfluences = [];\n\n\t\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\t\tinfluences[ i ] = [ i, 0 ];\n\n\t\t\t\t}\n\n\t\t\t\tinfluencesList[ geometry.id ] = influences;\n\n\t\t\t}\n\n\t\t\tvar morphTargets = material.morphTargets && geometry.morphAttributes.position;\n\t\t\tvar morphNormals = material.morphNormals && geometry.morphAttributes.normal;\n\n\t\t\t// Remove current morphAttributes\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tvar influence = influences[ i ];\n\n\t\t\t\tif ( influence[ 1 ] !== 0 ) {\n\n\t\t\t\t\tif ( morphTargets ) geometry.removeAttribute( 'morphTarget' + i );\n\t\t\t\t\tif ( morphNormals ) geometry.removeAttribute( 'morphNormal' + i );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Collect influences\n\n\t\t\tfor ( var i = 0; i < length; i ++ ) {\n\n\t\t\t\tvar influence = influences[ i ];\n\n\t\t\t\tinfluence[ 0 ] = i;\n\t\t\t\tinfluence[ 1 ] = objectInfluences[ i ];\n\n\t\t\t}\n\n\t\t\tinfluences.sort( absNumericalSort );\n\n\t\t\t// Add morphAttributes\n\n\t\t\tfor ( var i = 0; i < 8; i ++ ) {\n\n\t\t\t\tvar influence = influences[ i ];\n\n\t\t\t\tif ( influence ) {\n\n\t\t\t\t\tvar index = influence[ 0 ];\n\t\t\t\t\tvar value = influence[ 1 ];\n\n\t\t\t\t\tif ( value ) {\n\n\t\t\t\t\t\tif ( morphTargets ) geometry.addAttribute( 'morphTarget' + i, morphTargets[ index ] );\n\t\t\t\t\t\tif ( morphNormals ) geometry.addAttribute( 'morphNormal' + i, morphNormals[ index ] );\n\n\t\t\t\t\t\tmorphInfluences[ i ] = value;\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tmorphInfluences[ i ] = 0;\n\n\t\t\t}\n\n\t\t\tprogram.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tupdate: update\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLObjects( geometries, info ) {\n\n\t\tvar updateList = {};\n\n\t\tfunction update( object ) {\n\n\t\t\tvar frame = info.render.frame;\n\n\t\t\tvar geometry = object.geometry;\n\t\t\tvar buffergeometry = geometries.get( object, geometry );\n\n\t\t\t// Update once per frame\n\n\t\t\tif ( updateList[ buffergeometry.id ] !== frame ) {\n\n\t\t\t\tif ( geometry.isGeometry ) {\n\n\t\t\t\t\tbuffergeometry.updateFromObject( object );\n\n\t\t\t\t}\n\n\t\t\t\tgeometries.update( buffergeometry );\n\n\t\t\t\tupdateList[ buffergeometry.id ] = frame;\n\n\t\t\t}\n\n\t\t\treturn buffergeometry;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tupdateList = {};\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tupdate: update,\n\t\t\tdispose: dispose\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction CubeTexture( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) {\n\n\t\timages = images !== undefined ? images : [];\n\t\tmapping = mapping !== undefined ? mapping : CubeReflectionMapping;\n\n\t\tTexture.call( this, images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.flipY = false;\n\n\t}\n\n\tCubeTexture.prototype = Object.create( Texture.prototype );\n\tCubeTexture.prototype.constructor = CubeTexture;\n\n\tCubeTexture.prototype.isCubeTexture = true;\n\n\tObject.defineProperty( CubeTexture.prototype, 'images', {\n\n\t\tget: function () {\n\n\t\t\treturn this.image;\n\n\t\t},\n\n\t\tset: function ( value ) {\n\n\t\t\tthis.image = value;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author tschw\n\t *\n\t * Uniforms of a program.\n\t * Those form a tree structure with a special top-level container for the root,\n\t * which you get by calling 'new WebGLUniforms( gl, program, renderer )'.\n\t *\n\t *\n\t * Properties of inner nodes including the top-level container:\n\t *\n\t * .seq - array of nested uniforms\n\t * .map - nested uniforms by name\n\t *\n\t *\n\t * Methods of all nodes except the top-level container:\n\t *\n\t * .setValue( gl, value, [renderer] )\n\t *\n\t * \t\tuploads a uniform value(s)\n\t * \tthe 'renderer' parameter is needed for sampler uniforms\n\t *\n\t *\n\t * Static methods of the top-level container (renderer factorizations):\n\t *\n\t * .upload( gl, seq, values, renderer )\n\t *\n\t * \t\tsets uniforms in 'seq' to 'values[id].value'\n\t *\n\t * .seqWithValue( seq, values ) : filteredSeq\n\t *\n\t * \t\tfilters 'seq' entries with corresponding entry in values\n\t *\n\t *\n\t * Methods of the top-level container (renderer factorizations):\n\t *\n\t * .setValue( gl, name, value )\n\t *\n\t * \t\tsets uniform with name 'name' to 'value'\n\t *\n\t * .set( gl, obj, prop )\n\t *\n\t * \t\tsets uniform from object and property with same name than uniform\n\t *\n\t * .setOptional( gl, obj, prop )\n\t *\n\t * \t\tlike .set for an optional property of the object\n\t *\n\t */\n\n\tvar emptyTexture = new Texture();\n\tvar emptyCubeTexture = new CubeTexture();\n\n\t// --- Base for inner nodes (including the root) ---\n\n\tfunction UniformContainer() {\n\n\t\tthis.seq = [];\n\t\tthis.map = {};\n\n\t}\n\n\t// --- Utilities ---\n\n\t// Array Caches (provide typed arrays for temporary by size)\n\n\tvar arrayCacheF32 = [];\n\tvar arrayCacheI32 = [];\n\n\t// Float32Array caches used for uploading Matrix uniforms\n\n\tvar mat4array = new Float32Array( 16 );\n\tvar mat3array = new Float32Array( 9 );\n\tvar mat2array = new Float32Array( 4 );\n\n\t// Flattening for arrays of vectors and matrices\n\n\tfunction flatten( array, nBlocks, blockSize ) {\n\n\t\tvar firstElem = array[ 0 ];\n\n\t\tif ( firstElem <= 0 || firstElem > 0 ) return array;\n\t\t// unoptimized: ! isNaN( firstElem )\n\t\t// see http://jacksondunstan.com/articles/983\n\n\t\tvar n = nBlocks * blockSize,\n\t\t\tr = arrayCacheF32[ n ];\n\n\t\tif ( r === undefined ) {\n\n\t\t\tr = new Float32Array( n );\n\t\t\tarrayCacheF32[ n ] = r;\n\n\t\t}\n\n\t\tif ( nBlocks !== 0 ) {\n\n\t\t\tfirstElem.toArray( r, 0 );\n\n\t\t\tfor ( var i = 1, offset = 0; i !== nBlocks; ++ i ) {\n\n\t\t\t\toffset += blockSize;\n\t\t\t\tarray[ i ].toArray( r, offset );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn r;\n\n\t}\n\n\tfunction arraysEqual( a, b ) {\n\n\t\tif ( a.length !== b.length ) return false;\n\n\t\tfor ( var i = 0, l = a.length; i < l; i ++ ) {\n\n\t\t\tif ( a[ i ] !== b[ i ] ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction copyArray( a, b ) {\n\n\t\tfor ( var i = 0, l = b.length; i < l; i ++ ) {\n\n\t\t\ta[ i ] = b[ i ];\n\n\t\t}\n\n\t}\n\n\t// Texture unit allocation\n\n\tfunction allocTexUnits( renderer, n ) {\n\n\t\tvar r = arrayCacheI32[ n ];\n\n\t\tif ( r === undefined ) {\n\n\t\t\tr = new Int32Array( n );\n\t\t\tarrayCacheI32[ n ] = r;\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== n; ++ i )\n\t\t\tr[ i ] = renderer.allocTextureUnit();\n\n\t\treturn r;\n\n\t}\n\n\t// --- Setters ---\n\n\t// Note: Defining these methods externally, because they come in a bunch\n\t// and this way their names minify.\n\n\t// Single scalar\n\n\tfunction setValue1f( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( cache[ 0 ] === v ) return;\n\n\t\tgl.uniform1f( this.addr, v );\n\n\t\tcache[ 0 ] = v;\n\n\t}\n\n\tfunction setValue1i( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( cache[ 0 ] === v ) return;\n\n\t\tgl.uniform1i( this.addr, v );\n\n\t\tcache[ 0 ] = v;\n\n\t}\n\n\t// Single float vector (from flat array or THREE.VectorN)\n\n\tfunction setValue2fv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( v.x !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {\n\n\t\t\t\tgl.uniform2f( this.addr, v.x, v.y );\n\n\t\t\t\tcache[ 0 ] = v.x;\n\t\t\t\tcache[ 1 ] = v.y;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniform2fv( this.addr, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t}\n\n\t}\n\n\tfunction setValue3fv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( v.x !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {\n\n\t\t\t\tgl.uniform3f( this.addr, v.x, v.y, v.z );\n\n\t\t\t\tcache[ 0 ] = v.x;\n\t\t\t\tcache[ 1 ] = v.y;\n\t\t\t\tcache[ 2 ] = v.z;\n\n\t\t\t}\n\n\t\t} else if ( v.r !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {\n\n\t\t\t\tgl.uniform3f( this.addr, v.r, v.g, v.b );\n\n\t\t\t\tcache[ 0 ] = v.r;\n\t\t\t\tcache[ 1 ] = v.g;\n\t\t\t\tcache[ 2 ] = v.b;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniform3fv( this.addr, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t}\n\n\t}\n\n\tfunction setValue4fv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( v.x !== undefined ) {\n\n\t\t\tif ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {\n\n\t\t\t\tgl.uniform4f( this.addr, v.x, v.y, v.z, v.w );\n\n\t\t\t\tcache[ 0 ] = v.x;\n\t\t\t\tcache[ 1 ] = v.y;\n\t\t\t\tcache[ 2 ] = v.z;\n\t\t\t\tcache[ 3 ] = v.w;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniform4fv( this.addr, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t}\n\n\t}\n\n\t// Single matrix (from flat array or MatrixN)\n\n\tfunction setValue2fm( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar elements = v.elements;\n\n\t\tif ( elements === undefined ) {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniformMatrix2fv( this.addr, false, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\t\tmat2array.set( elements );\n\n\t\t\tgl.uniformMatrix2fv( this.addr, false, mat2array );\n\n\t\t\tcopyArray( cache, elements );\n\n\t\t}\n\n\t}\n\n\tfunction setValue3fm( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar elements = v.elements;\n\n\t\tif ( elements === undefined ) {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniformMatrix3fv( this.addr, false, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\t\tmat3array.set( elements );\n\n\t\t\tgl.uniformMatrix3fv( this.addr, false, mat3array );\n\n\t\t\tcopyArray( cache, elements );\n\n\t\t}\n\n\t}\n\n\tfunction setValue4fm( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar elements = v.elements;\n\n\t\tif ( elements === undefined ) {\n\n\t\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\t\tgl.uniformMatrix4fv( this.addr, false, v );\n\n\t\t\tcopyArray( cache, v );\n\n\t\t} else {\n\n\t\t\tif ( arraysEqual( cache, elements ) ) return;\n\n\t\t\tmat4array.set( elements );\n\n\t\t\tgl.uniformMatrix4fv( this.addr, false, mat4array );\n\n\t\t\tcopyArray( cache, elements );\n\n\t\t}\n\n\t}\n\n\t// Single texture (2D / Cube)\n\n\tfunction setValueT1( gl, v, renderer ) {\n\n\t\tvar cache = this.cache;\n\t\tvar unit = renderer.allocTextureUnit();\n\n\t\tif ( cache[ 0 ] !== unit ) {\n\n\t\t\tgl.uniform1i( this.addr, unit );\n\t\t\tcache[ 0 ] = unit;\n\n\t\t}\n\n\t\trenderer.setTexture2D( v || emptyTexture, unit );\n\n\t}\n\n\tfunction setValueT6( gl, v, renderer ) {\n\n\t\tvar cache = this.cache;\n\t\tvar unit = renderer.allocTextureUnit();\n\n\t\tif ( cache[ 0 ] !== unit ) {\n\n\t\t\tgl.uniform1i( this.addr, unit );\n\t\t\tcache[ 0 ] = unit;\n\n\t\t}\n\n\t\trenderer.setTextureCube( v || emptyCubeTexture, unit );\n\n\t}\n\n\t// Integer / Boolean vectors or arrays thereof (always flat arrays)\n\n\tfunction setValue2iv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform2iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n\tfunction setValue3iv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform3iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n\tfunction setValue4iv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform4iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n\t// Helper to pick the right setter for the singular case\n\n\tfunction getSingularSetter( type ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 0x1406: return setValue1f; // FLOAT\n\t\t\tcase 0x8b50: return setValue2fv; // _VEC2\n\t\t\tcase 0x8b51: return setValue3fv; // _VEC3\n\t\t\tcase 0x8b52: return setValue4fv; // _VEC4\n\n\t\t\tcase 0x8b5a: return setValue2fm; // _MAT2\n\t\t\tcase 0x8b5b: return setValue3fm; // _MAT3\n\t\t\tcase 0x8b5c: return setValue4fm; // _MAT4\n\n\t\t\tcase 0x8b5e: case 0x8d66: return setValueT1; // SAMPLER_2D, SAMPLER_EXTERNAL_OES\n\t\t\tcase 0x8b60: return setValueT6; // SAMPLER_CUBE\n\n\t\t\tcase 0x1404: case 0x8b56: return setValue1i; // INT, BOOL\n\t\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t\t}\n\n\t}\n\n\t// Array of scalars\n\n\tfunction setValue1fv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform1fv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\tfunction setValue1iv( gl, v ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( arraysEqual( cache, v ) ) return;\n\n\t\tgl.uniform1iv( this.addr, v );\n\n\t\tcopyArray( cache, v );\n\n\t}\n\n\t// Array of vectors (flat or from THREE classes)\n\n\tfunction setValueV2a( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar data = flatten( v, this.size, 2 );\n\n\t\tif ( arraysEqual( cache, data ) ) return;\n\n\t\tgl.uniform2fv( this.addr, data );\n\n\t\tthis.updateCache( data );\n\n\t}\n\n\tfunction setValueV3a( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar data = flatten( v, this.size, 3 );\n\n\t\tif ( arraysEqual( cache, data ) ) return;\n\n\t\tgl.uniform3fv( this.addr, data );\n\n\t\tthis.updateCache( data );\n\n\t}\n\n\tfunction setValueV4a( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar data = flatten( v, this.size, 4 );\n\n\t\tif ( arraysEqual( cache, data ) ) return;\n\n\t\tgl.uniform4fv( this.addr, data );\n\n\t\tthis.updateCache( data );\n\n\t}\n\n\t// Array of matrices (flat or from THREE clases)\n\n\tfunction setValueM2a( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar data = flatten( v, this.size, 4 );\n\n\t\tif ( arraysEqual( cache, data ) ) return;\n\n\t\tgl.uniformMatrix2fv( this.addr, false, data );\n\n\t\tthis.updateCache( data );\n\n\t}\n\n\tfunction setValueM3a( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar data = flatten( v, this.size, 9 );\n\n\t\tif ( arraysEqual( cache, data ) ) return;\n\n\t\tgl.uniformMatrix3fv( this.addr, false, data );\n\n\t\tthis.updateCache( data );\n\n\t}\n\n\tfunction setValueM4a( gl, v ) {\n\n\t\tvar cache = this.cache;\n\t\tvar data = flatten( v, this.size, 16 );\n\n\t\tif ( arraysEqual( cache, data ) ) return;\n\n\t\tgl.uniformMatrix4fv( this.addr, false, data );\n\n\t\tthis.updateCache( data );\n\n\t}\n\n\t// Array of textures (2D / Cube)\n\n\tfunction setValueT1a( gl, v, renderer ) {\n\n\t\tvar cache = this.cache;\n\t\tvar n = v.length;\n\n\t\tvar units = allocTexUnits( renderer, n );\n\n\t\tif ( arraysEqual( cache, units ) === false ) {\n\n\t\t\tgl.uniform1iv( this.addr, units );\n\t\t\tcopyArray( cache, units );\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\t\trenderer.setTexture2D( v[ i ] || emptyTexture, units[ i ] );\n\n\t\t}\n\n\t}\n\n\tfunction setValueT6a( gl, v, renderer ) {\n\n\t\tvar cache = this.cache;\n\t\tvar n = v.length;\n\n\t\tvar units = allocTexUnits( renderer, n );\n\n\t\tif ( arraysEqual( cache, units ) === false ) {\n\n\t\t\tgl.uniform1iv( this.addr, units );\n\t\t\tcopyArray( cache, units );\n\n\t\t}\n\n\t\tfor ( var i = 0; i !== n; ++ i ) {\n\n\t\t\trenderer.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );\n\n\t\t}\n\n\t}\n\n\t// Helper to pick the right setter for a pure (bottom-level) array\n\n\tfunction getPureArraySetter( type ) {\n\n\t\tswitch ( type ) {\n\n\t\t\tcase 0x1406: return setValue1fv; // FLOAT\n\t\t\tcase 0x8b50: return setValueV2a; // _VEC2\n\t\t\tcase 0x8b51: return setValueV3a; // _VEC3\n\t\t\tcase 0x8b52: return setValueV4a; // _VEC4\n\n\t\t\tcase 0x8b5a: return setValueM2a; // _MAT2\n\t\t\tcase 0x8b5b: return setValueM3a; // _MAT3\n\t\t\tcase 0x8b5c: return setValueM4a; // _MAT4\n\n\t\t\tcase 0x8b5e: return setValueT1a; // SAMPLER_2D\n\t\t\tcase 0x8b60: return setValueT6a; // SAMPLER_CUBE\n\n\t\t\tcase 0x1404: case 0x8b56: return setValue1iv; // INT, BOOL\n\t\t\tcase 0x8b53: case 0x8b57: return setValue2iv; // _VEC2\n\t\t\tcase 0x8b54: case 0x8b58: return setValue3iv; // _VEC3\n\t\t\tcase 0x8b55: case 0x8b59: return setValue4iv; // _VEC4\n\n\t\t}\n\n\t}\n\n\t// --- Uniform Classes ---\n\n\tfunction SingleUniform( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.setValue = getSingularSetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n\tfunction PureArrayUniform( id, activeInfo, addr ) {\n\n\t\tthis.id = id;\n\t\tthis.addr = addr;\n\t\tthis.cache = [];\n\t\tthis.size = activeInfo.size;\n\t\tthis.setValue = getPureArraySetter( activeInfo.type );\n\n\t\t// this.path = activeInfo.name; // DEBUG\n\n\t}\n\n\tPureArrayUniform.prototype.updateCache = function ( data ) {\n\n\t\tvar cache = this.cache;\n\n\t\tif ( data instanceof Float32Array && cache.length !== data.length ) {\n\n\t\t\tthis.cache = new Float32Array( data.length );\n\n\t\t}\n\n\t\tcopyArray( cache, data );\n\n\t};\n\n\tfunction StructuredUniform( id ) {\n\n\t\tthis.id = id;\n\n\t\tUniformContainer.call( this ); // mix-in\n\n\t}\n\n\tStructuredUniform.prototype.setValue = function ( gl, value ) {\n\n\t\t// Note: Don't need an extra 'renderer' parameter, since samplers\n\t\t// are not allowed in structured uniforms.\n\n\t\tvar seq = this.seq;\n\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tvar u = seq[ i ];\n\t\t\tu.setValue( gl, value[ u.id ] );\n\n\t\t}\n\n\t};\n\n\t// --- Top-level ---\n\n\t// Parser - builds up the property tree from the path strings\n\n\tvar RePathPart = /([\\w\\d_]+)(\\])?(\\[|\\.)?/g;\n\n\t// extracts\n\t// \t- the identifier (member name or array index)\n\t// - followed by an optional right bracket (found when array index)\n\t// - followed by an optional left bracket or dot (type of subscript)\n\t//\n\t// Note: These portions can be read in a non-overlapping fashion and\n\t// allow straightforward parsing of the hierarchy that WebGL encodes\n\t// in the uniform names.\n\n\tfunction addUniform( container, uniformObject ) {\n\n\t\tcontainer.seq.push( uniformObject );\n\t\tcontainer.map[ uniformObject.id ] = uniformObject;\n\n\t}\n\n\tfunction parseUniform( activeInfo, addr, container ) {\n\n\t\tvar path = activeInfo.name,\n\t\t\tpathLength = path.length;\n\n\t\t// reset RegExp object, because of the early exit of a previous run\n\t\tRePathPart.lastIndex = 0;\n\n\t\twhile ( true ) {\n\n\t\t\tvar match = RePathPart.exec( path ),\n\t\t\t\tmatchEnd = RePathPart.lastIndex,\n\n\t\t\t\tid = match[ 1 ],\n\t\t\t\tidIsIndex = match[ 2 ] === ']',\n\t\t\t\tsubscript = match[ 3 ];\n\n\t\t\tif ( idIsIndex ) id = id | 0; // convert to integer\n\n\t\t\tif ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {\n\n\t\t\t\t// bare name or \"pure\" bottom-level array \"[0]\" suffix\n\n\t\t\t\taddUniform( container, subscript === undefined ?\n\t\t\t\t\tnew SingleUniform( id, activeInfo, addr ) :\n\t\t\t\t\tnew PureArrayUniform( id, activeInfo, addr ) );\n\n\t\t\t\tbreak;\n\n\t\t\t} else {\n\n\t\t\t\t// step into inner node / create it in case it doesn't exist\n\n\t\t\t\tvar map = container.map, next = map[ id ];\n\n\t\t\t\tif ( next === undefined ) {\n\n\t\t\t\t\tnext = new StructuredUniform( id );\n\t\t\t\t\taddUniform( container, next );\n\n\t\t\t\t}\n\n\t\t\t\tcontainer = next;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// Root Container\n\n\tfunction WebGLUniforms( gl, program, renderer ) {\n\n\t\tUniformContainer.call( this );\n\n\t\tthis.renderer = renderer;\n\n\t\tvar n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );\n\n\t\tfor ( var i = 0; i < n; ++ i ) {\n\n\t\t\tvar info = gl.getActiveUniform( program, i ),\n\t\t\t\taddr = gl.getUniformLocation( program, info.name );\n\n\t\t\tparseUniform( info, addr, this );\n\n\t\t}\n\n\t}\n\n\tWebGLUniforms.prototype.setValue = function ( gl, name, value ) {\n\n\t\tvar u = this.map[ name ];\n\n\t\tif ( u !== undefined ) u.setValue( gl, value, this.renderer );\n\n\t};\n\n\tWebGLUniforms.prototype.setOptional = function ( gl, object, name ) {\n\n\t\tvar v = object[ name ];\n\n\t\tif ( v !== undefined ) this.setValue( gl, name, v );\n\n\t};\n\n\n\t// Static interface\n\n\tWebGLUniforms.upload = function ( gl, seq, values, renderer ) {\n\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tvar u = seq[ i ],\n\t\t\t\tv = values[ u.id ];\n\n\t\t\tif ( v.needsUpdate !== false ) {\n\n\t\t\t\t// note: always updating when .needsUpdate is undefined\n\t\t\t\tu.setValue( gl, v.value, renderer );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\tWebGLUniforms.seqWithValue = function ( seq, values ) {\n\n\t\tvar r = [];\n\n\t\tfor ( var i = 0, n = seq.length; i !== n; ++ i ) {\n\n\t\t\tvar u = seq[ i ];\n\t\t\tif ( u.id in values ) r.push( u );\n\n\t\t}\n\n\t\treturn r;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction addLineNumbers( string ) {\n\n\t\tvar lines = string.split( '\\n' );\n\n\t\tfor ( var i = 0; i < lines.length; i ++ ) {\n\n\t\t\tlines[ i ] = ( i + 1 ) + ': ' + lines[ i ];\n\n\t\t}\n\n\t\treturn lines.join( '\\n' );\n\n\t}\n\n\tfunction WebGLShader( gl, type, string ) {\n\n\t\tvar shader = gl.createShader( type );\n\n\t\tgl.shaderSource( shader, string );\n\t\tgl.compileShader( shader );\n\n\t\tif ( gl.getShaderParameter( shader, gl.COMPILE_STATUS ) === false ) {\n\n\t\t\tconsole.error( 'THREE.WebGLShader: Shader couldn\\'t compile.' );\n\n\t\t}\n\n\t\tif ( gl.getShaderInfoLog( shader ) !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLShader: gl.getShaderInfoLog()', type === gl.VERTEX_SHADER ? 'vertex' : 'fragment', gl.getShaderInfoLog( shader ), addLineNumbers( string ) );\n\n\t\t}\n\n\t\t// --enable-privileged-webgl-extension\n\t\t// console.log( type, gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );\n\n\t\treturn shader;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar programIdCount = 0;\n\n\tfunction getEncodingComponents( encoding ) {\n\n\t\tswitch ( encoding ) {\n\n\t\t\tcase LinearEncoding:\n\t\t\t\treturn [ 'Linear', '( value )' ];\n\t\t\tcase sRGBEncoding:\n\t\t\t\treturn [ 'sRGB', '( value )' ];\n\t\t\tcase RGBEEncoding:\n\t\t\t\treturn [ 'RGBE', '( value )' ];\n\t\t\tcase RGBM7Encoding:\n\t\t\t\treturn [ 'RGBM', '( value, 7.0 )' ];\n\t\t\tcase RGBM16Encoding:\n\t\t\t\treturn [ 'RGBM', '( value, 16.0 )' ];\n\t\t\tcase RGBDEncoding:\n\t\t\t\treturn [ 'RGBD', '( value, 256.0 )' ];\n\t\t\tcase GammaEncoding:\n\t\t\t\treturn [ 'Gamma', '( value, float( GAMMA_FACTOR ) )' ];\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'unsupported encoding: ' + encoding );\n\n\t\t}\n\n\t}\n\n\tfunction getTexelDecodingFunction( functionName, encoding ) {\n\n\t\tvar components = getEncodingComponents( encoding );\n\t\treturn 'vec4 ' + functionName + '( vec4 value ) { return ' + components[ 0 ] + 'ToLinear' + components[ 1 ] + '; }';\n\n\t}\n\n\tfunction getTexelEncodingFunction( functionName, encoding ) {\n\n\t\tvar components = getEncodingComponents( encoding );\n\t\treturn 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';\n\n\t}\n\n\tfunction getToneMappingFunction( functionName, toneMapping ) {\n\n\t\tvar toneMappingName;\n\n\t\tswitch ( toneMapping ) {\n\n\t\t\tcase LinearToneMapping:\n\t\t\t\ttoneMappingName = 'Linear';\n\t\t\t\tbreak;\n\n\t\t\tcase ReinhardToneMapping:\n\t\t\t\ttoneMappingName = 'Reinhard';\n\t\t\t\tbreak;\n\n\t\t\tcase Uncharted2ToneMapping:\n\t\t\t\ttoneMappingName = 'Uncharted2';\n\t\t\t\tbreak;\n\n\t\t\tcase CineonToneMapping:\n\t\t\t\ttoneMappingName = 'OptimizedCineon';\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tthrow new Error( 'unsupported toneMapping: ' + toneMapping );\n\n\t\t}\n\n\t\treturn 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';\n\n\t}\n\n\tfunction generateExtensions( extensions, parameters, rendererExtensions ) {\n\n\t\textensions = extensions || {};\n\n\t\tvar chunks = [\n\t\t\t( extensions.derivatives || parameters.envMapCubeUV || parameters.bumpMap || parameters.normalMap || parameters.flatShading ) ? '#extension GL_OES_standard_derivatives : enable' : '',\n\t\t\t( extensions.fragDepth || parameters.logarithmicDepthBuffer ) && rendererExtensions.get( 'EXT_frag_depth' ) ? '#extension GL_EXT_frag_depth : enable' : '',\n\t\t\t( extensions.drawBuffers ) && rendererExtensions.get( 'WEBGL_draw_buffers' ) ? '#extension GL_EXT_draw_buffers : require' : '',\n\t\t\t( extensions.shaderTextureLOD || parameters.envMap ) && rendererExtensions.get( 'EXT_shader_texture_lod' ) ? '#extension GL_EXT_shader_texture_lod : enable' : ''\n\t\t];\n\n\t\treturn chunks.filter( filterEmptyLine ).join( '\\n' );\n\n\t}\n\n\tfunction generateDefines( defines ) {\n\n\t\tvar chunks = [];\n\n\t\tfor ( var name in defines ) {\n\n\t\t\tvar value = defines[ name ];\n\n\t\t\tif ( value === false ) continue;\n\n\t\t\tchunks.push( '#define ' + name + ' ' + value );\n\n\t\t}\n\n\t\treturn chunks.join( '\\n' );\n\n\t}\n\n\tfunction fetchAttributeLocations( gl, program ) {\n\n\t\tvar attributes = {};\n\n\t\tvar n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );\n\n\t\tfor ( var i = 0; i < n; i ++ ) {\n\n\t\t\tvar info = gl.getActiveAttrib( program, i );\n\t\t\tvar name = info.name;\n\n\t\t\t// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );\n\n\t\t\tattributes[ name ] = gl.getAttribLocation( program, name );\n\n\t\t}\n\n\t\treturn attributes;\n\n\t}\n\n\tfunction filterEmptyLine( string ) {\n\n\t\treturn string !== '';\n\n\t}\n\n\tfunction replaceLightNums( string, parameters ) {\n\n\t\treturn string\n\t\t\t.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )\n\t\t\t.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )\n\t\t\t.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )\n\t\t\t.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )\n\t\t\t.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights );\n\n\t}\n\n\tfunction replaceClippingPlaneNums( string, parameters ) {\n\n\t\treturn string\n\t\t\t.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )\n\t\t\t.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );\n\n\t}\n\n\tfunction parseIncludes( string ) {\n\n\t\tvar pattern = /^[ \\t]*#include +<([\\w\\d.]+)>/gm;\n\n\t\tfunction replace( match, include ) {\n\n\t\t\tvar replace = ShaderChunk[ include ];\n\n\t\t\tif ( replace === undefined ) {\n\n\t\t\t\tthrow new Error( 'Can not resolve #include <' + include + '>' );\n\n\t\t\t}\n\n\t\t\treturn parseIncludes( replace );\n\n\t\t}\n\n\t\treturn string.replace( pattern, replace );\n\n\t}\n\n\tfunction unrollLoops( string ) {\n\n\t\tvar pattern = /#pragma unroll_loop[\\s]+?for \\( int i \\= (\\d+)\\; i < (\\d+)\\; i \\+\\+ \\) \\{([\\s\\S]+?)(?=\\})\\}/g;\n\n\t\tfunction replace( match, start, end, snippet ) {\n\n\t\t\tvar unroll = '';\n\n\t\t\tfor ( var i = parseInt( start ); i < parseInt( end ); i ++ ) {\n\n\t\t\t\tunroll += snippet.replace( /\\[ i \\]/g, '[ ' + i + ' ]' );\n\n\t\t\t}\n\n\t\t\treturn unroll;\n\n\t\t}\n\n\t\treturn string.replace( pattern, replace );\n\n\t}\n\n\tfunction WebGLProgram( renderer, extensions, code, material, shader, parameters ) {\n\n\t\tvar gl = renderer.context;\n\n\t\tvar defines = material.defines;\n\n\t\tvar vertexShader = shader.vertexShader;\n\t\tvar fragmentShader = shader.fragmentShader;\n\n\t\tvar shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';\n\n\t\tif ( parameters.shadowMapType === PCFShadowMap ) {\n\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';\n\n\t\t} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {\n\n\t\t\tshadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';\n\n\t\t}\n\n\t\tvar envMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\tvar envMapModeDefine = 'ENVMAP_MODE_REFLECTION';\n\t\tvar envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\n\t\tif ( parameters.envMap ) {\n\n\t\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\t\tcase CubeReflectionMapping:\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CubeUVReflectionMapping:\n\t\t\t\tcase CubeUVRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase EquirectangularReflectionMapping:\n\t\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_EQUIREC';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase SphericalReflectionMapping:\n\t\t\t\t\tenvMapTypeDefine = 'ENVMAP_TYPE_SPHERE';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tswitch ( material.envMap.mapping ) {\n\n\t\t\t\tcase CubeRefractionMapping:\n\t\t\t\tcase EquirectangularRefractionMapping:\n\t\t\t\t\tenvMapModeDefine = 'ENVMAP_MODE_REFRACTION';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tswitch ( material.combine ) {\n\n\t\t\t\tcase MultiplyOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase MixOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_MIX';\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase AddOperation:\n\t\t\t\t\tenvMapBlendingDefine = 'ENVMAP_BLENDING_ADD';\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar gammaFactorDefine = ( renderer.gammaFactor > 0 ) ? renderer.gammaFactor : 1.0;\n\n\t\t// console.log( 'building new program ' );\n\n\t\t//\n\n\t\tvar customExtensions = generateExtensions( material.extensions, parameters, extensions );\n\n\t\tvar customDefines = generateDefines( defines );\n\n\t\t//\n\n\t\tvar program = gl.createProgram();\n\n\t\tvar prefixVertex, prefixFragment;\n\n\t\tif ( material.isRawShaderMaterial ) {\n\n\t\t\tprefixVertex = [\n\n\t\t\t\tcustomDefines\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tif ( prefixVertex.length > 0 ) {\n\n\t\t\t\tprefixVertex += '\\n';\n\n\t\t\t}\n\n\t\t\tprefixFragment = [\n\n\t\t\t\tcustomExtensions,\n\t\t\t\tcustomDefines\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tif ( prefixFragment.length > 0 ) {\n\n\t\t\t\tprefixFragment += '\\n';\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tprefixVertex = [\n\n\t\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\t\tcustomDefines,\n\n\t\t\t\tparameters.supportsVertexTextures ? '#define VERTEX_TEXTURES' : '',\n\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t\t'#define MAX_BONES ' + parameters.maxBones,\n\t\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t\tparameters.displacementMap && parameters.supportsVertexTextures ? '#define USE_DISPLACEMENTMAP' : '',\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\t\tparameters.skinning ? '#define USE_SKINNING' : '',\n\t\t\t\tparameters.useVertexTexture ? '#define BONE_TEXTURE' : '',\n\n\t\t\t\tparameters.morphTargets ? '#define USE_MORPHTARGETS' : '',\n\t\t\t\tparameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\t\tparameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',\n\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t\t'uniform mat4 modelMatrix;',\n\t\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t\t'uniform mat3 normalMatrix;',\n\t\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t\t'attribute vec3 position;',\n\t\t\t\t'attribute vec3 normal;',\n\t\t\t\t'attribute vec2 uv;',\n\n\t\t\t\t'#ifdef USE_COLOR',\n\n\t\t\t\t'\tattribute vec3 color;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_MORPHTARGETS',\n\n\t\t\t\t'\tattribute vec3 morphTarget0;',\n\t\t\t\t'\tattribute vec3 morphTarget1;',\n\t\t\t\t'\tattribute vec3 morphTarget2;',\n\t\t\t\t'\tattribute vec3 morphTarget3;',\n\n\t\t\t\t'\t#ifdef USE_MORPHNORMALS',\n\n\t\t\t\t'\t\tattribute vec3 morphNormal0;',\n\t\t\t\t'\t\tattribute vec3 morphNormal1;',\n\t\t\t\t'\t\tattribute vec3 morphNormal2;',\n\t\t\t\t'\t\tattribute vec3 morphNormal3;',\n\n\t\t\t\t'\t#else',\n\n\t\t\t\t'\t\tattribute vec3 morphTarget4;',\n\t\t\t\t'\t\tattribute vec3 morphTarget5;',\n\t\t\t\t'\t\tattribute vec3 morphTarget6;',\n\t\t\t\t'\t\tattribute vec3 morphTarget7;',\n\n\t\t\t\t'\t#endif',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'#ifdef USE_SKINNING',\n\n\t\t\t\t'\tattribute vec4 skinIndex;',\n\t\t\t\t'\tattribute vec4 skinWeight;',\n\n\t\t\t\t'#endif',\n\n\t\t\t\t'\\n'\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t\tprefixFragment = [\n\n\t\t\t\tcustomExtensions,\n\n\t\t\t\t'precision ' + parameters.precision + ' float;',\n\t\t\t\t'precision ' + parameters.precision + ' int;',\n\n\t\t\t\t'#define SHADER_NAME ' + shader.name,\n\n\t\t\t\tcustomDefines,\n\n\t\t\t\tparameters.alphaTest ? '#define ALPHATEST ' + parameters.alphaTest + ( parameters.alphaTest % 1 ? '' : '.0' ) : '', // add '.0' if integer\n\n\t\t\t\t'#define GAMMA_FACTOR ' + gammaFactorDefine,\n\n\t\t\t\t( parameters.useFog && parameters.fog ) ? '#define USE_FOG' : '',\n\t\t\t\t( parameters.useFog && parameters.fogExp ) ? '#define FOG_EXP2' : '',\n\n\t\t\t\tparameters.map ? '#define USE_MAP' : '',\n\t\t\t\tparameters.envMap ? '#define USE_ENVMAP' : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapTypeDefine : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapModeDefine : '',\n\t\t\t\tparameters.envMap ? '#define ' + envMapBlendingDefine : '',\n\t\t\t\tparameters.lightMap ? '#define USE_LIGHTMAP' : '',\n\t\t\t\tparameters.aoMap ? '#define USE_AOMAP' : '',\n\t\t\t\tparameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',\n\t\t\t\tparameters.bumpMap ? '#define USE_BUMPMAP' : '',\n\t\t\t\tparameters.normalMap ? '#define USE_NORMALMAP' : '',\n\t\t\t\tparameters.specularMap ? '#define USE_SPECULARMAP' : '',\n\t\t\t\tparameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',\n\t\t\t\tparameters.metalnessMap ? '#define USE_METALNESSMAP' : '',\n\t\t\t\tparameters.alphaMap ? '#define USE_ALPHAMAP' : '',\n\t\t\t\tparameters.vertexColors ? '#define USE_COLOR' : '',\n\n\t\t\t\tparameters.gradientMap ? '#define USE_GRADIENTMAP' : '',\n\n\t\t\t\tparameters.flatShading ? '#define FLAT_SHADED' : '',\n\n\t\t\t\tparameters.doubleSided ? '#define DOUBLE_SIDED' : '',\n\t\t\t\tparameters.flipSided ? '#define FLIP_SIDED' : '',\n\n\t\t\t\tparameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',\n\t\t\t\tparameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',\n\n\t\t\t\tparameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',\n\n\t\t\t\tparameters.physicallyCorrectLights ? '#define PHYSICALLY_CORRECT_LIGHTS' : '',\n\n\t\t\t\tparameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',\n\t\t\t\tparameters.logarithmicDepthBuffer && extensions.get( 'EXT_frag_depth' ) ? '#define USE_LOGDEPTHBUF_EXT' : '',\n\n\t\t\t\tparameters.envMap && extensions.get( 'EXT_shader_texture_lod' ) ? '#define TEXTURE_LOD_EXT' : '',\n\n\t\t\t\t'uniform mat4 viewMatrix;',\n\t\t\t\t'uniform vec3 cameraPosition;',\n\n\t\t\t\t( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',\n\t\t\t\t( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below\n\t\t\t\t( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',\n\n\t\t\t\tparameters.dithering ? '#define DITHERING' : '',\n\n\t\t\t\t( parameters.outputEncoding || parameters.mapEncoding || parameters.envMapEncoding || parameters.emissiveMapEncoding ) ? ShaderChunk[ 'encodings_pars_fragment' ] : '', // this code is required here because it is used by the various encoding/decoding function defined below\n\t\t\t\tparameters.mapEncoding ? getTexelDecodingFunction( 'mapTexelToLinear', parameters.mapEncoding ) : '',\n\t\t\t\tparameters.envMapEncoding ? getTexelDecodingFunction( 'envMapTexelToLinear', parameters.envMapEncoding ) : '',\n\t\t\t\tparameters.emissiveMapEncoding ? getTexelDecodingFunction( 'emissiveMapTexelToLinear', parameters.emissiveMapEncoding ) : '',\n\t\t\t\tparameters.outputEncoding ? getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputEncoding ) : '',\n\n\t\t\t\tparameters.depthPacking ? '#define DEPTH_PACKING ' + material.depthPacking : '',\n\n\t\t\t\t'\\n'\n\n\t\t\t].filter( filterEmptyLine ).join( '\\n' );\n\n\t\t}\n\n\t\tvertexShader = parseIncludes( vertexShader );\n\t\tvertexShader = replaceLightNums( vertexShader, parameters );\n\t\tvertexShader = replaceClippingPlaneNums( vertexShader, parameters );\n\n\t\tfragmentShader = parseIncludes( fragmentShader );\n\t\tfragmentShader = replaceLightNums( fragmentShader, parameters );\n\t\tfragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );\n\n\t\tvertexShader = unrollLoops( vertexShader );\n\t\tfragmentShader = unrollLoops( fragmentShader );\n\n\t\tvar vertexGlsl = prefixVertex + vertexShader;\n\t\tvar fragmentGlsl = prefixFragment + fragmentShader;\n\n\t\t// console.log( '*VERTEX*', vertexGlsl );\n\t\t// console.log( '*FRAGMENT*', fragmentGlsl );\n\n\t\tvar glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );\n\t\tvar glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );\n\n\t\tgl.attachShader( program, glVertexShader );\n\t\tgl.attachShader( program, glFragmentShader );\n\n\t\t// Force a particular attribute to index 0.\n\n\t\tif ( material.index0AttributeName !== undefined ) {\n\n\t\t\tgl.bindAttribLocation( program, 0, material.index0AttributeName );\n\n\t\t} else if ( parameters.morphTargets === true ) {\n\n\t\t\t// programs with morphTargets displace position out of attribute 0\n\t\t\tgl.bindAttribLocation( program, 0, 'position' );\n\n\t\t}\n\n\t\tgl.linkProgram( program );\n\n\t\tvar programLog = gl.getProgramInfoLog( program ).trim();\n\t\tvar vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();\n\t\tvar fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();\n\n\t\tvar runnable = true;\n\t\tvar haveDiagnostics = true;\n\n\t\t// console.log( '**VERTEX**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glVertexShader ) );\n\t\t// console.log( '**FRAGMENT**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( glFragmentShader ) );\n\n\t\tif ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {\n\n\t\t\trunnable = false;\n\n\t\t\tconsole.error( 'THREE.WebGLProgram: shader error: ', gl.getError(), 'gl.VALIDATE_STATUS', gl.getProgramParameter( program, gl.VALIDATE_STATUS ), 'gl.getProgramInfoLog', programLog, vertexLog, fragmentLog );\n\n\t\t} else if ( programLog !== '' ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLProgram: gl.getProgramInfoLog()', programLog );\n\n\t\t} else if ( vertexLog === '' || fragmentLog === '' ) {\n\n\t\t\thaveDiagnostics = false;\n\n\t\t}\n\n\t\tif ( haveDiagnostics ) {\n\n\t\t\tthis.diagnostics = {\n\n\t\t\t\trunnable: runnable,\n\t\t\t\tmaterial: material,\n\n\t\t\t\tprogramLog: programLog,\n\n\t\t\t\tvertexShader: {\n\n\t\t\t\t\tlog: vertexLog,\n\t\t\t\t\tprefix: prefixVertex\n\n\t\t\t\t},\n\n\t\t\t\tfragmentShader: {\n\n\t\t\t\t\tlog: fragmentLog,\n\t\t\t\t\tprefix: prefixFragment\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\t// clean up\n\n\t\tgl.deleteShader( glVertexShader );\n\t\tgl.deleteShader( glFragmentShader );\n\n\t\t// set up caching for uniform locations\n\n\t\tvar cachedUniforms;\n\n\t\tthis.getUniforms = function () {\n\n\t\t\tif ( cachedUniforms === undefined ) {\n\n\t\t\t\tcachedUniforms = new WebGLUniforms( gl, program, renderer );\n\n\t\t\t}\n\n\t\t\treturn cachedUniforms;\n\n\t\t};\n\n\t\t// set up caching for attribute locations\n\n\t\tvar cachedAttributes;\n\n\t\tthis.getAttributes = function () {\n\n\t\t\tif ( cachedAttributes === undefined ) {\n\n\t\t\t\tcachedAttributes = fetchAttributeLocations( gl, program );\n\n\t\t\t}\n\n\t\t\treturn cachedAttributes;\n\n\t\t};\n\n\t\t// free resource\n\n\t\tthis.destroy = function () {\n\n\t\t\tgl.deleteProgram( program );\n\t\t\tthis.program = undefined;\n\n\t\t};\n\n\t\t// DEPRECATED\n\n\t\tObject.defineProperties( this, {\n\n\t\t\tuniforms: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .uniforms is now .getUniforms().' );\n\t\t\t\t\treturn this.getUniforms();\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tattributes: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram: .attributes is now .getAttributes().' );\n\t\t\t\t\treturn this.getAttributes();\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t} );\n\n\n\t\t//\n\n\t\tthis.name = shader.name;\n\t\tthis.id = programIdCount ++;\n\t\tthis.code = code;\n\t\tthis.usedTimes = 1;\n\t\tthis.program = program;\n\t\tthis.vertexShader = glVertexShader;\n\t\tthis.fragmentShader = glFragmentShader;\n\n\t\treturn this;\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLPrograms( renderer, extensions, capabilities ) {\n\n\t\tvar programs = [];\n\n\t\tvar shaderIDs = {\n\t\t\tMeshDepthMaterial: 'depth',\n\t\t\tMeshDistanceMaterial: 'distanceRGBA',\n\t\t\tMeshNormalMaterial: 'normal',\n\t\t\tMeshBasicMaterial: 'basic',\n\t\t\tMeshLambertMaterial: 'lambert',\n\t\t\tMeshPhongMaterial: 'phong',\n\t\t\tMeshToonMaterial: 'phong',\n\t\t\tMeshStandardMaterial: 'physical',\n\t\t\tMeshPhysicalMaterial: 'physical',\n\t\t\tLineBasicMaterial: 'basic',\n\t\t\tLineDashedMaterial: 'dashed',\n\t\t\tPointsMaterial: 'points',\n\t\t\tShadowMaterial: 'shadow'\n\t\t};\n\n\t\tvar parameterNames = [\n\t\t\t\"precision\", \"supportsVertexTextures\", \"map\", \"mapEncoding\", \"envMap\", \"envMapMode\", \"envMapEncoding\",\n\t\t\t\"lightMap\", \"aoMap\", \"emissiveMap\", \"emissiveMapEncoding\", \"bumpMap\", \"normalMap\", \"displacementMap\", \"specularMap\",\n\t\t\t\"roughnessMap\", \"metalnessMap\", \"gradientMap\",\n\t\t\t\"alphaMap\", \"combine\", \"vertexColors\", \"fog\", \"useFog\", \"fogExp\",\n\t\t\t\"flatShading\", \"sizeAttenuation\", \"logarithmicDepthBuffer\", \"skinning\",\n\t\t\t\"maxBones\", \"useVertexTexture\", \"morphTargets\", \"morphNormals\",\n\t\t\t\"maxMorphTargets\", \"maxMorphNormals\", \"premultipliedAlpha\",\n\t\t\t\"numDirLights\", \"numPointLights\", \"numSpotLights\", \"numHemiLights\", \"numRectAreaLights\",\n\t\t\t\"shadowMapEnabled\", \"shadowMapType\", \"toneMapping\", 'physicallyCorrectLights',\n\t\t\t\"alphaTest\", \"doubleSided\", \"flipSided\", \"numClippingPlanes\", \"numClipIntersection\", \"depthPacking\", \"dithering\"\n\t\t];\n\n\n\t\tfunction allocateBones( object ) {\n\n\t\t\tvar skeleton = object.skeleton;\n\t\t\tvar bones = skeleton.bones;\n\n\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\treturn 1024;\n\n\t\t\t} else {\n\n\t\t\t\t// default for when object is not specified\n\t\t\t\t// ( for example when prebuilding shader to be used with multiple objects )\n\t\t\t\t//\n\t\t\t\t// - leave some extra space for other uniforms\n\t\t\t\t// - limit here is ANGLE's 254 max uniform vectors\n\t\t\t\t// (up to 54 should be safe)\n\n\t\t\t\tvar nVertexUniforms = capabilities.maxVertexUniforms;\n\t\t\t\tvar nVertexMatrices = Math.floor( ( nVertexUniforms - 20 ) / 4 );\n\n\t\t\t\tvar maxBones = Math.min( nVertexMatrices, bones.length );\n\n\t\t\t\tif ( maxBones < bones.length ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Skeleton has ' + bones.length + ' bones. This GPU supports ' + maxBones + '.' );\n\t\t\t\t\treturn 0;\n\n\t\t\t\t}\n\n\t\t\t\treturn maxBones;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getTextureEncodingFromMap( map, gammaOverrideLinear ) {\n\n\t\t\tvar encoding;\n\n\t\t\tif ( ! map ) {\n\n\t\t\t\tencoding = LinearEncoding;\n\n\t\t\t} else if ( map.isTexture ) {\n\n\t\t\t\tencoding = map.encoding;\n\n\t\t\t} else if ( map.isWebGLRenderTarget ) {\n\n\t\t\t\tconsole.warn( \"THREE.WebGLPrograms.getTextureEncodingFromMap: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\tencoding = map.texture.encoding;\n\n\t\t\t}\n\n\t\t\t// add backwards compatibility for WebGLRenderer.gammaInput/gammaOutput parameter, should probably be removed at some point.\n\t\t\tif ( encoding === LinearEncoding && gammaOverrideLinear ) {\n\n\t\t\t\tencoding = GammaEncoding;\n\n\t\t\t}\n\n\t\t\treturn encoding;\n\n\t\t}\n\n\t\tthis.getParameters = function ( material, lights, shadows, fog, nClipPlanes, nClipIntersection, object ) {\n\n\t\t\tvar shaderID = shaderIDs[ material.type ];\n\n\t\t\t// heuristics to create shader parameters according to lights in the scene\n\t\t\t// (not to blow over maxLights budget)\n\n\t\t\tvar maxBones = object.isSkinnedMesh ? allocateBones( object ) : 0;\n\t\t\tvar precision = capabilities.precision;\n\n\t\t\tif ( material.precision !== null ) {\n\n\t\t\t\tprecision = capabilities.getMaxPrecision( material.precision );\n\n\t\t\t\tif ( precision !== material.precision ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar currentRenderTarget = renderer.getRenderTarget();\n\n\t\t\tvar parameters = {\n\n\t\t\t\tshaderID: shaderID,\n\n\t\t\t\tprecision: precision,\n\t\t\t\tsupportsVertexTextures: capabilities.vertexTextures,\n\t\t\t\toutputEncoding: getTextureEncodingFromMap( ( ! currentRenderTarget ) ? null : currentRenderTarget.texture, renderer.gammaOutput ),\n\t\t\t\tmap: !! material.map,\n\t\t\t\tmapEncoding: getTextureEncodingFromMap( material.map, renderer.gammaInput ),\n\t\t\t\tenvMap: !! material.envMap,\n\t\t\t\tenvMapMode: material.envMap && material.envMap.mapping,\n\t\t\t\tenvMapEncoding: getTextureEncodingFromMap( material.envMap, renderer.gammaInput ),\n\t\t\t\tenvMapCubeUV: ( !! material.envMap ) && ( ( material.envMap.mapping === CubeUVReflectionMapping ) || ( material.envMap.mapping === CubeUVRefractionMapping ) ),\n\t\t\t\tlightMap: !! material.lightMap,\n\t\t\t\taoMap: !! material.aoMap,\n\t\t\t\temissiveMap: !! material.emissiveMap,\n\t\t\t\temissiveMapEncoding: getTextureEncodingFromMap( material.emissiveMap, renderer.gammaInput ),\n\t\t\t\tbumpMap: !! material.bumpMap,\n\t\t\t\tnormalMap: !! material.normalMap,\n\t\t\t\tdisplacementMap: !! material.displacementMap,\n\t\t\t\troughnessMap: !! material.roughnessMap,\n\t\t\t\tmetalnessMap: !! material.metalnessMap,\n\t\t\t\tspecularMap: !! material.specularMap,\n\t\t\t\talphaMap: !! material.alphaMap,\n\n\t\t\t\tgradientMap: !! material.gradientMap,\n\n\t\t\t\tcombine: material.combine,\n\n\t\t\t\tvertexColors: material.vertexColors,\n\n\t\t\t\tfog: !! fog,\n\t\t\t\tuseFog: material.fog,\n\t\t\t\tfogExp: ( fog && fog.isFogExp2 ),\n\n\t\t\t\tflatShading: material.flatShading,\n\n\t\t\t\tsizeAttenuation: material.sizeAttenuation,\n\t\t\t\tlogarithmicDepthBuffer: capabilities.logarithmicDepthBuffer,\n\n\t\t\t\tskinning: material.skinning && maxBones > 0,\n\t\t\t\tmaxBones: maxBones,\n\t\t\t\tuseVertexTexture: capabilities.floatVertexTextures,\n\n\t\t\t\tmorphTargets: material.morphTargets,\n\t\t\t\tmorphNormals: material.morphNormals,\n\t\t\t\tmaxMorphTargets: renderer.maxMorphTargets,\n\t\t\t\tmaxMorphNormals: renderer.maxMorphNormals,\n\n\t\t\t\tnumDirLights: lights.directional.length,\n\t\t\t\tnumPointLights: lights.point.length,\n\t\t\t\tnumSpotLights: lights.spot.length,\n\t\t\t\tnumRectAreaLights: lights.rectArea.length,\n\t\t\t\tnumHemiLights: lights.hemi.length,\n\n\t\t\t\tnumClippingPlanes: nClipPlanes,\n\t\t\t\tnumClipIntersection: nClipIntersection,\n\n\t\t\t\tdithering: material.dithering,\n\n\t\t\t\tshadowMapEnabled: renderer.shadowMap.enabled && object.receiveShadow && shadows.length > 0,\n\t\t\t\tshadowMapType: renderer.shadowMap.type,\n\n\t\t\t\ttoneMapping: renderer.toneMapping,\n\t\t\t\tphysicallyCorrectLights: renderer.physicallyCorrectLights,\n\n\t\t\t\tpremultipliedAlpha: material.premultipliedAlpha,\n\n\t\t\t\talphaTest: material.alphaTest,\n\t\t\t\tdoubleSided: material.side === DoubleSide,\n\t\t\t\tflipSided: material.side === BackSide,\n\n\t\t\t\tdepthPacking: ( material.depthPacking !== undefined ) ? material.depthPacking : false\n\n\t\t\t};\n\n\t\t\treturn parameters;\n\n\t\t};\n\n\t\tthis.getProgramCode = function ( material, parameters ) {\n\n\t\t\tvar array = [];\n\n\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\tarray.push( parameters.shaderID );\n\n\t\t\t} else {\n\n\t\t\t\tarray.push( material.fragmentShader );\n\t\t\t\tarray.push( material.vertexShader );\n\n\t\t\t}\n\n\t\t\tif ( material.defines !== undefined ) {\n\n\t\t\t\tfor ( var name in material.defines ) {\n\n\t\t\t\t\tarray.push( name );\n\t\t\t\t\tarray.push( material.defines[ name ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < parameterNames.length; i ++ ) {\n\n\t\t\t\tarray.push( parameters[ parameterNames[ i ] ] );\n\n\t\t\t}\n\n\t\t\tarray.push( material.onBeforeCompile.toString() );\n\n\t\t\tarray.push( renderer.gammaOutput );\n\n\t\t\treturn array.join();\n\n\t\t};\n\n\t\tthis.acquireProgram = function ( material, shader, parameters, code ) {\n\n\t\t\tvar program;\n\n\t\t\t// Check if code has been already compiled\n\t\t\tfor ( var p = 0, pl = programs.length; p < pl; p ++ ) {\n\n\t\t\t\tvar programInfo = programs[ p ];\n\n\t\t\t\tif ( programInfo.code === code ) {\n\n\t\t\t\t\tprogram = programInfo;\n\t\t\t\t\t++ program.usedTimes;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\tprogram = new WebGLProgram( renderer, extensions, code, material, shader, parameters );\n\t\t\t\tprograms.push( program );\n\n\t\t\t}\n\n\t\t\treturn program;\n\n\t\t};\n\n\t\tthis.releaseProgram = function ( program ) {\n\n\t\t\tif ( -- program.usedTimes === 0 ) {\n\n\t\t\t\t// Remove from unordered set\n\t\t\t\tvar i = programs.indexOf( program );\n\t\t\t\tprograms[ i ] = programs[ programs.length - 1 ];\n\t\t\t\tprograms.pop();\n\n\t\t\t\t// Free WebGL resources\n\t\t\t\tprogram.destroy();\n\n\t\t\t}\n\n\t\t};\n\n\t\t// Exposed for resource monitoring & error feedback via renderer.info:\n\t\tthis.programs = programs;\n\n\t}\n\n\t/**\n\t * @author fordacious / fordacious.github.io\n\t */\n\n\tfunction WebGLProperties() {\n\n\t\tvar properties = new WeakMap();\n\n\t\tfunction get( object ) {\n\n\t\t\tvar map = properties.get( object );\n\n\t\t\tif ( map === undefined ) {\n\n\t\t\t\tmap = {};\n\t\t\t\tproperties.set( object, map );\n\n\t\t\t}\n\n\t\t\treturn map;\n\n\t\t}\n\n\t\tfunction remove( object ) {\n\n\t\t\tproperties.delete( object );\n\n\t\t}\n\n\t\tfunction update( object, key, value ) {\n\n\t\t\tproperties.get( object )[ key ] = value;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tproperties = new WeakMap();\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tremove: remove,\n\t\t\tupdate: update,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction painterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} else if ( a.program && b.program && a.program !== b.program ) {\n\n\t\t\treturn a.program.id - b.program.id;\n\n\t\t} else if ( a.material.id !== b.material.id ) {\n\n\t\t\treturn a.material.id - b.material.id;\n\n\t\t} else if ( a.z !== b.z ) {\n\n\t\t\treturn a.z - b.z;\n\n\t\t} else {\n\n\t\t\treturn a.id - b.id;\n\n\t\t}\n\n\t}\n\n\tfunction reversePainterSortStable( a, b ) {\n\n\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t} if ( a.z !== b.z ) {\n\n\t\t\treturn b.z - a.z;\n\n\t\t} else {\n\n\t\t\treturn a.id - b.id;\n\n\t\t}\n\n\t}\n\n\tfunction WebGLRenderList() {\n\n\t\tvar renderItems = [];\n\t\tvar renderItemsIndex = 0;\n\n\t\tvar opaque = [];\n\t\tvar transparent = [];\n\n\t\tfunction init() {\n\n\t\t\trenderItemsIndex = 0;\n\n\t\t\topaque.length = 0;\n\t\t\ttransparent.length = 0;\n\n\t\t}\n\n\t\tfunction push( object, geometry, material, z, group ) {\n\n\t\t\tvar renderItem = renderItems[ renderItemsIndex ];\n\n\t\t\tif ( renderItem === undefined ) {\n\n\t\t\t\trenderItem = {\n\t\t\t\t\tid: object.id,\n\t\t\t\t\tobject: object,\n\t\t\t\t\tgeometry: geometry,\n\t\t\t\t\tmaterial: material,\n\t\t\t\t\tprogram: material.program,\n\t\t\t\t\trenderOrder: object.renderOrder,\n\t\t\t\t\tz: z,\n\t\t\t\t\tgroup: group\n\t\t\t\t};\n\n\t\t\t\trenderItems[ renderItemsIndex ] = renderItem;\n\n\t\t\t} else {\n\n\t\t\t\trenderItem.id = object.id;\n\t\t\t\trenderItem.object = object;\n\t\t\t\trenderItem.geometry = geometry;\n\t\t\t\trenderItem.material = material;\n\t\t\t\trenderItem.program = material.program;\n\t\t\t\trenderItem.renderOrder = object.renderOrder;\n\t\t\t\trenderItem.z = z;\n\t\t\t\trenderItem.group = group;\n\n\t\t\t}\n\n\t\t\t( material.transparent === true ? transparent : opaque ).push( renderItem );\n\n\t\t\trenderItemsIndex ++;\n\n\t\t}\n\n\t\tfunction sort() {\n\n\t\t\tif ( opaque.length > 1 ) opaque.sort( painterSortStable );\n\t\t\tif ( transparent.length > 1 ) transparent.sort( reversePainterSortStable );\n\n\t\t}\n\n\t\treturn {\n\t\t\topaque: opaque,\n\t\t\ttransparent: transparent,\n\n\t\t\tinit: init,\n\t\t\tpush: push,\n\n\t\t\tsort: sort\n\t\t};\n\n\t}\n\n\tfunction WebGLRenderLists() {\n\n\t\tvar lists = {};\n\n\t\tfunction get( scene, camera ) {\n\n\t\t\tvar hash = scene.id + ',' + camera.id;\n\t\t\tvar list = lists[ hash ];\n\n\t\t\tif ( list === undefined ) {\n\n\t\t\t\t// console.log( 'THREE.WebGLRenderLists:', hash );\n\n\t\t\t\tlist = new WebGLRenderList();\n\t\t\t\tlists[ hash ] = list;\n\n\t\t\t}\n\n\t\t\treturn list;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\tlists = {};\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction UniformsCache() {\n\n\t\tvar lights = {};\n\n\t\treturn {\n\n\t\t\tget: function ( light ) {\n\n\t\t\t\tif ( lights[ light.id ] !== undefined ) {\n\n\t\t\t\t\treturn lights[ light.id ];\n\n\t\t\t\t}\n\n\t\t\t\tvar uniforms;\n\n\t\t\t\tswitch ( light.type ) {\n\n\t\t\t\t\tcase 'DirectionalLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\n\t\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'SpotLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tconeCos: 0,\n\t\t\t\t\t\t\tpenumbraCos: 0,\n\t\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'PointLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tdistance: 0,\n\t\t\t\t\t\t\tdecay: 0,\n\n\t\t\t\t\t\t\tshadow: false,\n\t\t\t\t\t\t\tshadowBias: 0,\n\t\t\t\t\t\t\tshadowRadius: 1,\n\t\t\t\t\t\t\tshadowMapSize: new Vector2(),\n\t\t\t\t\t\t\tshadowCameraNear: 1,\n\t\t\t\t\t\t\tshadowCameraFar: 1000\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'HemisphereLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tdirection: new Vector3(),\n\t\t\t\t\t\t\tskyColor: new Color(),\n\t\t\t\t\t\t\tgroundColor: new Color()\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'RectAreaLight':\n\t\t\t\t\t\tuniforms = {\n\t\t\t\t\t\t\tcolor: new Color(),\n\t\t\t\t\t\t\tposition: new Vector3(),\n\t\t\t\t\t\t\thalfWidth: new Vector3(),\n\t\t\t\t\t\t\thalfHeight: new Vector3()\n\t\t\t\t\t\t\t// TODO (abelnation): set RectAreaLight shadow uniforms\n\t\t\t\t\t\t};\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tlights[ light.id ] = uniforms;\n\n\t\t\t\treturn uniforms;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tvar count = 0;\n\n\tfunction WebGLLights() {\n\n\t\tvar cache = new UniformsCache();\n\n\t\tvar state = {\n\n\t\t\tid: count ++,\n\n\t\t\thash: '',\n\n\t\t\tambient: [ 0, 0, 0 ],\n\t\t\tdirectional: [],\n\t\t\tdirectionalShadowMap: [],\n\t\t\tdirectionalShadowMatrix: [],\n\t\t\tspot: [],\n\t\t\tspotShadowMap: [],\n\t\t\tspotShadowMatrix: [],\n\t\t\trectArea: [],\n\t\t\tpoint: [],\n\t\t\tpointShadowMap: [],\n\t\t\tpointShadowMatrix: [],\n\t\t\themi: []\n\n\t\t};\n\n\t\tvar vector3 = new Vector3();\n\t\tvar matrix4 = new Matrix4();\n\t\tvar matrix42 = new Matrix4();\n\n\t\tfunction setup( lights, shadows, camera ) {\n\n\t\t\tvar r = 0, g = 0, b = 0;\n\n\t\t\tvar directionalLength = 0;\n\t\t\tvar pointLength = 0;\n\t\t\tvar spotLength = 0;\n\t\t\tvar rectAreaLength = 0;\n\t\t\tvar hemiLength = 0;\n\n\t\t\tvar viewMatrix = camera.matrixWorldInverse;\n\n\t\t\tfor ( var i = 0, l = lights.length; i < l; i ++ ) {\n\n\t\t\t\tvar light = lights[ i ];\n\n\t\t\t\tvar color = light.color;\n\t\t\t\tvar intensity = light.intensity;\n\t\t\t\tvar distance = light.distance;\n\n\t\t\t\tvar shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;\n\n\t\t\t\tif ( light.isAmbientLight ) {\n\n\t\t\t\t\tr += color.r * intensity;\n\t\t\t\t\tg += color.g * intensity;\n\t\t\t\t\tb += color.b * intensity;\n\n\t\t\t\t} else if ( light.isDirectionalLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.directionalShadowMap[ directionalLength ] = shadowMap;\n\t\t\t\t\tstate.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;\n\t\t\t\t\tstate.directional[ directionalLength ] = uniforms;\n\n\t\t\t\t\tdirectionalLength ++;\n\n\t\t\t\t} else if ( light.isSpotLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\t\t\t\t\tuniforms.distance = distance;\n\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tvector3.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tuniforms.direction.sub( vector3 );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\n\t\t\t\t\tuniforms.coneCos = Math.cos( light.angle );\n\t\t\t\t\tuniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );\n\t\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.spotShadowMap[ spotLength ] = shadowMap;\n\t\t\t\t\tstate.spotShadowMatrix[ spotLength ] = light.shadow.matrix;\n\t\t\t\t\tstate.spot[ spotLength ] = uniforms;\n\n\t\t\t\t\tspotLength ++;\n\n\t\t\t\t} else if ( light.isRectAreaLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\t// (a) intensity is the total visible light emitted\n\t\t\t\t\t//uniforms.color.copy( color ).multiplyScalar( intensity / ( light.width * light.height * Math.PI ) );\n\n\t\t\t\t\t// (b) intensity is the brightness of the light\n\t\t\t\t\tuniforms.color.copy( color ).multiplyScalar( intensity );\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\t// extract local rotation of light to derive width/height half vectors\n\t\t\t\t\tmatrix42.identity();\n\t\t\t\t\tmatrix4.copy( light.matrixWorld );\n\t\t\t\t\tmatrix4.premultiply( viewMatrix );\n\t\t\t\t\tmatrix42.extractRotation( matrix4 );\n\n\t\t\t\t\tuniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );\n\t\t\t\t\tuniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );\n\n\t\t\t\t\tuniforms.halfWidth.applyMatrix4( matrix42 );\n\t\t\t\t\tuniforms.halfHeight.applyMatrix4( matrix42 );\n\n\t\t\t\t\t// TODO (abelnation): RectAreaLight distance?\n\t\t\t\t\t// uniforms.distance = distance;\n\n\t\t\t\t\tstate.rectArea[ rectAreaLength ] = uniforms;\n\n\t\t\t\t\trectAreaLength ++;\n\n\t\t\t\t} else if ( light.isPointLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.position.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.position.applyMatrix4( viewMatrix );\n\n\t\t\t\t\tuniforms.color.copy( light.color ).multiplyScalar( light.intensity );\n\t\t\t\t\tuniforms.distance = light.distance;\n\t\t\t\t\tuniforms.decay = ( light.distance === 0 ) ? 0.0 : light.decay;\n\n\t\t\t\t\tuniforms.shadow = light.castShadow;\n\n\t\t\t\t\tif ( light.castShadow ) {\n\n\t\t\t\t\t\tvar shadow = light.shadow;\n\n\t\t\t\t\t\tuniforms.shadowBias = shadow.bias;\n\t\t\t\t\t\tuniforms.shadowRadius = shadow.radius;\n\t\t\t\t\t\tuniforms.shadowMapSize = shadow.mapSize;\n\t\t\t\t\t\tuniforms.shadowCameraNear = shadow.camera.near;\n\t\t\t\t\t\tuniforms.shadowCameraFar = shadow.camera.far;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.pointShadowMap[ pointLength ] = shadowMap;\n\t\t\t\t\tstate.pointShadowMatrix[ pointLength ] = light.shadow.matrix;\n\t\t\t\t\tstate.point[ pointLength ] = uniforms;\n\n\t\t\t\t\tpointLength ++;\n\n\t\t\t\t} else if ( light.isHemisphereLight ) {\n\n\t\t\t\t\tvar uniforms = cache.get( light );\n\n\t\t\t\t\tuniforms.direction.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\t\tuniforms.direction.transformDirection( viewMatrix );\n\t\t\t\t\tuniforms.direction.normalize();\n\n\t\t\t\t\tuniforms.skyColor.copy( light.color ).multiplyScalar( intensity );\n\t\t\t\t\tuniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity );\n\n\t\t\t\t\tstate.hemi[ hemiLength ] = uniforms;\n\n\t\t\t\t\themiLength ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.ambient[ 0 ] = r;\n\t\t\tstate.ambient[ 1 ] = g;\n\t\t\tstate.ambient[ 2 ] = b;\n\n\t\t\tstate.directional.length = directionalLength;\n\t\t\tstate.spot.length = spotLength;\n\t\t\tstate.rectArea.length = rectAreaLength;\n\t\t\tstate.point.length = pointLength;\n\t\t\tstate.hemi.length = hemiLength;\n\n\t\t\tstate.hash = state.id + ',' + directionalLength + ',' + pointLength + ',' + spotLength + ',' + rectAreaLength + ',' + hemiLength + ',' + shadows.length;\n\n\t\t}\n\n\t\treturn {\n\t\t\tsetup: setup,\n\t\t\tstate: state\n\t\t};\n\n\t}\n\n\t/**\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction WebGLRenderState() {\n\n\t\tvar lights = new WebGLLights();\n\n\t\tvar lightsArray = [];\n\t\tvar shadowsArray = [];\n\t\tvar spritesArray = [];\n\n\t\tfunction init() {\n\n\t\t\tlightsArray.length = 0;\n\t\t\tshadowsArray.length = 0;\n\t\t\tspritesArray.length = 0;\n\n\t\t}\n\n\t\tfunction pushLight( light ) {\n\n\t\t\tlightsArray.push( light );\n\n\t\t}\n\n\t\tfunction pushShadow( shadowLight ) {\n\n\t\t\tshadowsArray.push( shadowLight );\n\n\t\t}\n\n\t\tfunction pushSprite( shadowLight ) {\n\n\t\t\tspritesArray.push( shadowLight );\n\n\t\t}\n\n\t\tfunction setupLights( camera ) {\n\n\t\t\tlights.setup( lightsArray, shadowsArray, camera );\n\n\t\t}\n\n\t\tvar state = {\n\t\t\tlightsArray: lightsArray,\n\t\t\tshadowsArray: shadowsArray,\n\t\t\tspritesArray: spritesArray,\n\n\t\t\tlights: lights\n\t\t};\n\n\t\treturn {\n\t\t\tinit: init,\n\t\t\tstate: state,\n\t\t\tsetupLights: setupLights,\n\n\t\t\tpushLight: pushLight,\n\t\t\tpushShadow: pushShadow,\n\t\t\tpushSprite: pushSprite\n\t\t};\n\n\t}\n\n\tfunction WebGLRenderStates() {\n\n\t\tvar renderStates = {};\n\n\t\tfunction get( scene, camera ) {\n\n\t\t\tvar hash = scene.id + ',' + camera.id;\n\n\t\t\tvar renderState = renderStates[ hash ];\n\n\t\t\tif ( renderState === undefined ) {\n\n\t\t\t\trenderState = new WebGLRenderState();\n\t\t\t\trenderStates[ hash ] = renderState;\n\n\t\t\t}\n\n\t\t\treturn renderState;\n\n\t\t}\n\n\t\tfunction dispose() {\n\n\t\t\trenderStates = {};\n\n\t\t}\n\n\t\treturn {\n\t\t\tget: get,\n\t\t\tdispose: dispose\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author bhouston / https://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t *\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: \n\t * }\n\t */\n\n\tfunction MeshDepthMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshDepthMaterial';\n\n\t\tthis.depthPacking = BasicDepthPacking;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshDepthMaterial.prototype = Object.create( Material.prototype );\n\tMeshDepthMaterial.prototype.constructor = MeshDepthMaterial;\n\n\tMeshDepthMaterial.prototype.isMeshDepthMaterial = true;\n\n\tMeshDepthMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.depthPacking = source.depthPacking;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t *\n\t * referencePosition: ,\n\t * nearDistance: ,\n\t * farDistance: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: \n\t *\n\t * }\n\t */\n\n\tfunction MeshDistanceMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshDistanceMaterial';\n\n\t\tthis.referencePosition = new Vector3();\n\t\tthis.nearDistance = 1;\n\t\tthis.farDistance = 1000;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\n\t\tthis.map = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.fog = false;\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshDistanceMaterial.prototype = Object.create( Material.prototype );\n\tMeshDistanceMaterial.prototype.constructor = MeshDistanceMaterial;\n\n\tMeshDistanceMaterial.prototype.isMeshDistanceMaterial = true;\n\n\tMeshDistanceMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.referencePosition.copy( source.referencePosition );\n\t\tthis.nearDistance = source.nearDistance;\n\t\tthis.farDistance = source.farDistance;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\tthis.map = source.map;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLShadowMap( _renderer, _objects, maxTextureSize ) {\n\n\t\tvar _frustum = new Frustum(),\n\t\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t\t_shadowMapSize = new Vector2(),\n\t\t\t_maxShadowMapSize = new Vector2( maxTextureSize, maxTextureSize ),\n\n\t\t\t_lookTarget = new Vector3(),\n\t\t\t_lightPositionWorld = new Vector3(),\n\n\t\t\t_MorphingFlag = 1,\n\t\t\t_SkinningFlag = 2,\n\n\t\t\t_NumberOfMaterialVariants = ( _MorphingFlag | _SkinningFlag ) + 1,\n\n\t\t\t_depthMaterials = new Array( _NumberOfMaterialVariants ),\n\t\t\t_distanceMaterials = new Array( _NumberOfMaterialVariants ),\n\n\t\t\t_materialCache = {};\n\n\t\tvar shadowSide = { 0: BackSide, 1: FrontSide, 2: DoubleSide };\n\n\t\tvar cubeDirections = [\n\t\t\tnew Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),\n\t\t\tnew Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )\n\t\t];\n\n\t\tvar cubeUps = [\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),\n\t\t\tnew Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),\tnew Vector3( 0, 0, - 1 )\n\t\t];\n\n\t\tvar cube2DViewPorts = [\n\t\t\tnew Vector4(), new Vector4(), new Vector4(),\n\t\t\tnew Vector4(), new Vector4(), new Vector4()\n\t\t];\n\n\t\t// init\n\n\t\tfor ( var i = 0; i !== _NumberOfMaterialVariants; ++ i ) {\n\n\t\t\tvar useMorphing = ( i & _MorphingFlag ) !== 0;\n\t\t\tvar useSkinning = ( i & _SkinningFlag ) !== 0;\n\n\t\t\tvar depthMaterial = new MeshDepthMaterial( {\n\n\t\t\t\tdepthPacking: RGBADepthPacking,\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_depthMaterials[ i ] = depthMaterial;\n\n\t\t\t//\n\n\t\t\tvar distanceMaterial = new MeshDistanceMaterial( {\n\n\t\t\t\tmorphTargets: useMorphing,\n\t\t\t\tskinning: useSkinning\n\n\t\t\t} );\n\n\t\t\t_distanceMaterials[ i ] = distanceMaterial;\n\n\t\t}\n\n\t\t//\n\n\t\tvar scope = this;\n\n\t\tthis.enabled = false;\n\n\t\tthis.autoUpdate = true;\n\t\tthis.needsUpdate = false;\n\n\t\tthis.type = PCFShadowMap;\n\n\t\tthis.render = function ( lights, scene, camera ) {\n\n\t\t\tif ( scope.enabled === false ) return;\n\t\t\tif ( scope.autoUpdate === false && scope.needsUpdate === false ) return;\n\n\t\t\tif ( lights.length === 0 ) return;\n\n\t\t\t// TODO Clean up (needed in case of contextlost)\n\t\t\tvar _gl = _renderer.context;\n\t\t\tvar _state = _renderer.state;\n\n\t\t\t// Set GL state for depth map.\n\t\t\t_state.disable( _gl.BLEND );\n\t\t\t_state.buffers.color.setClear( 1, 1, 1, 1 );\n\t\t\t_state.buffers.depth.setTest( true );\n\t\t\t_state.setScissorTest( false );\n\n\t\t\t// render depth map\n\n\t\t\tvar faceCount;\n\n\t\t\tfor ( var i = 0, il = lights.length; i < il; i ++ ) {\n\n\t\t\t\tvar light = lights[ i ];\n\t\t\t\tvar shadow = light.shadow;\n\t\t\t\tvar isPointLight = light && light.isPointLight;\n\n\t\t\t\tif ( shadow === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );\n\t\t\t\t\tcontinue;\n\n\t\t\t\t}\n\n\t\t\t\tvar shadowCamera = shadow.camera;\n\n\t\t\t\t_shadowMapSize.copy( shadow.mapSize );\n\t\t\t\t_shadowMapSize.min( _maxShadowMapSize );\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\tvar vpWidth = _shadowMapSize.x;\n\t\t\t\t\tvar vpHeight = _shadowMapSize.y;\n\n\t\t\t\t\t// These viewports map a cube-map onto a 2D texture with the\n\t\t\t\t\t// following orientation:\n\t\t\t\t\t//\n\t\t\t\t\t// xzXZ\n\t\t\t\t\t// y Y\n\t\t\t\t\t//\n\t\t\t\t\t// X - Positive x direction\n\t\t\t\t\t// x - Negative x direction\n\t\t\t\t\t// Y - Positive y direction\n\t\t\t\t\t// y - Negative y direction\n\t\t\t\t\t// Z - Positive z direction\n\t\t\t\t\t// z - Negative z direction\n\n\t\t\t\t\t// positive X\n\t\t\t\t\tcube2DViewPorts[ 0 ].set( vpWidth * 2, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// negative X\n\t\t\t\t\tcube2DViewPorts[ 1 ].set( 0, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// positive Z\n\t\t\t\t\tcube2DViewPorts[ 2 ].set( vpWidth * 3, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// negative Z\n\t\t\t\t\tcube2DViewPorts[ 3 ].set( vpWidth, vpHeight, vpWidth, vpHeight );\n\t\t\t\t\t// positive Y\n\t\t\t\t\tcube2DViewPorts[ 4 ].set( vpWidth * 3, 0, vpWidth, vpHeight );\n\t\t\t\t\t// negative Y\n\t\t\t\t\tcube2DViewPorts[ 5 ].set( vpWidth, 0, vpWidth, vpHeight );\n\n\t\t\t\t\t_shadowMapSize.x *= 4.0;\n\t\t\t\t\t_shadowMapSize.y *= 2.0;\n\n\t\t\t\t}\n\n\t\t\t\tif ( shadow.map === null ) {\n\n\t\t\t\t\tvar pars = { minFilter: NearestFilter, magFilter: NearestFilter, format: RGBAFormat };\n\n\t\t\t\t\tshadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );\n\t\t\t\t\tshadow.map.texture.name = light.name + \".shadowMap\";\n\n\t\t\t\t\tshadowCamera.updateProjectionMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tif ( shadow.isSpotLightShadow ) {\n\n\t\t\t\t\tshadow.update( light );\n\n\t\t\t\t}\n\n\t\t\t\tvar shadowMap = shadow.map;\n\t\t\t\tvar shadowMatrix = shadow.matrix;\n\n\t\t\t\t_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );\n\t\t\t\tshadowCamera.position.copy( _lightPositionWorld );\n\n\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\tfaceCount = 6;\n\n\t\t\t\t\t// for point lights we set the shadow matrix to be a translation-only matrix\n\t\t\t\t\t// equal to inverse of the light's position\n\n\t\t\t\t\tshadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfaceCount = 1;\n\n\t\t\t\t\t_lookTarget.setFromMatrixPosition( light.target.matrixWorld );\n\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\t// compute shadow matrix\n\n\t\t\t\t\tshadowMatrix.set(\n\t\t\t\t\t\t0.5, 0.0, 0.0, 0.5,\n\t\t\t\t\t\t0.0, 0.5, 0.0, 0.5,\n\t\t\t\t\t\t0.0, 0.0, 0.5, 0.5,\n\t\t\t\t\t\t0.0, 0.0, 0.0, 1.0\n\t\t\t\t\t);\n\n\t\t\t\t\tshadowMatrix.multiply( shadowCamera.projectionMatrix );\n\t\t\t\t\tshadowMatrix.multiply( shadowCamera.matrixWorldInverse );\n\n\t\t\t\t}\n\n\t\t\t\t_renderer.setRenderTarget( shadowMap );\n\t\t\t\t_renderer.clear();\n\n\t\t\t\t// render shadow map for each cube face (if omni-directional) or\n\t\t\t\t// run a single pass if not\n\n\t\t\t\tfor ( var face = 0; face < faceCount; face ++ ) {\n\n\t\t\t\t\tif ( isPointLight ) {\n\n\t\t\t\t\t\t_lookTarget.copy( shadowCamera.position );\n\t\t\t\t\t\t_lookTarget.add( cubeDirections[ face ] );\n\t\t\t\t\t\tshadowCamera.up.copy( cubeUps[ face ] );\n\t\t\t\t\t\tshadowCamera.lookAt( _lookTarget );\n\t\t\t\t\t\tshadowCamera.updateMatrixWorld();\n\n\t\t\t\t\t\tvar vpDimensions = cube2DViewPorts[ face ];\n\t\t\t\t\t\t_state.viewport( vpDimensions );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// update camera matrices and frustum\n\n\t\t\t\t\t_projScreenMatrix.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );\n\t\t\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t\t\t// set object matrices & frustum culling\n\n\t\t\t\t\trenderObject( scene, camera, shadowCamera, isPointLight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tscope.needsUpdate = false;\n\n\t\t};\n\n\t\tfunction getDepthMaterial( object, material, isPointLight, lightPositionWorld, shadowCameraNear, shadowCameraFar ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tvar result = null;\n\n\t\t\tvar materialVariants = _depthMaterials;\n\t\t\tvar customMaterial = object.customDepthMaterial;\n\n\t\t\tif ( isPointLight ) {\n\n\t\t\t\tmaterialVariants = _distanceMaterials;\n\t\t\t\tcustomMaterial = object.customDistanceMaterial;\n\n\t\t\t}\n\n\t\t\tif ( ! customMaterial ) {\n\n\t\t\t\tvar useMorphing = false;\n\n\t\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\t\tif ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\t\t\t\tuseMorphing = geometry.morphAttributes && geometry.morphAttributes.position && geometry.morphAttributes.position.length > 0;\n\n\t\t\t\t\t} else if ( geometry && geometry.isGeometry ) {\n\n\t\t\t\t\t\tuseMorphing = geometry.morphTargets && geometry.morphTargets.length > 0;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( object.isSkinnedMesh && material.skinning === false ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLShadowMap: THREE.SkinnedMesh with material.skinning set to false:', object );\n\n\t\t\t\t}\n\n\t\t\t\tvar useSkinning = object.isSkinnedMesh && material.skinning;\n\n\t\t\t\tvar variantIndex = 0;\n\n\t\t\t\tif ( useMorphing ) variantIndex |= _MorphingFlag;\n\t\t\t\tif ( useSkinning ) variantIndex |= _SkinningFlag;\n\n\t\t\t\tresult = materialVariants[ variantIndex ];\n\n\t\t\t} else {\n\n\t\t\t\tresult = customMaterial;\n\n\t\t\t}\n\n\t\t\tif ( _renderer.localClippingEnabled &&\n\t\t\t\t\tmaterial.clipShadows === true &&\n\t\t\t\t\tmaterial.clippingPlanes.length !== 0 ) {\n\n\t\t\t\t// in this case we need a unique material instance reflecting the\n\t\t\t\t// appropriate state\n\n\t\t\t\tvar keyA = result.uuid, keyB = material.uuid;\n\n\t\t\t\tvar materialsForVariant = _materialCache[ keyA ];\n\n\t\t\t\tif ( materialsForVariant === undefined ) {\n\n\t\t\t\t\tmaterialsForVariant = {};\n\t\t\t\t\t_materialCache[ keyA ] = materialsForVariant;\n\n\t\t\t\t}\n\n\t\t\t\tvar cachedMaterial = materialsForVariant[ keyB ];\n\n\t\t\t\tif ( cachedMaterial === undefined ) {\n\n\t\t\t\t\tcachedMaterial = result.clone();\n\t\t\t\t\tmaterialsForVariant[ keyB ] = cachedMaterial;\n\n\t\t\t\t}\n\n\t\t\t\tresult = cachedMaterial;\n\n\t\t\t}\n\n\t\t\tresult.visible = material.visible;\n\t\t\tresult.wireframe = material.wireframe;\n\n\t\t\tresult.side = ( material.shadowSide != null ) ? material.shadowSide : shadowSide[ material.side ];\n\n\t\t\tresult.clipShadows = material.clipShadows;\n\t\t\tresult.clippingPlanes = material.clippingPlanes;\n\t\t\tresult.clipIntersection = material.clipIntersection;\n\n\t\t\tresult.wireframeLinewidth = material.wireframeLinewidth;\n\t\t\tresult.linewidth = material.linewidth;\n\n\t\t\tif ( isPointLight && result.isMeshDistanceMaterial ) {\n\n\t\t\t\tresult.referencePosition.copy( lightPositionWorld );\n\t\t\t\tresult.nearDistance = shadowCameraNear;\n\t\t\t\tresult.farDistance = shadowCameraFar;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t\tfunction renderObject( object, camera, shadowCamera, isPointLight ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tvar visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {\n\n\t\t\t\tif ( object.castShadow && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {\n\n\t\t\t\t\tobject.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );\n\n\t\t\t\t\tvar geometry = _objects.update( object );\n\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\tfor ( var k = 0, kl = groups.length; k < kl; k ++ ) {\n\n\t\t\t\t\t\t\tvar group = groups[ k ];\n\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, groupMaterial, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\tvar depthMaterial = getDepthMaterial( object, material, isPointLight, _lightPositionWorld, shadowCamera.near, shadowCamera.far );\n\t\t\t\t\t\t_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\trenderObject( children[ i ], camera, shadowCamera, isPointLight );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction CanvasTexture( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tTexture.call( this, canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tCanvasTexture.prototype = Object.create( Texture.prototype );\n\tCanvasTexture.prototype.constructor = CanvasTexture;\n\tCanvasTexture.prototype.isCanvasTexture = true;\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction WebGLSpriteRenderer( renderer, gl, state, textures, capabilities ) {\n\n\t\tvar vertexBuffer, elementBuffer;\n\t\tvar program, attributes, uniforms;\n\n\t\tvar texture;\n\n\t\t// decompose matrixWorld\n\n\t\tvar spritePosition = new Vector3();\n\t\tvar spriteRotation = new Quaternion();\n\t\tvar spriteScale = new Vector3();\n\n\t\tfunction init() {\n\n\t\t\tvar vertices = new Float32Array( [\n\t\t\t\t- 0.5, - 0.5, 0, 0,\n\t\t\t\t 0.5, - 0.5, 1, 0,\n\t\t\t\t 0.5, 0.5, 1, 1,\n\t\t\t\t- 0.5, 0.5, 0, 1\n\t\t\t] );\n\n\t\t\tvar faces = new Uint16Array( [\n\t\t\t\t0, 1, 2,\n\t\t\t\t0, 2, 3\n\t\t\t] );\n\n\t\t\tvertexBuffer = gl.createBuffer();\n\t\t\telementBuffer = gl.createBuffer();\n\n\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\t\tgl.bufferData( gl.ARRAY_BUFFER, vertices, gl.STATIC_DRAW );\n\n\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\t\t\tgl.bufferData( gl.ELEMENT_ARRAY_BUFFER, faces, gl.STATIC_DRAW );\n\n\t\t\tprogram = createProgram();\n\n\t\t\tattributes = {\n\t\t\t\tposition: gl.getAttribLocation( program, 'position' ),\n\t\t\t\tuv: gl.getAttribLocation( program, 'uv' )\n\t\t\t};\n\n\t\t\tuniforms = {\n\t\t\t\tuvOffset: gl.getUniformLocation( program, 'uvOffset' ),\n\t\t\t\tuvScale: gl.getUniformLocation( program, 'uvScale' ),\n\n\t\t\t\trotation: gl.getUniformLocation( program, 'rotation' ),\n\t\t\t\tcenter: gl.getUniformLocation( program, 'center' ),\n\t\t\t\tscale: gl.getUniformLocation( program, 'scale' ),\n\n\t\t\t\tcolor: gl.getUniformLocation( program, 'color' ),\n\t\t\t\tmap: gl.getUniformLocation( program, 'map' ),\n\t\t\t\topacity: gl.getUniformLocation( program, 'opacity' ),\n\n\t\t\t\tmodelViewMatrix: gl.getUniformLocation( program, 'modelViewMatrix' ),\n\t\t\t\tprojectionMatrix: gl.getUniformLocation( program, 'projectionMatrix' ),\n\n\t\t\t\tfogType: gl.getUniformLocation( program, 'fogType' ),\n\t\t\t\tfogDensity: gl.getUniformLocation( program, 'fogDensity' ),\n\t\t\t\tfogNear: gl.getUniformLocation( program, 'fogNear' ),\n\t\t\t\tfogFar: gl.getUniformLocation( program, 'fogFar' ),\n\t\t\t\tfogColor: gl.getUniformLocation( program, 'fogColor' ),\n\t\t\t\tfogDepth: gl.getUniformLocation( program, 'fogDepth' ),\n\n\t\t\t\talphaTest: gl.getUniformLocation( program, 'alphaTest' )\n\t\t\t};\n\n\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\tcanvas.width = 8;\n\t\t\tcanvas.height = 8;\n\n\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\tcontext.fillStyle = 'white';\n\t\t\tcontext.fillRect( 0, 0, 8, 8 );\n\n\t\t\ttexture = new CanvasTexture( canvas );\n\n\t\t}\n\n\t\tthis.render = function ( sprites, scene, camera ) {\n\n\t\t\tif ( sprites.length === 0 ) return;\n\n\t\t\t// setup gl\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\tinit();\n\n\t\t\t}\n\n\t\t\tstate.useProgram( program );\n\n\t\t\tstate.initAttributes();\n\t\t\tstate.enableAttribute( attributes.position );\n\t\t\tstate.enableAttribute( attributes.uv );\n\t\t\tstate.disableUnusedAttributes();\n\n\t\t\tstate.disable( gl.CULL_FACE );\n\t\t\tstate.enable( gl.BLEND );\n\n\t\t\tgl.bindBuffer( gl.ARRAY_BUFFER, vertexBuffer );\n\t\t\tgl.vertexAttribPointer( attributes.position, 2, gl.FLOAT, false, 2 * 8, 0 );\n\t\t\tgl.vertexAttribPointer( attributes.uv, 2, gl.FLOAT, false, 2 * 8, 8 );\n\n\t\t\tgl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, elementBuffer );\n\n\t\t\tgl.uniformMatrix4fv( uniforms.projectionMatrix, false, camera.projectionMatrix.elements );\n\n\t\t\tstate.activeTexture( gl.TEXTURE0 );\n\t\t\tgl.uniform1i( uniforms.map, 0 );\n\n\t\t\tvar oldFogType = 0;\n\t\t\tvar sceneFogType = 0;\n\t\t\tvar fog = scene.fog;\n\n\t\t\tif ( fog ) {\n\n\t\t\t\tgl.uniform3f( uniforms.fogColor, fog.color.r, fog.color.g, fog.color.b );\n\n\t\t\t\tif ( fog.isFog ) {\n\n\t\t\t\t\tgl.uniform1f( uniforms.fogNear, fog.near );\n\t\t\t\t\tgl.uniform1f( uniforms.fogFar, fog.far );\n\n\t\t\t\t\tgl.uniform1i( uniforms.fogType, 1 );\n\t\t\t\t\toldFogType = 1;\n\t\t\t\t\tsceneFogType = 1;\n\n\t\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\t\tgl.uniform1f( uniforms.fogDensity, fog.density );\n\n\t\t\t\t\tgl.uniform1i( uniforms.fogType, 2 );\n\t\t\t\t\toldFogType = 2;\n\t\t\t\t\tsceneFogType = 2;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tgl.uniform1i( uniforms.fogType, 0 );\n\t\t\t\toldFogType = 0;\n\t\t\t\tsceneFogType = 0;\n\n\t\t\t}\n\n\n\t\t\t// update positions and sort\n\n\t\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\t\tvar sprite = sprites[ i ];\n\n\t\t\t\tsprite.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, sprite.matrixWorld );\n\t\t\t\tsprite.z = - sprite.modelViewMatrix.elements[ 14 ];\n\n\t\t\t}\n\n\t\t\tsprites.sort( painterSortStable );\n\n\t\t\t// render all sprites\n\n\t\t\tvar scale = [];\n\t\t\tvar center = [];\n\n\t\t\tfor ( var i = 0, l = sprites.length; i < l; i ++ ) {\n\n\t\t\t\tvar sprite = sprites[ i ];\n\t\t\t\tvar material = sprite.material;\n\n\t\t\t\tif ( material.visible === false ) continue;\n\n\t\t\t\tsprite.onBeforeRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\t\tgl.uniform1f( uniforms.alphaTest, material.alphaTest );\n\t\t\t\tgl.uniformMatrix4fv( uniforms.modelViewMatrix, false, sprite.modelViewMatrix.elements );\n\n\t\t\t\tsprite.matrixWorld.decompose( spritePosition, spriteRotation, spriteScale );\n\n\t\t\t\tscale[ 0 ] = spriteScale.x;\n\t\t\t\tscale[ 1 ] = spriteScale.y;\n\n\t\t\t\tcenter[ 0 ] = sprite.center.x - 0.5;\n\t\t\t\tcenter[ 1 ] = sprite.center.y - 0.5;\n\n\t\t\t\tvar fogType = 0;\n\n\t\t\t\tif ( scene.fog && material.fog ) {\n\n\t\t\t\t\tfogType = sceneFogType;\n\n\t\t\t\t}\n\n\t\t\t\tif ( oldFogType !== fogType ) {\n\n\t\t\t\t\tgl.uniform1i( uniforms.fogType, fogType );\n\t\t\t\t\toldFogType = fogType;\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.map !== null ) {\n\n\t\t\t\t\tgl.uniform2f( uniforms.uvOffset, material.map.offset.x, material.map.offset.y );\n\t\t\t\t\tgl.uniform2f( uniforms.uvScale, material.map.repeat.x, material.map.repeat.y );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.uniform2f( uniforms.uvOffset, 0, 0 );\n\t\t\t\t\tgl.uniform2f( uniforms.uvScale, 1, 1 );\n\n\t\t\t\t}\n\n\t\t\t\tgl.uniform1f( uniforms.opacity, material.opacity );\n\t\t\t\tgl.uniform3f( uniforms.color, material.color.r, material.color.g, material.color.b );\n\n\t\t\t\tgl.uniform1f( uniforms.rotation, material.rotation );\n\t\t\t\tgl.uniform2fv( uniforms.center, center );\n\t\t\t\tgl.uniform2fv( uniforms.scale, scale );\n\n\t\t\t\tstate.setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );\n\t\t\t\tstate.buffers.depth.setTest( material.depthTest );\n\t\t\t\tstate.buffers.depth.setMask( material.depthWrite );\n\t\t\t\tstate.buffers.color.setMask( material.colorWrite );\n\n\t\t\t\ttextures.setTexture2D( material.map || texture, 0 );\n\n\t\t\t\tgl.drawElements( gl.TRIANGLES, 6, gl.UNSIGNED_SHORT, 0 );\n\n\t\t\t\tsprite.onAfterRender( renderer, scene, camera, undefined, material, undefined );\n\n\t\t\t}\n\n\t\t\t// restore gl\n\n\t\t\tstate.enable( gl.CULL_FACE );\n\n\t\t\tstate.reset();\n\n\t\t};\n\n\t\tfunction createProgram() {\n\n\t\t\tvar program = gl.createProgram();\n\n\t\t\tvar vertexShader = gl.createShader( gl.VERTEX_SHADER );\n\t\t\tvar fragmentShader = gl.createShader( gl.FRAGMENT_SHADER );\n\n\t\t\tgl.shaderSource( vertexShader, [\n\n\t\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t\t'uniform mat4 modelViewMatrix;',\n\t\t\t\t'uniform mat4 projectionMatrix;',\n\t\t\t\t'uniform float rotation;',\n\t\t\t\t'uniform vec2 center;',\n\t\t\t\t'uniform vec2 scale;',\n\t\t\t\t'uniform vec2 uvOffset;',\n\t\t\t\t'uniform vec2 uvScale;',\n\n\t\t\t\t'attribute vec2 position;',\n\t\t\t\t'attribute vec2 uv;',\n\n\t\t\t\t'varying vec2 vUV;',\n\t\t\t\t'varying float fogDepth;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvUV = uvOffset + uv * uvScale;',\n\n\t\t\t\t'\tvec2 alignedPosition = ( position - center ) * scale;',\n\n\t\t\t\t'\tvec2 rotatedPosition;',\n\t\t\t\t'\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;',\n\t\t\t\t'\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;',\n\n\t\t\t\t'\tvec4 mvPosition;',\n\n\t\t\t\t'\tmvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );',\n\t\t\t\t'\tmvPosition.xy += rotatedPosition;',\n\n\t\t\t\t'\tgl_Position = projectionMatrix * mvPosition;',\n\n\t\t\t\t'\tfogDepth = - mvPosition.z;',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ) );\n\n\t\t\tgl.shaderSource( fragmentShader, [\n\n\t\t\t\t'precision ' + capabilities.precision + ' float;',\n\n\t\t\t\t'#define SHADER_NAME ' + 'SpriteMaterial',\n\n\t\t\t\t'uniform vec3 color;',\n\t\t\t\t'uniform sampler2D map;',\n\t\t\t\t'uniform float opacity;',\n\n\t\t\t\t'uniform int fogType;',\n\t\t\t\t'uniform vec3 fogColor;',\n\t\t\t\t'uniform float fogDensity;',\n\t\t\t\t'uniform float fogNear;',\n\t\t\t\t'uniform float fogFar;',\n\t\t\t\t'uniform float alphaTest;',\n\n\t\t\t\t'varying vec2 vUV;',\n\t\t\t\t'varying float fogDepth;',\n\n\t\t\t\t'void main() {',\n\n\t\t\t\t'\tvec4 texture = texture2D( map, vUV );',\n\n\t\t\t\t'\tgl_FragColor = vec4( color * texture.xyz, texture.a * opacity );',\n\n\t\t\t\t'\tif ( gl_FragColor.a < alphaTest ) discard;',\n\n\t\t\t\t'\tif ( fogType > 0 ) {',\n\n\t\t\t\t'\t\tfloat fogFactor = 0.0;',\n\n\t\t\t\t'\t\tif ( fogType == 1 ) {',\n\n\t\t\t\t'\t\t\tfogFactor = smoothstep( fogNear, fogFar, fogDepth );',\n\n\t\t\t\t'\t\t} else {',\n\n\t\t\t\t'\t\t\tconst float LOG2 = 1.442695;',\n\t\t\t\t'\t\t\tfogFactor = exp2( - fogDensity * fogDensity * fogDepth * fogDepth * LOG2 );',\n\t\t\t\t'\t\t\tfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );',\n\n\t\t\t\t'\t\t}',\n\n\t\t\t\t'\t\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );',\n\n\t\t\t\t'\t}',\n\n\t\t\t\t'}'\n\n\t\t\t].join( '\\n' ) );\n\n\t\t\tgl.compileShader( vertexShader );\n\t\t\tgl.compileShader( fragmentShader );\n\n\t\t\tgl.attachShader( program, vertexShader );\n\t\t\tgl.attachShader( program, fragmentShader );\n\n\t\t\tgl.linkProgram( program );\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\tfunction painterSortStable( a, b ) {\n\n\t\t\tif ( a.renderOrder !== b.renderOrder ) {\n\n\t\t\t\treturn a.renderOrder - b.renderOrder;\n\n\t\t\t} else if ( a.z !== b.z ) {\n\n\t\t\t\treturn b.z - a.z;\n\n\t\t\t} else {\n\n\t\t\t\treturn b.id - a.id;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLState( gl, extensions, utils ) {\n\n\t\tfunction ColorBuffer() {\n\n\t\t\tvar locked = false;\n\n\t\t\tvar color = new Vector4();\n\t\t\tvar currentColorMask = null;\n\t\t\tvar currentColorClear = new Vector4( 0, 0, 0, 0 );\n\n\t\t\treturn {\n\n\t\t\t\tsetMask: function ( colorMask ) {\n\n\t\t\t\t\tif ( currentColorMask !== colorMask && ! locked ) {\n\n\t\t\t\t\t\tgl.colorMask( colorMask, colorMask, colorMask, colorMask );\n\t\t\t\t\t\tcurrentColorMask = colorMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( r, g, b, a, premultipliedAlpha ) {\n\n\t\t\t\t\tif ( premultipliedAlpha === true ) {\n\n\t\t\t\t\t\tr *= a; g *= a; b *= a;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcolor.set( r, g, b, a );\n\n\t\t\t\t\tif ( currentColorClear.equals( color ) === false ) {\n\n\t\t\t\t\t\tgl.clearColor( r, g, b, a );\n\t\t\t\t\t\tcurrentColorClear.copy( color );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentColorMask = null;\n\t\t\t\t\tcurrentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction DepthBuffer() {\n\n\t\t\tvar locked = false;\n\n\t\t\tvar currentDepthMask = null;\n\t\t\tvar currentDepthFunc = null;\n\t\t\tvar currentDepthClear = null;\n\n\t\t\treturn {\n\n\t\t\t\tsetTest: function ( depthTest ) {\n\n\t\t\t\t\tif ( depthTest ) {\n\n\t\t\t\t\t\tenable( gl.DEPTH_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.DEPTH_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetMask: function ( depthMask ) {\n\n\t\t\t\t\tif ( currentDepthMask !== depthMask && ! locked ) {\n\n\t\t\t\t\t\tgl.depthMask( depthMask );\n\t\t\t\t\t\tcurrentDepthMask = depthMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetFunc: function ( depthFunc ) {\n\n\t\t\t\t\tif ( currentDepthFunc !== depthFunc ) {\n\n\t\t\t\t\t\tif ( depthFunc ) {\n\n\t\t\t\t\t\t\tswitch ( depthFunc ) {\n\n\t\t\t\t\t\t\t\tcase NeverDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.NEVER );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase AlwaysDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.ALWAYS );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.LESS );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase LessEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase EqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.EQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.GEQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase GreaterDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.GREATER );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase NotEqualDepth:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.NOTEQUAL );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tgl.depthFunc( gl.LEQUAL );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentDepthFunc = depthFunc;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( depth ) {\n\n\t\t\t\t\tif ( currentDepthClear !== depth ) {\n\n\t\t\t\t\t\tgl.clearDepth( depth );\n\t\t\t\t\t\tcurrentDepthClear = depth;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentDepthMask = null;\n\t\t\t\t\tcurrentDepthFunc = null;\n\t\t\t\t\tcurrentDepthClear = null;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\tfunction StencilBuffer() {\n\n\t\t\tvar locked = false;\n\n\t\t\tvar currentStencilMask = null;\n\t\t\tvar currentStencilFunc = null;\n\t\t\tvar currentStencilRef = null;\n\t\t\tvar currentStencilFuncMask = null;\n\t\t\tvar currentStencilFail = null;\n\t\t\tvar currentStencilZFail = null;\n\t\t\tvar currentStencilZPass = null;\n\t\t\tvar currentStencilClear = null;\n\n\t\t\treturn {\n\n\t\t\t\tsetTest: function ( stencilTest ) {\n\n\t\t\t\t\tif ( stencilTest ) {\n\n\t\t\t\t\t\tenable( gl.STENCIL_TEST );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tdisable( gl.STENCIL_TEST );\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetMask: function ( stencilMask ) {\n\n\t\t\t\t\tif ( currentStencilMask !== stencilMask && ! locked ) {\n\n\t\t\t\t\t\tgl.stencilMask( stencilMask );\n\t\t\t\t\t\tcurrentStencilMask = stencilMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetFunc: function ( stencilFunc, stencilRef, stencilMask ) {\n\n\t\t\t\t\tif ( currentStencilFunc !== stencilFunc ||\n\t\t\t\t\t currentStencilRef \t!== stencilRef \t||\n\t\t\t\t\t currentStencilFuncMask !== stencilMask ) {\n\n\t\t\t\t\t\tgl.stencilFunc( stencilFunc, stencilRef, stencilMask );\n\n\t\t\t\t\t\tcurrentStencilFunc = stencilFunc;\n\t\t\t\t\t\tcurrentStencilRef = stencilRef;\n\t\t\t\t\t\tcurrentStencilFuncMask = stencilMask;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetOp: function ( stencilFail, stencilZFail, stencilZPass ) {\n\n\t\t\t\t\tif ( currentStencilFail\t !== stencilFail \t||\n\t\t\t\t\t currentStencilZFail !== stencilZFail ||\n\t\t\t\t\t currentStencilZPass !== stencilZPass ) {\n\n\t\t\t\t\t\tgl.stencilOp( stencilFail, stencilZFail, stencilZPass );\n\n\t\t\t\t\t\tcurrentStencilFail = stencilFail;\n\t\t\t\t\t\tcurrentStencilZFail = stencilZFail;\n\t\t\t\t\t\tcurrentStencilZPass = stencilZPass;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tsetLocked: function ( lock ) {\n\n\t\t\t\t\tlocked = lock;\n\n\t\t\t\t},\n\n\t\t\t\tsetClear: function ( stencil ) {\n\n\t\t\t\t\tif ( currentStencilClear !== stencil ) {\n\n\t\t\t\t\t\tgl.clearStencil( stencil );\n\t\t\t\t\t\tcurrentStencilClear = stencil;\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\treset: function () {\n\n\t\t\t\t\tlocked = false;\n\n\t\t\t\t\tcurrentStencilMask = null;\n\t\t\t\t\tcurrentStencilFunc = null;\n\t\t\t\t\tcurrentStencilRef = null;\n\t\t\t\t\tcurrentStencilFuncMask = null;\n\t\t\t\t\tcurrentStencilFail = null;\n\t\t\t\t\tcurrentStencilZFail = null;\n\t\t\t\t\tcurrentStencilZPass = null;\n\t\t\t\t\tcurrentStencilClear = null;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}\n\n\t\t//\n\n\t\tvar colorBuffer = new ColorBuffer();\n\t\tvar depthBuffer = new DepthBuffer();\n\t\tvar stencilBuffer = new StencilBuffer();\n\n\t\tvar maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );\n\t\tvar newAttributes = new Uint8Array( maxVertexAttributes );\n\t\tvar enabledAttributes = new Uint8Array( maxVertexAttributes );\n\t\tvar attributeDivisors = new Uint8Array( maxVertexAttributes );\n\n\t\tvar capabilities = {};\n\n\t\tvar compressedTextureFormats = null;\n\n\t\tvar currentProgram = null;\n\n\t\tvar currentBlending = null;\n\t\tvar currentBlendEquation = null;\n\t\tvar currentBlendSrc = null;\n\t\tvar currentBlendDst = null;\n\t\tvar currentBlendEquationAlpha = null;\n\t\tvar currentBlendSrcAlpha = null;\n\t\tvar currentBlendDstAlpha = null;\n\t\tvar currentPremultipledAlpha = false;\n\n\t\tvar currentFlipSided = null;\n\t\tvar currentCullFace = null;\n\n\t\tvar currentLineWidth = null;\n\n\t\tvar currentPolygonOffsetFactor = null;\n\t\tvar currentPolygonOffsetUnits = null;\n\n\t\tvar maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );\n\n\t\tvar lineWidthAvailable = false;\n\t\tvar version = 0;\n\t\tvar glVersion = gl.getParameter( gl.VERSION );\n\n\t\tif ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {\n\n\t\t\tversion = parseFloat( /^WebGL\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\t\tlineWidthAvailable = ( version >= 1.0 );\n\n\t\t} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {\n\n\t\t\tversion = parseFloat( /^OpenGL\\ ES\\ ([0-9])/.exec( glVersion )[ 1 ] );\n\t\t\tlineWidthAvailable = ( version >= 2.0 );\n\n\t\t}\n\n\t\tvar currentTextureSlot = null;\n\t\tvar currentBoundTextures = {};\n\n\t\tvar currentScissor = new Vector4();\n\t\tvar currentViewport = new Vector4();\n\n\t\tfunction createTexture( type, target, count ) {\n\n\t\t\tvar data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.\n\t\t\tvar texture = gl.createTexture();\n\n\t\t\tgl.bindTexture( type, texture );\n\t\t\tgl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );\n\t\t\tgl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );\n\n\t\t\tfor ( var i = 0; i < count; i ++ ) {\n\n\t\t\t\tgl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t\tvar emptyTextures = {};\n\t\temptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );\n\t\temptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );\n\n\t\t// init\n\n\t\tcolorBuffer.setClear( 0, 0, 0, 1 );\n\t\tdepthBuffer.setClear( 1 );\n\t\tstencilBuffer.setClear( 0 );\n\n\t\tenable( gl.DEPTH_TEST );\n\t\tdepthBuffer.setFunc( LessEqualDepth );\n\n\t\tsetFlipSided( false );\n\t\tsetCullFace( CullFaceBack );\n\t\tenable( gl.CULL_FACE );\n\n\t\tenable( gl.BLEND );\n\t\tsetBlending( NormalBlending );\n\n\t\t//\n\n\t\tfunction initAttributes() {\n\n\t\t\tfor ( var i = 0, l = newAttributes.length; i < l; i ++ ) {\n\n\t\t\t\tnewAttributes[ i ] = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction enableAttribute( attribute ) {\n\n\t\t\tenableAttributeAndDivisor( attribute, 0 );\n\n\t\t}\n\n\t\tfunction enableAttributeAndDivisor( attribute, meshPerAttribute ) {\n\n\t\t\tnewAttributes[ attribute ] = 1;\n\n\t\t\tif ( enabledAttributes[ attribute ] === 0 ) {\n\n\t\t\t\tgl.enableVertexAttribArray( attribute );\n\t\t\t\tenabledAttributes[ attribute ] = 1;\n\n\t\t\t}\n\n\t\t\tif ( attributeDivisors[ attribute ] !== meshPerAttribute ) {\n\n\t\t\t\tvar extension = extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\t\textension.vertexAttribDivisorANGLE( attribute, meshPerAttribute );\n\t\t\t\tattributeDivisors[ attribute ] = meshPerAttribute;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disableUnusedAttributes() {\n\n\t\t\tfor ( var i = 0, l = enabledAttributes.length; i !== l; ++ i ) {\n\n\t\t\t\tif ( enabledAttributes[ i ] !== newAttributes[ i ] ) {\n\n\t\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction enable( id ) {\n\n\t\t\tif ( capabilities[ id ] !== true ) {\n\n\t\t\t\tgl.enable( id );\n\t\t\t\tcapabilities[ id ] = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction disable( id ) {\n\n\t\t\tif ( capabilities[ id ] !== false ) {\n\n\t\t\t\tgl.disable( id );\n\t\t\t\tcapabilities[ id ] = false;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction getCompressedTextureFormats() {\n\n\t\t\tif ( compressedTextureFormats === null ) {\n\n\t\t\t\tcompressedTextureFormats = [];\n\n\t\t\t\tif ( extensions.get( 'WEBGL_compressed_texture_pvrtc' ) ||\n\t\t\t\t extensions.get( 'WEBGL_compressed_texture_s3tc' ) ||\n\t\t\t\t extensions.get( 'WEBGL_compressed_texture_etc1' ) ||\n\t\t\t\t extensions.get( 'WEBGL_compressed_texture_astc' ) ) {\n\n\t\t\t\t\tvar formats = gl.getParameter( gl.COMPRESSED_TEXTURE_FORMATS );\n\n\t\t\t\t\tfor ( var i = 0; i < formats.length; i ++ ) {\n\n\t\t\t\t\t\tcompressedTextureFormats.push( formats[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn compressedTextureFormats;\n\n\t\t}\n\n\t\tfunction useProgram( program ) {\n\n\t\t\tif ( currentProgram !== program ) {\n\n\t\t\t\tgl.useProgram( program );\n\n\t\t\t\tcurrentProgram = program;\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\treturn false;\n\n\t\t}\n\n\t\tfunction setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {\n\n\t\t\tif ( blending !== NoBlending ) {\n\n\t\t\t\tenable( gl.BLEND );\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.BLEND );\n\n\t\t\t}\n\n\t\t\tif ( blending !== CustomBlending ) {\n\n\t\t\t\tif ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {\n\n\t\t\t\t\tswitch ( blending ) {\n\n\t\t\t\t\t\tcase AdditiveBlending:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE, gl.ONE, gl.ONE );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFunc( gl.SRC_ALPHA, gl.ONE );\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase SubtractiveBlending:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.ONE_MINUS_SRC_COLOR );\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase MultiplyBlending:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquation( gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFunc( gl.ZERO, gl.SRC_COLOR );\n\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tif ( premultipliedAlpha ) {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tgl.blendEquationSeparate( gl.FUNC_ADD, gl.FUNC_ADD );\n\t\t\t\t\t\t\t\tgl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tcurrentBlendEquation = null;\n\t\t\t\tcurrentBlendSrc = null;\n\t\t\t\tcurrentBlendDst = null;\n\t\t\t\tcurrentBlendEquationAlpha = null;\n\t\t\t\tcurrentBlendSrcAlpha = null;\n\t\t\t\tcurrentBlendDstAlpha = null;\n\n\t\t\t} else {\n\n\t\t\t\tblendEquationAlpha = blendEquationAlpha || blendEquation;\n\t\t\t\tblendSrcAlpha = blendSrcAlpha || blendSrc;\n\t\t\t\tblendDstAlpha = blendDstAlpha || blendDst;\n\n\t\t\t\tif ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {\n\n\t\t\t\t\tgl.blendEquationSeparate( utils.convert( blendEquation ), utils.convert( blendEquationAlpha ) );\n\n\t\t\t\t\tcurrentBlendEquation = blendEquation;\n\t\t\t\t\tcurrentBlendEquationAlpha = blendEquationAlpha;\n\n\t\t\t\t}\n\n\t\t\t\tif ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {\n\n\t\t\t\t\tgl.blendFuncSeparate( utils.convert( blendSrc ), utils.convert( blendDst ), utils.convert( blendSrcAlpha ), utils.convert( blendDstAlpha ) );\n\n\t\t\t\t\tcurrentBlendSrc = blendSrc;\n\t\t\t\t\tcurrentBlendDst = blendDst;\n\t\t\t\t\tcurrentBlendSrcAlpha = blendSrcAlpha;\n\t\t\t\t\tcurrentBlendDstAlpha = blendDstAlpha;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcurrentBlending = blending;\n\t\t\tcurrentPremultipledAlpha = premultipliedAlpha;\n\n\t\t}\n\n\t\tfunction setMaterial( material, frontFaceCW ) {\n\n\t\t\tmaterial.side === DoubleSide\n\t\t\t\t? disable( gl.CULL_FACE )\n\t\t\t\t: enable( gl.CULL_FACE );\n\n\t\t\tvar flipSided = ( material.side === BackSide );\n\t\t\tif ( frontFaceCW ) flipSided = ! flipSided;\n\n\t\t\tsetFlipSided( flipSided );\n\n\t\t\tmaterial.transparent === true\n\t\t\t\t? setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha )\n\t\t\t\t: setBlending( NoBlending );\n\n\t\t\tdepthBuffer.setFunc( material.depthFunc );\n\t\t\tdepthBuffer.setTest( material.depthTest );\n\t\t\tdepthBuffer.setMask( material.depthWrite );\n\t\t\tcolorBuffer.setMask( material.colorWrite );\n\n\t\t\tsetPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );\n\n\t\t}\n\n\t\t//\n\n\t\tfunction setFlipSided( flipSided ) {\n\n\t\t\tif ( currentFlipSided !== flipSided ) {\n\n\t\t\t\tif ( flipSided ) {\n\n\t\t\t\t\tgl.frontFace( gl.CW );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tgl.frontFace( gl.CCW );\n\n\t\t\t\t}\n\n\t\t\t\tcurrentFlipSided = flipSided;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setCullFace( cullFace ) {\n\n\t\t\tif ( cullFace !== CullFaceNone ) {\n\n\t\t\t\tenable( gl.CULL_FACE );\n\n\t\t\t\tif ( cullFace !== currentCullFace ) {\n\n\t\t\t\t\tif ( cullFace === CullFaceBack ) {\n\n\t\t\t\t\t\tgl.cullFace( gl.BACK );\n\n\t\t\t\t\t} else if ( cullFace === CullFaceFront ) {\n\n\t\t\t\t\t\tgl.cullFace( gl.FRONT );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tgl.cullFace( gl.FRONT_AND_BACK );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.CULL_FACE );\n\n\t\t\t}\n\n\t\t\tcurrentCullFace = cullFace;\n\n\t\t}\n\n\t\tfunction setLineWidth( width ) {\n\n\t\t\tif ( width !== currentLineWidth ) {\n\n\t\t\t\tif ( lineWidthAvailable ) gl.lineWidth( width );\n\n\t\t\t\tcurrentLineWidth = width;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setPolygonOffset( polygonOffset, factor, units ) {\n\n\t\t\tif ( polygonOffset ) {\n\n\t\t\t\tenable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\t\tif ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {\n\n\t\t\t\t\tgl.polygonOffset( factor, units );\n\n\t\t\t\t\tcurrentPolygonOffsetFactor = factor;\n\t\t\t\t\tcurrentPolygonOffsetUnits = units;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.POLYGON_OFFSET_FILL );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setScissorTest( scissorTest ) {\n\n\t\t\tif ( scissorTest ) {\n\n\t\t\t\tenable( gl.SCISSOR_TEST );\n\n\t\t\t} else {\n\n\t\t\t\tdisable( gl.SCISSOR_TEST );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// texture\n\n\t\tfunction activeTexture( webglSlot ) {\n\n\t\t\tif ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;\n\n\t\t\tif ( currentTextureSlot !== webglSlot ) {\n\n\t\t\t\tgl.activeTexture( webglSlot );\n\t\t\t\tcurrentTextureSlot = webglSlot;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction bindTexture( webglType, webglTexture ) {\n\n\t\t\tif ( currentTextureSlot === null ) {\n\n\t\t\t\tactiveTexture();\n\n\t\t\t}\n\n\t\t\tvar boundTexture = currentBoundTextures[ currentTextureSlot ];\n\n\t\t\tif ( boundTexture === undefined ) {\n\n\t\t\t\tboundTexture = { type: undefined, texture: undefined };\n\t\t\t\tcurrentBoundTextures[ currentTextureSlot ] = boundTexture;\n\n\t\t\t}\n\n\t\t\tif ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {\n\n\t\t\t\tgl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );\n\n\t\t\t\tboundTexture.type = webglType;\n\t\t\t\tboundTexture.texture = webglTexture;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction compressedTexImage2D() {\n\n\t\t\ttry {\n\n\t\t\t\tgl.compressedTexImage2D.apply( gl, arguments );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction texImage2D() {\n\n\t\t\ttry {\n\n\t\t\t\tgl.texImage2D.apply( gl, arguments );\n\n\t\t\t} catch ( error ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLState:', error );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction scissor( scissor ) {\n\n\t\t\tif ( currentScissor.equals( scissor ) === false ) {\n\n\t\t\t\tgl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );\n\t\t\t\tcurrentScissor.copy( scissor );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction viewport( viewport ) {\n\n\t\t\tif ( currentViewport.equals( viewport ) === false ) {\n\n\t\t\t\tgl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );\n\t\t\t\tcurrentViewport.copy( viewport );\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tfunction reset() {\n\n\t\t\tfor ( var i = 0; i < enabledAttributes.length; i ++ ) {\n\n\t\t\t\tif ( enabledAttributes[ i ] === 1 ) {\n\n\t\t\t\t\tgl.disableVertexAttribArray( i );\n\t\t\t\t\tenabledAttributes[ i ] = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tcapabilities = {};\n\n\t\t\tcompressedTextureFormats = null;\n\n\t\t\tcurrentTextureSlot = null;\n\t\t\tcurrentBoundTextures = {};\n\n\t\t\tcurrentProgram = null;\n\n\t\t\tcurrentBlending = null;\n\n\t\t\tcurrentFlipSided = null;\n\t\t\tcurrentCullFace = null;\n\n\t\t\tcolorBuffer.reset();\n\t\t\tdepthBuffer.reset();\n\t\t\tstencilBuffer.reset();\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tbuffers: {\n\t\t\t\tcolor: colorBuffer,\n\t\t\t\tdepth: depthBuffer,\n\t\t\t\tstencil: stencilBuffer\n\t\t\t},\n\n\t\t\tinitAttributes: initAttributes,\n\t\t\tenableAttribute: enableAttribute,\n\t\t\tenableAttributeAndDivisor: enableAttributeAndDivisor,\n\t\t\tdisableUnusedAttributes: disableUnusedAttributes,\n\t\t\tenable: enable,\n\t\t\tdisable: disable,\n\t\t\tgetCompressedTextureFormats: getCompressedTextureFormats,\n\n\t\t\tuseProgram: useProgram,\n\n\t\t\tsetBlending: setBlending,\n\t\t\tsetMaterial: setMaterial,\n\n\t\t\tsetFlipSided: setFlipSided,\n\t\t\tsetCullFace: setCullFace,\n\n\t\t\tsetLineWidth: setLineWidth,\n\t\t\tsetPolygonOffset: setPolygonOffset,\n\n\t\t\tsetScissorTest: setScissorTest,\n\n\t\t\tactiveTexture: activeTexture,\n\t\t\tbindTexture: bindTexture,\n\t\t\tcompressedTexImage2D: compressedTexImage2D,\n\t\t\ttexImage2D: texImage2D,\n\n\t\t\tscissor: scissor,\n\t\t\tviewport: viewport,\n\n\t\t\treset: reset\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {\n\n\t\tvar _isWebGL2 = ( typeof WebGL2RenderingContext !== 'undefined' && _gl instanceof WebGL2RenderingContext ); /* global WebGL2RenderingContext */\n\t\tvar _videoTextures = {};\n\t\tvar _canvas;\n\n\t\t//\n\n\t\tfunction clampToMaxSize( image, maxSize ) {\n\n\t\t\tif ( image.width > maxSize || image.height > maxSize ) {\n\n\t\t\t\tif ( 'data' in image ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\t// Warning: Scaling through the canvas will only work with images that use\n\t\t\t\t// premultiplied alpha.\n\n\t\t\t\tvar scale = maxSize / Math.max( image.width, image.height );\n\n\t\t\t\tvar canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\t\t\tcanvas.width = Math.floor( image.width * scale );\n\t\t\t\tcanvas.height = Math.floor( image.height * scale );\n\n\t\t\t\tvar context = canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, image.width, image.height, 0, 0, canvas.width, canvas.height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is too big (' + image.width + 'x' + image.height + '). Resized to ' + canvas.width + 'x' + canvas.height, image );\n\n\t\t\t\treturn canvas;\n\n\t\t\t}\n\n\t\t\treturn image;\n\n\t\t}\n\n\t\tfunction isPowerOfTwo( image ) {\n\n\t\t\treturn _Math.isPowerOfTwo( image.width ) && _Math.isPowerOfTwo( image.height );\n\n\t\t}\n\n\t\tfunction makePowerOfTwo( image ) {\n\n\t\t\tif ( image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof ImageBitmap ) {\n\n\t\t\t\tif ( _canvas === undefined ) _canvas = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\n\t\t\t\t_canvas.width = _Math.floorPowerOfTwo( image.width );\n\t\t\t\t_canvas.height = _Math.floorPowerOfTwo( image.height );\n\n\t\t\t\tvar context = _canvas.getContext( '2d' );\n\t\t\t\tcontext.drawImage( image, 0, 0, _canvas.width, _canvas.height );\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: image is not power of two (' + image.width + 'x' + image.height + '). Resized to ' + _canvas.width + 'x' + _canvas.height, image );\n\n\t\t\t\treturn _canvas;\n\n\t\t\t}\n\n\t\t\treturn image;\n\n\t\t}\n\n\t\tfunction textureNeedsPowerOfTwo( texture ) {\n\n\t\t\treturn ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||\n\t\t\t\t( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );\n\n\t\t}\n\n\t\tfunction textureNeedsGenerateMipmaps( texture, isPowerOfTwo ) {\n\n\t\t\treturn texture.generateMipmaps && isPowerOfTwo &&\n\t\t\t\ttexture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;\n\n\t\t}\n\n\t\tfunction generateMipmap( target, texture, width, height ) {\n\n\t\t\t_gl.generateMipmap( target );\n\n\t\t\tvar textureProperties = properties.get( texture );\n\n\t\t\t// Note: Math.log( x ) * Math.LOG2E used instead of Math.log2( x ) which is not supported by IE11\n\t\t\ttextureProperties.__maxMipLevel = Math.log( Math.max( width, height ) ) * Math.LOG2E;\n\n\t\t}\n\n\t\t// Fallback filters for non-power-of-2 textures\n\n\t\tfunction filterFallback( f ) {\n\n\t\t\tif ( f === NearestFilter || f === NearestMipMapNearestFilter || f === NearestMipMapLinearFilter ) {\n\n\t\t\t\treturn _gl.NEAREST;\n\n\t\t\t}\n\n\t\t\treturn _gl.LINEAR;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction onTextureDispose( event ) {\n\n\t\t\tvar texture = event.target;\n\n\t\t\ttexture.removeEventListener( 'dispose', onTextureDispose );\n\n\t\t\tdeallocateTexture( texture );\n\n\t\t\tif ( texture.isVideoTexture ) {\n\n\t\t\t\tdelete _videoTextures[ texture.id ];\n\n\t\t\t}\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\tfunction onRenderTargetDispose( event ) {\n\n\t\t\tvar renderTarget = event.target;\n\n\t\t\trenderTarget.removeEventListener( 'dispose', onRenderTargetDispose );\n\n\t\t\tdeallocateRenderTarget( renderTarget );\n\n\t\t\tinfo.memory.textures --;\n\n\t\t}\n\n\t\t//\n\n\t\tfunction deallocateTexture( texture ) {\n\n\t\t\tvar textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.image && textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t// cube texture\n\n\t\t\t\t_gl.deleteTexture( textureProperties.__image__webglTextureCube );\n\n\t\t\t} else {\n\n\t\t\t\t// 2D texture\n\n\t\t\t\tif ( textureProperties.__webglInit === undefined ) return;\n\n\t\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\t}\n\n\t\t\t// remove all webgl properties\n\t\t\tproperties.remove( texture );\n\n\t\t}\n\n\t\tfunction deallocateRenderTarget( renderTarget ) {\n\n\t\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\t\tif ( ! renderTarget ) return;\n\n\t\t\tif ( textureProperties.__webglTexture !== undefined ) {\n\n\t\t\t\t_gl.deleteTexture( textureProperties.__webglTexture );\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\t\trenderTarget.depthTexture.dispose();\n\n\t\t\t}\n\n\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );\n\t\t\t\tif ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );\n\n\t\t\t}\n\n\t\t\tproperties.remove( renderTarget.texture );\n\t\t\tproperties.remove( renderTarget );\n\n\t\t}\n\n\t\t//\n\n\n\n\t\tfunction setTexture2D( texture, slot ) {\n\n\t\t\tvar textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.isVideoTexture ) updateVideoTexture( texture );\n\n\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\tvar image = texture.image;\n\n\t\t\t\tif ( image === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is undefined', texture );\n\n\t\t\t\t} else if ( image.complete === false ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete', texture );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tuploadTexture( textureProperties, texture, slot );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t}\n\n\t\tfunction setTextureCube( texture, slot ) {\n\n\t\t\tvar textureProperties = properties.get( texture );\n\n\t\t\tif ( texture.image.length === 6 ) {\n\n\t\t\t\tif ( texture.version > 0 && textureProperties.__version !== texture.version ) {\n\n\t\t\t\t\tif ( ! textureProperties.__image__webglTextureCube ) {\n\n\t\t\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\t\t\ttextureProperties.__image__webglTextureCube = _gl.createTexture();\n\n\t\t\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\n\t\t\t\t\tvar isCompressed = ( texture && texture.isCompressedTexture );\n\t\t\t\t\tvar isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );\n\n\t\t\t\t\tvar cubeImage = [];\n\n\t\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t\tif ( ! isCompressed && ! isDataTexture ) {\n\n\t\t\t\t\t\t\tcubeImage[ i ] = clampToMaxSize( texture.image[ i ], capabilities.maxCubemapSize );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tcubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar image = cubeImage[ 0 ],\n\t\t\t\t\t\tisPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, isPowerOfTwoImage );\n\n\t\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\t\tif ( isDataTexture ) {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glFormat, glFormat, glType, cubeImage[ i ] );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar mipmap, mipmaps = cubeImage[ i ].mipmaps;\n\n\t\t\t\t\t\t\tfor ( var j = 0, jl = mipmaps.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tmipmap = mipmaps[ j ];\n\n\t\t\t\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! isCompressed ) {\n\n\t\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\t\t\t// We assume images for cube map have the same size.\n\t\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, texture, image.width, image.height );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__image__webglTextureCube );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction setTextureCubeDynamic( texture, slot ) {\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, properties.get( texture ).__webglTexture );\n\n\t\t}\n\n\t\tfunction setTextureParameters( textureType, texture, isPowerOfTwoImage ) {\n\n\t\t\tvar extension;\n\n\t\t\tif ( isPowerOfTwoImage ) {\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, utils.convert( texture.wrapS ) );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, utils.convert( texture.wrapT ) );\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, utils.convert( texture.magFilter ) );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, utils.convert( texture.minFilter ) );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );\n\n\t\t\t\tif ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.', texture );\n\n\t\t\t\t}\n\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );\n\t\t\t\t_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );\n\n\t\t\t\tif ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.', texture );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\textension = extensions.get( 'EXT_texture_filter_anisotropic' );\n\n\t\t\tif ( extension ) {\n\n\t\t\t\tif ( texture.type === FloatType && extensions.get( 'OES_texture_float_linear' ) === null ) return;\n\t\t\t\tif ( texture.type === HalfFloatType && extensions.get( 'OES_texture_half_float_linear' ) === null ) return;\n\n\t\t\t\tif ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {\n\n\t\t\t\t\t_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );\n\t\t\t\t\tproperties.get( texture ).__currentAnisotropy = texture.anisotropy;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction uploadTexture( textureProperties, texture, slot ) {\n\n\t\t\tif ( textureProperties.__webglInit === undefined ) {\n\n\t\t\t\ttextureProperties.__webglInit = true;\n\n\t\t\t\ttexture.addEventListener( 'dispose', onTextureDispose );\n\n\t\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\t\tinfo.memory.textures ++;\n\n\t\t\t}\n\n\t\t\tstate.activeTexture( _gl.TEXTURE0 + slot );\n\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\n\t\t\t_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );\n\t\t\t_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );\n\n\t\t\tvar image = clampToMaxSize( texture.image, capabilities.maxTextureSize );\n\n\t\t\tif ( textureNeedsPowerOfTwo( texture ) && isPowerOfTwo( image ) === false ) {\n\n\t\t\t\timage = makePowerOfTwo( image );\n\n\t\t\t}\n\n\t\t\tvar isPowerOfTwoImage = isPowerOfTwo( image ),\n\t\t\t\tglFormat = utils.convert( texture.format ),\n\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\tsetTextureParameters( _gl.TEXTURE_2D, texture, isPowerOfTwoImage );\n\n\t\t\tvar mipmap, mipmaps = texture.mipmaps;\n\n\t\t\tif ( texture.isDepthTexture ) {\n\n\t\t\t\t// populate depth texture with dummy data\n\n\t\t\t\tvar internalFormat = _gl.DEPTH_COMPONENT;\n\n\t\t\t\tif ( texture.type === FloatType ) {\n\n\t\t\t\t\tif ( ! _isWebGL2 ) throw new Error( 'Float Depth Texture only supported in WebGL2.0' );\n\t\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT32F;\n\n\t\t\t\t} else if ( _isWebGL2 ) {\n\n\t\t\t\t\t// WebGL 2.0 requires signed internalformat for glTexImage2D\n\t\t\t\t\tinternalFormat = _gl.DEPTH_COMPONENT16;\n\n\t\t\t\t}\n\n\t\t\t\tif ( texture.format === DepthFormat && internalFormat === _gl.DEPTH_COMPONENT ) {\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedShortType;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// Depth stencil textures need the DEPTH_STENCIL internal format\n\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\tif ( texture.format === DepthStencilFormat ) {\n\n\t\t\t\t\tinternalFormat = _gl.DEPTH_STENCIL;\n\n\t\t\t\t\t// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are\n\t\t\t\t\t// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.\n\t\t\t\t\t// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)\n\t\t\t\t\tif ( texture.type !== UnsignedInt248Type ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );\n\n\t\t\t\t\t\ttexture.type = UnsignedInt248Type;\n\t\t\t\t\t\tglType = utils.convert( texture.type );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, internalFormat, image.width, image.height, 0, glFormat, glType, null );\n\n\t\t\t} else if ( texture.isDataTexture ) {\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, image.width, image.height, 0, glFormat, glType, image.data );\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t}\n\n\t\t\t} else if ( texture.isCompressedTexture ) {\n\n\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\tmipmap = mipmaps[ i ];\n\n\t\t\t\t\tif ( texture.format !== RGBAFormat && texture.format !== RGBFormat ) {\n\n\t\t\t\t\t\tif ( state.getCompressedTextureFormats().indexOf( glFormat ) > - 1 ) {\n\n\t\t\t\t\t\t\tstate.compressedTexImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, mipmap.data );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t} else {\n\n\t\t\t\t// regular Texture (image, video, canvas)\n\n\t\t\t\t// use manually created mipmaps if available\n\t\t\t\t// if there are no manual mipmaps\n\t\t\t\t// set 0 level mipmap and then use GL to generate other mipmap levels\n\n\t\t\t\tif ( mipmaps.length > 0 && isPowerOfTwoImage ) {\n\n\t\t\t\t\tfor ( var i = 0, il = mipmaps.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tmipmap = mipmaps[ i ];\n\t\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, i, glFormat, glFormat, glType, mipmap );\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.generateMipmaps = false;\n\t\t\t\t\ttextureProperties.__maxMipLevel = mipmaps.length - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tstate.texImage2D( _gl.TEXTURE_2D, 0, glFormat, glFormat, glType, image );\n\t\t\t\t\ttextureProperties.__maxMipLevel = 0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, isPowerOfTwoImage ) ) {\n\n\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, texture, image.width, image.height );\n\n\t\t\t}\n\n\t\t\ttextureProperties.__version = texture.version;\n\n\t\t\tif ( texture.onUpdate ) texture.onUpdate( texture );\n\n\t\t}\n\n\t\t// Render targets\n\n\t\t// Setup storage for target texture and bind it to correct framebuffer\n\t\tfunction setupFrameBufferTexture( framebuffer, renderTarget, attachment, textureTarget ) {\n\n\t\t\tvar glFormat = utils.convert( renderTarget.texture.format );\n\t\t\tvar glType = utils.convert( renderTarget.texture.type );\n\t\t\tstate.texImage2D( textureTarget, 0, glFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( renderTarget.texture ).__webglTexture, 0 );\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t}\n\n\t\t// Setup storage for internal depth/stencil buffers and bind to correct framebuffer\n\t\tfunction setupRenderBufferStorage( renderbuffer, renderTarget ) {\n\n\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\tif ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_COMPONENT16, renderTarget.width, renderTarget.height );\n\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {\n\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );\n\t\t\t\t_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );\n\n\t\t\t} else {\n\n\t\t\t\t// FIXME: We don't support !depth !stencil\n\t\t\t\t_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.RGBA4, renderTarget.width, renderTarget.height );\n\n\t\t\t}\n\n\t\t\t_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );\n\n\t\t}\n\n\t\t// Setup resources for a Depth Texture for a FBO (needs an extension)\n\t\tfunction setupDepthTexture( framebuffer, renderTarget ) {\n\n\t\t\tvar isCube = ( renderTarget && renderTarget.isWebGLRenderTargetCube );\n\t\t\tif ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\tif ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {\n\n\t\t\t\tthrow new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );\n\n\t\t\t}\n\n\t\t\t// upload an empty depth texture with framebuffer size\n\t\t\tif ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||\n\t\t\t\t\trenderTarget.depthTexture.image.width !== renderTarget.width ||\n\t\t\t\t\trenderTarget.depthTexture.image.height !== renderTarget.height ) {\n\n\t\t\t\trenderTarget.depthTexture.image.width = renderTarget.width;\n\t\t\t\trenderTarget.depthTexture.image.height = renderTarget.height;\n\t\t\t\trenderTarget.depthTexture.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tsetTexture2D( renderTarget.depthTexture, 0 );\n\n\t\t\tvar webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;\n\n\t\t\tif ( renderTarget.depthTexture.format === DepthFormat ) {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {\n\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );\n\n\t\t\t} else {\n\n\t\t\t\tthrow new Error( 'Unknown depthTexture format' );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Setup GL resources for a non-texture depth buffer\n\t\tfunction setupDepthRenderbuffer( renderTarget ) {\n\n\t\t\tvar renderTargetProperties = properties.get( renderTarget );\n\n\t\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\n\t\t\tif ( renderTarget.depthTexture ) {\n\n\t\t\t\tif ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );\n\n\t\t\t\tsetupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );\n\n\t\t\t} else {\n\n\t\t\t\tif ( isCube ) {\n\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = [];\n\n\t\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );\n\t\t\t\t\t\trenderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();\n\t\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );\n\t\t\t\t\trenderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();\n\t\t\t\t\tsetupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, null );\n\n\t\t}\n\n\t\t// Set up GL resources for the render target\n\t\tfunction setupRenderTarget( renderTarget ) {\n\n\t\t\tvar renderTargetProperties = properties.get( renderTarget );\n\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\n\t\t\trenderTarget.addEventListener( 'dispose', onRenderTargetDispose );\n\n\t\t\ttextureProperties.__webglTexture = _gl.createTexture();\n\n\t\t\tinfo.memory.textures ++;\n\n\t\t\tvar isCube = ( renderTarget.isWebGLRenderTargetCube === true );\n\t\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t\t// Setup framebuffer\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = [];\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\trenderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();\n\n\t\t\t}\n\n\t\t\t// Setup color buffer\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, isTargetPowerOfTwo );\n\n\t\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );\n\n\t\t\t\t}\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_CUBE_MAP, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_CUBE_MAP, null );\n\n\t\t\t} else {\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture );\n\t\t\t\tsetTextureParameters( _gl.TEXTURE_2D, renderTarget.texture, isTargetPowerOfTwo );\n\t\t\t\tsetupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );\n\n\t\t\t\tif ( textureNeedsGenerateMipmaps( renderTarget.texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\t\tgenerateMipmap( _gl.TEXTURE_2D, renderTarget.texture, renderTarget.width, renderTarget.height );\n\n\t\t\t\t}\n\n\t\t\t\tstate.bindTexture( _gl.TEXTURE_2D, null );\n\n\t\t\t}\n\n\t\t\t// Setup depth and stencil buffers\n\n\t\t\tif ( renderTarget.depthBuffer ) {\n\n\t\t\t\tsetupDepthRenderbuffer( renderTarget );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateRenderTargetMipmap( renderTarget ) {\n\n\t\t\tvar texture = renderTarget.texture;\n\t\t\tvar isTargetPowerOfTwo = isPowerOfTwo( renderTarget );\n\n\t\t\tif ( textureNeedsGenerateMipmaps( texture, isTargetPowerOfTwo ) ) {\n\n\t\t\t\tvar target = renderTarget.isWebGLRenderTargetCube ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;\n\t\t\t\tvar webglTexture = properties.get( texture ).__webglTexture;\n\n\t\t\t\tstate.bindTexture( target, webglTexture );\n\t\t\t\tgenerateMipmap( target, texture, renderTarget.width, renderTarget.height );\n\t\t\t\tstate.bindTexture( target, null );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction updateVideoTexture( texture ) {\n\n\t\t\tvar id = texture.id;\n\t\t\tvar frame = info.render.frame;\n\n\t\t\t// Check the last frame we updated the VideoTexture\n\n\t\t\tif ( _videoTextures[ id ] !== frame ) {\n\n\t\t\t\t_videoTextures[ id ] = frame;\n\t\t\t\ttexture.update();\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.setTexture2D = setTexture2D;\n\t\tthis.setTextureCube = setTextureCube;\n\t\tthis.setTextureCubeDynamic = setTextureCubeDynamic;\n\t\tthis.setupRenderTarget = setupRenderTarget;\n\t\tthis.updateRenderTargetMipmap = updateRenderTargetMipmap;\n\n\t}\n\n\t/**\n\t * @author thespite / http://www.twitter.com/thespite\n\t */\n\n\tfunction WebGLUtils( gl, extensions ) {\n\n\t\tfunction convert( p ) {\n\n\t\t\tvar extension;\n\n\t\t\tif ( p === RepeatWrapping ) return gl.REPEAT;\n\t\t\tif ( p === ClampToEdgeWrapping ) return gl.CLAMP_TO_EDGE;\n\t\t\tif ( p === MirroredRepeatWrapping ) return gl.MIRRORED_REPEAT;\n\n\t\t\tif ( p === NearestFilter ) return gl.NEAREST;\n\t\t\tif ( p === NearestMipMapNearestFilter ) return gl.NEAREST_MIPMAP_NEAREST;\n\t\t\tif ( p === NearestMipMapLinearFilter ) return gl.NEAREST_MIPMAP_LINEAR;\n\n\t\t\tif ( p === LinearFilter ) return gl.LINEAR;\n\t\t\tif ( p === LinearMipMapNearestFilter ) return gl.LINEAR_MIPMAP_NEAREST;\n\t\t\tif ( p === LinearMipMapLinearFilter ) return gl.LINEAR_MIPMAP_LINEAR;\n\n\t\t\tif ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;\n\t\t\tif ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;\n\t\t\tif ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;\n\t\t\tif ( p === UnsignedShort565Type ) return gl.UNSIGNED_SHORT_5_6_5;\n\n\t\t\tif ( p === ByteType ) return gl.BYTE;\n\t\t\tif ( p === ShortType ) return gl.SHORT;\n\t\t\tif ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;\n\t\t\tif ( p === IntType ) return gl.INT;\n\t\t\tif ( p === UnsignedIntType ) return gl.UNSIGNED_INT;\n\t\t\tif ( p === FloatType ) return gl.FLOAT;\n\n\t\t\tif ( p === HalfFloatType ) {\n\n\t\t\t\textension = extensions.get( 'OES_texture_half_float' );\n\n\t\t\t\tif ( extension !== null ) return extension.HALF_FLOAT_OES;\n\n\t\t\t}\n\n\t\t\tif ( p === AlphaFormat ) return gl.ALPHA;\n\t\t\tif ( p === RGBFormat ) return gl.RGB;\n\t\t\tif ( p === RGBAFormat ) return gl.RGBA;\n\t\t\tif ( p === LuminanceFormat ) return gl.LUMINANCE;\n\t\t\tif ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;\n\t\t\tif ( p === DepthFormat ) return gl.DEPTH_COMPONENT;\n\t\t\tif ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;\n\n\t\t\tif ( p === AddEquation ) return gl.FUNC_ADD;\n\t\t\tif ( p === SubtractEquation ) return gl.FUNC_SUBTRACT;\n\t\t\tif ( p === ReverseSubtractEquation ) return gl.FUNC_REVERSE_SUBTRACT;\n\n\t\t\tif ( p === ZeroFactor ) return gl.ZERO;\n\t\t\tif ( p === OneFactor ) return gl.ONE;\n\t\t\tif ( p === SrcColorFactor ) return gl.SRC_COLOR;\n\t\t\tif ( p === OneMinusSrcColorFactor ) return gl.ONE_MINUS_SRC_COLOR;\n\t\t\tif ( p === SrcAlphaFactor ) return gl.SRC_ALPHA;\n\t\t\tif ( p === OneMinusSrcAlphaFactor ) return gl.ONE_MINUS_SRC_ALPHA;\n\t\t\tif ( p === DstAlphaFactor ) return gl.DST_ALPHA;\n\t\t\tif ( p === OneMinusDstAlphaFactor ) return gl.ONE_MINUS_DST_ALPHA;\n\n\t\t\tif ( p === DstColorFactor ) return gl.DST_COLOR;\n\t\t\tif ( p === OneMinusDstColorFactor ) return gl.ONE_MINUS_DST_COLOR;\n\t\t\tif ( p === SrcAlphaSaturateFactor ) return gl.SRC_ALPHA_SATURATE;\n\n\t\t\tif ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format ||\n\t\t\t\tp === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;\n\t\t\t\t\tif ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format ||\n\t\t\t\tp === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;\n\t\t\t\t\tif ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;\n\t\t\t\t\tif ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === RGB_ETC1_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_etc1' );\n\n\t\t\t\tif ( extension !== null ) return extension.COMPRESSED_RGB_ETC1_WEBGL;\n\n\t\t\t}\n\n\t\t\tif ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||\n\t\t\t\tp === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||\n\t\t\t\tp === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||\n\t\t\t\tp === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||\n\t\t\t\tp === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_compressed_texture_astc' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\treturn p;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === MinEquation || p === MaxEquation ) {\n\n\t\t\t\textension = extensions.get( 'EXT_blend_minmax' );\n\n\t\t\t\tif ( extension !== null ) {\n\n\t\t\t\t\tif ( p === MinEquation ) return extension.MIN_EXT;\n\t\t\t\t\tif ( p === MaxEquation ) return extension.MAX_EXT;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( p === UnsignedInt248Type ) {\n\n\t\t\t\textension = extensions.get( 'WEBGL_depth_texture' );\n\n\t\t\t\tif ( extension !== null ) return extension.UNSIGNED_INT_24_8_WEBGL;\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\treturn { convert: convert };\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author greggman / http://games.greggman.com/\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author tschw\n\t */\n\n\tfunction PerspectiveCamera( fov, aspect, near, far ) {\n\n\t\tCamera.call( this );\n\n\t\tthis.type = 'PerspectiveCamera';\n\n\t\tthis.fov = fov !== undefined ? fov : 50;\n\t\tthis.zoom = 1;\n\n\t\tthis.near = near !== undefined ? near : 0.1;\n\t\tthis.far = far !== undefined ? far : 2000;\n\t\tthis.focus = 10;\n\n\t\tthis.aspect = aspect !== undefined ? aspect : 1;\n\t\tthis.view = null;\n\n\t\tthis.filmGauge = 35;\t// width of the film (default in millimeters)\n\t\tthis.filmOffset = 0;\t// horizontal film offset (same unit as gauge)\n\n\t\tthis.updateProjectionMatrix();\n\n\t}\n\n\tPerspectiveCamera.prototype = Object.assign( Object.create( Camera.prototype ), {\n\n\t\tconstructor: PerspectiveCamera,\n\n\t\tisPerspectiveCamera: true,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tCamera.prototype.copy.call( this, source, recursive );\n\n\t\t\tthis.fov = source.fov;\n\t\t\tthis.zoom = source.zoom;\n\n\t\t\tthis.near = source.near;\n\t\t\tthis.far = source.far;\n\t\t\tthis.focus = source.focus;\n\n\t\t\tthis.aspect = source.aspect;\n\t\t\tthis.view = source.view === null ? null : Object.assign( {}, source.view );\n\n\t\t\tthis.filmGauge = source.filmGauge;\n\t\t\tthis.filmOffset = source.filmOffset;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t/**\n\t\t * Sets the FOV by focal length in respect to the current .filmGauge.\n\t\t *\n\t\t * The default film gauge is 35, so that the focal length can be specified for\n\t\t * a 35mm (full frame) camera.\n\t\t *\n\t\t * Values for focal length and film gauge must have the same unit.\n\t\t */\n\t\tsetFocalLength: function ( focalLength ) {\n\n\t\t\t// see http://www.bobatkins.com/photography/technical/field_of_view.html\n\t\t\tvar vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;\n\n\t\t\tthis.fov = _Math.RAD2DEG * 2 * Math.atan( vExtentSlope );\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\t/**\n\t\t * Calculates the focal length from the current .fov and .filmGauge.\n\t\t */\n\t\tgetFocalLength: function () {\n\n\t\t\tvar vExtentSlope = Math.tan( _Math.DEG2RAD * 0.5 * this.fov );\n\n\t\t\treturn 0.5 * this.getFilmHeight() / vExtentSlope;\n\n\t\t},\n\n\t\tgetEffectiveFOV: function () {\n\n\t\t\treturn _Math.RAD2DEG * 2 * Math.atan(\n\t\t\t\tMath.tan( _Math.DEG2RAD * 0.5 * this.fov ) / this.zoom );\n\n\t\t},\n\n\t\tgetFilmWidth: function () {\n\n\t\t\t// film not completely covered in portrait format (aspect < 1)\n\t\t\treturn this.filmGauge * Math.min( this.aspect, 1 );\n\n\t\t},\n\n\t\tgetFilmHeight: function () {\n\n\t\t\t// film not completely covered in landscape format (aspect > 1)\n\t\t\treturn this.filmGauge / Math.max( this.aspect, 1 );\n\n\t\t},\n\n\t\t/**\n\t\t * Sets an offset in a larger frustum. This is useful for multi-window or\n\t\t * multi-monitor/multi-machine setups.\n\t\t *\n\t\t * For example, if you have 3x2 monitors and each monitor is 1920x1080 and\n\t\t * the monitors are in grid like this\n\t\t *\n\t\t * +---+---+---+\n\t\t * | A | B | C |\n\t\t * +---+---+---+\n\t\t * | D | E | F |\n\t\t * +---+---+---+\n\t\t *\n\t\t * then for each monitor you would call it like this\n\t\t *\n\t\t * var w = 1920;\n\t\t * var h = 1080;\n\t\t * var fullWidth = w * 3;\n\t\t * var fullHeight = h * 2;\n\t\t *\n\t\t * --A--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );\n\t\t * --B--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );\n\t\t * --C--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );\n\t\t * --D--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );\n\t\t * --E--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );\n\t\t * --F--\n\t\t * camera.setOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );\n\t\t *\n\t\t * Note there is no reason monitors have to be the same size or in a grid.\n\t\t */\n\t\tsetViewOffset: function ( fullWidth, fullHeight, x, y, width, height ) {\n\n\t\t\tthis.aspect = fullWidth / fullHeight;\n\n\t\t\tif ( this.view === null ) {\n\n\t\t\t\tthis.view = {\n\t\t\t\t\tenabled: true,\n\t\t\t\t\tfullWidth: 1,\n\t\t\t\t\tfullHeight: 1,\n\t\t\t\t\toffsetX: 0,\n\t\t\t\t\toffsetY: 0,\n\t\t\t\t\twidth: 1,\n\t\t\t\t\theight: 1\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t\tthis.view.enabled = true;\n\t\t\tthis.view.fullWidth = fullWidth;\n\t\t\tthis.view.fullHeight = fullHeight;\n\t\t\tthis.view.offsetX = x;\n\t\t\tthis.view.offsetY = y;\n\t\t\tthis.view.width = width;\n\t\t\tthis.view.height = height;\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tclearViewOffset: function () {\n\n\t\t\tif ( this.view !== null ) {\n\n\t\t\t\tthis.view.enabled = false;\n\n\t\t\t}\n\n\t\t\tthis.updateProjectionMatrix();\n\n\t\t},\n\n\t\tupdateProjectionMatrix: function () {\n\n\t\t\tvar near = this.near,\n\t\t\t\ttop = near * Math.tan(\n\t\t\t\t\t_Math.DEG2RAD * 0.5 * this.fov ) / this.zoom,\n\t\t\t\theight = 2 * top,\n\t\t\t\twidth = this.aspect * height,\n\t\t\t\tleft = - 0.5 * width,\n\t\t\t\tview = this.view;\n\n\t\t\tif ( this.view !== null && this.view.enabled ) {\n\n\t\t\t\tvar fullWidth = view.fullWidth,\n\t\t\t\t\tfullHeight = view.fullHeight;\n\n\t\t\t\tleft += view.offsetX * width / fullWidth;\n\t\t\t\ttop -= view.offsetY * height / fullHeight;\n\t\t\t\twidth *= view.width / fullWidth;\n\t\t\t\theight *= view.height / fullHeight;\n\n\t\t\t}\n\n\t\t\tvar skew = this.filmOffset;\n\t\t\tif ( skew !== 0 ) left += near * skew / this.getFilmWidth();\n\n\t\t\tthis.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.fov = this.fov;\n\t\t\tdata.object.zoom = this.zoom;\n\n\t\t\tdata.object.near = this.near;\n\t\t\tdata.object.far = this.far;\n\t\t\tdata.object.focus = this.focus;\n\n\t\t\tdata.object.aspect = this.aspect;\n\n\t\t\tif ( this.view !== null ) data.object.view = Object.assign( {}, this.view );\n\n\t\t\tdata.object.filmGauge = this.filmGauge;\n\t\t\tdata.object.filmOffset = this.filmOffset;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction ArrayCamera( array ) {\n\n\t\tPerspectiveCamera.call( this );\n\n\t\tthis.cameras = array || [];\n\n\t}\n\n\tArrayCamera.prototype = Object.assign( Object.create( PerspectiveCamera.prototype ), {\n\n\t\tconstructor: ArrayCamera,\n\n\t\tisArrayCamera: true\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebVRManager( renderer ) {\n\n\t\tvar scope = this;\n\n\t\tvar device = null;\n\t\tvar frameData = null;\n\n\t\tvar poseTarget = null;\n\n\t\tvar standingMatrix = new Matrix4();\n\t\tvar standingMatrixInverse = new Matrix4();\n\n\t\tif ( typeof window !== 'undefined' && 'VRFrameData' in window ) {\n\n\t\t\tframeData = new window.VRFrameData();\n\t\t\twindow.addEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange, false );\n\n\t\t}\n\n\t\tvar matrixWorldInverse = new Matrix4();\n\t\tvar tempQuaternion = new Quaternion();\n\t\tvar tempPosition = new Vector3();\n\n\t\tvar cameraL = new PerspectiveCamera();\n\t\tcameraL.bounds = new Vector4( 0.0, 0.0, 0.5, 1.0 );\n\t\tcameraL.layers.enable( 1 );\n\n\t\tvar cameraR = new PerspectiveCamera();\n\t\tcameraR.bounds = new Vector4( 0.5, 0.0, 0.5, 1.0 );\n\t\tcameraR.layers.enable( 2 );\n\n\t\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\t//\n\n\t\tfunction isPresenting() {\n\n\t\t\treturn device !== null && device.isPresenting === true;\n\n\t\t}\n\n\t\tvar currentSize, currentPixelRatio;\n\n\t\tfunction onVRDisplayPresentChange() {\n\n\t\t\tif ( isPresenting() ) {\n\n\t\t\t\tvar eyeParameters = device.getEyeParameters( 'left' );\n\t\t\t\tvar renderWidth = eyeParameters.renderWidth;\n\t\t\t\tvar renderHeight = eyeParameters.renderHeight;\n\n\t\t\t\tcurrentPixelRatio = renderer.getPixelRatio();\n\t\t\t\tcurrentSize = renderer.getSize();\n\n\t\t\t\trenderer.setDrawingBufferSize( renderWidth * 2, renderHeight, 1 );\n\n\t\t\t\tanimation.start();\n\n\t\t\t} else if ( scope.enabled ) {\n\n\t\t\t\trenderer.setDrawingBufferSize( currentSize.width, currentSize.height, currentPixelRatio );\n\n\t\t\t\tanimation.stop();\n\n\t\t\t}\n\n\t\t}\n\n\t\t//\n\n\t\tthis.enabled = false;\n\t\tthis.userHeight = 1.6;\n\n\t\tthis.getDevice = function () {\n\n\t\t\treturn device;\n\n\t\t};\n\n\t\tthis.setDevice = function ( value ) {\n\n\t\t\tif ( value !== undefined ) device = value;\n\n\t\t\tanimation.setContext( value );\n\n\t\t};\n\n\t\tthis.setPoseTarget = function ( object ) {\n\n\t\t\tif ( object !== undefined ) poseTarget = object;\n\n\t\t};\n\n\t\tthis.getCamera = function ( camera ) {\n\n\t\t\tif ( device === null ) return camera;\n\n\t\t\tdevice.depthNear = camera.near;\n\t\t\tdevice.depthFar = camera.far;\n\n\t\t\tdevice.getFrameData( frameData );\n\n\t\t\t//\n\n\t\t\tvar stageParameters = device.stageParameters;\n\n\t\t\tif ( stageParameters ) {\n\n\t\t\t\tstandingMatrix.fromArray( stageParameters.sittingToStandingTransform );\n\n\t\t\t} else {\n\n\t\t\t\tstandingMatrix.makeTranslation( 0, scope.userHeight, 0 );\n\n\t\t\t}\n\n\n\t\t\tvar pose = frameData.pose;\n\t\t\tvar poseObject = poseTarget !== null ? poseTarget : camera;\n\n\t\t\t// We want to manipulate poseObject by its position and quaternion components since users may rely on them.\n\t\t\tposeObject.matrix.copy( standingMatrix );\n\t\t\tposeObject.matrix.decompose( poseObject.position, poseObject.quaternion, poseObject.scale );\n\n\t\t\tif ( pose.orientation !== null ) {\n\n\t\t\t\ttempQuaternion.fromArray( pose.orientation );\n\t\t\t\tposeObject.quaternion.multiply( tempQuaternion );\n\n\t\t\t}\n\n\t\t\tif ( pose.position !== null ) {\n\n\t\t\t\ttempQuaternion.setFromRotationMatrix( standingMatrix );\n\t\t\t\ttempPosition.fromArray( pose.position );\n\t\t\t\ttempPosition.applyQuaternion( tempQuaternion );\n\t\t\t\tposeObject.position.add( tempPosition );\n\n\t\t\t}\n\n\t\t\tposeObject.updateMatrixWorld();\n\n\t\t\tif ( device.isPresenting === false ) return camera;\n\n\t\t\t//\n\n\t\t\tcameraL.near = camera.near;\n\t\t\tcameraR.near = camera.near;\n\n\t\t\tcameraL.far = camera.far;\n\t\t\tcameraR.far = camera.far;\n\n\t\t\tcameraVR.matrixWorld.copy( camera.matrixWorld );\n\t\t\tcameraVR.matrixWorldInverse.copy( camera.matrixWorldInverse );\n\n\t\t\tcameraL.matrixWorldInverse.fromArray( frameData.leftViewMatrix );\n\t\t\tcameraR.matrixWorldInverse.fromArray( frameData.rightViewMatrix );\n\n\t\t\t// TODO (mrdoob) Double check this code\n\n\t\t\tstandingMatrixInverse.getInverse( standingMatrix );\n\n\t\t\tcameraL.matrixWorldInverse.multiply( standingMatrixInverse );\n\t\t\tcameraR.matrixWorldInverse.multiply( standingMatrixInverse );\n\n\t\t\tvar parent = poseObject.parent;\n\n\t\t\tif ( parent !== null ) {\n\n\t\t\t\tmatrixWorldInverse.getInverse( parent.matrixWorld );\n\n\t\t\t\tcameraL.matrixWorldInverse.multiply( matrixWorldInverse );\n\t\t\t\tcameraR.matrixWorldInverse.multiply( matrixWorldInverse );\n\n\t\t\t}\n\n\t\t\t// envMap and Mirror needs camera.matrixWorld\n\n\t\t\tcameraL.matrixWorld.getInverse( cameraL.matrixWorldInverse );\n\t\t\tcameraR.matrixWorld.getInverse( cameraR.matrixWorldInverse );\n\n\t\t\tcameraL.projectionMatrix.fromArray( frameData.leftProjectionMatrix );\n\t\t\tcameraR.projectionMatrix.fromArray( frameData.rightProjectionMatrix );\n\n\t\t\t// HACK (mrdoob)\n\t\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\t\tcameraVR.projectionMatrix.copy( cameraL.projectionMatrix );\n\n\t\t\t//\n\n\t\t\tvar layers = device.getLayers();\n\n\t\t\tif ( layers.length ) {\n\n\t\t\t\tvar layer = layers[ 0 ];\n\n\t\t\t\tif ( layer.leftBounds !== null && layer.leftBounds.length === 4 ) {\n\n\t\t\t\t\tcameraL.bounds.fromArray( layer.leftBounds );\n\n\t\t\t\t}\n\n\t\t\t\tif ( layer.rightBounds !== null && layer.rightBounds.length === 4 ) {\n\n\t\t\t\t\tcameraR.bounds.fromArray( layer.rightBounds );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn cameraVR;\n\n\t\t};\n\n\t\tthis.getStandingMatrix = function () {\n\n\t\t\treturn standingMatrix;\n\n\t\t};\n\n\t\tthis.isPresenting = isPresenting;\n\n\t\t// Animation Loop\n\n\t\tvar animation = new WebGLAnimation();\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tanimation.setAnimationLoop( callback );\n\n\t\t};\n\n\t\tthis.submitFrame = function () {\n\n\t\t\tif ( isPresenting() ) device.submitFrame();\n\n\t\t};\n\n\t\tthis.dispose = function () {\n\n\t\t\tif ( typeof window !== 'undefined' ) {\n\n\t\t\t\twindow.removeEventListener( 'vrdisplaypresentchange', onVRDisplayPresentChange );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction WebXRManager( renderer ) {\n\n\t\tvar gl = renderer.context;\n\n\t\tvar device = null;\n\t\tvar session = null;\n\n\t\tvar frameOfRef = null;\n\n\t\tvar pose = null;\n\n\t\tfunction isPresenting() {\n\n\t\t\treturn session !== null && frameOfRef !== null;\n\n\t\t}\n\n\t\t//\n\n\t\tvar cameraL = new PerspectiveCamera();\n\t\tcameraL.layers.enable( 1 );\n\t\tcameraL.viewport = new Vector4();\n\n\t\tvar cameraR = new PerspectiveCamera();\n\t\tcameraR.layers.enable( 2 );\n\t\tcameraR.viewport = new Vector4();\n\n\t\tvar cameraVR = new ArrayCamera( [ cameraL, cameraR ] );\n\t\tcameraVR.layers.enable( 1 );\n\t\tcameraVR.layers.enable( 2 );\n\n\t\t//\n\n\t\tthis.enabled = false;\n\n\t\tthis.getDevice = function () {\n\n\t\t\treturn device;\n\n\t\t};\n\n\t\tthis.setDevice = function ( value ) {\n\n\t\t\tif ( value !== undefined ) device = value;\n\n\t\t\tgl.setCompatibleXRDevice( value );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.setSession = function ( value, options ) {\n\n\t\t\tsession = value;\n\n\t\t\tif ( session !== null ) {\n\n\t\t\t\tsession.addEventListener( 'end', function () {\n\n\t\t\t\t\trenderer.setFramebuffer( null );\n\t\t\t\t\tanimation.stop();\n\n\t\t\t\t} );\n\n\t\t\t\tsession.baseLayer = new XRWebGLLayer( session, gl );\n\t\t\t\tsession.requestFrameOfReference( options.frameOfReferenceType ).then( function ( value ) {\n\n\t\t\t\t\tframeOfRef = value;\n\n\t\t\t\t\trenderer.setFramebuffer( session.baseLayer.framebuffer );\n\n\t\t\t\t\tanimation.setContext( session );\n\t\t\t\t\tanimation.start();\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction updateCamera( camera, parent ) {\n\n\t\t\tif ( parent === null ) {\n\n\t\t\t\tcamera.matrixWorld.copy( camera.matrix );\n\n\t\t\t} else {\n\n\t\t\t\tcamera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );\n\n\t\t\t}\n\n\t\t\tcamera.matrixWorldInverse.getInverse( camera.matrixWorld );\n\n\t\t}\n\n\t\tthis.getCamera = function ( camera ) {\n\n\t\t\tif ( isPresenting() ) {\n\n\t\t\t\tvar parent = camera.parent;\n\t\t\t\tvar cameras = cameraVR.cameras;\n\n\t\t\t\t// apply camera.parent to cameraVR\n\n\t\t\t\tupdateCamera( cameraVR, parent );\n\n\t\t\t\tfor ( var i = 0; i < cameras.length; i ++ ) {\n\n\t\t\t\t\tupdateCamera( cameras[ i ], parent );\n\n\t\t\t\t}\n\n\t\t\t\t// update camera and its children\n\n\t\t\t\tcamera.matrixWorld.copy( cameraVR.matrixWorld );\n\n\t\t\t\tvar children = camera.children;\n\n\t\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\t\tchildren[ i ].updateMatrixWorld( true );\n\n\t\t\t\t}\n\n\t\t\t\treturn cameraVR;\n\n\t\t\t}\n\n\t\t\treturn camera;\n\n\t\t};\n\n\t\tthis.isPresenting = isPresenting;\n\n\t\t// Animation Loop\n\n\t\tvar onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame( time, frame ) {\n\n\t\t\tpose = frame.getDevicePose( frameOfRef );\n\n\t\t\tvar layer = session.baseLayer;\n\t\t\tvar views = frame.views;\n\n\t\t\tfor ( var i = 0; i < views.length; i ++ ) {\n\n\t\t\t\tvar view = views[ i ];\n\t\t\t\tvar viewport = layer.getViewport( view );\n\t\t\t\tvar viewMatrix = pose.getViewMatrix( view );\n\n\t\t\t\tvar camera = cameraVR.cameras[ i ];\n\t\t\t\tcamera.matrix.fromArray( viewMatrix ).getInverse( camera.matrix );\n\t\t\t\tcamera.projectionMatrix.fromArray( view.projectionMatrix );\n\t\t\t\tcamera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );\n\n\t\t\t\tif ( i === 0 ) {\n\n\t\t\t\t\tcameraVR.matrix.copy( camera.matrix );\n\n\t\t\t\t\t// HACK (mrdoob)\n\t\t\t\t\t// https://github.com/w3c/webvr/issues/203\n\n\t\t\t\t\tcameraVR.projectionMatrix.copy( camera.projectionMatrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback();\n\n\t\t}\n\n\t\tvar animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\n\t\t};\n\n\t\t// DEPRECATED\n\n\t\tthis.getStandingMatrix = function () {\n\n\t\t\tconsole.warn( 'THREE.WebXRManager: getStandingMatrix() is no longer needed.' );\n\t\t\treturn new THREE.Matrix4();\n\n\t\t};\n\n\t\tthis.submitFrame = function () {};\n\n\t}\n\n\t/**\n\t * @author supereggbert / http://www.paulbrunt.co.uk/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author szimek / https://github.com/szimek/\n\t * @author tschw\n\t */\n\n\tfunction WebGLRenderer( parameters ) {\n\n\t\tconsole.log( 'THREE.WebGLRenderer', REVISION );\n\n\t\tparameters = parameters || {};\n\n\t\tvar _canvas = parameters.canvas !== undefined ? parameters.canvas : document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' ),\n\t\t\t_context = parameters.context !== undefined ? parameters.context : null,\n\n\t\t\t_alpha = parameters.alpha !== undefined ? parameters.alpha : false,\n\t\t\t_depth = parameters.depth !== undefined ? parameters.depth : true,\n\t\t\t_stencil = parameters.stencil !== undefined ? parameters.stencil : true,\n\t\t\t_antialias = parameters.antialias !== undefined ? parameters.antialias : false,\n\t\t\t_premultipliedAlpha = parameters.premultipliedAlpha !== undefined ? parameters.premultipliedAlpha : true,\n\t\t\t_preserveDrawingBuffer = parameters.preserveDrawingBuffer !== undefined ? parameters.preserveDrawingBuffer : false,\n\t\t\t_powerPreference = parameters.powerPreference !== undefined ? parameters.powerPreference : 'default';\n\n\t\tvar currentRenderList = null;\n\t\tvar currentRenderState = null;\n\n\t\t// public properties\n\n\t\tthis.domElement = _canvas;\n\t\tthis.context = null;\n\n\t\t// clearing\n\n\t\tthis.autoClear = true;\n\t\tthis.autoClearColor = true;\n\t\tthis.autoClearDepth = true;\n\t\tthis.autoClearStencil = true;\n\n\t\t// scene graph\n\n\t\tthis.sortObjects = true;\n\n\t\t// user-defined clipping\n\n\t\tthis.clippingPlanes = [];\n\t\tthis.localClippingEnabled = false;\n\n\t\t// physically based shading\n\n\t\tthis.gammaFactor = 2.0;\t// for backwards compatibility\n\t\tthis.gammaInput = false;\n\t\tthis.gammaOutput = false;\n\n\t\t// physical lights\n\n\t\tthis.physicallyCorrectLights = false;\n\n\t\t// tone mapping\n\n\t\tthis.toneMapping = LinearToneMapping;\n\t\tthis.toneMappingExposure = 1.0;\n\t\tthis.toneMappingWhitePoint = 1.0;\n\n\t\t// morphs\n\n\t\tthis.maxMorphTargets = 8;\n\t\tthis.maxMorphNormals = 4;\n\n\t\t// internal properties\n\n\t\tvar _this = this,\n\n\t\t\t_isContextLost = false,\n\n\t\t\t// internal state cache\n\n\t\t\t_framebuffer = null,\n\n\t\t\t_currentRenderTarget = null,\n\t\t\t_currentFramebuffer = null,\n\t\t\t_currentMaterialId = - 1,\n\t\t\t_currentGeometryProgram = '',\n\n\t\t\t_currentCamera = null,\n\t\t\t_currentArrayCamera = null,\n\n\t\t\t_currentViewport = new Vector4(),\n\t\t\t_currentScissor = new Vector4(),\n\t\t\t_currentScissorTest = null,\n\n\t\t\t//\n\n\t\t\t_usedTextureUnits = 0,\n\n\t\t\t//\n\n\t\t\t_width = _canvas.width,\n\t\t\t_height = _canvas.height,\n\n\t\t\t_pixelRatio = 1,\n\n\t\t\t_viewport = new Vector4( 0, 0, _width, _height ),\n\t\t\t_scissor = new Vector4( 0, 0, _width, _height ),\n\t\t\t_scissorTest = false,\n\n\t\t\t// frustum\n\n\t\t\t_frustum = new Frustum(),\n\n\t\t\t// clipping\n\n\t\t\t_clipping = new WebGLClipping(),\n\t\t\t_clippingEnabled = false,\n\t\t\t_localClippingEnabled = false,\n\n\t\t\t// camera matrices cache\n\n\t\t\t_projScreenMatrix = new Matrix4(),\n\n\t\t\t_vector3 = new Vector3();\n\n\t\tfunction getTargetPixelRatio() {\n\n\t\t\treturn _currentRenderTarget === null ? _pixelRatio : 1;\n\n\t\t}\n\n\t\t// initialize\n\n\t\tvar _gl;\n\n\t\ttry {\n\n\t\t\tvar contextAttributes = {\n\t\t\t\talpha: _alpha,\n\t\t\t\tdepth: _depth,\n\t\t\t\tstencil: _stencil,\n\t\t\t\tantialias: _antialias,\n\t\t\t\tpremultipliedAlpha: _premultipliedAlpha,\n\t\t\t\tpreserveDrawingBuffer: _preserveDrawingBuffer,\n\t\t\t\tpowerPreference: _powerPreference\n\t\t\t};\n\n\t\t\t// event listeners must be registered before WebGL context is created, see #12753\n\n\t\t\t_canvas.addEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\t_canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t\t_gl = _context || _canvas.getContext( 'webgl', contextAttributes ) || _canvas.getContext( 'experimental-webgl', contextAttributes );\n\n\t\t\tif ( _gl === null ) {\n\n\t\t\t\tif ( _canvas.getContext( 'webgl' ) !== null ) {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context with your selected attributes.' );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tthrow new Error( 'Error creating WebGL context.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Some experimental-webgl implementations do not have getShaderPrecisionFormat\n\n\t\t\tif ( _gl.getShaderPrecisionFormat === undefined ) {\n\n\t\t\t\t_gl.getShaderPrecisionFormat = function () {\n\n\t\t\t\t\treturn { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t} catch ( error ) {\n\n\t\t\tconsole.error( 'THREE.WebGLRenderer: ' + error.message );\n\n\t\t}\n\n\t\tvar extensions, capabilities, state, info;\n\t\tvar properties, textures, attributes, geometries, objects;\n\t\tvar programCache, renderLists, renderStates;\n\n\t\tvar background, morphtargets, bufferRenderer, indexedBufferRenderer;\n\t\tvar spriteRenderer;\n\n\t\tvar utils;\n\n\t\tfunction initGLContext() {\n\n\t\t\textensions = new WebGLExtensions( _gl );\n\t\t\textensions.get( 'WEBGL_depth_texture' );\n\t\t\textensions.get( 'OES_texture_float' );\n\t\t\textensions.get( 'OES_texture_float_linear' );\n\t\t\textensions.get( 'OES_texture_half_float' );\n\t\t\textensions.get( 'OES_texture_half_float_linear' );\n\t\t\textensions.get( 'OES_standard_derivatives' );\n\t\t\textensions.get( 'OES_element_index_uint' );\n\t\t\textensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t\tutils = new WebGLUtils( _gl, extensions );\n\n\t\t\tcapabilities = new WebGLCapabilities( _gl, extensions, parameters );\n\n\t\t\tstate = new WebGLState( _gl, extensions, utils );\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\t\tinfo = new WebGLInfo( _gl );\n\t\t\tproperties = new WebGLProperties();\n\t\t\ttextures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );\n\t\t\tattributes = new WebGLAttributes( _gl );\n\t\t\tgeometries = new WebGLGeometries( _gl, attributes, info );\n\t\t\tobjects = new WebGLObjects( geometries, info );\n\t\t\tmorphtargets = new WebGLMorphtargets( _gl );\n\t\t\tprogramCache = new WebGLPrograms( _this, extensions, capabilities );\n\t\t\trenderLists = new WebGLRenderLists();\n\t\t\trenderStates = new WebGLRenderStates();\n\n\t\t\tbackground = new WebGLBackground( _this, state, objects, _premultipliedAlpha );\n\n\t\t\tbufferRenderer = new WebGLBufferRenderer( _gl, extensions, info );\n\t\t\tindexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info );\n\n\t\t\tspriteRenderer = new WebGLSpriteRenderer( _this, _gl, state, textures, capabilities );\n\n\t\t\tinfo.programs = programCache.programs;\n\n\t\t\t_this.context = _gl;\n\t\t\t_this.capabilities = capabilities;\n\t\t\t_this.extensions = extensions;\n\t\t\t_this.properties = properties;\n\t\t\t_this.renderLists = renderLists;\n\t\t\t_this.state = state;\n\t\t\t_this.info = info;\n\n\t\t}\n\n\t\tinitGLContext();\n\n\t\t// vr\n\n\t\tvar vr = ( 'xr' in navigator ) ? new WebXRManager( _this ) : new WebVRManager( _this );\n\n\t\tthis.vr = vr;\n\n\t\t// shadow map\n\n\t\tvar shadowMap = new WebGLShadowMap( _this, objects, capabilities.maxTextureSize );\n\n\t\tthis.shadowMap = shadowMap;\n\n\t\t// API\n\n\t\tthis.getContext = function () {\n\n\t\t\treturn _gl;\n\n\t\t};\n\n\t\tthis.getContextAttributes = function () {\n\n\t\t\treturn _gl.getContextAttributes();\n\n\t\t};\n\n\t\tthis.forceContextLoss = function () {\n\n\t\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.loseContext();\n\n\t\t};\n\n\t\tthis.forceContextRestore = function () {\n\n\t\t\tvar extension = extensions.get( 'WEBGL_lose_context' );\n\t\t\tif ( extension ) extension.restoreContext();\n\n\t\t};\n\n\t\tthis.getPixelRatio = function () {\n\n\t\t\treturn _pixelRatio;\n\n\t\t};\n\n\t\tthis.setPixelRatio = function ( value ) {\n\n\t\t\tif ( value === undefined ) return;\n\n\t\t\t_pixelRatio = value;\n\n\t\t\tthis.setSize( _width, _height, false );\n\n\t\t};\n\n\t\tthis.getSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width,\n\t\t\t\theight: _height\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setSize = function ( width, height, updateStyle ) {\n\n\t\t\tif ( vr.isPresenting() ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Can\\'t change size while VR device is presenting.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_canvas.width = width * _pixelRatio;\n\t\t\t_canvas.height = height * _pixelRatio;\n\n\t\t\tif ( updateStyle !== false ) {\n\n\t\t\t\t_canvas.style.width = width + 'px';\n\t\t\t\t_canvas.style.height = height + 'px';\n\n\t\t\t}\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getDrawingBufferSize = function () {\n\n\t\t\treturn {\n\t\t\t\twidth: _width * _pixelRatio,\n\t\t\t\theight: _height * _pixelRatio\n\t\t\t};\n\n\t\t};\n\n\t\tthis.setDrawingBufferSize = function ( width, height, pixelRatio ) {\n\n\t\t\t_width = width;\n\t\t\t_height = height;\n\n\t\t\t_pixelRatio = pixelRatio;\n\n\t\t\t_canvas.width = width * pixelRatio;\n\t\t\t_canvas.height = height * pixelRatio;\n\n\t\t\tthis.setViewport( 0, 0, width, height );\n\n\t\t};\n\n\t\tthis.getCurrentViewport = function () {\n\n\t\t\treturn _currentViewport;\n\n\t\t};\n\n\t\tthis.setViewport = function ( x, y, width, height ) {\n\n\t\t\t_viewport.set( x, _height - y - height, width, height );\n\t\t\tstate.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ) );\n\n\t\t};\n\n\t\tthis.setScissor = function ( x, y, width, height ) {\n\n\t\t\t_scissor.set( x, _height - y - height, width, height );\n\t\t\tstate.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ) );\n\n\t\t};\n\n\t\tthis.setScissorTest = function ( boolean ) {\n\n\t\t\tstate.setScissorTest( _scissorTest = boolean );\n\n\t\t};\n\n\t\t// Clearing\n\n\t\tthis.getClearColor = function () {\n\n\t\t\treturn background.getClearColor();\n\n\t\t};\n\n\t\tthis.setClearColor = function () {\n\n\t\t\tbackground.setClearColor.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.getClearAlpha = function () {\n\n\t\t\treturn background.getClearAlpha();\n\n\t\t};\n\n\t\tthis.setClearAlpha = function () {\n\n\t\t\tbackground.setClearAlpha.apply( background, arguments );\n\n\t\t};\n\n\t\tthis.clear = function ( color, depth, stencil ) {\n\n\t\t\tvar bits = 0;\n\n\t\t\tif ( color === undefined || color ) bits |= _gl.COLOR_BUFFER_BIT;\n\t\t\tif ( depth === undefined || depth ) bits |= _gl.DEPTH_BUFFER_BIT;\n\t\t\tif ( stencil === undefined || stencil ) bits |= _gl.STENCIL_BUFFER_BIT;\n\n\t\t\t_gl.clear( bits );\n\n\t\t};\n\n\t\tthis.clearColor = function () {\n\n\t\t\tthis.clear( true, false, false );\n\n\t\t};\n\n\t\tthis.clearDepth = function () {\n\n\t\t\tthis.clear( false, true, false );\n\n\t\t};\n\n\t\tthis.clearStencil = function () {\n\n\t\t\tthis.clear( false, false, true );\n\n\t\t};\n\n\t\tthis.clearTarget = function ( renderTarget, color, depth, stencil ) {\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\t\t\tthis.clear( color, depth, stencil );\n\n\t\t};\n\n\t\t//\n\n\t\tthis.dispose = function () {\n\n\t\t\t_canvas.removeEventListener( 'webglcontextlost', onContextLost, false );\n\t\t\t_canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );\n\n\t\t\trenderLists.dispose();\n\t\t\trenderStates.dispose();\n\t\t\tproperties.dispose();\n\t\t\tobjects.dispose();\n\n\t\t\tvr.dispose();\n\n\t\t\tanimation.stop();\n\n\t\t};\n\n\t\t// Events\n\n\t\tfunction onContextLost( event ) {\n\n\t\t\tevent.preventDefault();\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Lost.' );\n\n\t\t\t_isContextLost = true;\n\n\t\t}\n\n\t\tfunction onContextRestore( /* event */ ) {\n\n\t\t\tconsole.log( 'THREE.WebGLRenderer: Context Restored.' );\n\n\t\t\t_isContextLost = false;\n\n\t\t\tinitGLContext();\n\n\t\t}\n\n\t\tfunction onMaterialDispose( event ) {\n\n\t\t\tvar material = event.target;\n\n\t\t\tmaterial.removeEventListener( 'dispose', onMaterialDispose );\n\n\t\t\tdeallocateMaterial( material );\n\n\t\t}\n\n\t\t// Buffer deallocation\n\n\t\tfunction deallocateMaterial( material ) {\n\n\t\t\treleaseMaterialProgramReference( material );\n\n\t\t\tproperties.remove( material );\n\n\t\t}\n\n\n\t\tfunction releaseMaterialProgramReference( material ) {\n\n\t\t\tvar programInfo = properties.get( material ).program;\n\n\t\t\tmaterial.program = undefined;\n\n\t\t\tif ( programInfo !== undefined ) {\n\n\t\t\t\tprogramCache.releaseProgram( programInfo );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Buffer rendering\n\n\t\tfunction renderObjectImmediate( object, program, material ) {\n\n\t\t\tobject.render( function ( object ) {\n\n\t\t\t\t_this.renderBufferImmediate( object, program, material );\n\n\t\t\t} );\n\n\t\t}\n\n\t\tthis.renderBufferImmediate = function ( object, program, material ) {\n\n\t\t\tstate.initAttributes();\n\n\t\t\tvar buffers = properties.get( object );\n\n\t\t\tif ( object.hasPositions && ! buffers.position ) buffers.position = _gl.createBuffer();\n\t\t\tif ( object.hasNormals && ! buffers.normal ) buffers.normal = _gl.createBuffer();\n\t\t\tif ( object.hasUvs && ! buffers.uv ) buffers.uv = _gl.createBuffer();\n\t\t\tif ( object.hasColors && ! buffers.color ) buffers.color = _gl.createBuffer();\n\n\t\t\tvar programAttributes = program.getAttributes();\n\n\t\t\tif ( object.hasPositions ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.position );\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.positionArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.position );\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.position, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasNormals ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.normal );\n\n\t\t\t\tif ( ! material.isMeshPhongMaterial &&\n\t\t\t\t\t! material.isMeshStandardMaterial &&\n\t\t\t\t\t! material.isMeshNormalMaterial &&\n\t\t\t\t\tmaterial.flatShading === true ) {\n\n\t\t\t\t\tfor ( var i = 0, l = object.count * 3; i < l; i += 9 ) {\n\n\t\t\t\t\t\tvar array = object.normalArray;\n\n\t\t\t\t\t\tvar nx = ( array[ i + 0 ] + array[ i + 3 ] + array[ i + 6 ] ) / 3;\n\t\t\t\t\t\tvar ny = ( array[ i + 1 ] + array[ i + 4 ] + array[ i + 7 ] ) / 3;\n\t\t\t\t\t\tvar nz = ( array[ i + 2 ] + array[ i + 5 ] + array[ i + 8 ] ) / 3;\n\n\t\t\t\t\t\tarray[ i + 0 ] = nx;\n\t\t\t\t\t\tarray[ i + 1 ] = ny;\n\t\t\t\t\t\tarray[ i + 2 ] = nz;\n\n\t\t\t\t\t\tarray[ i + 3 ] = nx;\n\t\t\t\t\t\tarray[ i + 4 ] = ny;\n\t\t\t\t\t\tarray[ i + 5 ] = nz;\n\n\t\t\t\t\t\tarray[ i + 6 ] = nx;\n\t\t\t\t\t\tarray[ i + 7 ] = ny;\n\t\t\t\t\t\tarray[ i + 8 ] = nz;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.normalArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.normal );\n\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.normal, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasUvs && material.map ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.uv );\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.uvArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.uv );\n\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.uv, 2, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( object.hasColors && material.vertexColors !== NoColors ) {\n\n\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffers.color );\n\t\t\t\t_gl.bufferData( _gl.ARRAY_BUFFER, object.colorArray, _gl.DYNAMIC_DRAW );\n\n\t\t\t\tstate.enableAttribute( programAttributes.color );\n\n\t\t\t\t_gl.vertexAttribPointer( programAttributes.color, 3, _gl.FLOAT, false, 0, 0 );\n\n\t\t\t}\n\n\t\t\tstate.disableUnusedAttributes();\n\n\t\t\t_gl.drawArrays( _gl.TRIANGLES, 0, object.count );\n\n\t\t\tobject.count = 0;\n\n\t\t};\n\n\t\tthis.renderBufferDirect = function ( camera, fog, geometry, material, object, group ) {\n\n\t\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\tvar program = setProgram( camera, fog, material, object );\n\t\t\tvar geometryProgram = geometry.id + '_' + program.id + '_' + ( material.wireframe === true );\n\n\t\t\tvar updateBuffers = false;\n\n\t\t\tif ( geometryProgram !== _currentGeometryProgram ) {\n\n\t\t\t\t_currentGeometryProgram = geometryProgram;\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t\tif ( object.morphTargetInfluences ) {\n\n\t\t\t\tmorphtargets.update( object, geometry, material, program );\n\n\t\t\t\tupdateBuffers = true;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar index = geometry.index;\n\t\t\tvar position = geometry.attributes.position;\n\t\t\tvar rangeFactor = 1;\n\n\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\tindex = geometries.getWireframeAttribute( geometry );\n\t\t\t\trangeFactor = 2;\n\n\t\t\t}\n\n\t\t\tvar attribute;\n\t\t\tvar renderer = bufferRenderer;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tattribute = attributes.get( index );\n\n\t\t\t\trenderer = indexedBufferRenderer;\n\t\t\t\trenderer.setIndex( attribute );\n\n\t\t\t}\n\n\t\t\tif ( updateBuffers ) {\n\n\t\t\t\tsetupVertexAttributes( material, program, geometry );\n\n\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t_gl.bindBuffer( _gl.ELEMENT_ARRAY_BUFFER, attribute.buffer );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar dataCount = Infinity;\n\n\t\t\tif ( index !== null ) {\n\n\t\t\t\tdataCount = index.count;\n\n\t\t\t} else if ( position !== undefined ) {\n\n\t\t\t\tdataCount = position.count;\n\n\t\t\t}\n\n\t\t\tvar rangeStart = geometry.drawRange.start * rangeFactor;\n\t\t\tvar rangeCount = geometry.drawRange.count * rangeFactor;\n\n\t\t\tvar groupStart = group !== null ? group.start * rangeFactor : 0;\n\t\t\tvar groupCount = group !== null ? group.count * rangeFactor : Infinity;\n\n\t\t\tvar drawStart = Math.max( rangeStart, groupStart );\n\t\t\tvar drawEnd = Math.min( dataCount, rangeStart + rangeCount, groupStart + groupCount ) - 1;\n\n\t\t\tvar drawCount = Math.max( 0, drawEnd - drawStart + 1 );\n\n\t\t\tif ( drawCount === 0 ) return;\n\n\t\t\t//\n\n\t\t\tif ( object.isMesh ) {\n\n\t\t\t\tif ( material.wireframe === true ) {\n\n\t\t\t\t\tstate.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tswitch ( object.drawMode ) {\n\n\t\t\t\t\t\tcase TrianglesDrawMode:\n\t\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLES );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TriangleStripDrawMode:\n\t\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_STRIP );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase TriangleFanDrawMode:\n\t\t\t\t\t\t\trenderer.setMode( _gl.TRIANGLE_FAN );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t} else if ( object.isLine ) {\n\n\t\t\t\tvar lineWidth = material.linewidth;\n\n\t\t\t\tif ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material\n\n\t\t\t\tstate.setLineWidth( lineWidth * getTargetPixelRatio() );\n\n\t\t\t\tif ( object.isLineSegments ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINES );\n\n\t\t\t\t} else if ( object.isLineLoop ) {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_LOOP );\n\n\t\t\t\t} else {\n\n\t\t\t\t\trenderer.setMode( _gl.LINE_STRIP );\n\n\t\t\t\t}\n\n\t\t\t} else if ( object.isPoints ) {\n\n\t\t\t\trenderer.setMode( _gl.POINTS );\n\n\t\t\t}\n\n\t\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tif ( geometry.maxInstancedCount > 0 ) {\n\n\t\t\t\t\trenderer.renderInstances( geometry, drawStart, drawCount );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\trenderer.render( drawStart, drawCount );\n\n\t\t\t}\n\n\t\t};\n\n\t\tfunction setupVertexAttributes( material, program, geometry ) {\n\n\t\t\tif ( geometry && geometry.isInstancedBufferGeometry ) {\n\n\t\t\t\tif ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) {\n\n\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.setupVertexAttributes: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.initAttributes();\n\n\t\t\tvar geometryAttributes = geometry.attributes;\n\n\t\t\tvar programAttributes = program.getAttributes();\n\n\t\t\tvar materialDefaultAttributeValues = material.defaultAttributeValues;\n\n\t\t\tfor ( var name in programAttributes ) {\n\n\t\t\t\tvar programAttribute = programAttributes[ name ];\n\n\t\t\t\tif ( programAttribute >= 0 ) {\n\n\t\t\t\t\tvar geometryAttribute = geometryAttributes[ name ];\n\n\t\t\t\t\tif ( geometryAttribute !== undefined ) {\n\n\t\t\t\t\t\tvar normalized = geometryAttribute.normalized;\n\t\t\t\t\t\tvar size = geometryAttribute.itemSize;\n\n\t\t\t\t\t\tvar attribute = attributes.get( geometryAttribute );\n\n\t\t\t\t\t\t// TODO Attribute may not be available on context restore\n\n\t\t\t\t\t\tif ( attribute === undefined ) continue;\n\n\t\t\t\t\t\tvar buffer = attribute.buffer;\n\t\t\t\t\t\tvar type = attribute.type;\n\t\t\t\t\t\tvar bytesPerElement = attribute.bytesPerElement;\n\n\t\t\t\t\t\tif ( geometryAttribute.isInterleavedBufferAttribute ) {\n\n\t\t\t\t\t\t\tvar data = geometryAttribute.data;\n\t\t\t\t\t\t\tvar stride = data.stride;\n\t\t\t\t\t\t\tvar offset = geometryAttribute.offset;\n\n\t\t\t\t\t\t\tif ( data && data.isInstancedInterleavedBuffer ) {\n\n\t\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, data.meshPerAttribute );\n\n\t\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = data.meshPerAttribute * data.count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, stride * bytesPerElement, offset * bytesPerElement );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( geometryAttribute.isInstancedBufferAttribute ) {\n\n\t\t\t\t\t\t\t\tstate.enableAttributeAndDivisor( programAttribute, geometryAttribute.meshPerAttribute );\n\n\t\t\t\t\t\t\t\tif ( geometry.maxInstancedCount === undefined ) {\n\n\t\t\t\t\t\t\t\t\tgeometry.maxInstancedCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tstate.enableAttribute( programAttribute );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t_gl.bindBuffer( _gl.ARRAY_BUFFER, buffer );\n\t\t\t\t\t\t\t_gl.vertexAttribPointer( programAttribute, size, type, normalized, 0, 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if ( materialDefaultAttributeValues !== undefined ) {\n\n\t\t\t\t\t\tvar value = materialDefaultAttributeValues[ name ];\n\n\t\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\t\tswitch ( value.length ) {\n\n\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib2fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 3:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib3fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 4:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib4fv( programAttribute, value );\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\t_gl.vertexAttrib1fv( programAttribute, value );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tstate.disableUnusedAttributes();\n\n\t\t}\n\n\t\t// Compile\n\n\t\tthis.compile = function ( scene, camera ) {\n\n\t\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\t\tcurrentRenderState.init();\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tcurrentRenderState.setupLights( camera );\n\n\t\t\tscene.traverse( function ( object ) {\n\n\t\t\t\tif ( object.material ) {\n\n\t\t\t\t\tif ( Array.isArray( object.material ) ) {\n\n\t\t\t\t\t\tfor ( var i = 0; i < object.material.length; i ++ ) {\n\n\t\t\t\t\t\t\tinitMaterial( object.material[ i ], scene.fog, object );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tinitMaterial( object.material, scene.fog, object );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t};\n\n\t\t// Animation Loop\n\n\t\tvar onAnimationFrameCallback = null;\n\n\t\tfunction onAnimationFrame() {\n\n\t\t\tif ( vr.isPresenting() ) return;\n\t\t\tif ( onAnimationFrameCallback ) onAnimationFrameCallback();\n\n\t\t}\n\n\t\tvar animation = new WebGLAnimation();\n\t\tanimation.setAnimationLoop( onAnimationFrame );\n\t\tanimation.setContext( window );\n\n\t\tthis.setAnimationLoop = function ( callback ) {\n\n\t\t\tonAnimationFrameCallback = callback;\n\t\t\tvr.setAnimationLoop( callback );\n\n\t\t\tanimation.start();\n\n\t\t};\n\n\t\t// Rendering\n\n\t\tthis.render = function ( scene, camera, renderTarget, forceClear ) {\n\n\t\t\tif ( ! ( camera && camera.isCamera ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( _isContextLost ) return;\n\n\t\t\t// reset caching for this frame\n\n\t\t\t_currentGeometryProgram = '';\n\t\t\t_currentMaterialId = - 1;\n\t\t\t_currentCamera = null;\n\n\t\t\t// update scene graph\n\n\t\t\tif ( scene.autoUpdate === true ) scene.updateMatrixWorld();\n\n\t\t\t// update camera matrices and frustum\n\n\t\t\tif ( camera.parent === null ) camera.updateMatrixWorld();\n\n\t\t\tif ( vr.enabled ) {\n\n\t\t\t\tcamera = vr.getCamera( camera );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tcurrentRenderState = renderStates.get( scene, camera );\n\t\t\tcurrentRenderState.init();\n\n\t\t\tscene.onBeforeRender( _this, scene, camera, renderTarget );\n\n\t\t\t_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );\n\t\t\t_frustum.setFromMatrix( _projScreenMatrix );\n\n\t\t\t_localClippingEnabled = this.localClippingEnabled;\n\t\t\t_clippingEnabled = _clipping.init( this.clippingPlanes, _localClippingEnabled, camera );\n\n\t\t\tcurrentRenderList = renderLists.get( scene, camera );\n\t\t\tcurrentRenderList.init();\n\n\t\t\tprojectObject( scene, camera, _this.sortObjects );\n\n\t\t\tif ( _this.sortObjects === true ) {\n\n\t\t\t\tcurrentRenderList.sort();\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tif ( _clippingEnabled ) _clipping.beginShadows();\n\n\t\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tshadowMap.render( shadowsArray, scene, camera );\n\n\t\t\tcurrentRenderState.setupLights( camera );\n\n\t\t\tif ( _clippingEnabled ) _clipping.endShadows();\n\n\t\t\t//\n\n\t\t\tif ( this.info.autoReset ) this.info.reset();\n\n\t\t\tif ( renderTarget === undefined ) {\n\n\t\t\t\trenderTarget = null;\n\n\t\t\t}\n\n\t\t\tthis.setRenderTarget( renderTarget );\n\n\t\t\t//\n\n\t\t\tbackground.render( currentRenderList, scene, camera, forceClear );\n\n\t\t\t// render scene\n\n\t\t\tvar opaqueObjects = currentRenderList.opaque;\n\t\t\tvar transparentObjects = currentRenderList.transparent;\n\n\t\t\tif ( scene.overrideMaterial ) {\n\n\t\t\t\tvar overrideMaterial = scene.overrideMaterial;\n\n\t\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera, overrideMaterial );\n\t\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera, overrideMaterial );\n\n\t\t\t} else {\n\n\t\t\t\t// opaque pass (front-to-back order)\n\n\t\t\t\tif ( opaqueObjects.length ) renderObjects( opaqueObjects, scene, camera );\n\n\t\t\t\t// transparent pass (back-to-front order)\n\n\t\t\t\tif ( transparentObjects.length ) renderObjects( transparentObjects, scene, camera );\n\n\t\t\t}\n\n\t\t\t// custom renderers\n\n\t\t\tvar spritesArray = currentRenderState.state.spritesArray;\n\n\t\t\tspriteRenderer.render( spritesArray, scene, camera );\n\n\t\t\t// Generate mipmap if we're using any kind of mipmap filtering\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\ttextures.updateRenderTargetMipmap( renderTarget );\n\n\t\t\t}\n\n\t\t\t// Ensure depth buffer writing is enabled so it can be cleared on next render\n\n\t\t\tstate.buffers.depth.setTest( true );\n\t\t\tstate.buffers.depth.setMask( true );\n\t\t\tstate.buffers.color.setMask( true );\n\n\t\t\tstate.setPolygonOffset( false );\n\n\t\t\tscene.onAfterRender( _this, scene, camera );\n\n\t\t\tif ( vr.enabled ) {\n\n\t\t\t\tvr.submitFrame();\n\n\t\t\t}\n\n\t\t\t// _gl.finish();\n\n\t\t\tcurrentRenderList = null;\n\t\t\tcurrentRenderState = null;\n\n\t\t};\n\n\t\t/*\n\t\t// TODO Duplicated code (Frustum)\n\n\t\tvar _sphere = new Sphere();\n\n\t\tfunction isObjectViewable( object ) {\n\n\t\t\tvar geometry = object.geometry;\n\n\t\t\tif ( geometry.boundingSphere === null )\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\t_sphere.copy( geometry.boundingSphere ).\n\t\t\tapplyMatrix4( object.matrixWorld );\n\n\t\t\treturn isSphereViewable( _sphere );\n\n\t\t}\n\n\t\tfunction isSpriteViewable( sprite ) {\n\n\t\t\t_sphere.center.set( 0, 0, 0 );\n\t\t\t_sphere.radius = 0.7071067811865476;\n\t\t\t_sphere.applyMatrix4( sprite.matrixWorld );\n\n\t\t\treturn isSphereViewable( _sphere );\n\n\t\t}\n\n\t\tfunction isSphereViewable( sphere ) {\n\n\t\t\tif ( ! _frustum.intersectsSphere( sphere ) ) return false;\n\n\t\t\tvar numPlanes = _clipping.numPlanes;\n\n\t\t\tif ( numPlanes === 0 ) return true;\n\n\t\t\tvar planes = _this.clippingPlanes,\n\n\t\t\t\tcenter = sphere.center,\n\t\t\t\tnegRad = - sphere.radius,\n\t\t\t\ti = 0;\n\n\t\t\tdo {\n\n\t\t\t\t// out when deeper than radius in the negative halfspace\n\t\t\t\tif ( planes[ i ].distanceToPoint( center ) < negRad ) return false;\n\n\t\t\t} while ( ++ i !== numPlanes );\n\n\t\t\treturn true;\n\n\t\t}\n\t\t*/\n\n\t\tfunction projectObject( object, camera, sortObjects ) {\n\n\t\t\tif ( object.visible === false ) return;\n\n\t\t\tvar visible = object.layers.test( camera.layers );\n\n\t\t\tif ( visible ) {\n\n\t\t\t\tif ( object.isLight ) {\n\n\t\t\t\t\tcurrentRenderState.pushLight( object );\n\n\t\t\t\t\tif ( object.castShadow ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushShadow( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isSprite ) {\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {\n\n\t\t\t\t\t\tcurrentRenderState.pushSprite( object );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( object.isImmediateRenderObject ) {\n\n\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentRenderList.push( object, null, object.material, _vector3.z, null );\n\n\t\t\t\t} else if ( object.isMesh || object.isLine || object.isPoints ) {\n\n\t\t\t\t\tif ( object.isSkinnedMesh ) {\n\n\t\t\t\t\t\tobject.skeleton.update();\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {\n\n\t\t\t\t\t\tif ( sortObjects ) {\n\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( object.matrixWorld )\n\t\t\t\t\t\t\t\t.applyMatrix4( _projScreenMatrix );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar geometry = objects.update( object );\n\t\t\t\t\t\tvar material = object.material;\n\n\t\t\t\t\t\tif ( Array.isArray( material ) ) {\n\n\t\t\t\t\t\t\tvar groups = geometry.groups;\n\n\t\t\t\t\t\t\tfor ( var i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\tvar group = groups[ i ];\n\t\t\t\t\t\t\t\tvar groupMaterial = material[ group.materialIndex ];\n\n\t\t\t\t\t\t\t\tif ( groupMaterial && groupMaterial.visible ) {\n\n\t\t\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, groupMaterial, _vector3.z, group );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else if ( material.visible ) {\n\n\t\t\t\t\t\t\tcurrentRenderList.push( object, geometry, material, _vector3.z, null );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tprojectObject( children[ i ], camera, sortObjects );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObjects( renderList, scene, camera, overrideMaterial ) {\n\n\t\t\tfor ( var i = 0, l = renderList.length; i < l; i ++ ) {\n\n\t\t\t\tvar renderItem = renderList[ i ];\n\n\t\t\t\tvar object = renderItem.object;\n\t\t\t\tvar geometry = renderItem.geometry;\n\t\t\t\tvar material = overrideMaterial === undefined ? renderItem.material : overrideMaterial;\n\t\t\t\tvar group = renderItem.group;\n\n\t\t\t\tif ( camera.isArrayCamera ) {\n\n\t\t\t\t\t_currentArrayCamera = camera;\n\n\t\t\t\t\tvar cameras = camera.cameras;\n\n\t\t\t\t\tfor ( var j = 0, jl = cameras.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar camera2 = cameras[ j ];\n\n\t\t\t\t\t\tif ( object.layers.test( camera2.layers ) ) {\n\n\t\t\t\t\t\t\tif ( 'viewport' in camera2 ) { // XR\n\n\t\t\t\t\t\t\t\tstate.viewport( _currentViewport.copy( camera2.viewport ) );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tvar bounds = camera2.bounds;\n\n\t\t\t\t\t\t\t\tvar x = bounds.x * _width;\n\t\t\t\t\t\t\t\tvar y = bounds.y * _height;\n\t\t\t\t\t\t\t\tvar width = bounds.z * _width;\n\t\t\t\t\t\t\t\tvar height = bounds.w * _height;\n\n\t\t\t\t\t\t\t\tstate.viewport( _currentViewport.set( x, y, width, height ).multiplyScalar( _pixelRatio ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\trenderObject( object, scene, camera2, geometry, material, group );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t_currentArrayCamera = null;\n\n\t\t\t\t\trenderObject( object, scene, camera, geometry, material, group );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction renderObject( object, scene, camera, geometry, material, group ) {\n\n\t\t\tobject.onBeforeRender( _this, scene, camera, geometry, material, group );\n\t\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\t\tobject.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );\n\t\t\tobject.normalMatrix.getNormalMatrix( object.modelViewMatrix );\n\n\t\t\tif ( object.isImmediateRenderObject ) {\n\n\t\t\t\tvar frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );\n\n\t\t\t\tstate.setMaterial( material, frontFaceCW );\n\n\t\t\t\tvar program = setProgram( camera, scene.fog, material, object );\n\n\t\t\t\t_currentGeometryProgram = '';\n\n\t\t\t\trenderObjectImmediate( object, program, material );\n\n\t\t\t} else {\n\n\t\t\t\t_this.renderBufferDirect( camera, scene.fog, geometry, material, object, group );\n\n\t\t\t}\n\n\t\t\tobject.onAfterRender( _this, scene, camera, geometry, material, group );\n\t\t\tcurrentRenderState = renderStates.get( scene, _currentArrayCamera || camera );\n\n\t\t}\n\n\t\tfunction initMaterial( material, fog, object ) {\n\n\t\t\tvar materialProperties = properties.get( material );\n\n\t\t\tvar lights = currentRenderState.state.lights;\n\t\t\tvar shadowsArray = currentRenderState.state.shadowsArray;\n\n\t\t\tvar parameters = programCache.getParameters(\n\t\t\t\tmaterial, lights.state, shadowsArray, fog, _clipping.numPlanes, _clipping.numIntersection, object );\n\n\t\t\tvar code = programCache.getProgramCode( material, parameters );\n\n\t\t\tvar program = materialProperties.program;\n\t\t\tvar programChange = true;\n\n\t\t\tif ( program === undefined ) {\n\n\t\t\t\t// new material\n\t\t\t\tmaterial.addEventListener( 'dispose', onMaterialDispose );\n\n\t\t\t} else if ( program.code !== code ) {\n\n\t\t\t\t// changed glsl or parameters\n\t\t\t\treleaseMaterialProgramReference( material );\n\n\t\t\t} else if ( materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\t\tproperties.update( material, 'lightsHash', lights.state.hash );\n\t\t\t\tprogramChange = false;\n\n\t\t\t} else if ( parameters.shaderID !== undefined ) {\n\n\t\t\t\t// same glsl and uniform list\n\t\t\t\treturn;\n\n\t\t\t} else {\n\n\t\t\t\t// only rebuild uniform list\n\t\t\t\tprogramChange = false;\n\n\t\t\t}\n\n\t\t\tif ( programChange ) {\n\n\t\t\t\tif ( parameters.shaderID ) {\n\n\t\t\t\t\tvar shader = ShaderLib[ parameters.shaderID ];\n\n\t\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\t\tname: material.type,\n\t\t\t\t\t\tuniforms: UniformsUtils.clone( shader.uniforms ),\n\t\t\t\t\t\tvertexShader: shader.vertexShader,\n\t\t\t\t\t\tfragmentShader: shader.fragmentShader\n\t\t\t\t\t};\n\n\t\t\t\t} else {\n\n\t\t\t\t\tmaterialProperties.shader = {\n\t\t\t\t\t\tname: material.type,\n\t\t\t\t\t\tuniforms: material.uniforms,\n\t\t\t\t\t\tvertexShader: material.vertexShader,\n\t\t\t\t\t\tfragmentShader: material.fragmentShader\n\t\t\t\t\t};\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.onBeforeCompile( materialProperties.shader, _this );\n\n\t\t\t\tprogram = programCache.acquireProgram( material, materialProperties.shader, parameters, code );\n\n\t\t\t\tmaterialProperties.program = program;\n\t\t\t\tmaterial.program = program;\n\n\t\t\t}\n\n\t\t\tvar programAttributes = program.getAttributes();\n\n\t\t\tif ( material.morphTargets ) {\n\n\t\t\t\tmaterial.numSupportedMorphTargets = 0;\n\n\t\t\t\tfor ( var i = 0; i < _this.maxMorphTargets; i ++ ) {\n\n\t\t\t\t\tif ( programAttributes[ 'morphTarget' + i ] >= 0 ) {\n\n\t\t\t\t\t\tmaterial.numSupportedMorphTargets ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.morphNormals ) {\n\n\t\t\t\tmaterial.numSupportedMorphNormals = 0;\n\n\t\t\t\tfor ( var i = 0; i < _this.maxMorphNormals; i ++ ) {\n\n\t\t\t\t\tif ( programAttributes[ 'morphNormal' + i ] >= 0 ) {\n\n\t\t\t\t\t\tmaterial.numSupportedMorphNormals ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar uniforms = materialProperties.shader.uniforms;\n\n\t\t\tif ( ! material.isShaderMaterial &&\n\t\t\t\t! material.isRawShaderMaterial ||\n\t\t\t\tmaterial.clipping === true ) {\n\n\t\t\t\tmaterialProperties.numClippingPlanes = _clipping.numPlanes;\n\t\t\t\tmaterialProperties.numIntersection = _clipping.numIntersection;\n\t\t\t\tuniforms.clippingPlanes = _clipping.uniform;\n\n\t\t\t}\n\n\t\t\tmaterialProperties.fog = fog;\n\n\t\t\t// store the light setup it was created for\n\n\t\t\tmaterialProperties.lightsHash = lights.state.hash;\n\n\t\t\tif ( material.lights ) {\n\n\t\t\t\t// wire up the material to this renderer's lighting state\n\n\t\t\t\tuniforms.ambientLightColor.value = lights.state.ambient;\n\t\t\t\tuniforms.directionalLights.value = lights.state.directional;\n\t\t\t\tuniforms.spotLights.value = lights.state.spot;\n\t\t\t\tuniforms.rectAreaLights.value = lights.state.rectArea;\n\t\t\t\tuniforms.pointLights.value = lights.state.point;\n\t\t\t\tuniforms.hemisphereLights.value = lights.state.hemi;\n\n\t\t\t\tuniforms.directionalShadowMap.value = lights.state.directionalShadowMap;\n\t\t\t\tuniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;\n\t\t\t\tuniforms.spotShadowMap.value = lights.state.spotShadowMap;\n\t\t\t\tuniforms.spotShadowMatrix.value = lights.state.spotShadowMatrix;\n\t\t\t\tuniforms.pointShadowMap.value = lights.state.pointShadowMap;\n\t\t\t\tuniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;\n\t\t\t\t// TODO (abelnation): add area lights shadow info to uniforms\n\n\t\t\t}\n\n\t\t\tvar progUniforms = materialProperties.program.getUniforms(),\n\t\t\t\tuniformsList =\n\t\t\t\t\tWebGLUniforms.seqWithValue( progUniforms.seq, uniforms );\n\n\t\t\tmaterialProperties.uniformsList = uniformsList;\n\n\t\t}\n\n\t\tfunction setProgram( camera, fog, material, object ) {\n\n\t\t\t_usedTextureUnits = 0;\n\n\t\t\tvar materialProperties = properties.get( material );\n\t\t\tvar lights = currentRenderState.state.lights;\n\n\t\t\tif ( _clippingEnabled ) {\n\n\t\t\t\tif ( _localClippingEnabled || camera !== _currentCamera ) {\n\n\t\t\t\t\tvar useCache =\n\t\t\t\t\t\tcamera === _currentCamera &&\n\t\t\t\t\t\tmaterial.id === _currentMaterialId;\n\n\t\t\t\t\t// we might want to call this function with some ClippingGroup\n\t\t\t\t\t// object instead of the material, once it becomes feasible\n\t\t\t\t\t// (#8465, #8379)\n\t\t\t\t\t_clipping.setState(\n\t\t\t\t\t\tmaterial.clippingPlanes, material.clipIntersection, material.clipShadows,\n\t\t\t\t\t\tcamera, materialProperties, useCache );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.needsUpdate === false ) {\n\n\t\t\t\tif ( materialProperties.program === undefined ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t} else if ( material.fog && materialProperties.fog !== fog ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t} else if ( material.lights && materialProperties.lightsHash !== lights.state.hash ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t} else if ( materialProperties.numClippingPlanes !== undefined &&\n\t\t\t\t\t( materialProperties.numClippingPlanes !== _clipping.numPlanes ||\n\t\t\t\t\tmaterialProperties.numIntersection !== _clipping.numIntersection ) ) {\n\n\t\t\t\t\tmaterial.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( material.needsUpdate ) {\n\n\t\t\t\tinitMaterial( material, fog, object );\n\t\t\t\tmaterial.needsUpdate = false;\n\n\t\t\t}\n\n\t\t\tvar refreshProgram = false;\n\t\t\tvar refreshMaterial = false;\n\t\t\tvar refreshLights = false;\n\n\t\t\tvar program = materialProperties.program,\n\t\t\t\tp_uniforms = program.getUniforms(),\n\t\t\t\tm_uniforms = materialProperties.shader.uniforms;\n\n\t\t\tif ( state.useProgram( program.program ) ) {\n\n\t\t\t\trefreshProgram = true;\n\t\t\t\trefreshMaterial = true;\n\t\t\t\trefreshLights = true;\n\n\t\t\t}\n\n\t\t\tif ( material.id !== _currentMaterialId ) {\n\n\t\t\t\t_currentMaterialId = material.id;\n\n\t\t\t\trefreshMaterial = true;\n\n\t\t\t}\n\n\t\t\tif ( refreshProgram || camera !== _currentCamera ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );\n\n\t\t\t\tif ( capabilities.logarithmicDepthBuffer ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'logDepthBufFC',\n\t\t\t\t\t\t2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );\n\n\t\t\t\t}\n\n\t\t\t\t// Avoid unneeded uniform updates per ArrayCamera's sub-camera\n\n\t\t\t\tif ( _currentCamera !== ( _currentArrayCamera || camera ) ) {\n\n\t\t\t\t\t_currentCamera = ( _currentArrayCamera || camera );\n\n\t\t\t\t\t// lighting uniforms depend on the camera so enforce an update\n\t\t\t\t\t// now, in case this material supports lights - or later, when\n\t\t\t\t\t// the next material that does gets activated:\n\n\t\t\t\t\trefreshMaterial = true;\t\t// set to true on material change\n\t\t\t\t\trefreshLights = true;\t\t// remains set until update done\n\n\t\t\t\t}\n\n\t\t\t\t// load material specific uniforms\n\t\t\t\t// (shader material also gets them for the sake of genericity)\n\n\t\t\t\tif ( material.isShaderMaterial ||\n\t\t\t\t\tmaterial.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.envMap ) {\n\n\t\t\t\t\tvar uCamPos = p_uniforms.map.cameraPosition;\n\n\t\t\t\t\tif ( uCamPos !== undefined ) {\n\n\t\t\t\t\t\tuCamPos.setValue( _gl,\n\t\t\t\t\t\t\t_vector3.setFromMatrixPosition( camera.matrixWorld ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.isMeshPhongMaterial ||\n\t\t\t\t\tmaterial.isMeshLambertMaterial ||\n\t\t\t\t\tmaterial.isMeshBasicMaterial ||\n\t\t\t\t\tmaterial.isMeshStandardMaterial ||\n\t\t\t\t\tmaterial.isShaderMaterial ||\n\t\t\t\t\tmaterial.skinning ) {\n\n\t\t\t\t\tp_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// skinning uniforms must be set even if material didn't change\n\t\t\t// auto-setting of texture unit for bone texture must go before other textures\n\t\t\t// not sure why, but otherwise weird things happen\n\n\t\t\tif ( material.skinning ) {\n\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrix' );\n\t\t\t\tp_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );\n\n\t\t\t\tvar skeleton = object.skeleton;\n\n\t\t\t\tif ( skeleton ) {\n\n\t\t\t\t\tvar bones = skeleton.bones;\n\n\t\t\t\t\tif ( capabilities.floatVertexTextures ) {\n\n\t\t\t\t\t\tif ( skeleton.boneTexture === undefined ) {\n\n\t\t\t\t\t\t\t// layout (1 matrix = 4 pixels)\n\t\t\t\t\t\t\t// RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)\n\t\t\t\t\t\t\t// with 8x8 pixel texture max 16 bones * 4 pixels = (8 * 8)\n\t\t\t\t\t\t\t// 16x16 pixel texture max 64 bones * 4 pixels = (16 * 16)\n\t\t\t\t\t\t\t// 32x32 pixel texture max 256 bones * 4 pixels = (32 * 32)\n\t\t\t\t\t\t\t// 64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)\n\n\n\t\t\t\t\t\t\tvar size = Math.sqrt( bones.length * 4 ); // 4 pixels needed for 1 matrix\n\t\t\t\t\t\t\tsize = _Math.ceilPowerOfTwo( size );\n\t\t\t\t\t\t\tsize = Math.max( size, 4 );\n\n\t\t\t\t\t\t\tvar boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel\n\t\t\t\t\t\t\tboneMatrices.set( skeleton.boneMatrices ); // copy current values\n\n\t\t\t\t\t\t\tvar boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );\n\t\t\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t\t\t\tskeleton.boneMatrices = boneMatrices;\n\t\t\t\t\t\t\tskeleton.boneTexture = boneTexture;\n\t\t\t\t\t\t\tskeleton.boneTextureSize = size;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture );\n\t\t\t\t\t\tp_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tp_uniforms.setOptional( _gl, skeleton, 'boneMatrices' );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( refreshMaterial ) {\n\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );\n\t\t\t\tp_uniforms.setValue( _gl, 'toneMappingWhitePoint', _this.toneMappingWhitePoint );\n\n\t\t\t\tif ( material.lights ) {\n\n\t\t\t\t\t// the current material requires lighting info\n\n\t\t\t\t\t// note: all lighting uniforms are always set correctly\n\t\t\t\t\t// they simply reference the renderer's state for their\n\t\t\t\t\t// values\n\t\t\t\t\t//\n\t\t\t\t\t// use the current material's .needsUpdate flags to set\n\t\t\t\t\t// the GL state when required\n\n\t\t\t\t\tmarkUniformsLightsNeedsUpdate( m_uniforms, refreshLights );\n\n\t\t\t\t}\n\n\t\t\t\t// refresh uniforms common to several materials\n\n\t\t\t\tif ( fog && material.fog ) {\n\n\t\t\t\t\trefreshUniformsFog( m_uniforms, fog );\n\n\t\t\t\t}\n\n\t\t\t\tif ( material.isMeshBasicMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshLambertMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsLambert( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshPhongMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\t\tif ( material.isMeshToonMaterial ) {\n\n\t\t\t\t\t\trefreshUniformsToon( m_uniforms, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trefreshUniformsPhong( m_uniforms, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.isMeshStandardMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\n\t\t\t\t\tif ( material.isMeshPhysicalMaterial ) {\n\n\t\t\t\t\t\trefreshUniformsPhysical( m_uniforms, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\trefreshUniformsStandard( m_uniforms, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.isMeshDepthMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsDepth( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshDistanceMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsDistance( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isMeshNormalMaterial ) {\n\n\t\t\t\t\trefreshUniformsCommon( m_uniforms, material );\n\t\t\t\t\trefreshUniformsNormal( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isLineBasicMaterial ) {\n\n\t\t\t\t\trefreshUniformsLine( m_uniforms, material );\n\n\t\t\t\t\tif ( material.isLineDashedMaterial ) {\n\n\t\t\t\t\t\trefreshUniformsDash( m_uniforms, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( material.isPointsMaterial ) {\n\n\t\t\t\t\trefreshUniformsPoints( m_uniforms, material );\n\n\t\t\t\t} else if ( material.isShadowMaterial ) {\n\n\t\t\t\t\tm_uniforms.color.value = material.color;\n\t\t\t\t\tm_uniforms.opacity.value = material.opacity;\n\n\t\t\t\t}\n\n\t\t\t\t// RectAreaLight Texture\n\t\t\t\t// TODO (mrdoob): Find a nicer implementation\n\n\t\t\t\tif ( m_uniforms.ltc_1 !== undefined ) m_uniforms.ltc_1.value = UniformsLib.LTC_1;\n\t\t\t\tif ( m_uniforms.ltc_2 !== undefined ) m_uniforms.ltc_2.value = UniformsLib.LTC_2;\n\n\t\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\n\t\t\t}\n\n\t\t\tif ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {\n\n\t\t\t\tWebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, _this );\n\t\t\t\tmaterial.uniformsNeedUpdate = false;\n\n\t\t\t}\n\n\t\t\t// common matrices\n\n\t\t\tp_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );\n\t\t\tp_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );\n\n\t\t\treturn program;\n\n\t\t}\n\n\t\t// Uniforms (refresh uniforms objects)\n\n\t\tfunction refreshUniformsCommon( uniforms, material ) {\n\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t\tif ( material.color ) {\n\n\t\t\t\tuniforms.diffuse.value = material.color;\n\n\t\t\t}\n\n\t\t\tif ( material.emissive ) {\n\n\t\t\t\tuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );\n\n\t\t\t}\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuniforms.map.value = material.map;\n\n\t\t\t}\n\n\t\t\tif ( material.alphaMap ) {\n\n\t\t\t\tuniforms.alphaMap.value = material.alphaMap;\n\n\t\t\t}\n\n\t\t\tif ( material.specularMap ) {\n\n\t\t\t\tuniforms.specularMap.value = material.specularMap;\n\n\t\t\t}\n\n\t\t\tif ( material.envMap ) {\n\n\t\t\t\tuniforms.envMap.value = material.envMap;\n\n\t\t\t\t// don't flip CubeTexture envMaps, flip everything else:\n\t\t\t\t// WebGLRenderTargetCube will be flipped for backwards compatibility\n\t\t\t\t// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexture\n\t\t\t\t// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the future\n\t\t\t\tuniforms.flipEnvMap.value = ( ! ( material.envMap && material.envMap.isCubeTexture ) ) ? 1 : - 1;\n\n\t\t\t\tuniforms.reflectivity.value = material.reflectivity;\n\t\t\t\tuniforms.refractionRatio.value = material.refractionRatio;\n\n\t\t\t\tuniforms.maxMipLevel.value = properties.get( material.envMap ).__maxMipLevel;\n\n\t\t\t}\n\n\t\t\tif ( material.lightMap ) {\n\n\t\t\t\tuniforms.lightMap.value = material.lightMap;\n\t\t\t\tuniforms.lightMapIntensity.value = material.lightMapIntensity;\n\n\t\t\t}\n\n\t\t\tif ( material.aoMap ) {\n\n\t\t\t\tuniforms.aoMap.value = material.aoMap;\n\t\t\t\tuniforms.aoMapIntensity.value = material.aoMapIntensity;\n\n\t\t\t}\n\n\t\t\t// uv repeat and offset setting priorities\n\t\t\t// 1. color map\n\t\t\t// 2. specular map\n\t\t\t// 3. normal map\n\t\t\t// 4. bump map\n\t\t\t// 5. alpha map\n\t\t\t// 6. emissive map\n\n\t\t\tvar uvScaleMap;\n\n\t\t\tif ( material.map ) {\n\n\t\t\t\tuvScaleMap = material.map;\n\n\t\t\t} else if ( material.specularMap ) {\n\n\t\t\t\tuvScaleMap = material.specularMap;\n\n\t\t\t} else if ( material.displacementMap ) {\n\n\t\t\t\tuvScaleMap = material.displacementMap;\n\n\t\t\t} else if ( material.normalMap ) {\n\n\t\t\t\tuvScaleMap = material.normalMap;\n\n\t\t\t} else if ( material.bumpMap ) {\n\n\t\t\t\tuvScaleMap = material.bumpMap;\n\n\t\t\t} else if ( material.roughnessMap ) {\n\n\t\t\t\tuvScaleMap = material.roughnessMap;\n\n\t\t\t} else if ( material.metalnessMap ) {\n\n\t\t\t\tuvScaleMap = material.metalnessMap;\n\n\t\t\t} else if ( material.alphaMap ) {\n\n\t\t\t\tuvScaleMap = material.alphaMap;\n\n\t\t\t} else if ( material.emissiveMap ) {\n\n\t\t\t\tuvScaleMap = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( uvScaleMap !== undefined ) {\n\n\t\t\t\t// backwards compatibility\n\t\t\t\tif ( uvScaleMap.isWebGLRenderTarget ) {\n\n\t\t\t\t\tuvScaleMap = uvScaleMap.texture;\n\n\t\t\t\t}\n\n\t\t\t\tif ( uvScaleMap.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tuvScaleMap.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy( uvScaleMap.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsLine( uniforms, material ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\t\t\tuniforms.opacity.value = material.opacity;\n\n\t\t}\n\n\t\tfunction refreshUniformsDash( uniforms, material ) {\n\n\t\t\tuniforms.dashSize.value = material.dashSize;\n\t\t\tuniforms.totalSize.value = material.dashSize + material.gapSize;\n\t\t\tuniforms.scale.value = material.scale;\n\n\t\t}\n\n\t\tfunction refreshUniformsPoints( uniforms, material ) {\n\n\t\t\tuniforms.diffuse.value = material.color;\n\t\t\tuniforms.opacity.value = material.opacity;\n\t\t\tuniforms.size.value = material.size * _pixelRatio;\n\t\t\tuniforms.scale.value = _height * 0.5;\n\n\t\t\tuniforms.map.value = material.map;\n\n\t\t\tif ( material.map !== null ) {\n\n\t\t\t\tif ( material.map.matrixAutoUpdate === true ) {\n\n\t\t\t\t\tmaterial.map.updateMatrix();\n\n\t\t\t\t}\n\n\t\t\t\tuniforms.uvTransform.value.copy( material.map.matrix );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsFog( uniforms, fog ) {\n\n\t\t\tuniforms.fogColor.value = fog.color;\n\n\t\t\tif ( fog.isFog ) {\n\n\t\t\t\tuniforms.fogNear.value = fog.near;\n\t\t\t\tuniforms.fogFar.value = fog.far;\n\n\t\t\t} else if ( fog.isFogExp2 ) {\n\n\t\t\t\tuniforms.fogDensity.value = fog.density;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsLambert( uniforms, material ) {\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsPhong( uniforms, material ) {\n\n\t\t\tuniforms.specular.value = material.specular;\n\t\t\tuniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsToon( uniforms, material ) {\n\n\t\t\trefreshUniformsPhong( uniforms, material );\n\n\t\t\tif ( material.gradientMap ) {\n\n\t\t\t\tuniforms.gradientMap.value = material.gradientMap;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsStandard( uniforms, material ) {\n\n\t\t\tuniforms.roughness.value = material.roughness;\n\t\t\tuniforms.metalness.value = material.metalness;\n\n\t\t\tif ( material.roughnessMap ) {\n\n\t\t\t\tuniforms.roughnessMap.value = material.roughnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.metalnessMap ) {\n\n\t\t\t\tuniforms.metalnessMap.value = material.metalnessMap;\n\n\t\t\t}\n\n\t\t\tif ( material.emissiveMap ) {\n\n\t\t\t\tuniforms.emissiveMap.value = material.emissiveMap;\n\n\t\t\t}\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t\tif ( material.envMap ) {\n\n\t\t\t\t//uniforms.envMap.value = material.envMap; // part of uniforms common\n\t\t\t\tuniforms.envMapIntensity.value = material.envMapIntensity;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsPhysical( uniforms, material ) {\n\n\t\t\tuniforms.clearCoat.value = material.clearCoat;\n\t\t\tuniforms.clearCoatRoughness.value = material.clearCoatRoughness;\n\n\t\t\trefreshUniformsStandard( uniforms, material );\n\n\t\t}\n\n\t\tfunction refreshUniformsDepth( uniforms, material ) {\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction refreshUniformsDistance( uniforms, material ) {\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t\tuniforms.referencePosition.value.copy( material.referencePosition );\n\t\t\tuniforms.nearDistance.value = material.nearDistance;\n\t\t\tuniforms.farDistance.value = material.farDistance;\n\n\t\t}\n\n\t\tfunction refreshUniformsNormal( uniforms, material ) {\n\n\t\t\tif ( material.bumpMap ) {\n\n\t\t\t\tuniforms.bumpMap.value = material.bumpMap;\n\t\t\t\tuniforms.bumpScale.value = material.bumpScale;\n\t\t\t\tif ( material.side === BackSide ) uniforms.bumpScale.value *= - 1;\n\n\t\t\t}\n\n\t\t\tif ( material.normalMap ) {\n\n\t\t\t\tuniforms.normalMap.value = material.normalMap;\n\t\t\t\tuniforms.normalScale.value.copy( material.normalScale );\n\t\t\t\tif ( material.side === BackSide ) uniforms.normalScale.value.negate();\n\n\t\t\t}\n\n\t\t\tif ( material.displacementMap ) {\n\n\t\t\t\tuniforms.displacementMap.value = material.displacementMap;\n\t\t\t\tuniforms.displacementScale.value = material.displacementScale;\n\t\t\t\tuniforms.displacementBias.value = material.displacementBias;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// If uniforms are marked as clean, they don't need to be loaded to the GPU.\n\n\t\tfunction markUniformsLightsNeedsUpdate( uniforms, value ) {\n\n\t\t\tuniforms.ambientLightColor.needsUpdate = value;\n\n\t\t\tuniforms.directionalLights.needsUpdate = value;\n\t\t\tuniforms.pointLights.needsUpdate = value;\n\t\t\tuniforms.spotLights.needsUpdate = value;\n\t\t\tuniforms.rectAreaLights.needsUpdate = value;\n\t\t\tuniforms.hemisphereLights.needsUpdate = value;\n\n\t\t}\n\n\t\t// Textures\n\n\t\tfunction allocTextureUnit() {\n\n\t\t\tvar textureUnit = _usedTextureUnits;\n\n\t\t\tif ( textureUnit >= capabilities.maxTextures ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + capabilities.maxTextures );\n\n\t\t\t}\n\n\t\t\t_usedTextureUnits += 1;\n\n\t\t\treturn textureUnit;\n\n\t\t}\n\n\t\tthis.allocTextureUnit = allocTextureUnit;\n\n\t\t// this.setTexture2D = setTexture2D;\n\t\tthis.setTexture2D = ( function () {\n\n\t\t\tvar warned = false;\n\n\t\t\t// backwards compatibility: peel texture.texture\n\t\t\treturn function setTexture2D( texture, slot ) {\n\n\t\t\t\tif ( texture && texture.isWebGLRenderTarget ) {\n\n\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTexture2D: don't use render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture = texture.texture;\n\n\t\t\t\t}\n\n\t\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.setTexture = ( function () {\n\n\t\t\tvar warned = false;\n\n\t\t\treturn function setTexture( texture, slot ) {\n\n\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer: .setTexture is deprecated, use setTexture2D instead.\" );\n\t\t\t\t\twarned = true;\n\n\t\t\t\t}\n\n\t\t\t\ttextures.setTexture2D( texture, slot );\n\n\t\t\t};\n\n\t\t}() );\n\n\t\tthis.setTextureCube = ( function () {\n\n\t\t\tvar warned = false;\n\n\t\t\treturn function setTextureCube( texture, slot ) {\n\n\t\t\t\t// backwards compatibility: peel texture.texture\n\t\t\t\tif ( texture && texture.isWebGLRenderTargetCube ) {\n\n\t\t\t\t\tif ( ! warned ) {\n\n\t\t\t\t\t\tconsole.warn( \"THREE.WebGLRenderer.setTextureCube: don't use cube render targets as textures. Use their .texture property instead.\" );\n\t\t\t\t\t\twarned = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture = texture.texture;\n\n\t\t\t\t}\n\n\t\t\t\t// currently relying on the fact that WebGLRenderTargetCube.texture is a Texture and NOT a CubeTexture\n\t\t\t\t// TODO: unify these code paths\n\t\t\t\tif ( ( texture && texture.isCubeTexture ) ||\n\t\t\t\t\t( Array.isArray( texture.image ) && texture.image.length === 6 ) ) {\n\n\t\t\t\t\t// CompressedTexture can have Array in image :/\n\n\t\t\t\t\t// this function alone should take care of cube textures\n\t\t\t\t\ttextures.setTextureCube( texture, slot );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// assumed: texture property of THREE.WebGLRenderTargetCube\n\n\t\t\t\t\ttextures.setTextureCubeDynamic( texture, slot );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() );\n\n\t\t//\n\n\t\tthis.setFramebuffer = function ( value ) {\n\n\t\t\t_framebuffer = value;\n\n\t\t};\n\n\t\tthis.getRenderTarget = function () {\n\n\t\t\treturn _currentRenderTarget;\n\n\t\t};\n\n\t\tthis.setRenderTarget = function ( renderTarget ) {\n\n\t\t\t_currentRenderTarget = renderTarget;\n\n\t\t\tif ( renderTarget && properties.get( renderTarget ).__webglFramebuffer === undefined ) {\n\n\t\t\t\ttextures.setupRenderTarget( renderTarget );\n\n\t\t\t}\n\n\t\t\tvar framebuffer = _framebuffer;\n\t\t\tvar isCube = false;\n\n\t\t\tif ( renderTarget ) {\n\n\t\t\t\tvar __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\t\tif ( renderTarget.isWebGLRenderTargetCube ) {\n\n\t\t\t\t\tframebuffer = __webglFramebuffer[ renderTarget.activeCubeFace ];\n\t\t\t\t\tisCube = true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tframebuffer = __webglFramebuffer;\n\n\t\t\t\t}\n\n\t\t\t\t_currentViewport.copy( renderTarget.viewport );\n\t\t\t\t_currentScissor.copy( renderTarget.scissor );\n\t\t\t\t_currentScissorTest = renderTarget.scissorTest;\n\n\t\t\t} else {\n\n\t\t\t\t_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio );\n\t\t\t\t_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio );\n\t\t\t\t_currentScissorTest = _scissorTest;\n\n\t\t\t}\n\n\t\t\tif ( _currentFramebuffer !== framebuffer ) {\n\n\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\t\t\t\t_currentFramebuffer = framebuffer;\n\n\t\t\t}\n\n\t\t\tstate.viewport( _currentViewport );\n\t\t\tstate.scissor( _currentScissor );\n\t\t\tstate.setScissorTest( _currentScissorTest );\n\n\t\t\tif ( isCube ) {\n\n\t\t\t\tvar textureProperties = properties.get( renderTarget.texture );\n\t\t\t\t_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + renderTarget.activeCubeFace, textureProperties.__webglTexture, renderTarget.activeMipMapLevel );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer ) {\n\n\t\t\tif ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {\n\n\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar framebuffer = properties.get( renderTarget ).__webglFramebuffer;\n\n\t\t\tif ( framebuffer ) {\n\n\t\t\t\tvar restore = false;\n\n\t\t\t\tif ( framebuffer !== _currentFramebuffer ) {\n\n\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );\n\n\t\t\t\t\trestore = true;\n\n\t\t\t\t}\n\n\t\t\t\ttry {\n\n\t\t\t\t\tvar texture = renderTarget.texture;\n\t\t\t\t\tvar textureFormat = texture.format;\n\t\t\t\t\tvar textureType = texture.type;\n\n\t\t\t\t\tif ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // IE11, Edge and Chrome Mac < 52 (#9513)\n\t\t\t\t\t\t! ( textureType === FloatType && ( extensions.get( 'OES_texture_float' ) || extensions.get( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox\n\t\t\t\t\t\t! ( textureType === HalfFloatType && extensions.get( 'EXT_color_buffer_half_float' ) ) ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( _gl.checkFramebufferStatus( _gl.FRAMEBUFFER ) === _gl.FRAMEBUFFER_COMPLETE ) {\n\n\t\t\t\t\t\t// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)\n\n\t\t\t\t\t\tif ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {\n\n\t\t\t\t\t\t\t_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.error( 'THREE.WebGLRenderer.readRenderTargetPixels: readPixels from renderTarget failed. Framebuffer not complete.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} finally {\n\n\t\t\t\t\tif ( restore ) {\n\n\t\t\t\t\t\t_gl.bindFramebuffer( _gl.FRAMEBUFFER, _currentFramebuffer );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.copyFramebufferToTexture = function ( position, texture, level ) {\n\n\t\t\tvar width = texture.image.width;\n\t\t\tvar height = texture.image.height;\n\t\t\tvar glFormat = utils.convert( texture.format );\n\n\t\t\tthis.setTexture2D( texture, 0 );\n\n\t\t\t_gl.copyTexImage2D( _gl.TEXTURE_2D, level || 0, glFormat, position.x, position.y, width, height, 0 );\n\n\t\t};\n\n\t\tthis.copyTextureToTexture = function ( position, srcTexture, dstTexture, level ) {\n\n\t\t\tvar width = srcTexture.image.width;\n\t\t\tvar height = srcTexture.image.height;\n\t\t\tvar glFormat = utils.convert( dstTexture.format );\n\t\t\tvar glType = utils.convert( dstTexture.type );\n\n\t\t\tthis.setTexture2D( dstTexture, 0 );\n\n\t\t\tif ( srcTexture.isDataTexture ) {\n\n\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );\n\n\t\t\t} else {\n\n\t\t\t\t_gl.texSubImage2D( _gl.TEXTURE_2D, level || 0, position.x, position.y, glFormat, glType, srcTexture.image );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction FogExp2( color, density ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\t\tthis.density = ( density !== undefined ) ? density : 0.00025;\n\n\t}\n\n\tFogExp2.prototype.isFogExp2 = true;\n\n\tFogExp2.prototype.clone = function () {\n\n\t\treturn new FogExp2( this.color, this.density );\n\n\t};\n\n\tFogExp2.prototype.toJSON = function ( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'FogExp2',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tdensity: this.density\n\t\t};\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Fog( color, near, far ) {\n\n\t\tthis.name = '';\n\n\t\tthis.color = new Color( color );\n\n\t\tthis.near = ( near !== undefined ) ? near : 1;\n\t\tthis.far = ( far !== undefined ) ? far : 1000;\n\n\t}\n\n\tFog.prototype.isFog = true;\n\n\tFog.prototype.clone = function () {\n\n\t\treturn new Fog( this.color, this.near, this.far );\n\n\t};\n\n\tFog.prototype.toJSON = function ( /* meta */ ) {\n\n\t\treturn {\n\t\t\ttype: 'Fog',\n\t\t\tcolor: this.color.getHex(),\n\t\t\tnear: this.near,\n\t\t\tfar: this.far\n\t\t};\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Scene() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Scene';\n\n\t\tthis.background = null;\n\t\tthis.fog = null;\n\t\tthis.overrideMaterial = null;\n\n\t\tthis.autoUpdate = true; // checked by the renderer\n\n\t}\n\n\tScene.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Scene,\n\n\t\tcopy: function ( source, recursive ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, recursive );\n\n\t\t\tif ( source.background !== null ) this.background = source.background.clone();\n\t\t\tif ( source.fog !== null ) this.fog = source.fog.clone();\n\t\t\tif ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();\n\n\t\t\tthis.autoUpdate = source.autoUpdate;\n\t\t\tthis.matrixAutoUpdate = source.matrixAutoUpdate;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tif ( this.background !== null ) data.object.background = this.background.toJSON( meta );\n\t\t\tif ( this.fog !== null ) data.object.fog = this.fog.toJSON();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t * map: new THREE.Texture( ),\n\t *\n\t *\tuvOffset: new THREE.Vector2(),\n\t *\tuvScale: new THREE.Vector2()\n\t * }\n\t */\n\n\tfunction SpriteMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'SpriteMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\t\tthis.map = null;\n\n\t\tthis.rotation = 0;\n\n\t\tthis.fog = false;\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tSpriteMaterial.prototype = Object.create( Material.prototype );\n\tSpriteMaterial.prototype.constructor = SpriteMaterial;\n\tSpriteMaterial.prototype.isSpriteMaterial = true;\n\n\tSpriteMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.map = source.map;\n\n\t\tthis.rotation = source.rotation;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Sprite( material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Sprite';\n\n\t\tthis.material = ( material !== undefined ) ? material : new SpriteMaterial();\n\n\t\tthis.center = new Vector2( 0.5, 0.5 );\n\n\t}\n\n\tSprite.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Sprite,\n\n\t\tisSprite: true,\n\n\t\traycast: ( function () {\n\n\t\t\tvar intersectPoint = new Vector3();\n\t\t\tvar worldPosition = new Vector3();\n\t\t\tvar worldScale = new Vector3();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tworldPosition.setFromMatrixPosition( this.matrixWorld );\n\t\t\t\traycaster.ray.closestPointToPoint( worldPosition, intersectPoint );\n\n\t\t\t\tworldScale.setFromMatrixScale( this.matrixWorld );\n\t\t\t\tvar guessSizeSq = worldScale.x * worldScale.y / 4;\n\n\t\t\t\tif ( worldPosition.distanceToSquared( intersectPoint ) > guessSizeSq ) return;\n\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\tintersects.push( {\n\n\t\t\t\t\tdistance: distance,\n\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\tface: null,\n\t\t\t\t\tobject: this\n\n\t\t\t\t} );\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.material ).copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tif ( source.center !== undefined ) this.center.copy( source.center );\n\n\t\t\treturn this;\n\n\t\t}\n\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LOD() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'LOD';\n\n\t\tObject.defineProperties( this, {\n\t\t\tlevels: {\n\t\t\t\tenumerable: true,\n\t\t\t\tvalue: []\n\t\t\t}\n\t\t} );\n\n\t}\n\n\tLOD.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: LOD,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source, false );\n\n\t\t\tvar levels = source.levels;\n\n\t\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tvar level = levels[ i ];\n\n\t\t\t\tthis.addLevel( level.object.clone(), level.distance );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\taddLevel: function ( object, distance ) {\n\n\t\t\tif ( distance === undefined ) distance = 0;\n\n\t\t\tdistance = Math.abs( distance );\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\tif ( distance < levels[ l ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tlevels.splice( l, 0, { distance: distance, object: object } );\n\n\t\t\tthis.add( object );\n\n\t\t},\n\n\t\tgetObjectForDistance: function ( distance ) {\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tif ( distance < levels[ i ].distance ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn levels[ i - 1 ].object;\n\n\t\t},\n\n\t\traycast: ( function () {\n\n\t\t\tvar matrixPosition = new Vector3();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tmatrixPosition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( matrixPosition );\n\n\t\t\t\tthis.getObjectForDistance( distance ).raycast( raycaster, intersects );\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tupdate: function () {\n\n\t\t\tvar v1 = new Vector3();\n\t\t\tvar v2 = new Vector3();\n\n\t\t\treturn function update( camera ) {\n\n\t\t\t\tvar levels = this.levels;\n\n\t\t\t\tif ( levels.length > 1 ) {\n\n\t\t\t\t\tv1.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\t\tv2.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\t\tvar distance = v1.distanceTo( v2 );\n\n\t\t\t\t\tlevels[ 0 ].object.visible = true;\n\n\t\t\t\t\tfor ( var i = 1, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tif ( distance >= levels[ i ].distance ) {\n\n\t\t\t\t\t\t\tlevels[ i - 1 ].object.visible = false;\n\t\t\t\t\t\t\tlevels[ i ].object.visible = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( ; i < l; i ++ ) {\n\n\t\t\t\t\t\tlevels[ i ].object.visible = false;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}(),\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.levels = [];\n\n\t\t\tvar levels = this.levels;\n\n\t\t\tfor ( var i = 0, l = levels.length; i < l; i ++ ) {\n\n\t\t\t\tvar level = levels[ i ];\n\n\t\t\t\tdata.object.levels.push( {\n\t\t\t\t\tobject: level.object.uuid,\n\t\t\t\t\tdistance: level.distance\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author michael guerrero / http://realitymeltdown.com\n\t * @author ikerr / http://verold.com\n\t */\n\n\tfunction Skeleton( bones, boneInverses ) {\n\n\t\t// copy the bone array\n\n\t\tbones = bones || [];\n\n\t\tthis.bones = bones.slice( 0 );\n\t\tthis.boneMatrices = new Float32Array( this.bones.length * 16 );\n\n\t\t// use the supplied bone inverses or calculate the inverses\n\n\t\tif ( boneInverses === undefined ) {\n\n\t\t\tthis.calculateInverses();\n\n\t\t} else {\n\n\t\t\tif ( this.bones.length === boneInverses.length ) {\n\n\t\t\t\tthis.boneInverses = boneInverses.slice( 0 );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.Skeleton boneInverses is the wrong length.' );\n\n\t\t\t\tthis.boneInverses = [];\n\n\t\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tthis.boneInverses.push( new Matrix4() );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tObject.assign( Skeleton.prototype, {\n\n\t\tcalculateInverses: function () {\n\n\t\t\tthis.boneInverses = [];\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tvar inverse = new Matrix4();\n\n\t\t\t\tif ( this.bones[ i ] ) {\n\n\t\t\t\t\tinverse.getInverse( this.bones[ i ].matrixWorld );\n\n\t\t\t\t}\n\n\t\t\t\tthis.boneInverses.push( inverse );\n\n\t\t\t}\n\n\t\t},\n\n\t\tpose: function () {\n\n\t\t\tvar bone, i, il;\n\n\t\t\t// recover the bind-time world matrices\n\n\t\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tbone = this.bones[ i ];\n\n\t\t\t\tif ( bone ) {\n\n\t\t\t\t\tbone.matrixWorld.getInverse( this.boneInverses[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// compute the local matrices, positions, rotations and scales\n\n\t\t\tfor ( i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tbone = this.bones[ i ];\n\n\t\t\t\tif ( bone ) {\n\n\t\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\t\tbone.matrix.getInverse( bone.parent.matrixWorld );\n\t\t\t\t\t\tbone.matrix.multiply( bone.matrixWorld );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tbone.matrix.copy( bone.matrixWorld );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbone.matrix.decompose( bone.position, bone.quaternion, bone.scale );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdate: ( function () {\n\n\t\t\tvar offsetMatrix = new Matrix4();\n\t\t\tvar identityMatrix = new Matrix4();\n\n\t\t\treturn function update() {\n\n\t\t\t\tvar bones = this.bones;\n\t\t\t\tvar boneInverses = this.boneInverses;\n\t\t\t\tvar boneMatrices = this.boneMatrices;\n\t\t\t\tvar boneTexture = this.boneTexture;\n\n\t\t\t\t// flatten bone matrices to array\n\n\t\t\t\tfor ( var i = 0, il = bones.length; i < il; i ++ ) {\n\n\t\t\t\t\t// compute the offset between the current and the original transform\n\n\t\t\t\t\tvar matrix = bones[ i ] ? bones[ i ].matrixWorld : identityMatrix;\n\n\t\t\t\t\toffsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );\n\t\t\t\t\toffsetMatrix.toArray( boneMatrices, i * 16 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( boneTexture !== undefined ) {\n\n\t\t\t\t\tboneTexture.needsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t} )(),\n\n\t\tclone: function () {\n\n\t\t\treturn new Skeleton( this.bones, this.boneInverses );\n\n\t\t},\n\n\t\tgetBoneByName: function ( name ) {\n\n\t\t\tfor ( var i = 0, il = this.bones.length; i < il; i ++ ) {\n\n\t\t\t\tvar bone = this.bones[ i ];\n\n\t\t\t\tif ( bone.name === name ) {\n\n\t\t\t\t\treturn bone;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn undefined;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author ikerr / http://verold.com\n\t */\n\n\tfunction Bone() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Bone';\n\n\t}\n\n\tBone.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Bone,\n\n\t\tisBone: true\n\n\t} );\n\n\t/**\n\t * @author mikael emtinger / http://gomo.se/\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author ikerr / http://verold.com\n\t */\n\n\tfunction SkinnedMesh( geometry, material ) {\n\n\t\tMesh.call( this, geometry, material );\n\n\t\tthis.type = 'SkinnedMesh';\n\n\t\tthis.bindMode = 'attached';\n\t\tthis.bindMatrix = new Matrix4();\n\t\tthis.bindMatrixInverse = new Matrix4();\n\n\t\tvar bones = this.initBones();\n\t\tvar skeleton = new Skeleton( bones );\n\n\t\tthis.bind( skeleton, this.matrixWorld );\n\n\t\tthis.normalizeSkinWeights();\n\n\t}\n\n\tSkinnedMesh.prototype = Object.assign( Object.create( Mesh.prototype ), {\n\n\t\tconstructor: SkinnedMesh,\n\n\t\tisSkinnedMesh: true,\n\n\t\tinitBones: function () {\n\n\t\t\tvar bones = [], bone, gbone;\n\t\t\tvar i, il;\n\n\t\t\tif ( this.geometry && this.geometry.bones !== undefined ) {\n\n\t\t\t\t// first, create array of 'Bone' objects from geometry data\n\n\t\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t\t// create new 'Bone' object\n\n\t\t\t\t\tbone = new Bone();\n\t\t\t\t\tbones.push( bone );\n\n\t\t\t\t\t// apply values\n\n\t\t\t\t\tbone.name = gbone.name;\n\t\t\t\t\tbone.position.fromArray( gbone.pos );\n\t\t\t\t\tbone.quaternion.fromArray( gbone.rotq );\n\t\t\t\t\tif ( gbone.scl !== undefined ) bone.scale.fromArray( gbone.scl );\n\n\t\t\t\t}\n\n\t\t\t\t// second, create bone hierarchy\n\n\t\t\t\tfor ( i = 0, il = this.geometry.bones.length; i < il; i ++ ) {\n\n\t\t\t\t\tgbone = this.geometry.bones[ i ];\n\n\t\t\t\t\tif ( ( gbone.parent !== - 1 ) && ( gbone.parent !== null ) && ( bones[ gbone.parent ] !== undefined ) ) {\n\n\t\t\t\t\t\t// subsequent bones in the hierarchy\n\n\t\t\t\t\t\tbones[ gbone.parent ].add( bones[ i ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// topmost bone, immediate child of the skinned mesh\n\n\t\t\t\t\t\tthis.add( bones[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// now the bones are part of the scene graph and children of the skinned mesh.\n\t\t\t// let's update the corresponding matrices\n\n\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\treturn bones;\n\n\t\t},\n\n\t\tbind: function ( skeleton, bindMatrix ) {\n\n\t\t\tthis.skeleton = skeleton;\n\n\t\t\tif ( bindMatrix === undefined ) {\n\n\t\t\t\tthis.updateMatrixWorld( true );\n\n\t\t\t\tthis.skeleton.calculateInverses();\n\n\t\t\t\tbindMatrix = this.matrixWorld;\n\n\t\t\t}\n\n\t\t\tthis.bindMatrix.copy( bindMatrix );\n\t\t\tthis.bindMatrixInverse.getInverse( bindMatrix );\n\n\t\t},\n\n\t\tpose: function () {\n\n\t\t\tthis.skeleton.pose();\n\n\t\t},\n\n\t\tnormalizeSkinWeights: function () {\n\n\t\t\tvar scale, i;\n\n\t\t\tif ( this.geometry && this.geometry.isGeometry ) {\n\n\t\t\t\tfor ( i = 0; i < this.geometry.skinWeights.length; i ++ ) {\n\n\t\t\t\t\tvar sw = this.geometry.skinWeights[ i ];\n\n\t\t\t\t\tscale = 1.0 / sw.manhattanLength();\n\n\t\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\t\tsw.multiplyScalar( scale );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tsw.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( this.geometry && this.geometry.isBufferGeometry ) {\n\n\t\t\t\tvar vec = new Vector4();\n\n\t\t\t\tvar skinWeight = this.geometry.attributes.skinWeight;\n\n\t\t\t\tfor ( i = 0; i < skinWeight.count; i ++ ) {\n\n\t\t\t\t\tvec.x = skinWeight.getX( i );\n\t\t\t\t\tvec.y = skinWeight.getY( i );\n\t\t\t\t\tvec.z = skinWeight.getZ( i );\n\t\t\t\t\tvec.w = skinWeight.getW( i );\n\n\t\t\t\t\tscale = 1.0 / vec.manhattanLength();\n\n\t\t\t\t\tif ( scale !== Infinity ) {\n\n\t\t\t\t\t\tvec.multiplyScalar( scale );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tvec.set( 1, 0, 0, 0 ); // do something reasonable\n\n\t\t\t\t\t}\n\n\t\t\t\t\tskinWeight.setXYZW( i, vec.x, vec.y, vec.z, vec.w );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\tupdateMatrixWorld: function ( force ) {\n\n\t\t\tMesh.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\tif ( this.bindMode === 'attached' ) {\n\n\t\t\t\tthis.bindMatrixInverse.getInverse( this.matrixWorld );\n\n\t\t\t} else if ( this.bindMode === 'detached' ) {\n\n\t\t\t\tthis.bindMatrixInverse.getInverse( this.bindMatrix );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );\n\n\t\t\t}\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t *\n\t * linewidth: ,\n\t * linecap: \"round\",\n\t * linejoin: \"round\"\n\t * }\n\t */\n\n\tfunction LineBasicMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'LineBasicMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.linewidth = 1;\n\t\tthis.linecap = 'round';\n\t\tthis.linejoin = 'round';\n\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tLineBasicMaterial.prototype = Object.create( Material.prototype );\n\tLineBasicMaterial.prototype.constructor = LineBasicMaterial;\n\n\tLineBasicMaterial.prototype.isLineBasicMaterial = true;\n\n\tLineBasicMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.linewidth = source.linewidth;\n\t\tthis.linecap = source.linecap;\n\t\tthis.linejoin = source.linejoin;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Line( geometry, material, mode ) {\n\n\t\tif ( mode === 1 ) {\n\n\t\t\tconsole.warn( 'THREE.Line: parameter THREE.LinePieces no longer supported. Created THREE.LineSegments instead.' );\n\t\t\treturn new LineSegments( geometry, material );\n\n\t\t}\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Line';\n\n\t\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\t\tthis.material = material !== undefined ? material : new LineBasicMaterial( { color: Math.random() * 0xffffff } );\n\n\t}\n\n\tLine.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Line,\n\n\t\tisLine: true,\n\n\t\tcomputeLineDistances: ( function () {\n\n\t\t\tvar start = new Vector3();\n\t\t\tvar end = new Vector3();\n\n\t\t\treturn function computeLineDistances() {\n\n\t\t\t\tvar geometry = this.geometry;\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\t\tvar lineDistances = [ 0 ];\n\n\t\t\t\t\t\tfor ( var i = 1, l = positionAttribute.count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i - 1 );\n\t\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i );\n\n\t\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\t\tlineDistances[ i ] += start.distanceTo( end );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\t\tlineDistances[ 0 ] = 0;\n\n\t\t\t\t\tfor ( var i = 1, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tlineDistances[ i ] = lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i ] += vertices[ i - 1 ].distanceTo( vertices[ i ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\traycast: ( function () {\n\n\t\t\tvar inverseMatrix = new Matrix4();\n\t\t\tvar ray = new Ray();\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tvar precision = raycaster.linePrecision;\n\t\t\t\tvar precisionSq = precision * precision;\n\n\t\t\t\tvar geometry = this.geometry;\n\t\t\t\tvar matrixWorld = this.matrixWorld;\n\n\t\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\t\tsphere.applyMatrix4( matrixWorld );\n\n\t\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t\t//\n\n\t\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t\tvar vStart = new Vector3();\n\t\t\t\tvar vEnd = new Vector3();\n\t\t\t\tvar interSegment = new Vector3();\n\t\t\t\tvar interRay = new Vector3();\n\t\t\t\tvar step = ( this && this.isLineSegments ) ? 2 : 1;\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar index = geometry.index;\n\t\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\t\tfor ( var i = 0, l = indices.length - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\tvar a = indices[ i ];\n\t\t\t\t\t\t\tvar b = indices[ i + 1 ];\n\n\t\t\t\t\t\t\tvStart.fromArray( positions, a * 3 );\n\t\t\t\t\t\t\tvEnd.fromArray( positions, b * 3 );\n\n\t\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length / 3 - 1; i < l; i += step ) {\n\n\t\t\t\t\t\t\tvStart.fromArray( positions, 3 * i );\n\t\t\t\t\t\t\tvEnd.fromArray( positions, 3 * i + 3 );\n\n\t\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vStart, vEnd, interRay, interSegment );\n\n\t\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\t\tvar nbVertices = vertices.length;\n\n\t\t\t\t\tfor ( var i = 0; i < nbVertices - 1; i += step ) {\n\n\t\t\t\t\t\tvar distSq = ray.distanceSqToSegment( vertices[ i ], vertices[ i + 1 ], interRay, interSegment );\n\n\t\t\t\t\t\tif ( distSq > precisionSq ) continue;\n\n\t\t\t\t\t\tinterRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( interRay );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) continue;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\t// What do we want? intersection point on the ray or on the segment??\n\t\t\t\t\t\t\t// point: raycaster.ray.at( distance ),\n\t\t\t\t\t\t\tpoint: interSegment.clone().applyMatrix4( this.matrixWorld ),\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tfaceIndex: null,\n\t\t\t\t\t\t\tobject: this\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LineSegments( geometry, material ) {\n\n\t\tLine.call( this, geometry, material );\n\n\t\tthis.type = 'LineSegments';\n\n\t}\n\n\tLineSegments.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\t\tconstructor: LineSegments,\n\n\t\tisLineSegments: true,\n\n\t\tcomputeLineDistances: ( function () {\n\n\t\t\tvar start = new Vector3();\n\t\t\tvar end = new Vector3();\n\n\t\t\treturn function computeLineDistances() {\n\n\t\t\t\tvar geometry = this.geometry;\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\t// we assume non-indexed geometry\n\n\t\t\t\t\tif ( geometry.index === null ) {\n\n\t\t\t\t\t\tvar positionAttribute = geometry.attributes.position;\n\t\t\t\t\t\tvar lineDistances = [];\n\n\t\t\t\t\t\tfor ( var i = 0, l = positionAttribute.count; i < l; i += 2 ) {\n\n\t\t\t\t\t\t\tstart.fromBufferAttribute( positionAttribute, i );\n\t\t\t\t\t\t\tend.fromBufferAttribute( positionAttribute, i + 1 );\n\n\t\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry.addAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( geometry.isGeometry ) {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\t\t\t\t\tvar lineDistances = geometry.lineDistances;\n\n\t\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i += 2 ) {\n\n\t\t\t\t\t\tstart.copy( vertices[ i ] );\n\t\t\t\t\t\tend.copy( vertices[ i + 1 ] );\n\n\t\t\t\t\t\tlineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];\n\t\t\t\t\t\tlineDistances[ i + 1 ] = lineDistances[ i ] + start.distanceTo( end );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}() )\n\n\t} );\n\n\t/**\n\t * @author mgreter / http://github.com/mgreter\n\t */\n\n\tfunction LineLoop( geometry, material ) {\n\n\t\tLine.call( this, geometry, material );\n\n\t\tthis.type = 'LineLoop';\n\n\t}\n\n\tLineLoop.prototype = Object.assign( Object.create( Line.prototype ), {\n\n\t\tconstructor: LineLoop,\n\n\t\tisLineLoop: true,\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t * map: new THREE.Texture( ),\n\t *\n\t * size: ,\n\t * sizeAttenuation: \n\t *\n\t * morphTargets: \n\t * }\n\t */\n\n\tfunction PointsMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'PointsMaterial';\n\n\t\tthis.color = new Color( 0xffffff );\n\n\t\tthis.map = null;\n\n\t\tthis.size = 1;\n\t\tthis.sizeAttenuation = true;\n\n\t\tthis.morphTargets = false;\n\n\t\tthis.lights = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tPointsMaterial.prototype = Object.create( Material.prototype );\n\tPointsMaterial.prototype.constructor = PointsMaterial;\n\n\tPointsMaterial.prototype.isPointsMaterial = true;\n\n\tPointsMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.size = source.size;\n\t\tthis.sizeAttenuation = source.sizeAttenuation;\n\n\t\tthis.morphTargets = source.morphTargets;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Points( geometry, material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Points';\n\n\t\tthis.geometry = geometry !== undefined ? geometry : new BufferGeometry();\n\t\tthis.material = material !== undefined ? material : new PointsMaterial( { color: Math.random() * 0xffffff } );\n\n\t}\n\n\tPoints.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Points,\n\n\t\tisPoints: true,\n\n\t\traycast: ( function () {\n\n\t\t\tvar inverseMatrix = new Matrix4();\n\t\t\tvar ray = new Ray();\n\t\t\tvar sphere = new Sphere();\n\n\t\t\treturn function raycast( raycaster, intersects ) {\n\n\t\t\t\tvar object = this;\n\t\t\t\tvar geometry = this.geometry;\n\t\t\t\tvar matrixWorld = this.matrixWorld;\n\t\t\t\tvar threshold = raycaster.params.Points.threshold;\n\n\t\t\t\t// Checking boundingSphere distance to ray\n\n\t\t\t\tif ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();\n\n\t\t\t\tsphere.copy( geometry.boundingSphere );\n\t\t\t\tsphere.applyMatrix4( matrixWorld );\n\t\t\t\tsphere.radius += threshold;\n\n\t\t\t\tif ( raycaster.ray.intersectsSphere( sphere ) === false ) return;\n\n\t\t\t\t//\n\n\t\t\t\tinverseMatrix.getInverse( matrixWorld );\n\t\t\t\tray.copy( raycaster.ray ).applyMatrix4( inverseMatrix );\n\n\t\t\t\tvar localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );\n\t\t\t\tvar localThresholdSq = localThreshold * localThreshold;\n\t\t\t\tvar position = new Vector3();\n\t\t\t\tvar intersectPoint = new Vector3();\n\n\t\t\t\tfunction testPoint( point, index ) {\n\n\t\t\t\t\tvar rayPointDistanceSq = ray.distanceSqToPoint( point );\n\n\t\t\t\t\tif ( rayPointDistanceSq < localThresholdSq ) {\n\n\t\t\t\t\t\tray.closestPointToPoint( point, intersectPoint );\n\t\t\t\t\t\tintersectPoint.applyMatrix4( matrixWorld );\n\n\t\t\t\t\t\tvar distance = raycaster.ray.origin.distanceTo( intersectPoint );\n\n\t\t\t\t\t\tif ( distance < raycaster.near || distance > raycaster.far ) return;\n\n\t\t\t\t\t\tintersects.push( {\n\n\t\t\t\t\t\t\tdistance: distance,\n\t\t\t\t\t\t\tdistanceToRay: Math.sqrt( rayPointDistanceSq ),\n\t\t\t\t\t\t\tpoint: intersectPoint.clone(),\n\t\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\t\tface: null,\n\t\t\t\t\t\t\tobject: object\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\t\t\tvar index = geometry.index;\n\t\t\t\t\tvar attributes = geometry.attributes;\n\t\t\t\t\tvar positions = attributes.position.array;\n\n\t\t\t\t\tif ( index !== null ) {\n\n\t\t\t\t\t\tvar indices = index.array;\n\n\t\t\t\t\t\tfor ( var i = 0, il = indices.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar a = indices[ i ];\n\n\t\t\t\t\t\t\tposition.fromArray( positions, a * 3 );\n\n\t\t\t\t\t\t\ttestPoint( position, a );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var i = 0, l = positions.length / 3; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tposition.fromArray( positions, i * 3 );\n\n\t\t\t\t\t\t\ttestPoint( position, i );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar vertices = geometry.vertices;\n\n\t\t\t\t\tfor ( var i = 0, l = vertices.length; i < l; i ++ ) {\n\n\t\t\t\t\t\ttestPoint( vertices[ i ], i );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor( this.geometry, this.material ).copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Group() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Group';\n\n\t}\n\n\tGroup.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Group,\n\n\t\tisGroup: true\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction VideoTexture( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {\n\n\t\tTexture.call( this, video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n\tVideoTexture.prototype = Object.assign( Object.create( Texture.prototype ), {\n\n\t\tconstructor: VideoTexture,\n\n\t\tisVideoTexture: true,\n\n\t\tupdate: function () {\n\n\t\t\tvar video = this.image;\n\n\t\t\tif ( video.readyState >= video.HAVE_CURRENT_DATA ) {\n\n\t\t\t\tthis.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction CompressedTexture( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, encoding ) {\n\n\t\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding );\n\n\t\tthis.image = { width: width, height: height };\n\t\tthis.mipmaps = mipmaps;\n\n\t\t// no flipping for cube textures\n\t\t// (also flipping doesn't work for compressed textures )\n\n\t\tthis.flipY = false;\n\n\t\t// can't generate mipmaps for compressed textures\n\t\t// mips must be embedded in DDS files\n\n\t\tthis.generateMipmaps = false;\n\n\t}\n\n\tCompressedTexture.prototype = Object.create( Texture.prototype );\n\tCompressedTexture.prototype.constructor = CompressedTexture;\n\n\tCompressedTexture.prototype.isCompressedTexture = true;\n\n\t/**\n\t * @author Matt DesLauriers / @mattdesl\n\t * @author atix / arthursilber.de\n\t */\n\n\tfunction DepthTexture( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {\n\n\t\tformat = format !== undefined ? format : DepthFormat;\n\n\t\tif ( format !== DepthFormat && format !== DepthStencilFormat ) {\n\n\t\t\tthrow new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );\n\n\t\t}\n\n\t\tif ( type === undefined && format === DepthFormat ) type = UnsignedShortType;\n\t\tif ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;\n\n\t\tTexture.call( this, null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );\n\n\t\tthis.image = { width: width, height: height };\n\n\t\tthis.magFilter = magFilter !== undefined ? magFilter : NearestFilter;\n\t\tthis.minFilter = minFilter !== undefined ? minFilter : NearestFilter;\n\n\t\tthis.flipY = false;\n\t\tthis.generateMipmaps\t= false;\n\n\t}\n\n\tDepthTexture.prototype = Object.create( Texture.prototype );\n\tDepthTexture.prototype.constructor = DepthTexture;\n\tDepthTexture.prototype.isDepthTexture = true;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction WireframeGeometry( geometry ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'WireframeGeometry';\n\n\t\t// buffer\n\n\t\tvar vertices = [];\n\n\t\t// helper variables\n\n\t\tvar i, j, l, o, ol;\n\t\tvar edge = [ 0, 0 ], edges = {}, e, edge1, edge2;\n\t\tvar key, keys = [ 'a', 'b', 'c' ];\n\t\tvar vertex;\n\n\t\t// different logic for Geometry and BufferGeometry\n\n\t\tif ( geometry && geometry.isGeometry ) {\n\n\t\t\t// create a data structure that contains all edges without duplicates\n\n\t\t\tvar faces = geometry.faces;\n\n\t\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// generate vertices\n\n\t\t\tfor ( key in edges ) {\n\n\t\t\t\te = edges[ key ];\n\n\t\t\t\tvertex = geometry.vertices[ e.index1 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex = geometry.vertices[ e.index2 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t} else if ( geometry && geometry.isBufferGeometry ) {\n\n\t\t\tvar position, indices, groups;\n\t\t\tvar group, start, count;\n\t\t\tvar index1, index2;\n\n\t\t\tvertex = new Vector3();\n\n\t\t\tif ( geometry.index !== null ) {\n\n\t\t\t\t// indexed BufferGeometry\n\n\t\t\t\tposition = geometry.attributes.position;\n\t\t\t\tindices = geometry.index;\n\t\t\t\tgroups = geometry.groups;\n\n\t\t\t\tif ( groups.length === 0 ) {\n\n\t\t\t\t\tgroups = [ { start: 0, count: indices.count, materialIndex: 0 } ];\n\n\t\t\t\t}\n\n\t\t\t\t// create a data structure that contains all eges without duplicates\n\n\t\t\t\tfor ( o = 0, ol = groups.length; o < ol; ++ o ) {\n\n\t\t\t\t\tgroup = groups[ o ];\n\n\t\t\t\t\tstart = group.start;\n\t\t\t\t\tcount = group.count;\n\n\t\t\t\t\tfor ( i = start, l = ( start + count ); i < l; i += 3 ) {\n\n\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\tedge1 = indices.getX( i + j );\n\t\t\t\t\t\t\tedge2 = indices.getX( i + ( j + 1 ) % 3 );\n\t\t\t\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 ); // sorting prevents duplicates\n\t\t\t\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ] };\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// generate vertices\n\n\t\t\t\tfor ( key in edges ) {\n\n\t\t\t\t\te = edges[ key ];\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index1 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\tvertex.fromBufferAttribute( position, e.index2 );\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// non-indexed BufferGeometry\n\n\t\t\t\tposition = geometry.attributes.position;\n\n\t\t\t\tfor ( i = 0, l = ( position.count / 3 ); i < l; i ++ ) {\n\n\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t// three edges per triangle, an edge is represented as (index1, index2)\n\t\t\t\t\t\t// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)\n\n\t\t\t\t\t\tindex1 = 3 * i + j;\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index1 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t\tindex2 = 3 * i + ( ( j + 1 ) % 3 );\n\t\t\t\t\t\tvertex.fromBufferAttribute( position, index2 );\n\t\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n\tWireframeGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tWireframeGeometry.prototype.constructor = WireframeGeometry;\n\n\t/**\n\t * @author zz85 / https://github.com/zz85\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t * Parametric Surfaces Geometry\n\t * based on the brilliant article by @prideout http://prideout.net/blog/?p=44\n\t */\n\n\t// ParametricGeometry\n\n\tfunction ParametricGeometry( func, slices, stacks ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'ParametricGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ParametricBufferGeometry( func, slices, stacks ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tParametricGeometry.prototype = Object.create( Geometry.prototype );\n\tParametricGeometry.prototype.constructor = ParametricGeometry;\n\n\t// ParametricBufferGeometry\n\n\tfunction ParametricBufferGeometry( func, slices, stacks ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'ParametricBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tfunc: func,\n\t\t\tslices: slices,\n\t\t\tstacks: stacks\n\t\t};\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\tvar EPS = 0.00001;\n\n\t\tvar normal = new Vector3();\n\n\t\tvar p0 = new Vector3(), p1 = new Vector3();\n\t\tvar pu = new Vector3(), pv = new Vector3();\n\n\t\tvar i, j;\n\n\t\tif ( func.length < 3 ) {\n\n\t\t\tconsole.error( 'THREE.ParametricGeometry: Function must now modify a Vector3 as third parameter.' );\n\n\t\t}\n\n\t\t// generate vertices, normals and uvs\n\n\t\tvar sliceCount = slices + 1;\n\n\t\tfor ( i = 0; i <= stacks; i ++ ) {\n\n\t\t\tvar v = i / stacks;\n\n\t\t\tfor ( j = 0; j <= slices; j ++ ) {\n\n\t\t\t\tvar u = j / slices;\n\n\t\t\t\t// vertex\n\n\t\t\t\tfunc( u, v, p0 );\n\t\t\t\tvertices.push( p0.x, p0.y, p0.z );\n\n\t\t\t\t// normal\n\n\t\t\t\t// approximate tangent vectors via finite differences\n\n\t\t\t\tif ( u - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u - EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u + EPS, v, p1 );\n\t\t\t\t\tpu.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\tif ( v - EPS >= 0 ) {\n\n\t\t\t\t\tfunc( u, v - EPS, p1 );\n\t\t\t\t\tpv.subVectors( p0, p1 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfunc( u, v + EPS, p1 );\n\t\t\t\t\tpv.subVectors( p1, p0 );\n\n\t\t\t\t}\n\n\t\t\t\t// cross product of tangent vectors returns surface normal\n\n\t\t\t\tnormal.crossVectors( pu, pv ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, v );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( i = 0; i < stacks; i ++ ) {\n\n\t\t\tfor ( j = 0; j < slices; j ++ ) {\n\n\t\t\t\tvar a = i * sliceCount + j;\n\t\t\t\tvar b = i * sliceCount + j + 1;\n\t\t\t\tvar c = ( i + 1 ) * sliceCount + j + 1;\n\t\t\t\tvar d = ( i + 1 ) * sliceCount + j;\n\n\t\t\t\t// faces one and two\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tParametricBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tParametricBufferGeometry.prototype.constructor = ParametricBufferGeometry;\n\n\t/**\n\t * @author clockworkgeek / https://github.com/clockworkgeek\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// PolyhedronGeometry\n\n\tfunction PolyhedronGeometry( vertices, indices, radius, detail ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'PolyhedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new PolyhedronBufferGeometry( vertices, indices, radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tPolyhedronGeometry.prototype = Object.create( Geometry.prototype );\n\tPolyhedronGeometry.prototype.constructor = PolyhedronGeometry;\n\n\t// PolyhedronBufferGeometry\n\n\tfunction PolyhedronBufferGeometry( vertices, indices, radius, detail ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'PolyhedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tvertices: vertices,\n\t\t\tindices: indices,\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tradius = radius || 1;\n\t\tdetail = detail || 0;\n\n\t\t// default buffer data\n\n\t\tvar vertexBuffer = [];\n\t\tvar uvBuffer = [];\n\n\t\t// the subdivision creates the vertex buffer data\n\n\t\tsubdivide( detail );\n\n\t\t// all vertices should lie on a conceptual sphere with a given radius\n\n\t\tappplyRadius( radius );\n\n\t\t// finally, create the uv data\n\n\t\tgenerateUVs();\n\n\t\t// build non-indexed geometry\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );\n\n\t\tif ( detail === 0 ) {\n\n\t\t\tthis.computeVertexNormals(); // flat normals\n\n\t\t} else {\n\n\t\t\tthis.normalizeNormals(); // smooth normals\n\n\t\t}\n\n\t\t// helper functions\n\n\t\tfunction subdivide( detail ) {\n\n\t\t\tvar a = new Vector3();\n\t\t\tvar b = new Vector3();\n\t\t\tvar c = new Vector3();\n\n\t\t\t// iterate over all faces and apply a subdivison with the given detail value\n\n\t\t\tfor ( var i = 0; i < indices.length; i += 3 ) {\n\n\t\t\t\t// get the vertices of the face\n\n\t\t\t\tgetVertexByIndex( indices[ i + 0 ], a );\n\t\t\t\tgetVertexByIndex( indices[ i + 1 ], b );\n\t\t\t\tgetVertexByIndex( indices[ i + 2 ], c );\n\n\t\t\t\t// perform subdivision\n\n\t\t\t\tsubdivideFace( a, b, c, detail );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction subdivideFace( a, b, c, detail ) {\n\n\t\t\tvar cols = Math.pow( 2, detail );\n\n\t\t\t// we use this multidimensional array as a data structure for creating the subdivision\n\n\t\t\tvar v = [];\n\n\t\t\tvar i, j;\n\n\t\t\t// construct all of the vertices for this subdivision\n\n\t\t\tfor ( i = 0; i <= cols; i ++ ) {\n\n\t\t\t\tv[ i ] = [];\n\n\t\t\t\tvar aj = a.clone().lerp( c, i / cols );\n\t\t\t\tvar bj = b.clone().lerp( c, i / cols );\n\n\t\t\t\tvar rows = cols - i;\n\n\t\t\t\tfor ( j = 0; j <= rows; j ++ ) {\n\n\t\t\t\t\tif ( j === 0 && i === cols ) {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tv[ i ][ j ] = aj.clone().lerp( bj, j / rows );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// construct all of the faces\n\n\t\t\tfor ( i = 0; i < cols; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {\n\n\t\t\t\t\tvar k = Math.floor( j / 2 );\n\n\t\t\t\t\tif ( j % 2 === 0 ) {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\t\t\t\t\t\tpushVertex( v[ i ][ k ] );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tpushVertex( v[ i ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k + 1 ] );\n\t\t\t\t\t\tpushVertex( v[ i + 1 ][ k ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction appplyRadius( radius ) {\n\n\t\t\tvar vertex = new Vector3();\n\n\t\t\t// iterate over the entire buffer and apply the radius to each vertex\n\n\t\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvertex.normalize().multiplyScalar( radius );\n\n\t\t\t\tvertexBuffer[ i + 0 ] = vertex.x;\n\t\t\t\tvertexBuffer[ i + 1 ] = vertex.y;\n\t\t\t\tvertexBuffer[ i + 2 ] = vertex.z;\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tvar vertex = new Vector3();\n\n\t\t\tfor ( var i = 0; i < vertexBuffer.length; i += 3 ) {\n\n\t\t\t\tvertex.x = vertexBuffer[ i + 0 ];\n\t\t\t\tvertex.y = vertexBuffer[ i + 1 ];\n\t\t\t\tvertex.z = vertexBuffer[ i + 2 ];\n\n\t\t\t\tvar u = azimuth( vertex ) / 2 / Math.PI + 0.5;\n\t\t\t\tvar v = inclination( vertex ) / Math.PI + 0.5;\n\t\t\t\tuvBuffer.push( u, 1 - v );\n\n\t\t\t}\n\n\t\t\tcorrectUVs();\n\n\t\t\tcorrectSeam();\n\n\t\t}\n\n\t\tfunction correctSeam() {\n\n\t\t\t// handle case when face straddles the seam, see #3269\n\n\t\t\tfor ( var i = 0; i < uvBuffer.length; i += 6 ) {\n\n\t\t\t\t// uv data of a single face\n\n\t\t\t\tvar x0 = uvBuffer[ i + 0 ];\n\t\t\t\tvar x1 = uvBuffer[ i + 2 ];\n\t\t\t\tvar x2 = uvBuffer[ i + 4 ];\n\n\t\t\t\tvar max = Math.max( x0, x1, x2 );\n\t\t\t\tvar min = Math.min( x0, x1, x2 );\n\n\t\t\t\t// 0.9 is somewhat arbitrary\n\n\t\t\t\tif ( max > 0.9 && min < 0.1 ) {\n\n\t\t\t\t\tif ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;\n\t\t\t\t\tif ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;\n\t\t\t\t\tif ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction pushVertex( vertex ) {\n\n\t\t\tvertexBuffer.push( vertex.x, vertex.y, vertex.z );\n\n\t\t}\n\n\t\tfunction getVertexByIndex( index, vertex ) {\n\n\t\t\tvar stride = index * 3;\n\n\t\t\tvertex.x = vertices[ stride + 0 ];\n\t\t\tvertex.y = vertices[ stride + 1 ];\n\t\t\tvertex.z = vertices[ stride + 2 ];\n\n\t\t}\n\n\t\tfunction correctUVs() {\n\n\t\t\tvar a = new Vector3();\n\t\t\tvar b = new Vector3();\n\t\t\tvar c = new Vector3();\n\n\t\t\tvar centroid = new Vector3();\n\n\t\t\tvar uvA = new Vector2();\n\t\t\tvar uvB = new Vector2();\n\t\t\tvar uvC = new Vector2();\n\n\t\t\tfor ( var i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {\n\n\t\t\t\ta.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );\n\t\t\t\tb.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );\n\t\t\t\tc.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );\n\n\t\t\t\tuvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );\n\t\t\t\tuvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );\n\t\t\t\tuvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );\n\n\t\t\t\tcentroid.copy( a ).add( b ).add( c ).divideScalar( 3 );\n\n\t\t\t\tvar azi = azimuth( centroid );\n\n\t\t\t\tcorrectUV( uvA, j + 0, a, azi );\n\t\t\t\tcorrectUV( uvB, j + 2, b, azi );\n\t\t\t\tcorrectUV( uvC, j + 4, c, azi );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction correctUV( uv, stride, vector, azimuth ) {\n\n\t\t\tif ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = uv.x - 1;\n\n\t\t\t}\n\n\t\t\tif ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {\n\n\t\t\t\tuvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Angle around the Y axis, counter-clockwise when looking from above.\n\n\t\tfunction azimuth( vector ) {\n\n\t\t\treturn Math.atan2( vector.z, - vector.x );\n\n\t\t}\n\n\n\t\t// Angle above the XZ plane.\n\n\t\tfunction inclination( vector ) {\n\n\t\t\treturn Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );\n\n\t\t}\n\n\t}\n\n\tPolyhedronBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tPolyhedronBufferGeometry.prototype.constructor = PolyhedronBufferGeometry;\n\n\t/**\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// TetrahedronGeometry\n\n\tfunction TetrahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'TetrahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TetrahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTetrahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tTetrahedronGeometry.prototype.constructor = TetrahedronGeometry;\n\n\t// TetrahedronBufferGeometry\n\n\tfunction TetrahedronBufferGeometry( radius, detail ) {\n\n\t\tvar vertices = [\n\t\t\t1, 1, 1, \t- 1, - 1, 1, \t- 1, 1, - 1, \t1, - 1, - 1\n\t\t];\n\n\t\tvar indices = [\n\t\t\t2, 1, 0, \t0, 3, 2,\t1, 3, 0,\t2, 3, 1\n\t\t];\n\n\t\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'TetrahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tTetrahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tTetrahedronBufferGeometry.prototype.constructor = TetrahedronBufferGeometry;\n\n\t/**\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// OctahedronGeometry\n\n\tfunction OctahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'OctahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new OctahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tOctahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tOctahedronGeometry.prototype.constructor = OctahedronGeometry;\n\n\t// OctahedronBufferGeometry\n\n\tfunction OctahedronBufferGeometry( radius, detail ) {\n\n\t\tvar vertices = [\n\t\t\t1, 0, 0, \t- 1, 0, 0,\t0, 1, 0,\n\t\t\t0, - 1, 0, \t0, 0, 1,\t0, 0, - 1\n\t\t];\n\n\t\tvar indices = [\n\t\t\t0, 2, 4,\t0, 4, 3,\t0, 3, 5,\n\t\t\t0, 5, 2,\t1, 2, 5,\t1, 5, 3,\n\t\t\t1, 3, 4,\t1, 4, 2\n\t\t];\n\n\t\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'OctahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tOctahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tOctahedronBufferGeometry.prototype.constructor = OctahedronBufferGeometry;\n\n\t/**\n\t * @author timothypratley / https://github.com/timothypratley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// IcosahedronGeometry\n\n\tfunction IcosahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'IcosahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new IcosahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tIcosahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tIcosahedronGeometry.prototype.constructor = IcosahedronGeometry;\n\n\t// IcosahedronBufferGeometry\n\n\tfunction IcosahedronBufferGeometry( radius, detail ) {\n\n\t\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\n\t\tvar vertices = [\n\t\t\t- 1, t, 0, \t1, t, 0, \t- 1, - t, 0, \t1, - t, 0,\n\t\t\t 0, - 1, t, \t0, 1, t,\t0, - 1, - t, \t0, 1, - t,\n\t\t\t t, 0, - 1, \tt, 0, 1, \t- t, 0, - 1, \t- t, 0, 1\n\t\t];\n\n\t\tvar indices = [\n\t\t\t 0, 11, 5, \t0, 5, 1, \t0, 1, 7, \t0, 7, 10, \t0, 10, 11,\n\t\t\t 1, 5, 9, \t5, 11, 4,\t11, 10, 2,\t10, 7, 6,\t7, 1, 8,\n\t\t\t 3, 9, 4, \t3, 4, 2,\t3, 2, 6,\t3, 6, 8,\t3, 8, 9,\n\t\t\t 4, 9, 5, \t2, 4, 11,\t6, 2, 10,\t8, 6, 7,\t9, 8, 1\n\t\t];\n\n\t\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'IcosahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tIcosahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tIcosahedronBufferGeometry.prototype.constructor = IcosahedronBufferGeometry;\n\n\t/**\n\t * @author Abe Pazos / https://hamoid.com\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// DodecahedronGeometry\n\n\tfunction DodecahedronGeometry( radius, detail ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'DodecahedronGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t\tthis.fromBufferGeometry( new DodecahedronBufferGeometry( radius, detail ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tDodecahedronGeometry.prototype = Object.create( Geometry.prototype );\n\tDodecahedronGeometry.prototype.constructor = DodecahedronGeometry;\n\n\t// DodecahedronBufferGeometry\n\n\tfunction DodecahedronBufferGeometry( radius, detail ) {\n\n\t\tvar t = ( 1 + Math.sqrt( 5 ) ) / 2;\n\t\tvar r = 1 / t;\n\n\t\tvar vertices = [\n\n\t\t\t// (±1, ±1, ±1)\n\t\t\t- 1, - 1, - 1,\t- 1, - 1, 1,\n\t\t\t- 1, 1, - 1, - 1, 1, 1,\n\t\t\t1, - 1, - 1, 1, - 1, 1,\n\t\t\t1, 1, - 1, 1, 1, 1,\n\n\t\t\t// (0, ±1/φ, ±φ)\n\t\t\t 0, - r, - t, 0, - r, t,\n\t\t\t 0, r, - t, 0, r, t,\n\n\t\t\t// (±1/φ, ±φ, 0)\n\t\t\t- r, - t, 0, - r, t, 0,\n\t\t\t r, - t, 0, r, t, 0,\n\n\t\t\t// (±φ, 0, ±1/φ)\n\t\t\t- t, 0, - r, t, 0, - r,\n\t\t\t- t, 0, r, t, 0, r\n\t\t];\n\n\t\tvar indices = [\n\t\t\t3, 11, 7, \t3, 7, 15, \t3, 15, 13,\n\t\t\t7, 19, 17, \t7, 17, 6, \t7, 6, 15,\n\t\t\t17, 4, 8, \t17, 8, 10, \t17, 10, 6,\n\t\t\t8, 0, 16, \t8, 16, 2, \t8, 2, 10,\n\t\t\t0, 12, 1, \t0, 1, 18, \t0, 18, 16,\n\t\t\t6, 10, 2, \t6, 2, 13, \t6, 13, 15,\n\t\t\t2, 16, 18, \t2, 18, 3, \t2, 3, 13,\n\t\t\t18, 1, 9, \t18, 9, 11, \t18, 11, 3,\n\t\t\t4, 14, 12, \t4, 12, 0, \t4, 0, 8,\n\t\t\t11, 9, 5, \t11, 5, 19, \t11, 19, 7,\n\t\t\t19, 5, 14, \t19, 14, 4, \t19, 4, 17,\n\t\t\t1, 12, 14, \t1, 14, 5, \t1, 5, 9\n\t\t];\n\n\t\tPolyhedronBufferGeometry.call( this, vertices, indices, radius, detail );\n\n\t\tthis.type = 'DodecahedronBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tdetail: detail\n\t\t};\n\n\t}\n\n\tDodecahedronBufferGeometry.prototype = Object.create( PolyhedronBufferGeometry.prototype );\n\tDodecahedronBufferGeometry.prototype.constructor = DodecahedronBufferGeometry;\n\n\t/**\n\t * @author oosmoxiecode / https://github.com/oosmoxiecode\n\t * @author WestLangley / https://github.com/WestLangley\n\t * @author zz85 / https://github.com/zz85\n\t * @author miningold / https://github.com/miningold\n\t * @author jonobr1 / https://github.com/jonobr1\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t */\n\n\t// TubeGeometry\n\n\tfunction TubeGeometry( path, tubularSegments, radius, radialSegments, closed, taper ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'TubeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\tif ( taper !== undefined ) console.warn( 'THREE.TubeGeometry: taper has been removed.' );\n\n\t\tvar bufferGeometry = new TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = bufferGeometry.tangents;\n\t\tthis.normals = bufferGeometry.normals;\n\t\tthis.binormals = bufferGeometry.binormals;\n\n\t\t// create geometry\n\n\t\tthis.fromBufferGeometry( bufferGeometry );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTubeGeometry.prototype = Object.create( Geometry.prototype );\n\tTubeGeometry.prototype.constructor = TubeGeometry;\n\n\t// TubeBufferGeometry\n\n\tfunction TubeBufferGeometry( path, tubularSegments, radius, radialSegments, closed ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'TubeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpath: path,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradius: radius,\n\t\t\tradialSegments: radialSegments,\n\t\t\tclosed: closed\n\t\t};\n\n\t\ttubularSegments = tubularSegments || 64;\n\t\tradius = radius || 1;\n\t\tradialSegments = radialSegments || 8;\n\t\tclosed = closed || false;\n\n\t\tvar frames = path.computeFrenetFrames( tubularSegments, closed );\n\n\t\t// expose internals\n\n\t\tthis.tangents = frames.tangents;\n\t\tthis.normals = frames.normals;\n\t\tthis.binormals = frames.binormals;\n\n\t\t// helper variables\n\n\t\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\t\tvar uv = new Vector2();\n\t\tvar P = new Vector3();\n\n\t\tvar i, j;\n\n\t\t// buffer\n\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\t\tvar indices = [];\n\n\t\t// create buffer data\n\n\t\tgenerateBufferData();\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// functions\n\n\t\tfunction generateBufferData() {\n\n\t\t\tfor ( i = 0; i < tubularSegments; i ++ ) {\n\n\t\t\t\tgenerateSegment( i );\n\n\t\t\t}\n\n\t\t\t// if the geometry is not closed, generate the last row of vertices and normals\n\t\t\t// at the regular position on the given path\n\t\t\t//\n\t\t\t// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)\n\n\t\t\tgenerateSegment( ( closed === false ) ? tubularSegments : 0 );\n\n\t\t\t// uvs are generated in a separate function.\n\t\t\t// this makes it easy compute correct values for closed geometries\n\n\t\t\tgenerateUVs();\n\n\t\t\t// finally create faces\n\n\t\t\tgenerateIndices();\n\n\t\t}\n\n\t\tfunction generateSegment( i ) {\n\n\t\t\t// we use getPointAt to sample evenly distributed points from the given path\n\n\t\t\tP = path.getPointAt( i / tubularSegments, P );\n\n\t\t\t// retrieve corresponding normal and binormal\n\n\t\t\tvar N = frames.normals[ i ];\n\t\t\tvar B = frames.binormals[ i ];\n\n\t\t\t// generate normals and vertices for the current segment\n\n\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\tvar sin = Math.sin( v );\n\t\t\t\tvar cos = - Math.cos( v );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.x = ( cos * N.x + sin * B.x );\n\t\t\t\tnormal.y = ( cos * N.y + sin * B.y );\n\t\t\t\tnormal.z = ( cos * N.z + sin * B.z );\n\t\t\t\tnormal.normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = P.x + radius * normal.x;\n\t\t\t\tvertex.y = P.y + radius * normal.y;\n\t\t\t\tvertex.z = P.z + radius * normal.z;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateIndices() {\n\n\t\t\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfunction generateUVs() {\n\n\t\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\t\t\tuv.x = i / tubularSegments;\n\t\t\t\t\tuv.y = j / radialSegments;\n\n\t\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tTubeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tTubeBufferGeometry.prototype.constructor = TubeBufferGeometry;\n\n\t/**\n\t * @author oosmoxiecode\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t * based on http://www.blackpawn.com/texts/pqtorus/\n\t */\n\n\t// TorusKnotGeometry\n\n\tfunction TorusKnotGeometry( radius, tube, tubularSegments, radialSegments, p, q, heightScale ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'TorusKnotGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\tif ( heightScale !== undefined ) console.warn( 'THREE.TorusKnotGeometry: heightScale has been deprecated. Use .scale( x, y, z ) instead.' );\n\n\t\tthis.fromBufferGeometry( new TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTorusKnotGeometry.prototype = Object.create( Geometry.prototype );\n\tTorusKnotGeometry.prototype.constructor = TorusKnotGeometry;\n\n\t// TorusKnotBufferGeometry\n\n\tfunction TorusKnotBufferGeometry( radius, tube, tubularSegments, radialSegments, p, q ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'TorusKnotBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tradialSegments: radialSegments,\n\t\t\tp: p,\n\t\t\tq: q\n\t\t};\n\n\t\tradius = radius || 1;\n\t\ttube = tube || 0.4;\n\t\ttubularSegments = Math.floor( tubularSegments ) || 64;\n\t\tradialSegments = Math.floor( radialSegments ) || 8;\n\t\tp = p || 2;\n\t\tq = q || 3;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar i, j;\n\n\t\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\tvar P1 = new Vector3();\n\t\tvar P2 = new Vector3();\n\n\t\tvar B = new Vector3();\n\t\tvar T = new Vector3();\n\t\tvar N = new Vector3();\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( i = 0; i <= tubularSegments; ++ i ) {\n\n\t\t\t// the radian \"u\" is used to calculate the position on the torus curve of the current tubular segement\n\n\t\t\tvar u = i / tubularSegments * p * Math.PI * 2;\n\n\t\t\t// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.\n\t\t\t// these points are used to create a special \"coordinate space\", which is necessary to calculate the correct vertex positions\n\n\t\t\tcalculatePositionOnCurve( u, p, q, radius, P1 );\n\t\t\tcalculatePositionOnCurve( u + 0.01, p, q, radius, P2 );\n\n\t\t\t// calculate orthonormal basis\n\n\t\t\tT.subVectors( P2, P1 );\n\t\t\tN.addVectors( P2, P1 );\n\t\t\tB.crossVectors( T, N );\n\t\t\tN.crossVectors( B, T );\n\n\t\t\t// normalize B, N. T can be ignored, we don't use it\n\n\t\t\tB.normalize();\n\t\t\tN.normalize();\n\n\t\t\tfor ( j = 0; j <= radialSegments; ++ j ) {\n\n\t\t\t\t// now calculate the vertices. they are nothing more than an extrusion of the torus curve.\n\t\t\t\t// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.\n\n\t\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\t\t\t\tvar cx = - tube * Math.cos( v );\n\t\t\t\tvar cy = tube * Math.sin( v );\n\n\t\t\t\t// now calculate the final vertex position.\n\t\t\t\t// first we orient the extrusion with our basis vectos, then we add it to the current position on the curve\n\n\t\t\t\tvertex.x = P1.x + ( cx * N.x + cy * B.x );\n\t\t\t\tvertex.y = P1.y + ( cx * N.y + cy * B.y );\n\t\t\t\tvertex.z = P1.z + ( cx * N.z + cy * B.z );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)\n\n\t\t\t\tnormal.subVectors( vertex, P1 ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( j = 1; j <= tubularSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= radialSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tvar a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );\n\t\t\t\tvar b = ( radialSegments + 1 ) * j + ( i - 1 );\n\t\t\t\tvar c = ( radialSegments + 1 ) * j + i;\n\t\t\t\tvar d = ( radialSegments + 1 ) * ( j - 1 ) + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// this function calculates the current position on the torus curve\n\n\t\tfunction calculatePositionOnCurve( u, p, q, radius, position ) {\n\n\t\t\tvar cu = Math.cos( u );\n\t\t\tvar su = Math.sin( u );\n\t\t\tvar quOverP = q / p * u;\n\t\t\tvar cs = Math.cos( quOverP );\n\n\t\t\tposition.x = radius * ( 2 + cs ) * 0.5 * cu;\n\t\t\tposition.y = radius * ( 2 + cs ) * su * 0.5;\n\t\t\tposition.z = radius * Math.sin( quOverP ) * 0.5;\n\n\t\t}\n\n\t}\n\n\tTorusKnotBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tTorusKnotBufferGeometry.prototype.constructor = TorusKnotBufferGeometry;\n\n\t/**\n\t * @author oosmoxiecode\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// TorusGeometry\n\n\tfunction TorusGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'TorusGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTorusGeometry.prototype = Object.create( Geometry.prototype );\n\tTorusGeometry.prototype.constructor = TorusGeometry;\n\n\t// TorusBufferGeometry\n\n\tfunction TorusBufferGeometry( radius, tube, radialSegments, tubularSegments, arc ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'TorusBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\ttube: tube,\n\t\t\tradialSegments: radialSegments,\n\t\t\ttubularSegments: tubularSegments,\n\t\t\tarc: arc\n\t\t};\n\n\t\tradius = radius || 1;\n\t\ttube = tube || 0.4;\n\t\tradialSegments = Math.floor( radialSegments ) || 8;\n\t\ttubularSegments = Math.floor( tubularSegments ) || 6;\n\t\tarc = arc || Math.PI * 2;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar center = new Vector3();\n\t\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\tvar j, i;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( j = 0; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( i = 0; i <= tubularSegments; i ++ ) {\n\n\t\t\t\tvar u = i / tubularSegments * arc;\n\t\t\t\tvar v = j / radialSegments * Math.PI * 2;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );\n\t\t\t\tvertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );\n\t\t\t\tvertex.z = tube * Math.sin( v );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tcenter.x = radius * Math.cos( u );\n\t\t\t\tcenter.y = radius * Math.sin( u );\n\t\t\t\tnormal.subVectors( vertex, center ).normalize();\n\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( i / tubularSegments );\n\t\t\t\tuvs.push( j / radialSegments );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate indices\n\n\t\tfor ( j = 1; j <= radialSegments; j ++ ) {\n\n\t\t\tfor ( i = 1; i <= tubularSegments; i ++ ) {\n\n\t\t\t\t// indices\n\n\t\t\t\tvar a = ( tubularSegments + 1 ) * j + i - 1;\n\t\t\t\tvar b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;\n\t\t\t\tvar c = ( tubularSegments + 1 ) * ( j - 1 ) + i;\n\t\t\t\tvar d = ( tubularSegments + 1 ) * j + i;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tTorusBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tTorusBufferGeometry.prototype.constructor = TorusBufferGeometry;\n\n\t/**\n\t * @author Mugen87 / https://github.com/Mugen87\n\t * Port from https://github.com/mapbox/earcut (v2.1.2)\n\t */\n\n\tvar Earcut = {\n\n\t\ttriangulate: function ( data, holeIndices, dim ) {\n\n\t\t\tdim = dim || 2;\n\n\t\t\tvar hasHoles = holeIndices && holeIndices.length,\n\t\t\t\touterLen = hasHoles ? holeIndices[ 0 ] * dim : data.length,\n\t\t\t\touterNode = linkedList( data, 0, outerLen, dim, true ),\n\t\t\t\ttriangles = [];\n\n\t\t\tif ( ! outerNode ) return triangles;\n\n\t\t\tvar minX, minY, maxX, maxY, x, y, invSize;\n\n\t\t\tif ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );\n\n\t\t\t// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox\n\n\t\t\tif ( data.length > 80 * dim ) {\n\n\t\t\t\tminX = maxX = data[ 0 ];\n\t\t\t\tminY = maxY = data[ 1 ];\n\n\t\t\t\tfor ( var i = dim; i < outerLen; i += dim ) {\n\n\t\t\t\t\tx = data[ i ];\n\t\t\t\t\ty = data[ i + 1 ];\n\t\t\t\t\tif ( x < minX ) minX = x;\n\t\t\t\t\tif ( y < minY ) minY = y;\n\t\t\t\t\tif ( x > maxX ) maxX = x;\n\t\t\t\t\tif ( y > maxY ) maxY = y;\n\n\t\t\t\t}\n\n\t\t\t\t// minX, minY and invSize are later used to transform coords into integers for z-order calculation\n\n\t\t\t\tinvSize = Math.max( maxX - minX, maxY - minY );\n\t\t\t\tinvSize = invSize !== 0 ? 1 / invSize : 0;\n\n\t\t\t}\n\n\t\t\tearcutLinked( outerNode, triangles, dim, minX, minY, invSize );\n\n\t\t\treturn triangles;\n\n\t\t}\n\n\t};\n\n\t// create a circular doubly linked list from polygon points in the specified winding order\n\n\tfunction linkedList( data, start, end, dim, clockwise ) {\n\n\t\tvar i, last;\n\n\t\tif ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {\n\n\t\t\tfor ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t\t} else {\n\n\t\t\tfor ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );\n\n\t\t}\n\n\t\tif ( last && equals( last, last.next ) ) {\n\n\t\t\tremoveNode( last );\n\t\t\tlast = last.next;\n\n\t\t}\n\n\t\treturn last;\n\n\t}\n\n\t// eliminate colinear or duplicate points\n\n\tfunction filterPoints( start, end ) {\n\n\t\tif ( ! start ) return start;\n\t\tif ( ! end ) end = start;\n\n\t\tvar p = start, again;\n\n\t\tdo {\n\n\t\t\tagain = false;\n\n\t\t\tif ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {\n\n\t\t\t\tremoveNode( p );\n\t\t\t\tp = end = p.prev;\n\t\t\t\tif ( p === p.next ) break;\n\t\t\t\tagain = true;\n\n\t\t\t} else {\n\n\t\t\t\tp = p.next;\n\n\t\t\t}\n\n\t\t} while ( again || p !== end );\n\n\t\treturn end;\n\n\t}\n\n\t// main ear slicing loop which triangulates a polygon (given as a linked list)\n\n\tfunction earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {\n\n\t\tif ( ! ear ) return;\n\n\t\t// interlink polygon nodes in z-order\n\n\t\tif ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );\n\n\t\tvar stop = ear, prev, next;\n\n\t\t// iterate through ears, slicing them one by one\n\n\t\twhile ( ear.prev !== ear.next ) {\n\n\t\t\tprev = ear.prev;\n\t\t\tnext = ear.next;\n\n\t\t\tif ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {\n\n\t\t\t\t// cut off the triangle\n\t\t\t\ttriangles.push( prev.i / dim );\n\t\t\t\ttriangles.push( ear.i / dim );\n\t\t\t\ttriangles.push( next.i / dim );\n\n\t\t\t\tremoveNode( ear );\n\n\t\t\t\t// skipping the next vertice leads to less sliver triangles\n\t\t\t\tear = next.next;\n\t\t\t\tstop = next.next;\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\tear = next;\n\n\t\t\t// if we looped through the whole remaining polygon and can't find any more ears\n\n\t\t\tif ( ear === stop ) {\n\n\t\t\t\t// try filtering points and slicing again\n\n\t\t\t\tif ( ! pass ) {\n\n\t\t\t\t\tearcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );\n\n\t\t\t\t\t// if this didn't work, try curing all small self-intersections locally\n\n\t\t\t\t} else if ( pass === 1 ) {\n\n\t\t\t\t\tear = cureLocalIntersections( ear, triangles, dim );\n\t\t\t\t\tearcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );\n\n\t\t\t\t// as a last resort, try splitting the remaining polygon into two\n\n\t\t\t\t} else if ( pass === 2 ) {\n\n\t\t\t\t\tsplitEarcut( ear, triangles, dim, minX, minY, invSize );\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t// check whether a polygon node forms a valid ear with adjacent nodes\n\n\tfunction isEar( ear ) {\n\n\t\tvar a = ear.prev,\n\t\t\tb = ear,\n\t\t\tc = ear.next;\n\n\t\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t\t// now make sure we don't have other points inside the potential ear\n\t\tvar p = ear.next.next;\n\n\t\twhile ( p !== ear.prev ) {\n\n\t\t\tif ( pointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\tfunction isEarHashed( ear, minX, minY, invSize ) {\n\n\t\tvar a = ear.prev,\n\t\t\tb = ear,\n\t\t\tc = ear.next;\n\n\t\tif ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear\n\n\t\t// triangle bbox; min & max are calculated like this for speed\n\n\t\tvar minTX = a.x < b.x ? ( a.x < c.x ? a.x : c.x ) : ( b.x < c.x ? b.x : c.x ),\n\t\t\tminTY = a.y < b.y ? ( a.y < c.y ? a.y : c.y ) : ( b.y < c.y ? b.y : c.y ),\n\t\t\tmaxTX = a.x > b.x ? ( a.x > c.x ? a.x : c.x ) : ( b.x > c.x ? b.x : c.x ),\n\t\t\tmaxTY = a.y > b.y ? ( a.y > c.y ? a.y : c.y ) : ( b.y > c.y ? b.y : c.y );\n\n\t\t// z-order range for the current triangle bbox;\n\n\t\tvar minZ = zOrder( minTX, minTY, minX, minY, invSize ),\n\t\t\tmaxZ = zOrder( maxTX, maxTY, minX, minY, invSize );\n\n\t\t// first look for points inside the triangle in increasing z-order\n\n\t\tvar p = ear.nextZ;\n\n\t\twhile ( p && p.z <= maxZ ) {\n\n\t\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\t\t\tp = p.nextZ;\n\n\t\t}\n\n\t\t// then look for points in decreasing z-order\n\n\t\tp = ear.prevZ;\n\n\t\twhile ( p && p.z >= minZ ) {\n\n\t\t\tif ( p !== ear.prev && p !== ear.next &&\n\t\t\t\t\tpointInTriangle( a.x, a.y, b.x, b.y, c.x, c.y, p.x, p.y ) &&\n\t\t\t\t\tarea( p.prev, p, p.next ) >= 0 ) return false;\n\n\t\t\tp = p.prevZ;\n\n\t\t}\n\n\t\treturn true;\n\n\t}\n\n\t// go through all polygon nodes and cure small local self-intersections\n\n\tfunction cureLocalIntersections( start, triangles, dim ) {\n\n\t\tvar p = start;\n\n\t\tdo {\n\n\t\t\tvar a = p.prev, b = p.next.next;\n\n\t\t\tif ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {\n\n\t\t\t\ttriangles.push( a.i / dim );\n\t\t\t\ttriangles.push( p.i / dim );\n\t\t\t\ttriangles.push( b.i / dim );\n\n\t\t\t\t// remove two nodes involved\n\n\t\t\t\tremoveNode( p );\n\t\t\t\tremoveNode( p.next );\n\n\t\t\t\tp = start = b;\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t} while ( p !== start );\n\n\t\treturn p;\n\n\t}\n\n\t// try splitting polygon into two and triangulate them independently\n\n\tfunction splitEarcut( start, triangles, dim, minX, minY, invSize ) {\n\n\t\t// look for a valid diagonal that divides the polygon into two\n\n\t\tvar a = start;\n\n\t\tdo {\n\n\t\t\tvar b = a.next.next;\n\n\t\t\twhile ( b !== a.prev ) {\n\n\t\t\t\tif ( a.i !== b.i && isValidDiagonal( a, b ) ) {\n\n\t\t\t\t\t// split the polygon in two by the diagonal\n\n\t\t\t\t\tvar c = splitPolygon( a, b );\n\n\t\t\t\t\t// filter colinear points around the cuts\n\n\t\t\t\t\ta = filterPoints( a, a.next );\n\t\t\t\t\tc = filterPoints( c, c.next );\n\n\t\t\t\t\t// run earcut on each half\n\n\t\t\t\t\tearcutLinked( a, triangles, dim, minX, minY, invSize );\n\t\t\t\t\tearcutLinked( c, triangles, dim, minX, minY, invSize );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tb = b.next;\n\n\t\t\t}\n\n\t\t\ta = a.next;\n\n\t\t} while ( a !== start );\n\n\t}\n\n\t// link every hole into the outer loop, producing a single-ring polygon without holes\n\n\tfunction eliminateHoles( data, holeIndices, outerNode, dim ) {\n\n\t\tvar queue = [], i, len, start, end, list;\n\n\t\tfor ( i = 0, len = holeIndices.length; i < len; i ++ ) {\n\n\t\t\tstart = holeIndices[ i ] * dim;\n\t\t\tend = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;\n\t\t\tlist = linkedList( data, start, end, dim, false );\n\t\t\tif ( list === list.next ) list.steiner = true;\n\t\t\tqueue.push( getLeftmost( list ) );\n\n\t\t}\n\n\t\tqueue.sort( compareX );\n\n\t\t// process holes from left to right\n\n\t\tfor ( i = 0; i < queue.length; i ++ ) {\n\n\t\t\teliminateHole( queue[ i ], outerNode );\n\t\t\touterNode = filterPoints( outerNode, outerNode.next );\n\n\t\t}\n\n\t\treturn outerNode;\n\n\t}\n\n\tfunction compareX( a, b ) {\n\n\t\treturn a.x - b.x;\n\n\t}\n\n\t// find a bridge between vertices that connects hole with an outer ring and and link it\n\n\tfunction eliminateHole( hole, outerNode ) {\n\n\t\touterNode = findHoleBridge( hole, outerNode );\n\n\t\tif ( outerNode ) {\n\n\t\t\tvar b = splitPolygon( outerNode, hole );\n\n\t\t\tfilterPoints( b, b.next );\n\n\t\t}\n\n\t}\n\n\t// David Eberly's algorithm for finding a bridge between hole and outer polygon\n\n\tfunction findHoleBridge( hole, outerNode ) {\n\n\t\tvar p = outerNode,\n\t\t\thx = hole.x,\n\t\t\thy = hole.y,\n\t\t\tqx = - Infinity,\n\t\t\tm;\n\n\t\t// find a segment intersected by a ray from the hole's leftmost point to the left;\n\t\t// segment's endpoint with lesser x will be potential connection point\n\n\t\tdo {\n\n\t\t\tif ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {\n\n\t\t\t\tvar x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );\n\n\t\t\t\tif ( x <= hx && x > qx ) {\n\n\t\t\t\t\tqx = x;\n\n\t\t\t\t\tif ( x === hx ) {\n\n\t\t\t\t\t\tif ( hy === p.y ) return p;\n\t\t\t\t\t\tif ( hy === p.next.y ) return p.next;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tm = p.x < p.next.x ? p : p.next;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t} while ( p !== outerNode );\n\n\t\tif ( ! m ) return null;\n\n\t\tif ( hx === qx ) return m.prev; // hole touches outer segment; pick lower endpoint\n\n\t\t// look for points inside the triangle of hole point, segment intersection and endpoint;\n\t\t// if there are no points found, we have a valid connection;\n\t\t// otherwise choose the point of the minimum angle with the ray as connection point\n\n\t\tvar stop = m,\n\t\t\tmx = m.x,\n\t\t\tmy = m.y,\n\t\t\ttanMin = Infinity,\n\t\t\ttan;\n\n\t\tp = m.next;\n\n\t\twhile ( p !== stop ) {\n\n\t\t\tif ( hx >= p.x && p.x >= mx && hx !== p.x &&\n\t\t\t\t\t\t\tpointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {\n\n\t\t\t\ttan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential\n\n\t\t\t\tif ( ( tan < tanMin || ( tan === tanMin && p.x > m.x ) ) && locallyInside( p, hole ) ) {\n\n\t\t\t\t\tm = p;\n\t\t\t\t\ttanMin = tan;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t}\n\n\t\treturn m;\n\n\t}\n\n\t// interlink polygon nodes in z-order\n\n\tfunction indexCurve( start, minX, minY, invSize ) {\n\n\t\tvar p = start;\n\n\t\tdo {\n\n\t\t\tif ( p.z === null ) p.z = zOrder( p.x, p.y, minX, minY, invSize );\n\t\t\tp.prevZ = p.prev;\n\t\t\tp.nextZ = p.next;\n\t\t\tp = p.next;\n\n\t\t} while ( p !== start );\n\n\t\tp.prevZ.nextZ = null;\n\t\tp.prevZ = null;\n\n\t\tsortLinked( p );\n\n\t}\n\n\t// Simon Tatham's linked list merge sort algorithm\n\t// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html\n\n\tfunction sortLinked( list ) {\n\n\t\tvar i, p, q, e, tail, numMerges, pSize, qSize, inSize = 1;\n\n\t\tdo {\n\n\t\t\tp = list;\n\t\t\tlist = null;\n\t\t\ttail = null;\n\t\t\tnumMerges = 0;\n\n\t\t\twhile ( p ) {\n\n\t\t\t\tnumMerges ++;\n\t\t\t\tq = p;\n\t\t\t\tpSize = 0;\n\n\t\t\t\tfor ( i = 0; i < inSize; i ++ ) {\n\n\t\t\t\t\tpSize ++;\n\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\tif ( ! q ) break;\n\n\t\t\t\t}\n\n\t\t\t\tqSize = inSize;\n\n\t\t\t\twhile ( pSize > 0 || ( qSize > 0 && q ) ) {\n\n\t\t\t\t\tif ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {\n\n\t\t\t\t\t\te = p;\n\t\t\t\t\t\tp = p.nextZ;\n\t\t\t\t\t\tpSize --;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\te = q;\n\t\t\t\t\t\tq = q.nextZ;\n\t\t\t\t\t\tqSize --;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( tail ) tail.nextZ = e;\n\t\t\t\t\telse list = e;\n\n\t\t\t\t\te.prevZ = tail;\n\t\t\t\t\ttail = e;\n\n\t\t\t\t}\n\n\t\t\t\tp = q;\n\n\t\t\t}\n\n\t\t\ttail.nextZ = null;\n\t\t\tinSize *= 2;\n\n\t\t} while ( numMerges > 1 );\n\n\t\treturn list;\n\n\t}\n\n\t// z-order of a point given coords and inverse of the longer side of data bbox\n\n\tfunction zOrder( x, y, minX, minY, invSize ) {\n\n\t\t// coords are transformed into non-negative 15-bit integer range\n\n\t\tx = 32767 * ( x - minX ) * invSize;\n\t\ty = 32767 * ( y - minY ) * invSize;\n\n\t\tx = ( x | ( x << 8 ) ) & 0x00FF00FF;\n\t\tx = ( x | ( x << 4 ) ) & 0x0F0F0F0F;\n\t\tx = ( x | ( x << 2 ) ) & 0x33333333;\n\t\tx = ( x | ( x << 1 ) ) & 0x55555555;\n\n\t\ty = ( y | ( y << 8 ) ) & 0x00FF00FF;\n\t\ty = ( y | ( y << 4 ) ) & 0x0F0F0F0F;\n\t\ty = ( y | ( y << 2 ) ) & 0x33333333;\n\t\ty = ( y | ( y << 1 ) ) & 0x55555555;\n\n\t\treturn x | ( y << 1 );\n\n\t}\n\n\t// find the leftmost node of a polygon ring\n\n\tfunction getLeftmost( start ) {\n\n\t\tvar p = start, leftmost = start;\n\n\t\tdo {\n\n\t\t\tif ( p.x < leftmost.x ) leftmost = p;\n\t\t\tp = p.next;\n\n\t\t} while ( p !== start );\n\n\t\treturn leftmost;\n\n\t}\n\n\t// check if a point lies within a convex triangle\n\n\tfunction pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {\n\n\t\treturn ( cx - px ) * ( ay - py ) - ( ax - px ) * ( cy - py ) >= 0 &&\n\t\t ( ax - px ) * ( by - py ) - ( bx - px ) * ( ay - py ) >= 0 &&\n\t\t ( bx - px ) * ( cy - py ) - ( cx - px ) * ( by - py ) >= 0;\n\n\t}\n\n\t// check if a diagonal between two polygon nodes is valid (lies in polygon interior)\n\n\tfunction isValidDiagonal( a, b ) {\n\n\t\treturn a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) &&\n\t\t\tlocallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b );\n\n\t}\n\n\t// signed area of a triangle\n\n\tfunction area( p, q, r ) {\n\n\t\treturn ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );\n\n\t}\n\n\t// check if two points are equal\n\n\tfunction equals( p1, p2 ) {\n\n\t\treturn p1.x === p2.x && p1.y === p2.y;\n\n\t}\n\n\t// check if two segments intersect\n\n\tfunction intersects( p1, q1, p2, q2 ) {\n\n\t\tif ( ( equals( p1, q1 ) && equals( p2, q2 ) ) ||\n\t\t\t\t( equals( p1, q2 ) && equals( p2, q1 ) ) ) return true;\n\n\t\treturn area( p1, q1, p2 ) > 0 !== area( p1, q1, q2 ) > 0 &&\n\t\t\t\t\t area( p2, q2, p1 ) > 0 !== area( p2, q2, q1 ) > 0;\n\n\t}\n\n\t// check if a polygon diagonal intersects any polygon segments\n\n\tfunction intersectsPolygon( a, b ) {\n\n\t\tvar p = a;\n\n\t\tdo {\n\n\t\t\tif ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&\n\t\t\t\t\t\t\tintersects( p, p.next, a, b ) ) {\n\n\t\t\t\treturn true;\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t} while ( p !== a );\n\n\t\treturn false;\n\n\t}\n\n\t// check if a polygon diagonal is locally inside the polygon\n\n\tfunction locallyInside( a, b ) {\n\n\t\treturn area( a.prev, a, a.next ) < 0 ?\n\t\t\tarea( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :\n\t\t\tarea( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;\n\n\t}\n\n\t// check if the middle point of a polygon diagonal is inside the polygon\n\n\tfunction middleInside( a, b ) {\n\n\t\tvar p = a,\n\t\t\tinside = false,\n\t\t\tpx = ( a.x + b.x ) / 2,\n\t\t\tpy = ( a.y + b.y ) / 2;\n\n\t\tdo {\n\n\t\t\tif ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&\n\t\t\t\t\t\t\t( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) ) {\n\n\t\t\t\tinside = ! inside;\n\n\t\t\t}\n\n\t\t\tp = p.next;\n\n\t\t} while ( p !== a );\n\n\t\treturn inside;\n\n\t}\n\n\t// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;\n\t// if one belongs to the outer ring and another to a hole, it merges it into a single ring\n\n\tfunction splitPolygon( a, b ) {\n\n\t\tvar a2 = new Node( a.i, a.x, a.y ),\n\t\t\tb2 = new Node( b.i, b.x, b.y ),\n\t\t\tan = a.next,\n\t\t\tbp = b.prev;\n\n\t\ta.next = b;\n\t\tb.prev = a;\n\n\t\ta2.next = an;\n\t\tan.prev = a2;\n\n\t\tb2.next = a2;\n\t\ta2.prev = b2;\n\n\t\tbp.next = b2;\n\t\tb2.prev = bp;\n\n\t\treturn b2;\n\n\t}\n\n\t// create a node and optionally link it with previous one (in a circular doubly linked list)\n\n\tfunction insertNode( i, x, y, last ) {\n\n\t\tvar p = new Node( i, x, y );\n\n\t\tif ( ! last ) {\n\n\t\t\tp.prev = p;\n\t\t\tp.next = p;\n\n\t\t} else {\n\n\t\t\tp.next = last.next;\n\t\t\tp.prev = last;\n\t\t\tlast.next.prev = p;\n\t\t\tlast.next = p;\n\n\t\t}\n\n\t\treturn p;\n\n\t}\n\n\tfunction removeNode( p ) {\n\n\t\tp.next.prev = p.prev;\n\t\tp.prev.next = p.next;\n\n\t\tif ( p.prevZ ) p.prevZ.nextZ = p.nextZ;\n\t\tif ( p.nextZ ) p.nextZ.prevZ = p.prevZ;\n\n\t}\n\n\tfunction Node( i, x, y ) {\n\n\t\t// vertice index in coordinates array\n\t\tthis.i = i;\n\n\t\t// vertex coordinates\n\t\tthis.x = x;\n\t\tthis.y = y;\n\n\t\t// previous and next vertice nodes in a polygon ring\n\t\tthis.prev = null;\n\t\tthis.next = null;\n\n\t\t// z-order curve value\n\t\tthis.z = null;\n\n\t\t// previous and next nodes in z-order\n\t\tthis.prevZ = null;\n\t\tthis.nextZ = null;\n\n\t\t// indicates whether this is a steiner point\n\t\tthis.steiner = false;\n\n\t}\n\n\tfunction signedArea( data, start, end, dim ) {\n\n\t\tvar sum = 0;\n\n\t\tfor ( var i = start, j = end - dim; i < end; i += dim ) {\n\n\t\t\tsum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );\n\t\t\tj = i;\n\n\t\t}\n\n\t\treturn sum;\n\n\t}\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t */\n\n\tvar ShapeUtils = {\n\n\t\t// calculate area of the contour polygon\n\n\t\tarea: function ( contour ) {\n\n\t\t\tvar n = contour.length;\n\t\t\tvar a = 0.0;\n\n\t\t\tfor ( var p = n - 1, q = 0; q < n; p = q ++ ) {\n\n\t\t\t\ta += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;\n\n\t\t\t}\n\n\t\t\treturn a * 0.5;\n\n\t\t},\n\n\t\tisClockWise: function ( pts ) {\n\n\t\t\treturn ShapeUtils.area( pts ) < 0;\n\n\t\t},\n\n\t\ttriangulateShape: function ( contour, holes ) {\n\n\t\t\tvar vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]\n\t\t\tvar holeIndices = []; // array of hole indices\n\t\t\tvar faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]\n\n\t\t\tremoveDupEndPts( contour );\n\t\t\taddContour( vertices, contour );\n\n\t\t\t//\n\n\t\t\tvar holeIndex = contour.length;\n\n\t\t\tholes.forEach( removeDupEndPts );\n\n\t\t\tfor ( var i = 0; i < holes.length; i ++ ) {\n\n\t\t\t\tholeIndices.push( holeIndex );\n\t\t\t\tholeIndex += holes[ i ].length;\n\t\t\t\taddContour( vertices, holes[ i ] );\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar triangles = Earcut.triangulate( vertices, holeIndices );\n\n\t\t\t//\n\n\t\t\tfor ( var i = 0; i < triangles.length; i += 3 ) {\n\n\t\t\t\tfaces.push( triangles.slice( i, i + 3 ) );\n\n\t\t\t}\n\n\t\t\treturn faces;\n\n\t\t}\n\n\t};\n\n\tfunction removeDupEndPts( points ) {\n\n\t\tvar l = points.length;\n\n\t\tif ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\tpoints.pop();\n\n\t\t}\n\n\t}\n\n\tfunction addContour( vertices, contour ) {\n\n\t\tfor ( var i = 0; i < contour.length; i ++ ) {\n\n\t\t\tvertices.push( contour[ i ].x );\n\t\t\tvertices.push( contour[ i ].y );\n\n\t\t}\n\n\t}\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t *\n\t * Creates extruded geometry from a path shape.\n\t *\n\t * parameters = {\n\t *\n\t * curveSegments: , // number of points on the curves\n\t * steps: , // number of points for z-side extrusions / used for subdividing segments of extrude spline too\n\t * depth: , // Depth to extrude the shape\n\t *\n\t * bevelEnabled: , // turn on bevel\n\t * bevelThickness: , // how deep into the original shape bevel goes\n\t * bevelSize: , // how far from shape outline is bevel\n\t * bevelSegments: , // number of bevel layers\n\t *\n\t * extrudePath: // curve to extrude shape along\n\t *\n\t * UVGenerator: // object that provides UV generator functions\n\t *\n\t * }\n\t */\n\n\t// ExtrudeGeometry\n\n\tfunction ExtrudeGeometry( shapes, options ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'ExtrudeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ExtrudeBufferGeometry( shapes, options ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tExtrudeGeometry.prototype = Object.create( Geometry.prototype );\n\tExtrudeGeometry.prototype.constructor = ExtrudeGeometry;\n\n\tExtrudeGeometry.prototype.toJSON = function () {\n\n\t\tvar data = Geometry.prototype.toJSON.call( this );\n\n\t\tvar shapes = this.parameters.shapes;\n\t\tvar options = this.parameters.options;\n\n\t\treturn toJSON( shapes, options, data );\n\n\t};\n\n\t// ExtrudeBufferGeometry\n\n\tfunction ExtrudeBufferGeometry( shapes, options ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'ExtrudeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\toptions: options\n\t\t};\n\n\t\tshapes = Array.isArray( shapes ) ? shapes : [ shapes ];\n\n\t\tvar scope = this;\n\n\t\tvar verticesArray = [];\n\t\tvar uvArray = [];\n\n\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\tvar shape = shapes[ i ];\n\t\t\taddShape( shape );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );\n\n\t\tthis.computeVertexNormals();\n\n\t\t// functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tvar placeholder = [];\n\n\t\t\t// options\n\n\t\t\tvar curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;\n\t\t\tvar steps = options.steps !== undefined ? options.steps : 1;\n\t\t\tvar depth = options.depth !== undefined ? options.depth : 100;\n\n\t\t\tvar bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;\n\t\t\tvar bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 6;\n\t\t\tvar bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 2;\n\t\t\tvar bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;\n\n\t\t\tvar extrudePath = options.extrudePath;\n\n\t\t\tvar uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;\n\n\t\t\t// deprecated options\n\n\t\t\tif ( options.amount !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.ExtrudeBufferGeometry: amount has been renamed to depth.' );\n\t\t\t\tdepth = options.amount;\n\n\t\t\t}\n\n\t\t\t//\n\n\t\t\tvar extrudePts, extrudeByPath = false;\n\t\t\tvar splineTube, binormal, normal, position2;\n\n\t\t\tif ( extrudePath ) {\n\n\t\t\t\textrudePts = extrudePath.getSpacedPoints( steps );\n\n\t\t\t\textrudeByPath = true;\n\t\t\t\tbevelEnabled = false; // bevels not supported for path extrusion\n\n\t\t\t\t// SETUP TNB variables\n\n\t\t\t\t// TODO1 - have a .isClosed in spline?\n\n\t\t\t\tsplineTube = extrudePath.computeFrenetFrames( steps, false );\n\n\t\t\t\t// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);\n\n\t\t\t\tbinormal = new Vector3();\n\t\t\t\tnormal = new Vector3();\n\t\t\t\tposition2 = new Vector3();\n\n\t\t\t}\n\n\t\t\t// Safeguards if bevels are not enabled\n\n\t\t\tif ( ! bevelEnabled ) {\n\n\t\t\t\tbevelSegments = 0;\n\t\t\t\tbevelThickness = 0;\n\t\t\t\tbevelSize = 0;\n\n\t\t\t}\n\n\t\t\t// Variables initialization\n\n\t\t\tvar ahole, h, hl; // looping of holes\n\n\t\t\tvar shapePoints = shape.extractPoints( curveSegments );\n\n\t\t\tvar vertices = shapePoints.shape;\n\t\t\tvar holes = shapePoints.holes;\n\n\t\t\tvar reverse = ! ShapeUtils.isClockWise( vertices );\n\n\t\t\tif ( reverse ) {\n\n\t\t\t\tvertices = vertices.reverse();\n\n\t\t\t\t// Maybe we should also check if holes are in the opposite direction, just to be safe ...\n\n\t\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tahole = holes[ h ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( ahole ) ) {\n\n\t\t\t\t\t\tholes[ h ] = ahole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tvar faces = ShapeUtils.triangulateShape( vertices, holes );\n\n\t\t\t/* Vertices */\n\n\t\t\tvar contour = vertices; // vertices has all points but contour has only points of circumference\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\n\t\t\t\tvertices = vertices.concat( ahole );\n\n\t\t\t}\n\n\n\t\t\tfunction scalePt2( pt, vec, size ) {\n\n\t\t\t\tif ( ! vec ) console.error( \"THREE.ExtrudeGeometry: vec does not exist\" );\n\n\t\t\t\treturn vec.clone().multiplyScalar( size ).add( pt );\n\n\t\t\t}\n\n\t\t\tvar b, bs, t, z,\n\t\t\t\tvert, vlen = vertices.length,\n\t\t\t\tface, flen = faces.length;\n\n\n\t\t\t// Find directions for point movement\n\n\n\t\t\tfunction getBevelVec( inPt, inPrev, inNext ) {\n\n\t\t\t\t// computes for inPt the corresponding point inPt' on a new contour\n\t\t\t\t// shifted by 1 unit (length of normalized vector) to the left\n\t\t\t\t// if we walk along contour clockwise, this new contour is outside the old one\n\t\t\t\t//\n\t\t\t\t// inPt' is the intersection of the two lines parallel to the two\n\t\t\t\t// adjacent edges of inPt at a distance of 1 unit on the left side.\n\n\t\t\t\tvar v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt\n\n\t\t\t\t// good reading for geometry algorithms (here: line-line intersection)\n\t\t\t\t// http://geomalgorithms.com/a05-_intersect-1.html\n\n\t\t\t\tvar v_prev_x = inPt.x - inPrev.x,\n\t\t\t\t\tv_prev_y = inPt.y - inPrev.y;\n\t\t\t\tvar v_next_x = inNext.x - inPt.x,\n\t\t\t\t\tv_next_y = inNext.y - inPt.y;\n\n\t\t\t\tvar v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );\n\n\t\t\t\t// check for collinear edges\n\t\t\t\tvar collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\tif ( Math.abs( collinear0 ) > Number.EPSILON ) {\n\n\t\t\t\t\t// not collinear\n\n\t\t\t\t\t// length of vectors for normalizing\n\n\t\t\t\t\tvar v_prev_len = Math.sqrt( v_prev_lensq );\n\t\t\t\t\tvar v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );\n\n\t\t\t\t\t// shift adjacent points by unit vectors to the left\n\n\t\t\t\t\tvar ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );\n\t\t\t\t\tvar ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );\n\n\t\t\t\t\tvar ptNextShift_x = ( inNext.x - v_next_y / v_next_len );\n\t\t\t\t\tvar ptNextShift_y = ( inNext.y + v_next_x / v_next_len );\n\n\t\t\t\t\t// scaling factor for v_prev to intersection point\n\n\t\t\t\t\tvar sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -\n\t\t\t\t\t\t\t( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /\n\t\t\t\t\t\t( v_prev_x * v_next_y - v_prev_y * v_next_x );\n\n\t\t\t\t\t// vector from inPt to intersection point\n\n\t\t\t\t\tv_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );\n\t\t\t\t\tv_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );\n\n\t\t\t\t\t// Don't normalize!, otherwise sharp corners become ugly\n\t\t\t\t\t// but prevent crazy spikes\n\t\t\t\t\tvar v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );\n\t\t\t\t\tif ( v_trans_lensq <= 2 ) {\n\n\t\t\t\t\t\treturn new Vector2( v_trans_x, v_trans_y );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_trans_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// handle special case of collinear edges\n\n\t\t\t\t\tvar direction_eq = false; // assumes: opposite\n\t\t\t\t\tif ( v_prev_x > Number.EPSILON ) {\n\n\t\t\t\t\t\tif ( v_next_x > Number.EPSILON ) {\n\n\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( v_prev_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\tif ( v_next_x < - Number.EPSILON ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tif ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {\n\n\t\t\t\t\t\t\t\tdirection_eq = true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( direction_eq ) {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight sequence\");\n\t\t\t\t\t\tv_trans_x = - v_prev_y;\n\t\t\t\t\t\tv_trans_y = v_prev_x;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// console.log(\"Warning: lines are a straight spike\");\n\t\t\t\t\t\tv_trans_x = v_prev_x;\n\t\t\t\t\t\tv_trans_y = v_prev_y;\n\t\t\t\t\t\tshrink_by = Math.sqrt( v_prev_lensq / 2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );\n\n\t\t\t}\n\n\n\t\t\tvar contourMovements = [];\n\n\t\t\tfor ( var i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t// console.log('i,j,k', i, j , k)\n\n\t\t\t\tcontourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );\n\n\t\t\t}\n\n\t\t\tvar holesMovements = [],\n\t\t\t\toneHoleMovements, verticesMovements = contourMovements.concat();\n\n\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\tahole = holes[ h ];\n\n\t\t\t\toneHoleMovements = [];\n\n\t\t\t\tfor ( i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {\n\n\t\t\t\t\tif ( j === il ) j = 0;\n\t\t\t\t\tif ( k === il ) k = 0;\n\n\t\t\t\t\t// (j)---(i)---(k)\n\t\t\t\t\toneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );\n\n\t\t\t\t}\n\n\t\t\t\tholesMovements.push( oneHoleMovements );\n\t\t\t\tverticesMovements = verticesMovements.concat( oneHoleMovements );\n\n\t\t\t}\n\n\n\t\t\t// Loop bevelSegments, 1 for the front, 1 for the back\n\n\t\t\tfor ( b = 0; b < bevelSegments; b ++ ) {\n\n\t\t\t\t//for ( b = bevelSegments; b > 0; b -- ) {\n\n\t\t\t\tt = b / bevelSegments;\n\t\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\n\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tv( vert.x, vert.y, - z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tbs = bevelSize;\n\n\t\t\t// Back facing vertices\n\n\t\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\tv( vert.x, vert.y, 0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );\n\n\t\t\t\t\tnormal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );\n\t\t\t\t\tbinormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\tposition2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );\n\n\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// Add stepped vertices...\n\t\t\t// Including front facing vertices\n\n\t\t\tvar s;\n\n\t\t\tfor ( s = 1; s <= steps; s ++ ) {\n\n\t\t\t\tfor ( i = 0; i < vlen; i ++ ) {\n\n\t\t\t\t\tvert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];\n\n\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\tv( vert.x, vert.y, depth / steps * s );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );\n\n\t\t\t\t\t\tnormal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );\n\t\t\t\t\t\tbinormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );\n\n\t\t\t\t\t\tposition2.copy( extrudePts[ s ] ).add( normal ).add( binormal );\n\n\t\t\t\t\t\tv( position2.x, position2.y, position2.z );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\t// Add bevel segments planes\n\n\t\t\t//for ( b = 1; b <= bevelSegments; b ++ ) {\n\t\t\tfor ( b = bevelSegments - 1; b >= 0; b -- ) {\n\n\t\t\t\tt = b / bevelSegments;\n\t\t\t\tz = bevelThickness * Math.cos( t * Math.PI / 2 );\n\t\t\t\tbs = bevelSize * Math.sin( t * Math.PI / 2 );\n\n\t\t\t\t// contract shape\n\n\t\t\t\tfor ( i = 0, il = contour.length; i < il; i ++ ) {\n\n\t\t\t\t\tvert = scalePt2( contour[ i ], contourMovements[ i ], bs );\n\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t}\n\n\t\t\t\t// expand holes\n\n\t\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tahole = holes[ h ];\n\t\t\t\t\toneHoleMovements = holesMovements[ h ];\n\n\t\t\t\t\tfor ( i = 0, il = ahole.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );\n\n\t\t\t\t\t\tif ( ! extrudeByPath ) {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y, depth + z );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tv( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t/* Faces */\n\n\t\t\t// Top and bottom faces\n\n\t\t\tbuildLidFaces();\n\n\t\t\t// Sides faces\n\n\t\t\tbuildSideFaces();\n\n\n\t\t\t///// Internal functions\n\n\t\t\tfunction buildLidFaces() {\n\n\t\t\t\tvar start = verticesArray.length / 3;\n\n\t\t\t\tif ( bevelEnabled ) {\n\n\t\t\t\t\tvar layer = 0; // steps + 1\n\t\t\t\t\tvar offset = vlen * layer;\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlayer = steps + bevelSegments * 2;\n\t\t\t\t\toffset = vlen * layer;\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// Bottom faces\n\n\t\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\t\tf3( face[ 2 ], face[ 1 ], face[ 0 ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Top faces\n\n\t\t\t\t\tfor ( i = 0; i < flen; i ++ ) {\n\n\t\t\t\t\t\tface = faces[ i ];\n\t\t\t\t\t\tf3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 0 );\n\n\t\t\t}\n\n\t\t\t// Create faces for the z-sides of the shape\n\n\t\t\tfunction buildSideFaces() {\n\n\t\t\t\tvar start = verticesArray.length / 3;\n\t\t\t\tvar layeroffset = 0;\n\t\t\t\tsidewalls( contour, layeroffset );\n\t\t\t\tlayeroffset += contour.length;\n\n\t\t\t\tfor ( h = 0, hl = holes.length; h < hl; h ++ ) {\n\n\t\t\t\t\tahole = holes[ h ];\n\t\t\t\t\tsidewalls( ahole, layeroffset );\n\n\t\t\t\t\t//, true\n\t\t\t\t\tlayeroffset += ahole.length;\n\n\t\t\t\t}\n\n\n\t\t\t\tscope.addGroup( start, verticesArray.length / 3 - start, 1 );\n\n\n\t\t\t}\n\n\t\t\tfunction sidewalls( contour, layeroffset ) {\n\n\t\t\t\tvar j, k;\n\t\t\t\ti = contour.length;\n\n\t\t\t\twhile ( -- i >= 0 ) {\n\n\t\t\t\t\tj = i;\n\t\t\t\t\tk = i - 1;\n\t\t\t\t\tif ( k < 0 ) k = contour.length - 1;\n\n\t\t\t\t\t//console.log('b', i,j, i-1, k,vertices.length);\n\n\t\t\t\t\tvar s = 0,\n\t\t\t\t\t\tsl = steps + bevelSegments * 2;\n\n\t\t\t\t\tfor ( s = 0; s < sl; s ++ ) {\n\n\t\t\t\t\t\tvar slen1 = vlen * s;\n\t\t\t\t\t\tvar slen2 = vlen * ( s + 1 );\n\n\t\t\t\t\t\tvar a = layeroffset + j + slen1,\n\t\t\t\t\t\t\tb = layeroffset + k + slen1,\n\t\t\t\t\t\t\tc = layeroffset + k + slen2,\n\t\t\t\t\t\t\td = layeroffset + j + slen2;\n\n\t\t\t\t\t\tf4( a, b, c, d );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction v( x, y, z ) {\n\n\t\t\t\tplaceholder.push( x );\n\t\t\t\tplaceholder.push( y );\n\t\t\t\tplaceholder.push( z );\n\n\t\t\t}\n\n\n\t\t\tfunction f3( a, b, c ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\n\t\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\t\tvar uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\n\t\t\t}\n\n\t\t\tfunction f4( a, b, c, d ) {\n\n\t\t\t\taddVertex( a );\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( d );\n\n\t\t\t\taddVertex( b );\n\t\t\t\taddVertex( c );\n\t\t\t\taddVertex( d );\n\n\n\t\t\t\tvar nextIndex = verticesArray.length / 3;\n\t\t\t\tvar uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );\n\n\t\t\t\taddUV( uvs[ 0 ] );\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t\taddUV( uvs[ 1 ] );\n\t\t\t\taddUV( uvs[ 2 ] );\n\t\t\t\taddUV( uvs[ 3 ] );\n\n\t\t\t}\n\n\t\t\tfunction addVertex( index ) {\n\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 0 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 1 ] );\n\t\t\t\tverticesArray.push( placeholder[ index * 3 + 2 ] );\n\n\t\t\t}\n\n\n\t\t\tfunction addUV( vector2 ) {\n\n\t\t\t\tuvArray.push( vector2.x );\n\t\t\t\tuvArray.push( vector2.y );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tExtrudeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tExtrudeBufferGeometry.prototype.constructor = ExtrudeBufferGeometry;\n\n\tExtrudeBufferGeometry.prototype.toJSON = function () {\n\n\t\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tvar shapes = this.parameters.shapes;\n\t\tvar options = this.parameters.options;\n\n\t\treturn toJSON( shapes, options, data );\n\n\t};\n\n\t//\n\n\tvar WorldUVGenerator = {\n\n\t\tgenerateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {\n\n\t\t\tvar a_x = vertices[ indexA * 3 ];\n\t\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\t\tvar b_x = vertices[ indexB * 3 ];\n\t\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\t\tvar c_x = vertices[ indexC * 3 ];\n\t\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\n\t\t\treturn [\n\t\t\t\tnew Vector2( a_x, a_y ),\n\t\t\t\tnew Vector2( b_x, b_y ),\n\t\t\t\tnew Vector2( c_x, c_y )\n\t\t\t];\n\n\t\t},\n\n\t\tgenerateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {\n\n\t\t\tvar a_x = vertices[ indexA * 3 ];\n\t\t\tvar a_y = vertices[ indexA * 3 + 1 ];\n\t\t\tvar a_z = vertices[ indexA * 3 + 2 ];\n\t\t\tvar b_x = vertices[ indexB * 3 ];\n\t\t\tvar b_y = vertices[ indexB * 3 + 1 ];\n\t\t\tvar b_z = vertices[ indexB * 3 + 2 ];\n\t\t\tvar c_x = vertices[ indexC * 3 ];\n\t\t\tvar c_y = vertices[ indexC * 3 + 1 ];\n\t\t\tvar c_z = vertices[ indexC * 3 + 2 ];\n\t\t\tvar d_x = vertices[ indexD * 3 ];\n\t\t\tvar d_y = vertices[ indexD * 3 + 1 ];\n\t\t\tvar d_z = vertices[ indexD * 3 + 2 ];\n\n\t\t\tif ( Math.abs( a_y - b_y ) < 0.01 ) {\n\n\t\t\t\treturn [\n\t\t\t\t\tnew Vector2( a_x, 1 - a_z ),\n\t\t\t\t\tnew Vector2( b_x, 1 - b_z ),\n\t\t\t\t\tnew Vector2( c_x, 1 - c_z ),\n\t\t\t\t\tnew Vector2( d_x, 1 - d_z )\n\t\t\t\t];\n\n\t\t\t} else {\n\n\t\t\t\treturn [\n\t\t\t\t\tnew Vector2( a_y, 1 - a_z ),\n\t\t\t\t\tnew Vector2( b_y, 1 - b_z ),\n\t\t\t\t\tnew Vector2( c_y, 1 - c_z ),\n\t\t\t\t\tnew Vector2( d_y, 1 - d_z )\n\t\t\t\t];\n\n\t\t\t}\n\n\t\t}\n\t};\n\n\tfunction toJSON( shapes, options, data ) {\n\n\t\t//\n\n\t\tdata.shapes = [];\n\n\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdata.shapes.push( shapes.uuid );\n\n\t\t}\n\n\t\t//\n\n\t\tif ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * Text = 3D Text\n\t *\n\t * parameters = {\n\t * font: , // font\n\t *\n\t * size: , // size of the text\n\t * height: , // thickness to extrude text\n\t * curveSegments: , // number of points on the curves\n\t *\n\t * bevelEnabled: , // turn on bevel\n\t * bevelThickness: , // how deep into text bevel goes\n\t * bevelSize: // how far from text outline is bevel\n\t * }\n\t */\n\n\t// TextGeometry\n\n\tfunction TextGeometry( text, parameters ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'TextGeometry';\n\n\t\tthis.parameters = {\n\t\t\ttext: text,\n\t\t\tparameters: parameters\n\t\t};\n\n\t\tthis.fromBufferGeometry( new TextBufferGeometry( text, parameters ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tTextGeometry.prototype = Object.create( Geometry.prototype );\n\tTextGeometry.prototype.constructor = TextGeometry;\n\n\t// TextBufferGeometry\n\n\tfunction TextBufferGeometry( text, parameters ) {\n\n\t\tparameters = parameters || {};\n\n\t\tvar font = parameters.font;\n\n\t\tif ( ! ( font && font.isFont ) ) {\n\n\t\t\tconsole.error( 'THREE.TextGeometry: font parameter is not an instance of THREE.Font.' );\n\t\t\treturn new Geometry();\n\n\t\t}\n\n\t\tvar shapes = font.generateShapes( text, parameters.size, parameters.curveSegments );\n\n\t\t// translate parameters to ExtrudeGeometry API\n\n\t\tparameters.depth = parameters.height !== undefined ? parameters.height : 50;\n\n\t\t// defaults\n\n\t\tif ( parameters.bevelThickness === undefined ) parameters.bevelThickness = 10;\n\t\tif ( parameters.bevelSize === undefined ) parameters.bevelSize = 8;\n\t\tif ( parameters.bevelEnabled === undefined ) parameters.bevelEnabled = false;\n\n\t\tExtrudeBufferGeometry.call( this, shapes, parameters );\n\n\t\tthis.type = 'TextBufferGeometry';\n\n\t}\n\n\tTextBufferGeometry.prototype = Object.create( ExtrudeBufferGeometry.prototype );\n\tTextBufferGeometry.prototype.constructor = TextBufferGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// SphereGeometry\n\n\tfunction SphereGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'SphereGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tSphereGeometry.prototype = Object.create( Geometry.prototype );\n\tSphereGeometry.prototype.constructor = SphereGeometry;\n\n\t// SphereBufferGeometry\n\n\tfunction SphereBufferGeometry( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'SphereBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\twidthSegments: widthSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tradius = radius || 1;\n\n\t\twidthSegments = Math.max( 3, Math.floor( widthSegments ) || 8 );\n\t\theightSegments = Math.max( 2, Math.floor( heightSegments ) || 6 );\n\n\t\tphiStart = phiStart !== undefined ? phiStart : 0;\n\t\tphiLength = phiLength !== undefined ? phiLength : Math.PI * 2;\n\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI;\n\n\t\tvar thetaEnd = thetaStart + thetaLength;\n\n\t\tvar ix, iy;\n\n\t\tvar index = 0;\n\t\tvar grid = [];\n\n\t\tvar vertex = new Vector3();\n\t\tvar normal = new Vector3();\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( iy = 0; iy <= heightSegments; iy ++ ) {\n\n\t\t\tvar verticesRow = [];\n\n\t\t\tvar v = iy / heightSegments;\n\n\t\t\tfor ( ix = 0; ix <= widthSegments; ix ++ ) {\n\n\t\t\t\tvar u = ix / widthSegments;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\t\t\t\tvertex.y = radius * Math.cos( thetaStart + v * thetaLength );\n\t\t\t\tvertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormal.set( vertex.x, vertex.y, vertex.z ).normalize();\n\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\tverticesRow.push( index ++ );\n\n\t\t\t}\n\n\t\t\tgrid.push( verticesRow );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( iy = 0; iy < heightSegments; iy ++ ) {\n\n\t\t\tfor ( ix = 0; ix < widthSegments; ix ++ ) {\n\n\t\t\t\tvar a = grid[ iy ][ ix + 1 ];\n\t\t\t\tvar b = grid[ iy ][ ix ];\n\t\t\t\tvar c = grid[ iy + 1 ][ ix ];\n\t\t\t\tvar d = grid[ iy + 1 ][ ix + 1 ];\n\n\t\t\t\tif ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );\n\t\t\t\tif ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tSphereBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tSphereBufferGeometry.prototype.constructor = SphereBufferGeometry;\n\n\t/**\n\t * @author Kaleb Murphy\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// RingGeometry\n\n\tfunction RingGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'RingGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tRingGeometry.prototype = Object.create( Geometry.prototype );\n\tRingGeometry.prototype.constructor = RingGeometry;\n\n\t// RingBufferGeometry\n\n\tfunction RingBufferGeometry( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'RingBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tinnerRadius: innerRadius,\n\t\t\touterRadius: outerRadius,\n\t\t\tthetaSegments: thetaSegments,\n\t\t\tphiSegments: phiSegments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tinnerRadius = innerRadius || 0.5;\n\t\touterRadius = outerRadius || 1;\n\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t\tthetaSegments = thetaSegments !== undefined ? Math.max( 3, thetaSegments ) : 8;\n\t\tphiSegments = phiSegments !== undefined ? Math.max( 1, phiSegments ) : 1;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// some helper variables\n\n\t\tvar segment;\n\t\tvar radius = innerRadius;\n\t\tvar radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );\n\t\tvar vertex = new Vector3();\n\t\tvar uv = new Vector2();\n\t\tvar j, i;\n\n\t\t// generate vertices, normals and uvs\n\n\t\tfor ( j = 0; j <= phiSegments; j ++ ) {\n\n\t\t\tfor ( i = 0; i <= thetaSegments; i ++ ) {\n\n\t\t\t\t// values are generate from the inside of the ring to the outside\n\n\t\t\t\tsegment = thetaStart + i / thetaSegments * thetaLength;\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( vertex.x / outerRadius + 1 ) / 2;\n\t\t\t\tuv.y = ( vertex.y / outerRadius + 1 ) / 2;\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t}\n\n\t\t\t// increase the radius for next row of vertices\n\n\t\t\tradius += radiusStep;\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( j = 0; j < phiSegments; j ++ ) {\n\n\t\t\tvar thetaSegmentLevel = j * ( thetaSegments + 1 );\n\n\t\t\tfor ( i = 0; i < thetaSegments; i ++ ) {\n\n\t\t\t\tsegment = i + thetaSegmentLevel;\n\n\t\t\t\tvar a = segment;\n\t\t\t\tvar b = segment + thetaSegments + 1;\n\t\t\t\tvar c = segment + thetaSegments + 2;\n\t\t\t\tvar d = segment + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tRingBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tRingBufferGeometry.prototype.constructor = RingBufferGeometry;\n\n\t/**\n\t * @author astrodud / http://astrodud.isgreat.org/\n\t * @author zz85 / https://github.com/zz85\n\t * @author bhouston / http://clara.io\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// LatheGeometry\n\n\tfunction LatheGeometry( points, segments, phiStart, phiLength ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'LatheGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new LatheBufferGeometry( points, segments, phiStart, phiLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tLatheGeometry.prototype = Object.create( Geometry.prototype );\n\tLatheGeometry.prototype.constructor = LatheGeometry;\n\n\t// LatheBufferGeometry\n\n\tfunction LatheBufferGeometry( points, segments, phiStart, phiLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'LatheBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tpoints: points,\n\t\t\tsegments: segments,\n\t\t\tphiStart: phiStart,\n\t\t\tphiLength: phiLength\n\t\t};\n\n\t\tsegments = Math.floor( segments ) || 12;\n\t\tphiStart = phiStart || 0;\n\t\tphiLength = phiLength || Math.PI * 2;\n\n\t\t// clamp phiLength so it's in range of [ 0, 2PI ]\n\n\t\tphiLength = _Math.clamp( phiLength, 0, Math.PI * 2 );\n\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar base;\n\t\tvar inverseSegments = 1.0 / segments;\n\t\tvar vertex = new Vector3();\n\t\tvar uv = new Vector2();\n\t\tvar i, j;\n\n\t\t// generate vertices and uvs\n\n\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\tvar phi = phiStart + i * inverseSegments * phiLength;\n\n\t\t\tvar sin = Math.sin( phi );\n\t\t\tvar cos = Math.cos( phi );\n\n\t\t\tfor ( j = 0; j <= ( points.length - 1 ); j ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = points[ j ].x * sin;\n\t\t\t\tvertex.y = points[ j ].y;\n\t\t\t\tvertex.z = points[ j ].x * cos;\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = i / segments;\n\t\t\t\tuv.y = j / ( points.length - 1 );\n\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\n\t\t\t}\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( i = 0; i < segments; i ++ ) {\n\n\t\t\tfor ( j = 0; j < ( points.length - 1 ); j ++ ) {\n\n\t\t\t\tbase = j + i * points.length;\n\n\t\t\t\tvar a = base;\n\t\t\t\tvar b = base + points.length;\n\t\t\t\tvar c = base + points.length + 1;\n\t\t\t\tvar d = base + 1;\n\n\t\t\t\t// faces\n\n\t\t\t\tindices.push( a, b, d );\n\t\t\t\tindices.push( b, c, d );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\t// generate normals\n\n\t\tthis.computeVertexNormals();\n\n\t\t// if the geometry is closed, we need to average the normals along the seam.\n\t\t// because the corresponding vertices are identical (but still have different UVs).\n\n\t\tif ( phiLength === Math.PI * 2 ) {\n\n\t\t\tvar normals = this.attributes.normal.array;\n\t\t\tvar n1 = new Vector3();\n\t\t\tvar n2 = new Vector3();\n\t\t\tvar n = new Vector3();\n\n\t\t\t// this is the buffer offset for the last line of vertices\n\n\t\t\tbase = segments * points.length * 3;\n\n\t\t\tfor ( i = 0, j = 0; i < points.length; i ++, j += 3 ) {\n\n\t\t\t\t// select the normal of the vertex in the first line\n\n\t\t\t\tn1.x = normals[ j + 0 ];\n\t\t\t\tn1.y = normals[ j + 1 ];\n\t\t\t\tn1.z = normals[ j + 2 ];\n\n\t\t\t\t// select the normal of the vertex in the last line\n\n\t\t\t\tn2.x = normals[ base + j + 0 ];\n\t\t\t\tn2.y = normals[ base + j + 1 ];\n\t\t\t\tn2.z = normals[ base + j + 2 ];\n\n\t\t\t\t// average normals\n\n\t\t\t\tn.addVectors( n1, n2 ).normalize();\n\n\t\t\t\t// assign the new values to both normals\n\n\t\t\t\tnormals[ j + 0 ] = normals[ base + j + 0 ] = n.x;\n\t\t\t\tnormals[ j + 1 ] = normals[ base + j + 1 ] = n.y;\n\t\t\t\tnormals[ j + 2 ] = normals[ base + j + 2 ] = n.z;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tLatheBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tLatheBufferGeometry.prototype.constructor = LatheBufferGeometry;\n\n\t/**\n\t * @author jonobr1 / http://jonobr1.com\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// ShapeGeometry\n\n\tfunction ShapeGeometry( shapes, curveSegments ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'ShapeGeometry';\n\n\t\tif ( typeof curveSegments === 'object' ) {\n\n\t\t\tconsole.warn( 'THREE.ShapeGeometry: Options parameter has been removed.' );\n\n\t\t\tcurveSegments = curveSegments.curveSegments;\n\n\t\t}\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\tthis.fromBufferGeometry( new ShapeBufferGeometry( shapes, curveSegments ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tShapeGeometry.prototype = Object.create( Geometry.prototype );\n\tShapeGeometry.prototype.constructor = ShapeGeometry;\n\n\tShapeGeometry.prototype.toJSON = function () {\n\n\t\tvar data = Geometry.prototype.toJSON.call( this );\n\n\t\tvar shapes = this.parameters.shapes;\n\n\t\treturn toJSON$1( shapes, data );\n\n\t};\n\n\t// ShapeBufferGeometry\n\n\tfunction ShapeBufferGeometry( shapes, curveSegments ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'ShapeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tshapes: shapes,\n\t\t\tcurveSegments: curveSegments\n\t\t};\n\n\t\tcurveSegments = curveSegments || 12;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar groupStart = 0;\n\t\tvar groupCount = 0;\n\n\t\t// allow single and array values for \"shapes\" parameter\n\n\t\tif ( Array.isArray( shapes ) === false ) {\n\n\t\t\taddShape( shapes );\n\n\t\t} else {\n\n\t\t\tfor ( var i = 0; i < shapes.length; i ++ ) {\n\n\t\t\t\taddShape( shapes[ i ] );\n\n\t\t\t\tthis.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support\n\n\t\t\t\tgroupStart += groupCount;\n\t\t\t\tgroupCount = 0;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\n\t\t// helper functions\n\n\t\tfunction addShape( shape ) {\n\n\t\t\tvar i, l, shapeHole;\n\n\t\t\tvar indexOffset = vertices.length / 3;\n\t\t\tvar points = shape.extractPoints( curveSegments );\n\n\t\t\tvar shapeVertices = points.shape;\n\t\t\tvar shapeHoles = points.holes;\n\n\t\t\t// check direction of vertices\n\n\t\t\tif ( ShapeUtils.isClockWise( shapeVertices ) === false ) {\n\n\t\t\t\tshapeVertices = shapeVertices.reverse();\n\n\t\t\t\t// also check if holes are in the opposite direction\n\n\t\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\t\tshapeHole = shapeHoles[ i ];\n\n\t\t\t\t\tif ( ShapeUtils.isClockWise( shapeHole ) === true ) {\n\n\t\t\t\t\t\tshapeHoles[ i ] = shapeHole.reverse();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );\n\n\t\t\t// join vertices of inner and outer paths to a single array\n\n\t\t\tfor ( i = 0, l = shapeHoles.length; i < l; i ++ ) {\n\n\t\t\t\tshapeHole = shapeHoles[ i ];\n\t\t\t\tshapeVertices = shapeVertices.concat( shapeHole );\n\n\t\t\t}\n\n\t\t\t// vertices, normals, uvs\n\n\t\t\tfor ( i = 0, l = shapeVertices.length; i < l; i ++ ) {\n\n\t\t\t\tvar vertex = shapeVertices[ i ];\n\n\t\t\t\tvertices.push( vertex.x, vertex.y, 0 );\n\t\t\t\tnormals.push( 0, 0, 1 );\n\t\t\t\tuvs.push( vertex.x, vertex.y ); // world uvs\n\n\t\t\t}\n\n\t\t\t// incides\n\n\t\t\tfor ( i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tvar a = face[ 0 ] + indexOffset;\n\t\t\t\tvar b = face[ 1 ] + indexOffset;\n\t\t\t\tvar c = face[ 2 ] + indexOffset;\n\n\t\t\t\tindices.push( a, b, c );\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tShapeBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tShapeBufferGeometry.prototype.constructor = ShapeBufferGeometry;\n\n\tShapeBufferGeometry.prototype.toJSON = function () {\n\n\t\tvar data = BufferGeometry.prototype.toJSON.call( this );\n\n\t\tvar shapes = this.parameters.shapes;\n\n\t\treturn toJSON$1( shapes, data );\n\n\t};\n\n\t//\n\n\tfunction toJSON$1( shapes, data ) {\n\n\t\tdata.shapes = [];\n\n\t\tif ( Array.isArray( shapes ) ) {\n\n\t\t\tfor ( var i = 0, l = shapes.length; i < l; i ++ ) {\n\n\t\t\t\tvar shape = shapes[ i ];\n\n\t\t\t\tdata.shapes.push( shape.uuid );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tdata.shapes.push( shapes.uuid );\n\n\t\t}\n\n\t\treturn data;\n\n\t}\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction EdgesGeometry( geometry, thresholdAngle ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'EdgesGeometry';\n\n\t\tthis.parameters = {\n\t\t\tthresholdAngle: thresholdAngle\n\t\t};\n\n\t\tthresholdAngle = ( thresholdAngle !== undefined ) ? thresholdAngle : 1;\n\n\t\t// buffer\n\n\t\tvar vertices = [];\n\n\t\t// helper variables\n\n\t\tvar thresholdDot = Math.cos( _Math.DEG2RAD * thresholdAngle );\n\t\tvar edge = [ 0, 0 ], edges = {}, edge1, edge2;\n\t\tvar key, keys = [ 'a', 'b', 'c' ];\n\n\t\t// prepare source geometry\n\n\t\tvar geometry2;\n\n\t\tif ( geometry.isBufferGeometry ) {\n\n\t\t\tgeometry2 = new Geometry();\n\t\t\tgeometry2.fromBufferGeometry( geometry );\n\n\t\t} else {\n\n\t\t\tgeometry2 = geometry.clone();\n\n\t\t}\n\n\t\tgeometry2.mergeVertices();\n\t\tgeometry2.computeFaceNormals();\n\n\t\tvar sourceVertices = geometry2.vertices;\n\t\tvar faces = geometry2.faces;\n\n\t\t// now create a data structure where each entry represents an edge with its adjoining faces\n\n\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\tvar face = faces[ i ];\n\n\t\t\tfor ( var j = 0; j < 3; j ++ ) {\n\n\t\t\t\tedge1 = face[ keys[ j ] ];\n\t\t\t\tedge2 = face[ keys[ ( j + 1 ) % 3 ] ];\n\t\t\t\tedge[ 0 ] = Math.min( edge1, edge2 );\n\t\t\t\tedge[ 1 ] = Math.max( edge1, edge2 );\n\n\t\t\t\tkey = edge[ 0 ] + ',' + edge[ 1 ];\n\n\t\t\t\tif ( edges[ key ] === undefined ) {\n\n\t\t\t\t\tedges[ key ] = { index1: edge[ 0 ], index2: edge[ 1 ], face1: i, face2: undefined };\n\n\t\t\t\t} else {\n\n\t\t\t\t\tedges[ key ].face2 = i;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate vertices\n\n\t\tfor ( key in edges ) {\n\n\t\t\tvar e = edges[ key ];\n\n\t\t\t// an edge is only rendered if the angle (in degrees) between the face normals of the adjoining faces exceeds this value. default = 1 degree.\n\n\t\t\tif ( e.face2 === undefined || faces[ e.face1 ].normal.dot( faces[ e.face2 ].normal ) <= thresholdDot ) {\n\n\t\t\t\tvar vertex = sourceVertices[ e.index1 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\tvertex = sourceVertices[ e.index2 ];\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\n\t}\n\n\tEdgesGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tEdgesGeometry.prototype.constructor = EdgesGeometry;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\t// CylinderGeometry\n\n\tfunction CylinderGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'CylinderGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tCylinderGeometry.prototype = Object.create( Geometry.prototype );\n\tCylinderGeometry.prototype.constructor = CylinderGeometry;\n\n\t// CylinderBufferGeometry\n\n\tfunction CylinderBufferGeometry( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'CylinderBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradiusTop: radiusTop,\n\t\t\tradiusBottom: radiusBottom,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tvar scope = this;\n\n\t\tradiusTop = radiusTop !== undefined ? radiusTop : 1;\n\t\tradiusBottom = radiusBottom !== undefined ? radiusBottom : 1;\n\t\theight = height || 1;\n\n\t\tradialSegments = Math.floor( radialSegments ) || 8;\n\t\theightSegments = Math.floor( heightSegments ) || 1;\n\n\t\topenEnded = openEnded !== undefined ? openEnded : false;\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0.0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar index = 0;\n\t\tvar indexArray = [];\n\t\tvar halfHeight = height / 2;\n\t\tvar groupStart = 0;\n\n\t\t// generate geometry\n\n\t\tgenerateTorso();\n\n\t\tif ( openEnded === false ) {\n\n\t\t\tif ( radiusTop > 0 ) generateCap( true );\n\t\t\tif ( radiusBottom > 0 ) generateCap( false );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t\tfunction generateTorso() {\n\n\t\t\tvar x, y;\n\t\t\tvar normal = new Vector3();\n\t\t\tvar vertex = new Vector3();\n\n\t\t\tvar groupCount = 0;\n\n\t\t\t// this will be used to calculate the normal\n\t\t\tvar slope = ( radiusBottom - radiusTop ) / height;\n\n\t\t\t// generate vertices, normals and uvs\n\n\t\t\tfor ( y = 0; y <= heightSegments; y ++ ) {\n\n\t\t\t\tvar indexRow = [];\n\n\t\t\t\tvar v = y / heightSegments;\n\n\t\t\t\t// calculate the radius of the current row\n\n\t\t\t\tvar radius = v * ( radiusBottom - radiusTop ) + radiusTop;\n\n\t\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\t\tvar u = x / radialSegments;\n\n\t\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\t\tvar sinTheta = Math.sin( theta );\n\t\t\t\t\tvar cosTheta = Math.cos( theta );\n\n\t\t\t\t\t// vertex\n\n\t\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\t\tvertex.y = - v * height + halfHeight;\n\t\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t\t// normal\n\n\t\t\t\t\tnormal.set( sinTheta, slope, cosTheta ).normalize();\n\t\t\t\t\tnormals.push( normal.x, normal.y, normal.z );\n\n\t\t\t\t\t// uv\n\n\t\t\t\t\tuvs.push( u, 1 - v );\n\n\t\t\t\t\t// save index of vertex in respective row\n\n\t\t\t\t\tindexRow.push( index ++ );\n\n\t\t\t\t}\n\n\t\t\t\t// now save vertices of the row in our index array\n\n\t\t\t\tindexArray.push( indexRow );\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tfor ( y = 0; y < heightSegments; y ++ ) {\n\n\t\t\t\t\t// we use the index array to access the correct indices\n\n\t\t\t\t\tvar a = indexArray[ y ][ x ];\n\t\t\t\t\tvar b = indexArray[ y + 1 ][ x ];\n\t\t\t\t\tvar c = indexArray[ y + 1 ][ x + 1 ];\n\t\t\t\t\tvar d = indexArray[ y ][ x + 1 ];\n\n\t\t\t\t\t// faces\n\n\t\t\t\t\tindices.push( a, b, d );\n\t\t\t\t\tindices.push( b, c, d );\n\n\t\t\t\t\t// update group counter\n\n\t\t\t\t\tgroupCount += 6;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, 0 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t\tfunction generateCap( top ) {\n\n\t\t\tvar x, centerIndexStart, centerIndexEnd;\n\n\t\t\tvar uv = new Vector2();\n\t\t\tvar vertex = new Vector3();\n\n\t\t\tvar groupCount = 0;\n\n\t\t\tvar radius = ( top === true ) ? radiusTop : radiusBottom;\n\t\t\tvar sign = ( top === true ) ? 1 : - 1;\n\n\t\t\t// save the index of the first center vertex\n\t\t\tcenterIndexStart = index;\n\n\t\t\t// first we generate the center vertex data of the cap.\n\t\t\t// because the geometry needs one set of uvs per face,\n\t\t\t// we must generate a center vertex per face/segment\n\n\t\t\tfor ( x = 1; x <= radialSegments; x ++ ) {\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertices.push( 0, halfHeight * sign, 0 );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuvs.push( 0.5, 0.5 );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// save the index of the last center vertex\n\n\t\t\tcenterIndexEnd = index;\n\n\t\t\t// now we generate the surrounding vertices, normals and uvs\n\n\t\t\tfor ( x = 0; x <= radialSegments; x ++ ) {\n\n\t\t\t\tvar u = x / radialSegments;\n\t\t\t\tvar theta = u * thetaLength + thetaStart;\n\n\t\t\t\tvar cosTheta = Math.cos( theta );\n\t\t\t\tvar sinTheta = Math.sin( theta );\n\n\t\t\t\t// vertex\n\n\t\t\t\tvertex.x = radius * sinTheta;\n\t\t\t\tvertex.y = halfHeight * sign;\n\t\t\t\tvertex.z = radius * cosTheta;\n\t\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t\t// normal\n\n\t\t\t\tnormals.push( 0, sign, 0 );\n\n\t\t\t\t// uv\n\n\t\t\t\tuv.x = ( cosTheta * 0.5 ) + 0.5;\n\t\t\t\tuv.y = ( sinTheta * 0.5 * sign ) + 0.5;\n\t\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t\t\t// increase index\n\n\t\t\t\tindex ++;\n\n\t\t\t}\n\n\t\t\t// generate indices\n\n\t\t\tfor ( x = 0; x < radialSegments; x ++ ) {\n\n\t\t\t\tvar c = centerIndexStart + x;\n\t\t\t\tvar i = centerIndexEnd + x;\n\n\t\t\t\tif ( top === true ) {\n\n\t\t\t\t\t// face top\n\n\t\t\t\t\tindices.push( i, i + 1, c );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// face bottom\n\n\t\t\t\t\tindices.push( i + 1, i, c );\n\n\t\t\t\t}\n\n\t\t\t\tgroupCount += 3;\n\n\t\t\t}\n\n\t\t\t// add a group to the geometry. this will ensure multi material support\n\n\t\t\tscope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );\n\n\t\t\t// calculate new start value for groups\n\n\t\t\tgroupStart += groupCount;\n\n\t\t}\n\n\t}\n\n\tCylinderBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tCylinderBufferGeometry.prototype.constructor = CylinderBufferGeometry;\n\n\t/**\n\t * @author abelnation / http://github.com/abelnation\n\t */\n\n\t// ConeGeometry\n\n\tfunction ConeGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tCylinderGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tConeGeometry.prototype = Object.create( CylinderGeometry.prototype );\n\tConeGeometry.prototype.constructor = ConeGeometry;\n\n\t// ConeBufferGeometry\n\n\tfunction ConeBufferGeometry( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {\n\n\t\tCylinderBufferGeometry.call( this, 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );\n\n\t\tthis.type = 'ConeBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\theight: height,\n\t\t\tradialSegments: radialSegments,\n\t\t\theightSegments: heightSegments,\n\t\t\topenEnded: openEnded,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t}\n\n\tConeBufferGeometry.prototype = Object.create( CylinderBufferGeometry.prototype );\n\tConeBufferGeometry.prototype.constructor = ConeBufferGeometry;\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t * @author Mugen87 / https://github.com/Mugen87\n\t * @author hughes\n\t */\n\n\t// CircleGeometry\n\n\tfunction CircleGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\t\tGeometry.call( this );\n\n\t\tthis.type = 'CircleGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tthis.fromBufferGeometry( new CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) );\n\t\tthis.mergeVertices();\n\n\t}\n\n\tCircleGeometry.prototype = Object.create( Geometry.prototype );\n\tCircleGeometry.prototype.constructor = CircleGeometry;\n\n\t// CircleBufferGeometry\n\n\tfunction CircleBufferGeometry( radius, segments, thetaStart, thetaLength ) {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'CircleBufferGeometry';\n\n\t\tthis.parameters = {\n\t\t\tradius: radius,\n\t\t\tsegments: segments,\n\t\t\tthetaStart: thetaStart,\n\t\t\tthetaLength: thetaLength\n\t\t};\n\n\t\tradius = radius || 1;\n\t\tsegments = segments !== undefined ? Math.max( 3, segments ) : 8;\n\n\t\tthetaStart = thetaStart !== undefined ? thetaStart : 0;\n\t\tthetaLength = thetaLength !== undefined ? thetaLength : Math.PI * 2;\n\n\t\t// buffers\n\n\t\tvar indices = [];\n\t\tvar vertices = [];\n\t\tvar normals = [];\n\t\tvar uvs = [];\n\n\t\t// helper variables\n\n\t\tvar i, s;\n\t\tvar vertex = new Vector3();\n\t\tvar uv = new Vector2();\n\n\t\t// center point\n\n\t\tvertices.push( 0, 0, 0 );\n\t\tnormals.push( 0, 0, 1 );\n\t\tuvs.push( 0.5, 0.5 );\n\n\t\tfor ( s = 0, i = 3; s <= segments; s ++, i += 3 ) {\n\n\t\t\tvar segment = thetaStart + s / segments * thetaLength;\n\n\t\t\t// vertex\n\n\t\t\tvertex.x = radius * Math.cos( segment );\n\t\t\tvertex.y = radius * Math.sin( segment );\n\n\t\t\tvertices.push( vertex.x, vertex.y, vertex.z );\n\n\t\t\t// normal\n\n\t\t\tnormals.push( 0, 0, 1 );\n\n\t\t\t// uvs\n\n\t\t\tuv.x = ( vertices[ i ] / radius + 1 ) / 2;\n\t\t\tuv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;\n\n\t\t\tuvs.push( uv.x, uv.y );\n\n\t\t}\n\n\t\t// indices\n\n\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\tindices.push( i, i + 1, 0 );\n\n\t\t}\n\n\t\t// build geometry\n\n\t\tthis.setIndex( indices );\n\t\tthis.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tthis.addAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );\n\t\tthis.addAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );\n\n\t}\n\n\tCircleBufferGeometry.prototype = Object.create( BufferGeometry.prototype );\n\tCircleBufferGeometry.prototype.constructor = CircleBufferGeometry;\n\n\n\n\tvar Geometries = /*#__PURE__*/Object.freeze({\n\t\tWireframeGeometry: WireframeGeometry,\n\t\tParametricGeometry: ParametricGeometry,\n\t\tParametricBufferGeometry: ParametricBufferGeometry,\n\t\tTetrahedronGeometry: TetrahedronGeometry,\n\t\tTetrahedronBufferGeometry: TetrahedronBufferGeometry,\n\t\tOctahedronGeometry: OctahedronGeometry,\n\t\tOctahedronBufferGeometry: OctahedronBufferGeometry,\n\t\tIcosahedronGeometry: IcosahedronGeometry,\n\t\tIcosahedronBufferGeometry: IcosahedronBufferGeometry,\n\t\tDodecahedronGeometry: DodecahedronGeometry,\n\t\tDodecahedronBufferGeometry: DodecahedronBufferGeometry,\n\t\tPolyhedronGeometry: PolyhedronGeometry,\n\t\tPolyhedronBufferGeometry: PolyhedronBufferGeometry,\n\t\tTubeGeometry: TubeGeometry,\n\t\tTubeBufferGeometry: TubeBufferGeometry,\n\t\tTorusKnotGeometry: TorusKnotGeometry,\n\t\tTorusKnotBufferGeometry: TorusKnotBufferGeometry,\n\t\tTorusGeometry: TorusGeometry,\n\t\tTorusBufferGeometry: TorusBufferGeometry,\n\t\tTextGeometry: TextGeometry,\n\t\tTextBufferGeometry: TextBufferGeometry,\n\t\tSphereGeometry: SphereGeometry,\n\t\tSphereBufferGeometry: SphereBufferGeometry,\n\t\tRingGeometry: RingGeometry,\n\t\tRingBufferGeometry: RingBufferGeometry,\n\t\tPlaneGeometry: PlaneGeometry,\n\t\tPlaneBufferGeometry: PlaneBufferGeometry,\n\t\tLatheGeometry: LatheGeometry,\n\t\tLatheBufferGeometry: LatheBufferGeometry,\n\t\tShapeGeometry: ShapeGeometry,\n\t\tShapeBufferGeometry: ShapeBufferGeometry,\n\t\tExtrudeGeometry: ExtrudeGeometry,\n\t\tExtrudeBufferGeometry: ExtrudeBufferGeometry,\n\t\tEdgesGeometry: EdgesGeometry,\n\t\tConeGeometry: ConeGeometry,\n\t\tConeBufferGeometry: ConeBufferGeometry,\n\t\tCylinderGeometry: CylinderGeometry,\n\t\tCylinderBufferGeometry: CylinderBufferGeometry,\n\t\tCircleGeometry: CircleGeometry,\n\t\tCircleBufferGeometry: CircleBufferGeometry,\n\t\tBoxGeometry: BoxGeometry,\n\t\tBoxBufferGeometry: BoxBufferGeometry\n\t});\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t *\n\t * parameters = {\n\t * color: \n\t * }\n\t */\n\n\tfunction ShadowMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'ShadowMaterial';\n\n\t\tthis.color = new Color( 0x000000 );\n\t\tthis.transparent = true;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tShadowMaterial.prototype = Object.create( Material.prototype );\n\tShadowMaterial.prototype.constructor = ShadowMaterial;\n\n\tShadowMaterial.prototype.isShadowMaterial = true;\n\n\tShadowMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction RawShaderMaterial( parameters ) {\n\n\t\tShaderMaterial.call( this, parameters );\n\n\t\tthis.type = 'RawShaderMaterial';\n\n\t}\n\n\tRawShaderMaterial.prototype = Object.create( ShaderMaterial.prototype );\n\tRawShaderMaterial.prototype.constructor = RawShaderMaterial;\n\n\tRawShaderMaterial.prototype.isRawShaderMaterial = true;\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t * color: ,\n\t * roughness: ,\n\t * metalness: ,\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * emissive: ,\n\t * emissiveIntensity: \n\t * emissiveMap: new THREE.Texture( ),\n\t *\n\t * bumpMap: new THREE.Texture( ),\n\t * bumpScale: ,\n\t *\n\t * normalMap: new THREE.Texture( ),\n\t * normalScale: ,\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * roughnessMap: new THREE.Texture( ),\n\t *\n\t * metalnessMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t * envMapIntensity: \n\t *\n\t * refractionRatio: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshStandardMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.type = 'MeshStandardMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.roughness = 0.5;\n\t\tthis.metalness = 0.5;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.roughnessMap = null;\n\n\t\tthis.metalnessMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.envMapIntensity = 1.0;\n\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshStandardMaterial.prototype = Object.create( Material.prototype );\n\tMeshStandardMaterial.prototype.constructor = MeshStandardMaterial;\n\n\tMeshStandardMaterial.prototype.isMeshStandardMaterial = true;\n\n\tMeshStandardMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.defines = { 'STANDARD': '' };\n\n\t\tthis.color.copy( source.color );\n\t\tthis.roughness = source.roughness;\n\t\tthis.metalness = source.metalness;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.roughnessMap = source.roughnessMap;\n\n\t\tthis.metalnessMap = source.metalnessMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.envMapIntensity = source.envMapIntensity;\n\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t * reflectivity: \n\t * }\n\t */\n\n\tfunction MeshPhysicalMaterial( parameters ) {\n\n\t\tMeshStandardMaterial.call( this );\n\n\t\tthis.defines = { 'PHYSICAL': '' };\n\n\t\tthis.type = 'MeshPhysicalMaterial';\n\n\t\tthis.reflectivity = 0.5; // maps to F0 = 0.04\n\n\t\tthis.clearCoat = 0.0;\n\t\tthis.clearCoatRoughness = 0.0;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshPhysicalMaterial.prototype = Object.create( MeshStandardMaterial.prototype );\n\tMeshPhysicalMaterial.prototype.constructor = MeshPhysicalMaterial;\n\n\tMeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;\n\n\tMeshPhysicalMaterial.prototype.copy = function ( source ) {\n\n\t\tMeshStandardMaterial.prototype.copy.call( this, source );\n\n\t\tthis.defines = { 'PHYSICAL': '' };\n\n\t\tthis.reflectivity = source.reflectivity;\n\n\t\tthis.clearCoat = source.clearCoat;\n\t\tthis.clearCoatRoughness = source.clearCoatRoughness;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * specular: ,\n\t * shininess: ,\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * emissive: ,\n\t * emissiveIntensity: \n\t * emissiveMap: new THREE.Texture( ),\n\t *\n\t * bumpMap: new THREE.Texture( ),\n\t * bumpScale: ,\n\t *\n\t * normalMap: new THREE.Texture( ),\n\t * normalScale: ,\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * specularMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t * combine: THREE.Multiply,\n\t * reflectivity: ,\n\t * refractionRatio: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshPhongMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshPhongMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\t\tthis.specular = new Color( 0x111111 );\n\t\tthis.shininess = 30;\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshPhongMaterial.prototype = Object.create( Material.prototype );\n\tMeshPhongMaterial.prototype.constructor = MeshPhongMaterial;\n\n\tMeshPhongMaterial.prototype.isMeshPhongMaterial = true;\n\n\tMeshPhongMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\t\tthis.specular.copy( source.specular );\n\t\tthis.shininess = source.shininess;\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author takahirox / http://github.com/takahirox\n\t *\n\t * parameters = {\n\t * gradientMap: new THREE.Texture( )\n\t * }\n\t */\n\n\tfunction MeshToonMaterial( parameters ) {\n\n\t\tMeshPhongMaterial.call( this );\n\n\t\tthis.defines = { 'TOON': '' };\n\n\t\tthis.type = 'MeshToonMaterial';\n\n\t\tthis.gradientMap = null;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshToonMaterial.prototype = Object.create( MeshPhongMaterial.prototype );\n\tMeshToonMaterial.prototype.constructor = MeshToonMaterial;\n\n\tMeshToonMaterial.prototype.isMeshToonMaterial = true;\n\n\tMeshToonMaterial.prototype.copy = function ( source ) {\n\n\t\tMeshPhongMaterial.prototype.copy.call( this, source );\n\n\t\tthis.gradientMap = source.gradientMap;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * parameters = {\n\t * opacity: ,\n\t *\n\t * bumpMap: new THREE.Texture( ),\n\t * bumpScale: ,\n\t *\n\t * normalMap: new THREE.Texture( ),\n\t * normalScale: ,\n\t *\n\t * displacementMap: new THREE.Texture( ),\n\t * displacementScale: ,\n\t * displacementBias: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: \n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshNormalMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshNormalMaterial';\n\n\t\tthis.bumpMap = null;\n\t\tthis.bumpScale = 1;\n\n\t\tthis.normalMap = null;\n\t\tthis.normalScale = new Vector2( 1, 1 );\n\n\t\tthis.displacementMap = null;\n\t\tthis.displacementScale = 1;\n\t\tthis.displacementBias = 0;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\n\t\tthis.fog = false;\n\t\tthis.lights = false;\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshNormalMaterial.prototype = Object.create( Material.prototype );\n\tMeshNormalMaterial.prototype.constructor = MeshNormalMaterial;\n\n\tMeshNormalMaterial.prototype.isMeshNormalMaterial = true;\n\n\tMeshNormalMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.bumpMap = source.bumpMap;\n\t\tthis.bumpScale = source.bumpScale;\n\n\t\tthis.normalMap = source.normalMap;\n\t\tthis.normalScale.copy( source.normalScale );\n\n\t\tthis.displacementMap = source.displacementMap;\n\t\tthis.displacementScale = source.displacementScale;\n\t\tthis.displacementBias = source.displacementBias;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t *\n\t * map: new THREE.Texture( ),\n\t *\n\t * lightMap: new THREE.Texture( ),\n\t * lightMapIntensity: \n\t *\n\t * aoMap: new THREE.Texture( ),\n\t * aoMapIntensity: \n\t *\n\t * emissive: ,\n\t * emissiveIntensity: \n\t * emissiveMap: new THREE.Texture( ),\n\t *\n\t * specularMap: new THREE.Texture( ),\n\t *\n\t * alphaMap: new THREE.Texture( ),\n\t *\n\t * envMap: new THREE.CubeTexture( [posx, negx, posy, negy, posz, negz] ),\n\t * combine: THREE.Multiply,\n\t * reflectivity: ,\n\t * refractionRatio: ,\n\t *\n\t * wireframe: ,\n\t * wireframeLinewidth: ,\n\t *\n\t * skinning: ,\n\t * morphTargets: ,\n\t * morphNormals: \n\t * }\n\t */\n\n\tfunction MeshLambertMaterial( parameters ) {\n\n\t\tMaterial.call( this );\n\n\t\tthis.type = 'MeshLambertMaterial';\n\n\t\tthis.color = new Color( 0xffffff ); // diffuse\n\n\t\tthis.map = null;\n\n\t\tthis.lightMap = null;\n\t\tthis.lightMapIntensity = 1.0;\n\n\t\tthis.aoMap = null;\n\t\tthis.aoMapIntensity = 1.0;\n\n\t\tthis.emissive = new Color( 0x000000 );\n\t\tthis.emissiveIntensity = 1.0;\n\t\tthis.emissiveMap = null;\n\n\t\tthis.specularMap = null;\n\n\t\tthis.alphaMap = null;\n\n\t\tthis.envMap = null;\n\t\tthis.combine = MultiplyOperation;\n\t\tthis.reflectivity = 1;\n\t\tthis.refractionRatio = 0.98;\n\n\t\tthis.wireframe = false;\n\t\tthis.wireframeLinewidth = 1;\n\t\tthis.wireframeLinecap = 'round';\n\t\tthis.wireframeLinejoin = 'round';\n\n\t\tthis.skinning = false;\n\t\tthis.morphTargets = false;\n\t\tthis.morphNormals = false;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tMeshLambertMaterial.prototype = Object.create( Material.prototype );\n\tMeshLambertMaterial.prototype.constructor = MeshLambertMaterial;\n\n\tMeshLambertMaterial.prototype.isMeshLambertMaterial = true;\n\n\tMeshLambertMaterial.prototype.copy = function ( source ) {\n\n\t\tMaterial.prototype.copy.call( this, source );\n\n\t\tthis.color.copy( source.color );\n\n\t\tthis.map = source.map;\n\n\t\tthis.lightMap = source.lightMap;\n\t\tthis.lightMapIntensity = source.lightMapIntensity;\n\n\t\tthis.aoMap = source.aoMap;\n\t\tthis.aoMapIntensity = source.aoMapIntensity;\n\n\t\tthis.emissive.copy( source.emissive );\n\t\tthis.emissiveMap = source.emissiveMap;\n\t\tthis.emissiveIntensity = source.emissiveIntensity;\n\n\t\tthis.specularMap = source.specularMap;\n\n\t\tthis.alphaMap = source.alphaMap;\n\n\t\tthis.envMap = source.envMap;\n\t\tthis.combine = source.combine;\n\t\tthis.reflectivity = source.reflectivity;\n\t\tthis.refractionRatio = source.refractionRatio;\n\n\t\tthis.wireframe = source.wireframe;\n\t\tthis.wireframeLinewidth = source.wireframeLinewidth;\n\t\tthis.wireframeLinecap = source.wireframeLinecap;\n\t\tthis.wireframeLinejoin = source.wireframeLinejoin;\n\n\t\tthis.skinning = source.skinning;\n\t\tthis.morphTargets = source.morphTargets;\n\t\tthis.morphNormals = source.morphNormals;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t *\n\t * parameters = {\n\t * color: ,\n\t * opacity: ,\n\t *\n\t * linewidth: ,\n\t *\n\t * scale: ,\n\t * dashSize: ,\n\t * gapSize: \n\t * }\n\t */\n\n\tfunction LineDashedMaterial( parameters ) {\n\n\t\tLineBasicMaterial.call( this );\n\n\t\tthis.type = 'LineDashedMaterial';\n\n\t\tthis.scale = 1;\n\t\tthis.dashSize = 3;\n\t\tthis.gapSize = 1;\n\n\t\tthis.setValues( parameters );\n\n\t}\n\n\tLineDashedMaterial.prototype = Object.create( LineBasicMaterial.prototype );\n\tLineDashedMaterial.prototype.constructor = LineDashedMaterial;\n\n\tLineDashedMaterial.prototype.isLineDashedMaterial = true;\n\n\tLineDashedMaterial.prototype.copy = function ( source ) {\n\n\t\tLineBasicMaterial.prototype.copy.call( this, source );\n\n\t\tthis.scale = source.scale;\n\t\tthis.dashSize = source.dashSize;\n\t\tthis.gapSize = source.gapSize;\n\n\t\treturn this;\n\n\t};\n\n\n\n\tvar Materials = /*#__PURE__*/Object.freeze({\n\t\tShadowMaterial: ShadowMaterial,\n\t\tSpriteMaterial: SpriteMaterial,\n\t\tRawShaderMaterial: RawShaderMaterial,\n\t\tShaderMaterial: ShaderMaterial,\n\t\tPointsMaterial: PointsMaterial,\n\t\tMeshPhysicalMaterial: MeshPhysicalMaterial,\n\t\tMeshStandardMaterial: MeshStandardMaterial,\n\t\tMeshPhongMaterial: MeshPhongMaterial,\n\t\tMeshToonMaterial: MeshToonMaterial,\n\t\tMeshNormalMaterial: MeshNormalMaterial,\n\t\tMeshLambertMaterial: MeshLambertMaterial,\n\t\tMeshDepthMaterial: MeshDepthMaterial,\n\t\tMeshDistanceMaterial: MeshDistanceMaterial,\n\t\tMeshBasicMaterial: MeshBasicMaterial,\n\t\tLineDashedMaterial: LineDashedMaterial,\n\t\tLineBasicMaterial: LineBasicMaterial,\n\t\tMaterial: Material\n\t});\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar Cache = {\n\n\t\tenabled: false,\n\n\t\tfiles: {},\n\n\t\tadd: function ( key, file ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t// console.log( 'THREE.Cache', 'Adding key:', key );\n\n\t\t\tthis.files[ key ] = file;\n\n\t\t},\n\n\t\tget: function ( key ) {\n\n\t\t\tif ( this.enabled === false ) return;\n\n\t\t\t// console.log( 'THREE.Cache', 'Checking key:', key );\n\n\t\t\treturn this.files[ key ];\n\n\t\t},\n\n\t\tremove: function ( key ) {\n\n\t\t\tdelete this.files[ key ];\n\n\t\t},\n\n\t\tclear: function () {\n\n\t\t\tthis.files = {};\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LoadingManager( onLoad, onProgress, onError ) {\n\n\t\tvar scope = this;\n\n\t\tvar isLoading = false;\n\t\tvar itemsLoaded = 0;\n\t\tvar itemsTotal = 0;\n\t\tvar urlModifier = undefined;\n\n\t\tthis.onStart = undefined;\n\t\tthis.onLoad = onLoad;\n\t\tthis.onProgress = onProgress;\n\t\tthis.onError = onError;\n\n\t\tthis.itemStart = function ( url ) {\n\n\t\t\titemsTotal ++;\n\n\t\t\tif ( isLoading === false ) {\n\n\t\t\t\tif ( scope.onStart !== undefined ) {\n\n\t\t\t\t\tscope.onStart( url, itemsLoaded, itemsTotal );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tisLoading = true;\n\n\t\t};\n\n\t\tthis.itemEnd = function ( url ) {\n\n\t\t\titemsLoaded ++;\n\n\t\t\tif ( scope.onProgress !== undefined ) {\n\n\t\t\t\tscope.onProgress( url, itemsLoaded, itemsTotal );\n\n\t\t\t}\n\n\t\t\tif ( itemsLoaded === itemsTotal ) {\n\n\t\t\t\tisLoading = false;\n\n\t\t\t\tif ( scope.onLoad !== undefined ) {\n\n\t\t\t\t\tscope.onLoad();\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.itemError = function ( url ) {\n\n\t\t\tif ( scope.onError !== undefined ) {\n\n\t\t\t\tscope.onError( url );\n\n\t\t\t}\n\n\t\t};\n\n\t\tthis.resolveURL = function ( url ) {\n\n\t\t\tif ( urlModifier ) {\n\n\t\t\t\treturn urlModifier( url );\n\n\t\t\t}\n\n\t\t\treturn url;\n\n\t\t};\n\n\t\tthis.setURLModifier = function ( transform ) {\n\n\t\t\turlModifier = transform;\n\t\t\treturn this;\n\n\t\t};\n\n\t}\n\n\tvar DefaultLoadingManager = new LoadingManager();\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar loading = {};\n\n\tfunction FileLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( FileLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( url === undefined ) url = '';\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tvar scope = this;\n\n\t\t\tvar cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\t// Check if request is duplicate\n\n\t\t\tif ( loading[ url ] !== undefined ) {\n\n\t\t\t\tloading[ url ].push( {\n\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\n\t\t\t\t} );\n\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// Check for data: URI\n\t\t\tvar dataUriRegex = /^data:(.*?)(;base64)?,(.*)$/;\n\t\t\tvar dataUriRegexResult = url.match( dataUriRegex );\n\n\t\t\t// Safari can not handle Data URIs through XMLHttpRequest so process manually\n\t\t\tif ( dataUriRegexResult ) {\n\n\t\t\t\tvar mimeType = dataUriRegexResult[ 1 ];\n\t\t\t\tvar isBase64 = !! dataUriRegexResult[ 2 ];\n\t\t\t\tvar data = dataUriRegexResult[ 3 ];\n\n\t\t\t\tdata = window.decodeURIComponent( data );\n\n\t\t\t\tif ( isBase64 ) data = window.atob( data );\n\n\t\t\t\ttry {\n\n\t\t\t\t\tvar response;\n\t\t\t\t\tvar responseType = ( this.responseType || '' ).toLowerCase();\n\n\t\t\t\t\tswitch ( responseType ) {\n\n\t\t\t\t\t\tcase 'arraybuffer':\n\t\t\t\t\t\tcase 'blob':\n\n\t\t\t\t\t\t\tvar view = new Uint8Array( data.length );\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\t\t\t\t\tview[ i ] = data.charCodeAt( i );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( responseType === 'blob' ) {\n\n\t\t\t\t\t\t\t\tresponse = new Blob( [ view.buffer ], { type: mimeType } );\n\n\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\tresponse = view.buffer;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'document':\n\n\t\t\t\t\t\t\tvar parser = new DOMParser();\n\t\t\t\t\t\t\tresponse = parser.parseFromString( data, mimeType );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'json':\n\n\t\t\t\t\t\t\tresponse = JSON.parse( data );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault: // 'text' or other\n\n\t\t\t\t\t\t\tresponse = data;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( response );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t}, 0 );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\t// Wait for next browser tick like standard XMLHttpRequest event dispatching does\n\t\t\t\t\twindow.setTimeout( function () {\n\n\t\t\t\t\t\tif ( onError ) onError( error );\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t\t}, 0 );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// Initialise array for duplicate requests\n\n\t\t\t\tloading[ url ] = [];\n\n\t\t\t\tloading[ url ].push( {\n\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonProgress: onProgress,\n\t\t\t\t\tonError: onError\n\n\t\t\t\t} );\n\n\t\t\t\tvar request = new XMLHttpRequest();\n\n\t\t\t\trequest.open( 'GET', url, true );\n\n\t\t\t\trequest.addEventListener( 'load', function ( event ) {\n\n\t\t\t\t\tvar response = this.response;\n\n\t\t\t\t\tCache.add( url, response );\n\n\t\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\t\tdelete loading[ url ];\n\n\t\t\t\t\tif ( this.status === 200 || this.status === 0 ) {\n\n\t\t\t\t\t\t// Some browsers return HTTP Status 0 when using non-http protocol\n\t\t\t\t\t\t// e.g. 'file://' or 'data://'. Handle as success.\n\n\t\t\t\t\t\tif ( this.status === 0 ) console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );\n\n\t\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\t\tif ( callback.onLoad ) callback.onLoad( response );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, false );\n\n\t\t\t\trequest.addEventListener( 'progress', function ( event ) {\n\n\t\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onProgress ) callback.onProgress( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, false );\n\n\t\t\t\trequest.addEventListener( 'error', function ( event ) {\n\n\t\t\t\t\tvar callbacks = loading[ url ];\n\n\t\t\t\t\tdelete loading[ url ];\n\n\t\t\t\t\tfor ( var i = 0, il = callbacks.length; i < il; i ++ ) {\n\n\t\t\t\t\t\tvar callback = callbacks[ i ];\n\t\t\t\t\t\tif ( callback.onError ) callback.onError( event );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t}, false );\n\n\t\t\t\tif ( this.responseType !== undefined ) request.responseType = this.responseType;\n\t\t\t\tif ( this.withCredentials !== undefined ) request.withCredentials = this.withCredentials;\n\n\t\t\t\tif ( request.overrideMimeType ) request.overrideMimeType( this.mimeType !== undefined ? this.mimeType : 'text/plain' );\n\n\t\t\t\tfor ( var header in this.requestHeader ) {\n\n\t\t\t\t\trequest.setRequestHeader( header, this.requestHeader[ header ] );\n\n\t\t\t\t}\n\n\t\t\t\trequest.send( null );\n\n\t\t\t}\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\treturn request;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetResponseType: function ( value ) {\n\n\t\t\tthis.responseType = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetWithCredentials: function ( value ) {\n\n\t\t\tthis.withCredentials = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetMimeType: function ( value ) {\n\n\t\t\tthis.mimeType = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetRequestHeader: function ( value ) {\n\n\t\t\tthis.requestHeader = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t *\n\t * Abstract Base class to block based textures loader (dds, pvr, ...)\n\t */\n\n\tfunction CompressedTextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\t// override in sub classes\n\t\tthis._parser = null;\n\n\t}\n\n\tObject.assign( CompressedTextureLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar images = [];\n\n\t\t\tvar texture = new CompressedTexture();\n\t\t\ttexture.image = images;\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\t\tfunction loadTexture( i ) {\n\n\t\t\t\tloader.load( url[ i ], function ( buffer ) {\n\n\t\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\t\timages[ i ] = {\n\t\t\t\t\t\twidth: texDatas.width,\n\t\t\t\t\t\theight: texDatas.height,\n\t\t\t\t\t\tformat: texDatas.format,\n\t\t\t\t\t\tmipmaps: texDatas.mipmaps\n\t\t\t\t\t};\n\n\t\t\t\t\tloaded += 1;\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\tif ( texDatas.mipmapCount === 1 )\n\t\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\n\t\t\tif ( Array.isArray( url ) ) {\n\n\t\t\t\tvar loaded = 0;\n\n\t\t\t\tfor ( var i = 0, il = url.length; i < il; ++ i ) {\n\n\t\t\t\t\tloadTexture( i );\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// compressed cubemap texture stored in a single DDS file\n\n\t\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\t\tvar texDatas = scope._parser( buffer, true );\n\n\t\t\t\t\tif ( texDatas.isCubemap ) {\n\n\t\t\t\t\t\tvar faces = texDatas.mipmaps.length / texDatas.mipmapCount;\n\n\t\t\t\t\t\tfor ( var f = 0; f < faces; f ++ ) {\n\n\t\t\t\t\t\t\timages[ f ] = { mipmaps: [] };\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < texDatas.mipmapCount; i ++ ) {\n\n\t\t\t\t\t\t\t\timages[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );\n\t\t\t\t\t\t\t\timages[ f ].format = texDatas.format;\n\t\t\t\t\t\t\t\timages[ f ].width = texDatas.width;\n\t\t\t\t\t\t\t\timages[ f ].height = texDatas.height;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttexture.image.width = texDatas.width;\n\t\t\t\t\t\ttexture.image.height = texDatas.height;\n\t\t\t\t\t\ttexture.mipmaps = texDatas.mipmaps;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( texDatas.mipmapCount === 1 ) {\n\n\t\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttexture.format = texDatas.format;\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t}, onProgress, onError );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author Nikos M. / https://github.com/foo123/\n\t *\n\t * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)\n\t */\n\n\tfunction DataTextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\t// override in sub classes\n\t\tthis._parser = null;\n\n\t}\n\n\tObject.assign( DataTextureLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar texture = new DataTexture();\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar texData = scope._parser( buffer );\n\n\t\t\t\tif ( ! texData ) return;\n\n\t\t\t\tif ( undefined !== texData.image ) {\n\n\t\t\t\t\ttexture.image = texData.image;\n\n\t\t\t\t} else if ( undefined !== texData.data ) {\n\n\t\t\t\t\ttexture.image.width = texData.width;\n\t\t\t\t\ttexture.image.height = texData.height;\n\t\t\t\t\ttexture.image.data = texData.data;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.wrapS = undefined !== texData.wrapS ? texData.wrapS : ClampToEdgeWrapping;\n\t\t\t\ttexture.wrapT = undefined !== texData.wrapT ? texData.wrapT : ClampToEdgeWrapping;\n\n\t\t\t\ttexture.magFilter = undefined !== texData.magFilter ? texData.magFilter : LinearFilter;\n\t\t\t\ttexture.minFilter = undefined !== texData.minFilter ? texData.minFilter : LinearMipMapLinearFilter;\n\n\t\t\t\ttexture.anisotropy = undefined !== texData.anisotropy ? texData.anisotropy : 1;\n\n\t\t\t\tif ( undefined !== texData.format ) {\n\n\t\t\t\t\ttexture.format = texData.format;\n\n\t\t\t\t}\n\t\t\t\tif ( undefined !== texData.type ) {\n\n\t\t\t\t\ttexture.type = texData.type;\n\n\t\t\t\t}\n\n\t\t\t\tif ( undefined !== texData.mipmaps ) {\n\n\t\t\t\t\ttexture.mipmaps = texData.mipmaps;\n\n\t\t\t\t}\n\n\t\t\t\tif ( 1 === texData.mipmapCount ) {\n\n\t\t\t\t\ttexture.minFilter = LinearFilter;\n\n\t\t\t\t}\n\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad ) onLoad( texture, texData );\n\n\t\t\t}, onProgress, onError );\n\n\n\t\t\treturn texture;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\n\tfunction ImageLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( ImageLoader.prototype, {\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( url === undefined ) url = '';\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tvar scope = this;\n\n\t\t\tvar cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\tvar image = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'img' );\n\n\t\t\tfunction onImageLoad() {\n\n\t\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\t\tCache.add( url, this );\n\n\t\t\t\tif ( onLoad ) onLoad( this );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t}\n\n\t\t\tfunction onImageError( event ) {\n\n\t\t\t\timage.removeEventListener( 'load', onImageLoad, false );\n\t\t\t\timage.removeEventListener( 'error', onImageError, false );\n\n\t\t\t\tif ( onError ) onError( event );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t}\n\n\t\t\timage.addEventListener( 'load', onImageLoad, false );\n\t\t\timage.addEventListener( 'error', onImageError, false );\n\n\t\t\tif ( url.substr( 0, 5 ) !== 'data:' ) {\n\n\t\t\t\tif ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;\n\n\t\t\t}\n\n\t\t\tscope.manager.itemStart( url );\n\n\t\t\timage.src = url;\n\n\t\t\treturn image;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\n\tfunction CubeTextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( CubeTextureLoader.prototype, {\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( urls, onLoad, onProgress, onError ) {\n\n\t\t\tvar texture = new CubeTexture();\n\n\t\t\tvar loader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\t\tloader.setPath( this.path );\n\n\t\t\tvar loaded = 0;\n\n\t\t\tfunction loadTexture( i ) {\n\n\t\t\t\tloader.load( urls[ i ], function ( image ) {\n\n\t\t\t\t\ttexture.images[ i ] = image;\n\n\t\t\t\t\tloaded ++;\n\n\t\t\t\t\tif ( loaded === 6 ) {\n\n\t\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\t\tif ( onLoad ) onLoad( texture );\n\n\t\t\t\t\t}\n\n\t\t\t\t}, undefined, onError );\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < urls.length; ++ i ) {\n\n\t\t\t\tloadTexture( i );\n\n\t\t\t}\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\n\tfunction TextureLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( TextureLoader.prototype, {\n\n\t\tcrossOrigin: 'Anonymous',\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar texture = new Texture();\n\n\t\t\tvar loader = new ImageLoader( this.manager );\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\t\t\tloader.setPath( this.path );\n\n\t\t\tloader.load( url, function ( image ) {\n\n\t\t\t\ttexture.image = image;\n\n\t\t\t\t// JPEGs can't have an alpha channel, so memory can be saved by storing them as RGB.\n\t\t\t\tvar isJPEG = url.search( /\\.(jpg|jpeg)$/ ) > 0 || url.search( /^data\\:image\\/jpeg/ ) === 0;\n\n\t\t\t\ttexture.format = isJPEG ? RGBFormat : RGBAFormat;\n\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\tif ( onLoad !== undefined ) {\n\n\t\t\t\t\tonLoad( texture );\n\n\t\t\t\t}\n\n\t\t\t}, onProgress, onError );\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * Extensible curve object\n\t *\n\t * Some common of curve methods:\n\t * .getPoint( t, optionalTarget ), .getTangent( t )\n\t * .getPointAt( u, optionalTarget ), .getTangentAt( u )\n\t * .getPoints(), .getSpacedPoints()\n\t * .getLength()\n\t * .updateArcLengths()\n\t *\n\t * This following curves inherit from THREE.Curve:\n\t *\n\t * -- 2D curves --\n\t * THREE.ArcCurve\n\t * THREE.CubicBezierCurve\n\t * THREE.EllipseCurve\n\t * THREE.LineCurve\n\t * THREE.QuadraticBezierCurve\n\t * THREE.SplineCurve\n\t *\n\t * -- 3D curves --\n\t * THREE.CatmullRomCurve3\n\t * THREE.CubicBezierCurve3\n\t * THREE.LineCurve3\n\t * THREE.QuadraticBezierCurve3\n\t *\n\t * A series of curves can be represented as a THREE.CurvePath.\n\t *\n\t **/\n\n\t/**************************************************************\n\t *\tAbstract Curve base class\n\t **************************************************************/\n\n\tfunction Curve() {\n\n\t\tthis.type = 'Curve';\n\n\t\tthis.arcLengthDivisions = 200;\n\n\t}\n\n\tObject.assign( Curve.prototype, {\n\n\t\t// Virtual base class method to overwrite and implement in subclasses\n\t\t//\t- t [0 .. 1]\n\n\t\tgetPoint: function ( /* t, optionalTarget */ ) {\n\n\t\t\tconsole.warn( 'THREE.Curve: .getPoint() not implemented.' );\n\t\t\treturn null;\n\n\t\t},\n\n\t\t// Get point at relative position in curve according to arc length\n\t\t// - u [0 .. 1]\n\n\t\tgetPointAt: function ( u, optionalTarget ) {\n\n\t\t\tvar t = this.getUtoTmapping( u );\n\t\t\treturn this.getPoint( t, optionalTarget );\n\n\t\t},\n\n\t\t// Get sequence of points using getPoint( t )\n\n\t\tgetPoints: function ( divisions ) {\n\n\t\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\t\tvar points = [];\n\n\t\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\t\tpoints.push( this.getPoint( d / divisions ) );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t// Get sequence of points using getPointAt( u )\n\n\t\tgetSpacedPoints: function ( divisions ) {\n\n\t\t\tif ( divisions === undefined ) divisions = 5;\n\n\t\t\tvar points = [];\n\n\t\t\tfor ( var d = 0; d <= divisions; d ++ ) {\n\n\t\t\t\tpoints.push( this.getPointAt( d / divisions ) );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\t// Get total curve arc length\n\n\t\tgetLength: function () {\n\n\t\t\tvar lengths = this.getLengths();\n\t\t\treturn lengths[ lengths.length - 1 ];\n\n\t\t},\n\n\t\t// Get list of cumulative segment lengths\n\n\t\tgetLengths: function ( divisions ) {\n\n\t\t\tif ( divisions === undefined ) divisions = this.arcLengthDivisions;\n\n\t\t\tif ( this.cacheArcLengths &&\n\t\t\t\t( this.cacheArcLengths.length === divisions + 1 ) &&\n\t\t\t\t! this.needsUpdate ) {\n\n\t\t\t\treturn this.cacheArcLengths;\n\n\t\t\t}\n\n\t\t\tthis.needsUpdate = false;\n\n\t\t\tvar cache = [];\n\t\t\tvar current, last = this.getPoint( 0 );\n\t\t\tvar p, sum = 0;\n\n\t\t\tcache.push( 0 );\n\n\t\t\tfor ( p = 1; p <= divisions; p ++ ) {\n\n\t\t\t\tcurrent = this.getPoint( p / divisions );\n\t\t\t\tsum += current.distanceTo( last );\n\t\t\t\tcache.push( sum );\n\t\t\t\tlast = current;\n\n\t\t\t}\n\n\t\t\tthis.cacheArcLengths = cache;\n\n\t\t\treturn cache; // { sums: cache, sum: sum }; Sum is in the last element.\n\n\t\t},\n\n\t\tupdateArcLengths: function () {\n\n\t\t\tthis.needsUpdate = true;\n\t\t\tthis.getLengths();\n\n\t\t},\n\n\t\t// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant\n\n\t\tgetUtoTmapping: function ( u, distance ) {\n\n\t\t\tvar arcLengths = this.getLengths();\n\n\t\t\tvar i = 0, il = arcLengths.length;\n\n\t\t\tvar targetArcLength; // The targeted u distance value to get\n\n\t\t\tif ( distance ) {\n\n\t\t\t\ttargetArcLength = distance;\n\n\t\t\t} else {\n\n\t\t\t\ttargetArcLength = u * arcLengths[ il - 1 ];\n\n\t\t\t}\n\n\t\t\t// binary search for the index with largest value smaller than target u distance\n\n\t\t\tvar low = 0, high = il - 1, comparison;\n\n\t\t\twhile ( low <= high ) {\n\n\t\t\t\ti = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats\n\n\t\t\t\tcomparison = arcLengths[ i ] - targetArcLength;\n\n\t\t\t\tif ( comparison < 0 ) {\n\n\t\t\t\t\tlow = i + 1;\n\n\t\t\t\t} else if ( comparison > 0 ) {\n\n\t\t\t\t\thigh = i - 1;\n\n\t\t\t\t} else {\n\n\t\t\t\t\thigh = i;\n\t\t\t\t\tbreak;\n\n\t\t\t\t\t// DONE\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\ti = high;\n\n\t\t\tif ( arcLengths[ i ] === targetArcLength ) {\n\n\t\t\t\treturn i / ( il - 1 );\n\n\t\t\t}\n\n\t\t\t// we could get finer grain at lengths, or use simple interpolation between two points\n\n\t\t\tvar lengthBefore = arcLengths[ i ];\n\t\t\tvar lengthAfter = arcLengths[ i + 1 ];\n\n\t\t\tvar segmentLength = lengthAfter - lengthBefore;\n\n\t\t\t// determine where we are between the 'before' and 'after' points\n\n\t\t\tvar segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;\n\n\t\t\t// add that fractional amount to t\n\n\t\t\tvar t = ( i + segmentFraction ) / ( il - 1 );\n\n\t\t\treturn t;\n\n\t\t},\n\n\t\t// Returns a unit vector tangent at t\n\t\t// In case any sub curve does not implement its tangent derivation,\n\t\t// 2 points a small delta apart will be used to find its gradient\n\t\t// which seems to give a reasonable approximation\n\n\t\tgetTangent: function ( t ) {\n\n\t\t\tvar delta = 0.0001;\n\t\t\tvar t1 = t - delta;\n\t\t\tvar t2 = t + delta;\n\n\t\t\t// Capping in case of danger\n\n\t\t\tif ( t1 < 0 ) t1 = 0;\n\t\t\tif ( t2 > 1 ) t2 = 1;\n\n\t\t\tvar pt1 = this.getPoint( t1 );\n\t\t\tvar pt2 = this.getPoint( t2 );\n\n\t\t\tvar vec = pt2.clone().sub( pt1 );\n\t\t\treturn vec.normalize();\n\n\t\t},\n\n\t\tgetTangentAt: function ( u ) {\n\n\t\t\tvar t = this.getUtoTmapping( u );\n\t\t\treturn this.getTangent( t );\n\n\t\t},\n\n\t\tcomputeFrenetFrames: function ( segments, closed ) {\n\n\t\t\t// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf\n\n\t\t\tvar normal = new Vector3();\n\n\t\t\tvar tangents = [];\n\t\t\tvar normals = [];\n\t\t\tvar binormals = [];\n\n\t\t\tvar vec = new Vector3();\n\t\t\tvar mat = new Matrix4();\n\n\t\t\tvar i, u, theta;\n\n\t\t\t// compute the tangent vectors for each segment on the curve\n\n\t\t\tfor ( i = 0; i <= segments; i ++ ) {\n\n\t\t\t\tu = i / segments;\n\n\t\t\t\ttangents[ i ] = this.getTangentAt( u );\n\t\t\t\ttangents[ i ].normalize();\n\n\t\t\t}\n\n\t\t\t// select an initial normal vector perpendicular to the first tangent vector,\n\t\t\t// and in the direction of the minimum tangent xyz component\n\n\t\t\tnormals[ 0 ] = new Vector3();\n\t\t\tbinormals[ 0 ] = new Vector3();\n\t\t\tvar min = Number.MAX_VALUE;\n\t\t\tvar tx = Math.abs( tangents[ 0 ].x );\n\t\t\tvar ty = Math.abs( tangents[ 0 ].y );\n\t\t\tvar tz = Math.abs( tangents[ 0 ].z );\n\n\t\t\tif ( tx <= min ) {\n\n\t\t\t\tmin = tx;\n\t\t\t\tnormal.set( 1, 0, 0 );\n\n\t\t\t}\n\n\t\t\tif ( ty <= min ) {\n\n\t\t\t\tmin = ty;\n\t\t\t\tnormal.set( 0, 1, 0 );\n\n\t\t\t}\n\n\t\t\tif ( tz <= min ) {\n\n\t\t\t\tnormal.set( 0, 0, 1 );\n\n\t\t\t}\n\n\t\t\tvec.crossVectors( tangents[ 0 ], normal ).normalize();\n\n\t\t\tnormals[ 0 ].crossVectors( tangents[ 0 ], vec );\n\t\t\tbinormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );\n\n\n\t\t\t// compute the slowly-varying normal and binormal vectors for each segment on the curve\n\n\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\tnormals[ i ] = normals[ i - 1 ].clone();\n\n\t\t\t\tbinormals[ i ] = binormals[ i - 1 ].clone();\n\n\t\t\t\tvec.crossVectors( tangents[ i - 1 ], tangents[ i ] );\n\n\t\t\t\tif ( vec.length() > Number.EPSILON ) {\n\n\t\t\t\t\tvec.normalize();\n\n\t\t\t\t\ttheta = Math.acos( _Math.clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors\n\n\t\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );\n\n\t\t\t\t}\n\n\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t}\n\n\t\t\t// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same\n\n\t\t\tif ( closed === true ) {\n\n\t\t\t\ttheta = Math.acos( _Math.clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );\n\t\t\t\ttheta /= segments;\n\n\t\t\t\tif ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {\n\n\t\t\t\t\ttheta = - theta;\n\n\t\t\t\t}\n\n\t\t\t\tfor ( i = 1; i <= segments; i ++ ) {\n\n\t\t\t\t\t// twist a little...\n\t\t\t\t\tnormals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );\n\t\t\t\t\tbinormals[ i ].crossVectors( tangents[ i ], normals[ i ] );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\ttangents: tangents,\n\t\t\t\tnormals: normals,\n\t\t\t\tbinormals: binormals\n\t\t\t};\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.arcLengthDivisions = source.arcLengthDivisions;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = {\n\t\t\t\tmetadata: {\n\t\t\t\t\tversion: 4.5,\n\t\t\t\t\ttype: 'Curve',\n\t\t\t\t\tgenerator: 'Curve.toJSON'\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tdata.arcLengthDivisions = this.arcLengthDivisions;\n\t\t\tdata.type = this.type;\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tthis.arcLengthDivisions = json.arcLengthDivisions;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\tfunction EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'EllipseCurve';\n\n\t\tthis.aX = aX || 0;\n\t\tthis.aY = aY || 0;\n\n\t\tthis.xRadius = xRadius || 1;\n\t\tthis.yRadius = yRadius || 1;\n\n\t\tthis.aStartAngle = aStartAngle || 0;\n\t\tthis.aEndAngle = aEndAngle || 2 * Math.PI;\n\n\t\tthis.aClockwise = aClockwise || false;\n\n\t\tthis.aRotation = aRotation || 0;\n\n\t}\n\n\tEllipseCurve.prototype = Object.create( Curve.prototype );\n\tEllipseCurve.prototype.constructor = EllipseCurve;\n\n\tEllipseCurve.prototype.isEllipseCurve = true;\n\n\tEllipseCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar twoPi = Math.PI * 2;\n\t\tvar deltaAngle = this.aEndAngle - this.aStartAngle;\n\t\tvar samePoints = Math.abs( deltaAngle ) < Number.EPSILON;\n\n\t\t// ensures that deltaAngle is 0 .. 2 PI\n\t\twhile ( deltaAngle < 0 ) deltaAngle += twoPi;\n\t\twhile ( deltaAngle > twoPi ) deltaAngle -= twoPi;\n\n\t\tif ( deltaAngle < Number.EPSILON ) {\n\n\t\t\tif ( samePoints ) {\n\n\t\t\t\tdeltaAngle = 0;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.aClockwise === true && ! samePoints ) {\n\n\t\t\tif ( deltaAngle === twoPi ) {\n\n\t\t\t\tdeltaAngle = - twoPi;\n\n\t\t\t} else {\n\n\t\t\t\tdeltaAngle = deltaAngle - twoPi;\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar angle = this.aStartAngle + t * deltaAngle;\n\t\tvar x = this.aX + this.xRadius * Math.cos( angle );\n\t\tvar y = this.aY + this.yRadius * Math.sin( angle );\n\n\t\tif ( this.aRotation !== 0 ) {\n\n\t\t\tvar cos = Math.cos( this.aRotation );\n\t\t\tvar sin = Math.sin( this.aRotation );\n\n\t\t\tvar tx = x - this.aX;\n\t\t\tvar ty = y - this.aY;\n\n\t\t\t// Rotate the point about the center of the ellipse.\n\t\t\tx = tx * cos - ty * sin + this.aX;\n\t\t\ty = tx * sin + ty * cos + this.aY;\n\n\t\t}\n\n\t\treturn point.set( x, y );\n\n\t};\n\n\tEllipseCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.aX = source.aX;\n\t\tthis.aY = source.aY;\n\n\t\tthis.xRadius = source.xRadius;\n\t\tthis.yRadius = source.yRadius;\n\n\t\tthis.aStartAngle = source.aStartAngle;\n\t\tthis.aEndAngle = source.aEndAngle;\n\n\t\tthis.aClockwise = source.aClockwise;\n\n\t\tthis.aRotation = source.aRotation;\n\n\t\treturn this;\n\n\t};\n\n\n\tEllipseCurve.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.aX = this.aX;\n\t\tdata.aY = this.aY;\n\n\t\tdata.xRadius = this.xRadius;\n\t\tdata.yRadius = this.yRadius;\n\n\t\tdata.aStartAngle = this.aStartAngle;\n\t\tdata.aEndAngle = this.aEndAngle;\n\n\t\tdata.aClockwise = this.aClockwise;\n\n\t\tdata.aRotation = this.aRotation;\n\n\t\treturn data;\n\n\t};\n\n\tEllipseCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.aX = json.aX;\n\t\tthis.aY = json.aY;\n\n\t\tthis.xRadius = json.xRadius;\n\t\tthis.yRadius = json.yRadius;\n\n\t\tthis.aStartAngle = json.aStartAngle;\n\t\tthis.aEndAngle = json.aEndAngle;\n\n\t\tthis.aClockwise = json.aClockwise;\n\n\t\tthis.aRotation = json.aRotation;\n\n\t\treturn this;\n\n\t};\n\n\tfunction ArcCurve( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\tEllipseCurve.call( this, aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\tthis.type = 'ArcCurve';\n\n\t}\n\n\tArcCurve.prototype = Object.create( EllipseCurve.prototype );\n\tArcCurve.prototype.constructor = ArcCurve;\n\n\tArcCurve.prototype.isArcCurve = true;\n\n\t/**\n\t * @author zz85 https://github.com/zz85\n\t *\n\t * Centripetal CatmullRom Curve - which is useful for avoiding\n\t * cusps and self-intersections in non-uniform catmull rom curves.\n\t * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf\n\t *\n\t * curve.type accepts centripetal(default), chordal and catmullrom\n\t * curve.tension is used for catmullrom which defaults to 0.5\n\t */\n\n\n\t/*\n\tBased on an optimized c++ solution in\n\t - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/\n\t - http://ideone.com/NoEbVM\n\n\tThis CubicPoly class could be used for reusing some variables and calculations,\n\tbut for three.js curve use, it could be possible inlined and flatten into a single function call\n\twhich can be placed in CurveUtils.\n\t*/\n\n\tfunction CubicPoly() {\n\n\t\tvar c0 = 0, c1 = 0, c2 = 0, c3 = 0;\n\n\t\t/*\n\t\t * Compute coefficients for a cubic polynomial\n\t\t * p(s) = c0 + c1*s + c2*s^2 + c3*s^3\n\t\t * such that\n\t\t * p(0) = x0, p(1) = x1\n\t\t * and\n\t\t * p'(0) = t0, p'(1) = t1.\n\t\t */\n\t\tfunction init( x0, x1, t0, t1 ) {\n\n\t\t\tc0 = x0;\n\t\t\tc1 = t0;\n\t\t\tc2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;\n\t\t\tc3 = 2 * x0 - 2 * x1 + t0 + t1;\n\n\t\t}\n\n\t\treturn {\n\n\t\t\tinitCatmullRom: function ( x0, x1, x2, x3, tension ) {\n\n\t\t\t\tinit( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );\n\n\t\t\t},\n\n\t\t\tinitNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {\n\n\t\t\t\t// compute tangents when parameterized in [t1,t2]\n\t\t\t\tvar t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;\n\t\t\t\tvar t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;\n\n\t\t\t\t// rescale tangents for parametrization in [0,1]\n\t\t\t\tt1 *= dt1;\n\t\t\t\tt2 *= dt1;\n\n\t\t\t\tinit( x1, x2, t1, t2 );\n\n\t\t\t},\n\n\t\t\tcalc: function ( t ) {\n\n\t\t\t\tvar t2 = t * t;\n\t\t\t\tvar t3 = t2 * t;\n\t\t\t\treturn c0 + c1 * t + c2 * t2 + c3 * t3;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\t//\n\n\tvar tmp = new Vector3();\n\tvar px = new CubicPoly(), py = new CubicPoly(), pz = new CubicPoly();\n\n\tfunction CatmullRomCurve3( points, closed, curveType, tension ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CatmullRomCurve3';\n\n\t\tthis.points = points || [];\n\t\tthis.closed = closed || false;\n\t\tthis.curveType = curveType || 'centripetal';\n\t\tthis.tension = tension || 0.5;\n\n\t}\n\n\tCatmullRomCurve3.prototype = Object.create( Curve.prototype );\n\tCatmullRomCurve3.prototype.constructor = CatmullRomCurve3;\n\n\tCatmullRomCurve3.prototype.isCatmullRomCurve3 = true;\n\n\tCatmullRomCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\n\n\t\tvar points = this.points;\n\t\tvar l = points.length;\n\n\t\tvar p = ( l - ( this.closed ? 0 : 1 ) ) * t;\n\t\tvar intPoint = Math.floor( p );\n\t\tvar weight = p - intPoint;\n\n\t\tif ( this.closed ) {\n\n\t\t\tintPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;\n\n\t\t} else if ( weight === 0 && intPoint === l - 1 ) {\n\n\t\t\tintPoint = l - 2;\n\t\t\tweight = 1;\n\n\t\t}\n\n\t\tvar p0, p1, p2, p3; // 4 points\n\n\t\tif ( this.closed || intPoint > 0 ) {\n\n\t\t\tp0 = points[ ( intPoint - 1 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate first point\n\t\t\ttmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );\n\t\t\tp0 = tmp;\n\n\t\t}\n\n\t\tp1 = points[ intPoint % l ];\n\t\tp2 = points[ ( intPoint + 1 ) % l ];\n\n\t\tif ( this.closed || intPoint + 2 < l ) {\n\n\t\t\tp3 = points[ ( intPoint + 2 ) % l ];\n\n\t\t} else {\n\n\t\t\t// extrapolate last point\n\t\t\ttmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );\n\t\t\tp3 = tmp;\n\n\t\t}\n\n\t\tif ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {\n\n\t\t\t// init Centripetal / Chordal Catmull-Rom\n\t\t\tvar pow = this.curveType === 'chordal' ? 0.5 : 0.25;\n\t\t\tvar dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );\n\t\t\tvar dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );\n\t\t\tvar dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );\n\n\t\t\t// safety check for repeated points\n\t\t\tif ( dt1 < 1e-4 ) dt1 = 1.0;\n\t\t\tif ( dt0 < 1e-4 ) dt0 = dt1;\n\t\t\tif ( dt2 < 1e-4 ) dt2 = dt1;\n\n\t\t\tpx.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );\n\t\t\tpy.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );\n\t\t\tpz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );\n\n\t\t} else if ( this.curveType === 'catmullrom' ) {\n\n\t\t\tpx.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );\n\t\t\tpy.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );\n\t\t\tpz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );\n\n\t\t}\n\n\t\tpoint.set(\n\t\t\tpx.calc( weight ),\n\t\t\tpy.calc( weight ),\n\t\t\tpz.calc( weight )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tCatmullRomCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.points = [];\n\n\t\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tvar point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\tthis.closed = source.closed;\n\t\tthis.curveType = source.curveType;\n\t\tthis.tension = source.tension;\n\n\t\treturn this;\n\n\t};\n\n\tCatmullRomCurve3.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.points = [];\n\n\t\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tvar point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\tdata.closed = this.closed;\n\t\tdata.curveType = this.curveType;\n\t\tdata.tension = this.tension;\n\n\t\treturn data;\n\n\t};\n\n\tCatmullRomCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.points = [];\n\n\t\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tvar point = json.points[ i ];\n\t\t\tthis.points.push( new Vector3().fromArray( point ) );\n\n\t\t}\n\n\t\tthis.closed = json.closed;\n\t\tthis.curveType = json.curveType;\n\t\tthis.tension = json.tension;\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t *\n\t * Bezier Curves formulas obtained from\n\t * http://en.wikipedia.org/wiki/Bézier_curve\n\t */\n\n\tfunction CatmullRom( t, p0, p1, p2, p3 ) {\n\n\t\tvar v0 = ( p2 - p0 ) * 0.5;\n\t\tvar v1 = ( p3 - p1 ) * 0.5;\n\t\tvar t2 = t * t;\n\t\tvar t3 = t * t2;\n\t\treturn ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;\n\n\t}\n\n\t//\n\n\tfunction QuadraticBezierP0( t, p ) {\n\n\t\tvar k = 1 - t;\n\t\treturn k * k * p;\n\n\t}\n\n\tfunction QuadraticBezierP1( t, p ) {\n\n\t\treturn 2 * ( 1 - t ) * t * p;\n\n\t}\n\n\tfunction QuadraticBezierP2( t, p ) {\n\n\t\treturn t * t * p;\n\n\t}\n\n\tfunction QuadraticBezier( t, p0, p1, p2 ) {\n\n\t\treturn QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +\n\t\t\tQuadraticBezierP2( t, p2 );\n\n\t}\n\n\t//\n\n\tfunction CubicBezierP0( t, p ) {\n\n\t\tvar k = 1 - t;\n\t\treturn k * k * k * p;\n\n\t}\n\n\tfunction CubicBezierP1( t, p ) {\n\n\t\tvar k = 1 - t;\n\t\treturn 3 * k * k * t * p;\n\n\t}\n\n\tfunction CubicBezierP2( t, p ) {\n\n\t\treturn 3 * ( 1 - t ) * t * t * p;\n\n\t}\n\n\tfunction CubicBezierP3( t, p ) {\n\n\t\treturn t * t * t * p;\n\n\t}\n\n\tfunction CubicBezier( t, p0, p1, p2, p3 ) {\n\n\t\treturn CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +\n\t\t\tCubicBezierP3( t, p3 );\n\n\t}\n\n\tfunction CubicBezierCurve( v0, v1, v2, v3 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CubicBezierCurve';\n\n\t\tthis.v0 = v0 || new Vector2();\n\t\tthis.v1 = v1 || new Vector2();\n\t\tthis.v2 = v2 || new Vector2();\n\t\tthis.v3 = v3 || new Vector2();\n\n\t}\n\n\tCubicBezierCurve.prototype = Object.create( Curve.prototype );\n\tCubicBezierCurve.prototype.constructor = CubicBezierCurve;\n\n\tCubicBezierCurve.prototype.isCubicBezierCurve = true;\n\n\tCubicBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tCubicBezierCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tCubicBezierCurve.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tCubicBezierCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction CubicBezierCurve3( v0, v1, v2, v3 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CubicBezierCurve3';\n\n\t\tthis.v0 = v0 || new Vector3();\n\t\tthis.v1 = v1 || new Vector3();\n\t\tthis.v2 = v2 || new Vector3();\n\t\tthis.v3 = v3 || new Vector3();\n\n\t}\n\n\tCubicBezierCurve3.prototype = Object.create( Curve.prototype );\n\tCubicBezierCurve3.prototype.constructor = CubicBezierCurve3;\n\n\tCubicBezierCurve3.prototype.isCubicBezierCurve3 = true;\n\n\tCubicBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\n\n\t\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;\n\n\t\tpoint.set(\n\t\t\tCubicBezier( t, v0.x, v1.x, v2.x, v3.x ),\n\t\t\tCubicBezier( t, v0.y, v1.y, v2.y, v3.y ),\n\t\t\tCubicBezier( t, v0.z, v1.z, v2.z, v3.z )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tCubicBezierCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\t\tthis.v3.copy( source.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tCubicBezierCurve3.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\t\tdata.v3 = this.v3.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tCubicBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\t\tthis.v3.fromArray( json.v3 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction LineCurve( v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'LineCurve';\n\n\t\tthis.v1 = v1 || new Vector2();\n\t\tthis.v2 = v2 || new Vector2();\n\n\t}\n\n\tLineCurve.prototype = Object.create( Curve.prototype );\n\tLineCurve.prototype.constructor = LineCurve;\n\n\tLineCurve.prototype.isLineCurve = true;\n\n\tLineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t};\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\n\tLineCurve.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t};\n\n\tLineCurve.prototype.getTangent = function ( /* t */ ) {\n\n\t\tvar tangent = this.v2.clone().sub( this.v1 );\n\n\t\treturn tangent.normalize();\n\n\t};\n\n\tLineCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tLineCurve.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tLineCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction LineCurve3( v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'LineCurve3';\n\n\t\tthis.v1 = v1 || new Vector3();\n\t\tthis.v2 = v2 || new Vector3();\n\n\t}\n\n\tLineCurve3.prototype = Object.create( Curve.prototype );\n\tLineCurve3.prototype.constructor = LineCurve3;\n\n\tLineCurve3.prototype.isLineCurve3 = true;\n\n\tLineCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\n\n\t\tif ( t === 1 ) {\n\n\t\t\tpoint.copy( this.v2 );\n\n\t\t} else {\n\n\t\t\tpoint.copy( this.v2 ).sub( this.v1 );\n\t\t\tpoint.multiplyScalar( t ).add( this.v1 );\n\n\t\t}\n\n\t\treturn point;\n\n\t};\n\n\t// Line curve is linear, so we can overwrite default getPointAt\n\n\tLineCurve3.prototype.getPointAt = function ( u, optionalTarget ) {\n\n\t\treturn this.getPoint( u, optionalTarget );\n\n\t};\n\n\tLineCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tLineCurve3.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tLineCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction QuadraticBezierCurve( v0, v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'QuadraticBezierCurve';\n\n\t\tthis.v0 = v0 || new Vector2();\n\t\tthis.v1 = v1 || new Vector2();\n\t\tthis.v2 = v2 || new Vector2();\n\n\t}\n\n\tQuadraticBezierCurve.prototype = Object.create( Curve.prototype );\n\tQuadraticBezierCurve.prototype.constructor = QuadraticBezierCurve;\n\n\tQuadraticBezierCurve.prototype.isQuadraticBezierCurve = true;\n\n\tQuadraticBezierCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tQuadraticBezierCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tQuadraticBezierCurve.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tQuadraticBezierCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction QuadraticBezierCurve3( v0, v1, v2 ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'QuadraticBezierCurve3';\n\n\t\tthis.v0 = v0 || new Vector3();\n\t\tthis.v1 = v1 || new Vector3();\n\t\tthis.v2 = v2 || new Vector3();\n\n\t}\n\n\tQuadraticBezierCurve3.prototype = Object.create( Curve.prototype );\n\tQuadraticBezierCurve3.prototype.constructor = QuadraticBezierCurve3;\n\n\tQuadraticBezierCurve3.prototype.isQuadraticBezierCurve3 = true;\n\n\tQuadraticBezierCurve3.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector3();\n\n\t\tvar v0 = this.v0, v1 = this.v1, v2 = this.v2;\n\n\t\tpoint.set(\n\t\t\tQuadraticBezier( t, v0.x, v1.x, v2.x ),\n\t\t\tQuadraticBezier( t, v0.y, v1.y, v2.y ),\n\t\t\tQuadraticBezier( t, v0.z, v1.z, v2.z )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tQuadraticBezierCurve3.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.v0.copy( source.v0 );\n\t\tthis.v1.copy( source.v1 );\n\t\tthis.v2.copy( source.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tQuadraticBezierCurve3.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.v0 = this.v0.toArray();\n\t\tdata.v1 = this.v1.toArray();\n\t\tdata.v2 = this.v2.toArray();\n\n\t\treturn data;\n\n\t};\n\n\tQuadraticBezierCurve3.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.v0.fromArray( json.v0 );\n\t\tthis.v1.fromArray( json.v1 );\n\t\tthis.v2.fromArray( json.v2 );\n\n\t\treturn this;\n\n\t};\n\n\tfunction SplineCurve( points /* array of Vector2 */ ) {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'SplineCurve';\n\n\t\tthis.points = points || [];\n\n\t}\n\n\tSplineCurve.prototype = Object.create( Curve.prototype );\n\tSplineCurve.prototype.constructor = SplineCurve;\n\n\tSplineCurve.prototype.isSplineCurve = true;\n\n\tSplineCurve.prototype.getPoint = function ( t, optionalTarget ) {\n\n\t\tvar point = optionalTarget || new Vector2();\n\n\t\tvar points = this.points;\n\t\tvar p = ( points.length - 1 ) * t;\n\n\t\tvar intPoint = Math.floor( p );\n\t\tvar weight = p - intPoint;\n\n\t\tvar p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];\n\t\tvar p1 = points[ intPoint ];\n\t\tvar p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];\n\t\tvar p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];\n\n\t\tpoint.set(\n\t\t\tCatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),\n\t\t\tCatmullRom( weight, p0.y, p1.y, p2.y, p3.y )\n\t\t);\n\n\t\treturn point;\n\n\t};\n\n\tSplineCurve.prototype.copy = function ( source ) {\n\n\t\tCurve.prototype.copy.call( this, source );\n\n\t\tthis.points = [];\n\n\t\tfor ( var i = 0, l = source.points.length; i < l; i ++ ) {\n\n\t\t\tvar point = source.points[ i ];\n\n\t\t\tthis.points.push( point.clone() );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\tSplineCurve.prototype.toJSON = function () {\n\n\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\tdata.points = [];\n\n\t\tfor ( var i = 0, l = this.points.length; i < l; i ++ ) {\n\n\t\t\tvar point = this.points[ i ];\n\t\t\tdata.points.push( point.toArray() );\n\n\t\t}\n\n\t\treturn data;\n\n\t};\n\n\tSplineCurve.prototype.fromJSON = function ( json ) {\n\n\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\tthis.points = [];\n\n\t\tfor ( var i = 0, l = json.points.length; i < l; i ++ ) {\n\n\t\t\tvar point = json.points[ i ];\n\t\t\tthis.points.push( new Vector2().fromArray( point ) );\n\n\t\t}\n\n\t\treturn this;\n\n\t};\n\n\n\n\tvar Curves = /*#__PURE__*/Object.freeze({\n\t\tArcCurve: ArcCurve,\n\t\tCatmullRomCurve3: CatmullRomCurve3,\n\t\tCubicBezierCurve: CubicBezierCurve,\n\t\tCubicBezierCurve3: CubicBezierCurve3,\n\t\tEllipseCurve: EllipseCurve,\n\t\tLineCurve: LineCurve,\n\t\tLineCurve3: LineCurve3,\n\t\tQuadraticBezierCurve: QuadraticBezierCurve,\n\t\tQuadraticBezierCurve3: QuadraticBezierCurve3,\n\t\tSplineCurve: SplineCurve\n\t});\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t *\n\t **/\n\n\t/**************************************************************\n\t *\tCurved Path - a curve path is simply a array of connected\n\t * curves, but retains the api of a curve\n\t **************************************************************/\n\n\tfunction CurvePath() {\n\n\t\tCurve.call( this );\n\n\t\tthis.type = 'CurvePath';\n\n\t\tthis.curves = [];\n\t\tthis.autoClose = false; // Automatically closes the path\n\n\t}\n\n\tCurvePath.prototype = Object.assign( Object.create( Curve.prototype ), {\n\n\t\tconstructor: CurvePath,\n\n\t\tadd: function ( curve ) {\n\n\t\t\tthis.curves.push( curve );\n\n\t\t},\n\n\t\tclosePath: function () {\n\n\t\t\t// Add a line curve if start and end of lines are not connected\n\t\t\tvar startPoint = this.curves[ 0 ].getPoint( 0 );\n\t\t\tvar endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );\n\n\t\t\tif ( ! startPoint.equals( endPoint ) ) {\n\n\t\t\t\tthis.curves.push( new LineCurve( endPoint, startPoint ) );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// To get accurate point with reference to\n\t\t// entire path distance at time t,\n\t\t// following has to be done:\n\n\t\t// 1. Length of each sub path have to be known\n\t\t// 2. Locate and identify type of curve\n\t\t// 3. Get t for the curve\n\t\t// 4. Return curve.getPointAt(t')\n\n\t\tgetPoint: function ( t ) {\n\n\t\t\tvar d = t * this.getLength();\n\t\t\tvar curveLengths = this.getCurveLengths();\n\t\t\tvar i = 0;\n\n\t\t\t// To think about boundaries points.\n\n\t\t\twhile ( i < curveLengths.length ) {\n\n\t\t\t\tif ( curveLengths[ i ] >= d ) {\n\n\t\t\t\t\tvar diff = curveLengths[ i ] - d;\n\t\t\t\t\tvar curve = this.curves[ i ];\n\n\t\t\t\t\tvar segmentLength = curve.getLength();\n\t\t\t\t\tvar u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;\n\n\t\t\t\t\treturn curve.getPointAt( u );\n\n\t\t\t\t}\n\n\t\t\t\ti ++;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t\t// loop where sum != 0, sum > d , sum+1 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {\n\n\t\t\t\tpoints.push( points[ 0 ] );\n\n\t\t\t}\n\n\t\t\treturn points;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tCurve.prototype.copy.call( this, source );\n\n\t\t\tthis.curves = [];\n\n\t\t\tfor ( var i = 0, l = source.curves.length; i < l; i ++ ) {\n\n\t\t\t\tvar curve = source.curves[ i ];\n\n\t\t\t\tthis.curves.push( curve.clone() );\n\n\t\t\t}\n\n\t\t\tthis.autoClose = source.autoClose;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = Curve.prototype.toJSON.call( this );\n\n\t\t\tdata.autoClose = this.autoClose;\n\t\t\tdata.curves = [];\n\n\t\t\tfor ( var i = 0, l = this.curves.length; i < l; i ++ ) {\n\n\t\t\t\tvar curve = this.curves[ i ];\n\t\t\t\tdata.curves.push( curve.toJSON() );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tCurve.prototype.fromJSON.call( this, json );\n\n\t\t\tthis.autoClose = json.autoClose;\n\t\t\tthis.curves = [];\n\n\t\t\tfor ( var i = 0, l = json.curves.length; i < l; i ++ ) {\n\n\t\t\t\tvar curve = json.curves[ i ];\n\t\t\t\tthis.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * Creates free form 2d path using series of points, lines or curves.\n\t **/\n\n\tfunction Path( points ) {\n\n\t\tCurvePath.call( this );\n\n\t\tthis.type = 'Path';\n\n\t\tthis.currentPoint = new Vector2();\n\n\t\tif ( points ) {\n\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t}\n\n\tPath.prototype = Object.assign( Object.create( CurvePath.prototype ), {\n\n\t\tconstructor: Path,\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.moveTo( points[ 0 ].x, points[ 0 ].y );\n\n\t\t\tfor ( var i = 1, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tthis.lineTo( points[ i ].x, points[ i ].y );\n\n\t\t\t}\n\n\t\t},\n\n\t\tmoveTo: function ( x, y ) {\n\n\t\t\tthis.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?\n\n\t\t},\n\n\t\tlineTo: function ( x, y ) {\n\n\t\t\tvar curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( x, y );\n\n\t\t},\n\n\t\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\t\tvar curve = new QuadraticBezierCurve(\n\t\t\t\tthis.currentPoint.clone(),\n\t\t\t\tnew Vector2( aCPx, aCPy ),\n\t\t\t\tnew Vector2( aX, aY )\n\t\t\t);\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( aX, aY );\n\n\t\t},\n\n\t\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\t\tvar curve = new CubicBezierCurve(\n\t\t\t\tthis.currentPoint.clone(),\n\t\t\t\tnew Vector2( aCP1x, aCP1y ),\n\t\t\t\tnew Vector2( aCP2x, aCP2y ),\n\t\t\t\tnew Vector2( aX, aY )\n\t\t\t);\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.set( aX, aY );\n\n\t\t},\n\n\t\tsplineThru: function ( pts /*Array of Vector*/ ) {\n\n\t\t\tvar npts = [ this.currentPoint.clone() ].concat( pts );\n\n\t\t\tvar curve = new SplineCurve( npts );\n\t\t\tthis.curves.push( curve );\n\n\t\t\tthis.currentPoint.copy( pts[ pts.length - 1 ] );\n\n\t\t},\n\n\t\tarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\t\tvar x0 = this.currentPoint.x;\n\t\t\tvar y0 = this.currentPoint.y;\n\n\t\t\tthis.absarc( aX + x0, aY + y0, aRadius,\n\t\t\t\taStartAngle, aEndAngle, aClockwise );\n\n\t\t},\n\n\t\tabsarc: function ( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {\n\n\t\t\tthis.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );\n\n\t\t},\n\n\t\tellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\t\tvar x0 = this.currentPoint.x;\n\t\t\tvar y0 = this.currentPoint.y;\n\n\t\t\tthis.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\t},\n\n\t\tabsellipse: function ( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {\n\n\t\t\tvar curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );\n\n\t\t\tif ( this.curves.length > 0 ) {\n\n\t\t\t\t// if a previous curve is present, attempt to join\n\t\t\t\tvar firstPoint = curve.getPoint( 0 );\n\n\t\t\t\tif ( ! firstPoint.equals( this.currentPoint ) ) {\n\n\t\t\t\t\tthis.lineTo( firstPoint.x, firstPoint.y );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.curves.push( curve );\n\n\t\t\tvar lastPoint = curve.getPoint( 1 );\n\t\t\tthis.currentPoint.copy( lastPoint );\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tCurvePath.prototype.copy.call( this, source );\n\n\t\t\tthis.currentPoint.copy( source.currentPoint );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = CurvePath.prototype.toJSON.call( this );\n\n\t\t\tdata.currentPoint = this.currentPoint.toArray();\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tCurvePath.prototype.fromJSON.call( this, json );\n\n\t\t\tthis.currentPoint.fromArray( json.currentPoint );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * Defines a 2d shape plane using paths.\n\t **/\n\n\t// STEP 1 Create a path.\n\t// STEP 2 Turn path into shape.\n\t// STEP 3 ExtrudeGeometry takes in Shape/Shapes\n\t// STEP 3a - Extract points from each shape, turn to vertices\n\t// STEP 3b - Triangulate each shape, add faces.\n\n\tfunction Shape( points ) {\n\n\t\tPath.call( this, points );\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\tthis.type = 'Shape';\n\n\t\tthis.holes = [];\n\n\t}\n\n\tShape.prototype = Object.assign( Object.create( Path.prototype ), {\n\n\t\tconstructor: Shape,\n\n\t\tgetPointsHoles: function ( divisions ) {\n\n\t\t\tvar holesPts = [];\n\n\t\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\t\tholesPts[ i ] = this.holes[ i ].getPoints( divisions );\n\n\t\t\t}\n\n\t\t\treturn holesPts;\n\n\t\t},\n\n\t\t// get points of shape and holes (keypoints based on segments parameter)\n\n\t\textractPoints: function ( divisions ) {\n\n\t\t\treturn {\n\n\t\t\t\tshape: this.getPoints( divisions ),\n\t\t\t\tholes: this.getPointsHoles( divisions )\n\n\t\t\t};\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tPath.prototype.copy.call( this, source );\n\n\t\t\tthis.holes = [];\n\n\t\t\tfor ( var i = 0, l = source.holes.length; i < l; i ++ ) {\n\n\t\t\t\tvar hole = source.holes[ i ];\n\n\t\t\t\tthis.holes.push( hole.clone() );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar data = Path.prototype.toJSON.call( this );\n\n\t\t\tdata.uuid = this.uuid;\n\t\t\tdata.holes = [];\n\n\t\t\tfor ( var i = 0, l = this.holes.length; i < l; i ++ ) {\n\n\t\t\t\tvar hole = this.holes[ i ];\n\t\t\t\tdata.holes.push( hole.toJSON() );\n\n\t\t\t}\n\n\t\t\treturn data;\n\n\t\t},\n\n\t\tfromJSON: function ( json ) {\n\n\t\t\tPath.prototype.fromJSON.call( this, json );\n\n\t\t\tthis.uuid = json.uuid;\n\t\t\tthis.holes = [];\n\n\t\t\tfor ( var i = 0, l = json.holes.length; i < l; i ++ ) {\n\n\t\t\t\tvar hole = json.holes[ i ];\n\t\t\t\tthis.holes.push( new Path().fromJSON( hole ) );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Light( color, intensity ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Light';\n\n\t\tthis.color = new Color( color );\n\t\tthis.intensity = intensity !== undefined ? intensity : 1;\n\n\t\tthis.receiveShadow = undefined;\n\n\t}\n\n\tLight.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Light,\n\n\t\tisLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tObject3D.prototype.copy.call( this, source );\n\n\t\t\tthis.color.copy( source.color );\n\t\t\tthis.intensity = source.intensity;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Object3D.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.color = this.color.getHex();\n\t\t\tdata.object.intensity = this.intensity;\n\n\t\t\tif ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();\n\n\t\t\tif ( this.distance !== undefined ) data.object.distance = this.distance;\n\t\t\tif ( this.angle !== undefined ) data.object.angle = this.angle;\n\t\t\tif ( this.decay !== undefined ) data.object.decay = this.decay;\n\t\t\tif ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;\n\n\t\t\tif ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction HemisphereLight( skyColor, groundColor, intensity ) {\n\n\t\tLight.call( this, skyColor, intensity );\n\n\t\tthis.type = 'HemisphereLight';\n\n\t\tthis.castShadow = undefined;\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.groundColor = new Color( groundColor );\n\n\t}\n\n\tHemisphereLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: HemisphereLight,\n\n\t\tisHemisphereLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.groundColor.copy( source.groundColor );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction LightShadow( camera ) {\n\n\t\tthis.camera = camera;\n\n\t\tthis.bias = 0;\n\t\tthis.radius = 1;\n\n\t\tthis.mapSize = new Vector2( 512, 512 );\n\n\t\tthis.map = null;\n\t\tthis.matrix = new Matrix4();\n\n\t}\n\n\tObject.assign( LightShadow.prototype, {\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.camera = source.camera.clone();\n\n\t\t\tthis.bias = source.bias;\n\t\t\tthis.radius = source.radius;\n\n\t\t\tthis.mapSize.copy( source.mapSize );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\ttoJSON: function () {\n\n\t\t\tvar object = {};\n\n\t\t\tif ( this.bias !== 0 ) object.bias = this.bias;\n\t\t\tif ( this.radius !== 1 ) object.radius = this.radius;\n\t\t\tif ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();\n\n\t\t\tobject.camera = this.camera.toJSON( false ).object;\n\t\t\tdelete object.camera.matrix;\n\n\t\t\treturn object;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction SpotLightShadow() {\n\n\t\tLightShadow.call( this, new PerspectiveCamera( 50, 1, 0.5, 500 ) );\n\n\t}\n\n\tSpotLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\t\tconstructor: SpotLightShadow,\n\n\t\tisSpotLightShadow: true,\n\n\t\tupdate: function ( light ) {\n\n\t\t\tvar camera = this.camera;\n\n\t\t\tvar fov = _Math.RAD2DEG * 2 * light.angle;\n\t\t\tvar aspect = this.mapSize.width / this.mapSize.height;\n\t\t\tvar far = light.distance || camera.far;\n\n\t\t\tif ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {\n\n\t\t\t\tcamera.fov = fov;\n\t\t\t\tcamera.aspect = aspect;\n\t\t\t\tcamera.far = far;\n\t\t\t\tcamera.updateProjectionMatrix();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction SpotLight( color, intensity, distance, angle, penumbra, decay ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'SpotLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tObject.defineProperty( this, 'power', {\n\t\t\tget: function () {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\treturn this.intensity * Math.PI;\n\n\t\t\t},\n\t\t\tset: function ( power ) {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (17) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\tthis.intensity = power / Math.PI;\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\t\tthis.angle = ( angle !== undefined ) ? angle : Math.PI / 3;\n\t\tthis.penumbra = ( penumbra !== undefined ) ? penumbra : 0;\n\t\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\t\tthis.shadow = new SpotLightShadow();\n\n\t}\n\n\tSpotLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: SpotLight,\n\n\t\tisSpotLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.angle = source.angle;\n\t\t\tthis.penumbra = source.penumbra;\n\t\t\tthis.decay = source.decay;\n\n\t\t\tthis.target = source.target.clone();\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\n\tfunction PointLight( color, intensity, distance, decay ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'PointLight';\n\n\t\tObject.defineProperty( this, 'power', {\n\t\t\tget: function () {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\treturn this.intensity * 4 * Math.PI;\n\n\t\t\t},\n\t\t\tset: function ( power ) {\n\n\t\t\t\t// intensity = power per solid angle.\n\t\t\t\t// ref: equation (15) from https://seblagarde.files.wordpress.com/2015/07/course_notes_moving_frostbite_to_pbr_v32.pdf\n\t\t\t\tthis.intensity = power / ( 4 * Math.PI );\n\n\t\t\t}\n\t\t} );\n\n\t\tthis.distance = ( distance !== undefined ) ? distance : 0;\n\t\tthis.decay = ( decay !== undefined ) ? decay : 1;\t// for physically correct lights, should be 2.\n\n\t\tthis.shadow = new LightShadow( new PerspectiveCamera( 90, 1, 0.5, 500 ) );\n\n\t}\n\n\tPointLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: PointLight,\n\n\t\tisPointLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.distance = source.distance;\n\t\t\tthis.decay = source.decay;\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction DirectionalLightShadow( ) {\n\n\t\tLightShadow.call( this, new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );\n\n\t}\n\n\tDirectionalLightShadow.prototype = Object.assign( Object.create( LightShadow.prototype ), {\n\n\t\tconstructor: DirectionalLightShadow\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction DirectionalLight( color, intensity ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'DirectionalLight';\n\n\t\tthis.position.copy( Object3D.DefaultUp );\n\t\tthis.updateMatrix();\n\n\t\tthis.target = new Object3D();\n\n\t\tthis.shadow = new DirectionalLightShadow();\n\n\t}\n\n\tDirectionalLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: DirectionalLight,\n\n\t\tisDirectionalLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.target = source.target.clone();\n\n\t\t\tthis.shadow = source.shadow.clone();\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AmbientLight( color, intensity ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'AmbientLight';\n\n\t\tthis.castShadow = undefined;\n\n\t}\n\n\tAmbientLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: AmbientLight,\n\n\t\tisAmbientLight: true\n\n\t} );\n\n\t/**\n\t * @author abelnation / http://github.com/abelnation\n\t */\n\n\tfunction RectAreaLight( color, intensity, width, height ) {\n\n\t\tLight.call( this, color, intensity );\n\n\t\tthis.type = 'RectAreaLight';\n\n\t\tthis.width = ( width !== undefined ) ? width : 10;\n\t\tthis.height = ( height !== undefined ) ? height : 10;\n\n\t}\n\n\tRectAreaLight.prototype = Object.assign( Object.create( Light.prototype ), {\n\n\t\tconstructor: RectAreaLight,\n\n\t\tisRectAreaLight: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tLight.prototype.copy.call( this, source );\n\n\t\t\tthis.width = source.width;\n\t\t\tthis.height = source.height;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttoJSON: function ( meta ) {\n\n\t\t\tvar data = Light.prototype.toJSON.call( this, meta );\n\n\t\t\tdata.object.width = this.width;\n\t\t\tdata.object.height = this.height;\n\n\t\t\treturn data;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * A Track that interpolates Strings\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction StringKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tStringKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: StringKeyframeTrack,\n\n\t\tValueTypeName: 'string',\n\t\tValueBufferType: Array,\n\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\n\t\tInterpolantFactoryMethodLinear: undefined,\n\n\t\tInterpolantFactoryMethodSmooth: undefined\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of Boolean keyframe values.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction BooleanKeyframeTrack( name, times, values ) {\n\n\t\tKeyframeTrack.call( this, name, times, values );\n\n\t}\n\n\tBooleanKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: BooleanKeyframeTrack,\n\n\t\tValueTypeName: 'bool',\n\t\tValueBufferType: Array,\n\n\t\tDefaultInterpolation: InterpolateDiscrete,\n\n\t\tInterpolantFactoryMethodLinear: undefined,\n\t\tInterpolantFactoryMethodSmooth: undefined\n\n\t\t// Note: Actually this track could have a optimized / compressed\n\t\t// representation of a single value and a custom interpolant that\n\t\t// computes \"firstValue ^ isOdd( index )\".\n\n\t} );\n\n\t/**\n\t * Abstract base class of interpolants over parametric samples.\n\t *\n\t * The parameter domain is one dimensional, typically the time or a path\n\t * along a curve defined by the data.\n\t *\n\t * The sample values can have any dimensionality and derived classes may\n\t * apply special interpretations to the data.\n\t *\n\t * This class provides the interval seek in a Template Method, deferring\n\t * the actual interpolation to derived classes.\n\t *\n\t * Time complexity is O(1) for linear access crossing at most two points\n\t * and O(log N) for random access, where N is the number of positions.\n\t *\n\t * References:\n\t *\n\t * \t\thttp://www.oodesign.com/template-method-pattern.html\n\t *\n\t * @author tschw\n\t */\n\n\tfunction Interpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tthis.parameterPositions = parameterPositions;\n\t\tthis._cachedIndex = 0;\n\n\t\tthis.resultBuffer = resultBuffer !== undefined ?\n\t\t\tresultBuffer : new sampleValues.constructor( sampleSize );\n\t\tthis.sampleValues = sampleValues;\n\t\tthis.valueSize = sampleSize;\n\n\t}\n\n\tObject.assign( Interpolant.prototype, {\n\n\t\tevaluate: function ( t ) {\n\n\t\t\tvar pp = this.parameterPositions,\n\t\t\t\ti1 = this._cachedIndex,\n\n\t\t\t\tt1 = pp[ i1 ],\n\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\tvalidate_interval: {\n\n\t\t\t\tseek: {\n\n\t\t\t\t\tvar right;\n\n\t\t\t\t\tlinear_scan: {\n\n\t\t\t\t\t\t//- See http://jsperf.com/comparison-to-undefined/3\n\t\t\t\t\t\t//- slower code:\n\t\t\t\t\t\t//-\n\t\t\t\t\t\t//- \t\t\t\tif ( t >= t1 || t1 === undefined ) {\n\t\t\t\t\t\tforward_scan: if ( ! ( t < t1 ) ) {\n\n\t\t\t\t\t\t\tfor ( var giveUpAt = i1 + 2; ; ) {\n\n\t\t\t\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\t\t\t\tif ( t < t0 ) break forward_scan;\n\n\t\t\t\t\t\t\t\t\t// after end\n\n\t\t\t\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t, t0 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\t\tt0 = t1;\n\t\t\t\t\t\t\t\tt1 = pp[ ++ i1 ];\n\n\t\t\t\t\t\t\t\tif ( t < t1 ) {\n\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// prepare binary search on the right side of the index\n\t\t\t\t\t\t\tright = pp.length;\n\t\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t//- slower code:\n\t\t\t\t\t\t//-\t\t\t\t\tif ( t < t0 || t0 === undefined ) {\n\t\t\t\t\t\tif ( ! ( t >= t0 ) ) {\n\n\t\t\t\t\t\t\t// looping?\n\n\t\t\t\t\t\t\tvar t1global = pp[ 1 ];\n\n\t\t\t\t\t\t\tif ( t < t1global ) {\n\n\t\t\t\t\t\t\t\ti1 = 2; // + 1, using the scan for the details\n\t\t\t\t\t\t\t\tt0 = t1global;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// linear reverse scan\n\n\t\t\t\t\t\t\tfor ( var giveUpAt = i1 - 2; ; ) {\n\n\t\t\t\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\t\t\t\t// before start\n\n\t\t\t\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tif ( i1 === giveUpAt ) break; // this loop\n\n\t\t\t\t\t\t\t\tt1 = t0;\n\t\t\t\t\t\t\t\tt0 = pp[ -- i1 - 1 ];\n\n\t\t\t\t\t\t\t\tif ( t >= t0 ) {\n\n\t\t\t\t\t\t\t\t\t// we have arrived at the sought interval\n\t\t\t\t\t\t\t\t\tbreak seek;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// prepare binary search on the left side of the index\n\t\t\t\t\t\t\tright = i1;\n\t\t\t\t\t\t\ti1 = 0;\n\t\t\t\t\t\t\tbreak linear_scan;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// the interval is valid\n\n\t\t\t\t\t\tbreak validate_interval;\n\n\t\t\t\t\t} // linear scan\n\n\t\t\t\t\t// binary search\n\n\t\t\t\t\twhile ( i1 < right ) {\n\n\t\t\t\t\t\tvar mid = ( i1 + right ) >>> 1;\n\n\t\t\t\t\t\tif ( t < pp[ mid ] ) {\n\n\t\t\t\t\t\t\tright = mid;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\ti1 = mid + 1;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tt1 = pp[ i1 ];\n\t\t\t\t\tt0 = pp[ i1 - 1 ];\n\n\t\t\t\t\t// check boundary cases, again\n\n\t\t\t\t\tif ( t0 === undefined ) {\n\n\t\t\t\t\t\tthis._cachedIndex = 0;\n\t\t\t\t\t\treturn this.beforeStart_( 0, t, t1 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( t1 === undefined ) {\n\n\t\t\t\t\t\ti1 = pp.length;\n\t\t\t\t\t\tthis._cachedIndex = i1;\n\t\t\t\t\t\treturn this.afterEnd_( i1 - 1, t0, t );\n\n\t\t\t\t\t}\n\n\t\t\t\t} // seek\n\n\t\t\t\tthis._cachedIndex = i1;\n\n\t\t\t\tthis.intervalChanged_( i1, t0, t1 );\n\n\t\t\t} // validate_interval\n\n\t\t\treturn this.interpolate_( i1, t0, t, t1 );\n\n\t\t},\n\n\t\tsettings: null, // optional, subclass-specific settings structure\n\t\t// Note: The indirection allows central control of many interpolants.\n\n\t\t// --- Protected interface\n\n\t\tDefaultSettings_: {},\n\n\t\tgetSettings_: function () {\n\n\t\t\treturn this.settings || this.DefaultSettings_;\n\n\t\t},\n\n\t\tcopySampleValue_: function ( index ) {\n\n\t\t\t// copies a sample value to the result buffer\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\t\t\t\toffset = index * stride;\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] = values[ offset + i ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// Template methods for derived classes:\n\n\t\tinterpolate_: function ( /* i1, t0, t, t1 */ ) {\n\n\t\t\tthrow new Error( 'call to abstract method' );\n\t\t\t// implementations shall return this.resultBuffer\n\n\t\t},\n\n\t\tintervalChanged_: function ( /* i1, t0, t1 */ ) {\n\n\t\t\t// empty\n\n\t\t}\n\n\t} );\n\n\t//!\\ DECLARE ALIAS AFTER assign prototype !\n\tObject.assign( Interpolant.prototype, {\n\n\t\t//( 0, t, t0 ), returns this.resultBuffer\n\t\tbeforeStart_: Interpolant.prototype.copySampleValue_,\n\n\t\t//( N-1, tN-1, t ), returns this.resultBuffer\n\t\tafterEnd_: Interpolant.prototype.copySampleValue_,\n\n\t} );\n\n\t/**\n\t * Spherical linear unit quaternion interpolant.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction QuaternionLinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tQuaternionLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: QuaternionLinearInterpolant,\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toffset = i1 * stride,\n\n\t\t\t\talpha = ( t - t0 ) / ( t1 - t0 );\n\n\t\t\tfor ( var end = offset + stride; offset !== end; offset += 4 ) {\n\n\t\t\t\tQuaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of quaternion keyframe values.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction QuaternionKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tQuaternionKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: QuaternionKeyframeTrack,\n\n\t\tValueTypeName: 'quaternion',\n\n\t\t// ValueBufferType is inherited\n\n\t\tDefaultInterpolation: InterpolateLinear,\n\n\t\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\t\treturn new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodSmooth: undefined // not yet implemented\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of keyframe values that represent color.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction ColorKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tColorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: ColorKeyframeTrack,\n\n\t\tValueTypeName: 'color'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t\t// Note: Very basic implementation and nothing special yet.\n\t\t// However, this is the place for color space parameterization.\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of numeric keyframe values.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction NumberKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tNumberKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: NumberKeyframeTrack,\n\n\t\tValueTypeName: 'number'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t} );\n\n\t/**\n\t * Fast and simple cubic spline interpolant.\n\t *\n\t * It was derived from a Hermitian construction setting the first derivative\n\t * at each sample position to the linear slope between neighboring positions\n\t * over their parameter interval.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction CubicInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t\tthis._weightPrev = - 0;\n\t\tthis._offsetPrev = - 0;\n\t\tthis._weightNext = - 0;\n\t\tthis._offsetNext = - 0;\n\n\t}\n\n\tCubicInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: CubicInterpolant,\n\n\t\tDefaultSettings_: {\n\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\n\t\t},\n\n\t\tintervalChanged_: function ( i1, t0, t1 ) {\n\n\t\t\tvar pp = this.parameterPositions,\n\t\t\t\tiPrev = i1 - 2,\n\t\t\t\tiNext = i1 + 1,\n\n\t\t\t\ttPrev = pp[ iPrev ],\n\t\t\t\ttNext = pp[ iNext ];\n\n\t\t\tif ( tPrev === undefined ) {\n\n\t\t\t\tswitch ( this.getSettings_().endingStart ) {\n\n\t\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t\t// f'(t0) = 0\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = 2 * t0 - t1;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiPrev = pp.length - 2;\n\t\t\t\t\t\ttPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t\t// f''(t0) = 0 a.k.a. Natural Spline\n\t\t\t\t\t\tiPrev = i1;\n\t\t\t\t\t\ttPrev = t1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( tNext === undefined ) {\n\n\t\t\t\tswitch ( this.getSettings_().endingEnd ) {\n\n\t\t\t\t\tcase ZeroSlopeEnding:\n\n\t\t\t\t\t\t// f'(tN) = 0\n\t\t\t\t\t\tiNext = i1;\n\t\t\t\t\t\ttNext = 2 * t1 - t0;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase WrapAroundEnding:\n\n\t\t\t\t\t\t// use the other end of the curve\n\t\t\t\t\t\tiNext = 1;\n\t\t\t\t\t\ttNext = t1 + pp[ 1 ] - pp[ 0 ];\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault: // ZeroCurvatureEnding\n\n\t\t\t\t\t\t// f''(tN) = 0, a.k.a. Natural Spline\n\t\t\t\t\t\tiNext = i1 - 1;\n\t\t\t\t\t\ttNext = t0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar halfDt = ( t1 - t0 ) * 0.5,\n\t\t\t\tstride = this.valueSize;\n\n\t\t\tthis._weightPrev = halfDt / ( t0 - tPrev );\n\t\t\tthis._weightNext = halfDt / ( tNext - t1 );\n\t\t\tthis._offsetPrev = iPrev * stride;\n\t\t\tthis._offsetNext = iNext * stride;\n\n\t\t},\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\to1 = i1 * stride,\t\to0 = o1 - stride,\n\t\t\t\toP = this._offsetPrev, \toN = this._offsetNext,\n\t\t\t\twP = this._weightPrev,\twN = this._weightNext,\n\n\t\t\t\tp = ( t - t0 ) / ( t1 - t0 ),\n\t\t\t\tpp = p * p,\n\t\t\t\tppp = pp * p;\n\n\t\t\t// evaluate polynomials\n\n\t\t\tvar sP = - wP * ppp + 2 * wP * pp - wP * p;\n\t\t\tvar s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;\n\t\t\tvar s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;\n\t\t\tvar sN = wN * ppp - wN * pp;\n\n\t\t\t// combine data linearly\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] =\n\t\t\t\t\t\tsP * values[ oP + i ] +\n\t\t\t\t\t\ts0 * values[ o0 + i ] +\n\t\t\t\t\t\ts1 * values[ o1 + i ] +\n\t\t\t\t\t\tsN * values[ oN + i ];\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author tschw\n\t */\n\n\tfunction LinearInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tLinearInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: LinearInterpolant,\n\n\t\tinterpolate_: function ( i1, t0, t, t1 ) {\n\n\t\t\tvar result = this.resultBuffer,\n\t\t\t\tvalues = this.sampleValues,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toffset1 = i1 * stride,\n\t\t\t\toffset0 = offset1 - stride,\n\n\t\t\t\tweight1 = ( t - t0 ) / ( t1 - t0 ),\n\t\t\t\tweight0 = 1 - weight1;\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tresult[ i ] =\n\t\t\t\t\t\tvalues[ offset0 + i ] * weight0 +\n\t\t\t\t\t\tvalues[ offset1 + i ] * weight1;\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Interpolant that evaluates to the sample value at the position preceeding\n\t * the parameter.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction DiscreteInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {\n\n\t\tInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );\n\n\t}\n\n\tDiscreteInterpolant.prototype = Object.assign( Object.create( Interpolant.prototype ), {\n\n\t\tconstructor: DiscreteInterpolant,\n\n\t\tinterpolate_: function ( i1 /*, t0, t, t1 */ ) {\n\n\t\t\treturn this.copySampleValue_( i1 - 1 );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author tschw\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t */\n\n\tvar AnimationUtils = {\n\n\t\t// same as Array.prototype.slice, but also works on typed arrays\n\t\tarraySlice: function ( array, from, to ) {\n\n\t\t\tif ( AnimationUtils.isTypedArray( array ) ) {\n\n\t\t\t\t// in ios9 array.subarray(from, undefined) will return empty array\n\t\t\t\t// but array.subarray(from) or array.subarray(from, len) is correct\n\t\t\t\treturn new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );\n\n\t\t\t}\n\n\t\t\treturn array.slice( from, to );\n\n\t\t},\n\n\t\t// converts an array to a specific type\n\t\tconvertArray: function ( array, type, forceClone ) {\n\n\t\t\tif ( ! array || // let 'undefined' and 'null' pass\n\t\t\t\t\t! forceClone && array.constructor === type ) return array;\n\n\t\t\tif ( typeof type.BYTES_PER_ELEMENT === 'number' ) {\n\n\t\t\t\treturn new type( array ); // create typed array\n\n\t\t\t}\n\n\t\t\treturn Array.prototype.slice.call( array ); // create Array\n\n\t\t},\n\n\t\tisTypedArray: function ( object ) {\n\n\t\t\treturn ArrayBuffer.isView( object ) &&\n\t\t\t\t\t! ( object instanceof DataView );\n\n\t\t},\n\n\t\t// returns an array by which times and values can be sorted\n\t\tgetKeyframeOrder: function ( times ) {\n\n\t\t\tfunction compareTime( i, j ) {\n\n\t\t\t\treturn times[ i ] - times[ j ];\n\n\t\t\t}\n\n\t\t\tvar n = times.length;\n\t\t\tvar result = new Array( n );\n\t\t\tfor ( var i = 0; i !== n; ++ i ) result[ i ] = i;\n\n\t\t\tresult.sort( compareTime );\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// uses the array previously returned by 'getKeyframeOrder' to sort data\n\t\tsortedArray: function ( values, stride, order ) {\n\n\t\t\tvar nValues = values.length;\n\t\t\tvar result = new values.constructor( nValues );\n\n\t\t\tfor ( var i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {\n\n\t\t\t\tvar srcOffset = order[ i ] * stride;\n\n\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\tresult[ dstOffset ++ ] = values[ srcOffset + j ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn result;\n\n\t\t},\n\n\t\t// function for parsing AOS keyframe formats\n\t\tflattenJSON: function ( jsonKeys, times, values, valuePropertyName ) {\n\n\t\t\tvar i = 1, key = jsonKeys[ 0 ];\n\n\t\t\twhile ( key !== undefined && key[ valuePropertyName ] === undefined ) {\n\n\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t}\n\n\t\t\tif ( key === undefined ) return; // no data\n\n\t\t\tvar value = key[ valuePropertyName ];\n\t\t\tif ( value === undefined ) return; // no data\n\n\t\t\tif ( Array.isArray( value ) ) {\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalues.push.apply( values, value ); // push all elements\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t} else if ( value.toArray !== undefined ) {\n\n\t\t\t\t// ...assume THREE.Math-ish\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalue.toArray( values, values.length );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t} else {\n\n\t\t\t\t// otherwise push as-is\n\n\t\t\t\tdo {\n\n\t\t\t\t\tvalue = key[ valuePropertyName ];\n\n\t\t\t\t\tif ( value !== undefined ) {\n\n\t\t\t\t\t\ttimes.push( key.time );\n\t\t\t\t\t\tvalues.push( value );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tkey = jsonKeys[ i ++ ];\n\n\t\t\t\t} while ( key !== undefined );\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n\t/**\n\t *\n\t * A timed sequence of keyframes for a specific property.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction KeyframeTrack( name, times, values, interpolation ) {\n\n\t\tif ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );\n\t\tif ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );\n\n\t\tthis.name = name;\n\n\t\tthis.times = AnimationUtils.convertArray( times, this.TimeBufferType );\n\t\tthis.values = AnimationUtils.convertArray( values, this.ValueBufferType );\n\n\t\tthis.setInterpolation( interpolation || this.DefaultInterpolation );\n\n\t\tthis.validate();\n\t\tthis.optimize();\n\n\t}\n\n\t// Static methods:\n\n\tObject.assign( KeyframeTrack, {\n\n\t\t// Serialization (in static context, because of constructor invocation\n\t\t// and automatic invocation of .toJSON):\n\n\t\tparse: function ( json ) {\n\n\t\t\tif ( json.type === undefined ) {\n\n\t\t\t\tthrow new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );\n\n\t\t\t}\n\n\t\t\tvar trackType = KeyframeTrack._getTrackTypeForValueTypeName( json.type );\n\n\t\t\tif ( json.times === undefined ) {\n\n\t\t\t\tvar times = [], values = [];\n\n\t\t\t\tAnimationUtils.flattenJSON( json.keys, times, values, 'value' );\n\n\t\t\t\tjson.times = times;\n\t\t\t\tjson.values = values;\n\n\t\t\t}\n\n\t\t\t// derived classes can define a static parse method\n\t\t\tif ( trackType.parse !== undefined ) {\n\n\t\t\t\treturn trackType.parse( json );\n\n\t\t\t} else {\n\n\t\t\t\t// by default, we assume a constructor compatible with the base\n\t\t\t\treturn new trackType( json.name, json.times, json.values, json.interpolation );\n\n\t\t\t}\n\n\t\t},\n\n\t\ttoJSON: function ( track ) {\n\n\t\t\tvar trackType = track.constructor;\n\n\t\t\tvar json;\n\n\t\t\t// derived classes can define a static toJSON method\n\t\t\tif ( trackType.toJSON !== undefined ) {\n\n\t\t\t\tjson = trackType.toJSON( track );\n\n\t\t\t} else {\n\n\t\t\t\t// by default, we assume the data can be serialized as-is\n\t\t\t\tjson = {\n\n\t\t\t\t\t'name': track.name,\n\t\t\t\t\t'times': AnimationUtils.convertArray( track.times, Array ),\n\t\t\t\t\t'values': AnimationUtils.convertArray( track.values, Array )\n\n\t\t\t\t};\n\n\t\t\t\tvar interpolation = track.getInterpolation();\n\n\t\t\t\tif ( interpolation !== track.DefaultInterpolation ) {\n\n\t\t\t\t\tjson.interpolation = interpolation;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tjson.type = track.ValueTypeName; // mandatory\n\n\t\t\treturn json;\n\n\t\t},\n\n\t\t_getTrackTypeForValueTypeName: function ( typeName ) {\n\n\t\t\tswitch ( typeName.toLowerCase() ) {\n\n\t\t\t\tcase 'scalar':\n\t\t\t\tcase 'double':\n\t\t\t\tcase 'float':\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'integer':\n\n\t\t\t\t\treturn NumberKeyframeTrack;\n\n\t\t\t\tcase 'vector':\n\t\t\t\tcase 'vector2':\n\t\t\t\tcase 'vector3':\n\t\t\t\tcase 'vector4':\n\n\t\t\t\t\treturn VectorKeyframeTrack;\n\n\t\t\t\tcase 'color':\n\n\t\t\t\t\treturn ColorKeyframeTrack;\n\n\t\t\t\tcase 'quaternion':\n\n\t\t\t\t\treturn QuaternionKeyframeTrack;\n\n\t\t\t\tcase 'bool':\n\t\t\t\tcase 'boolean':\n\n\t\t\t\t\treturn BooleanKeyframeTrack;\n\n\t\t\t\tcase 'string':\n\n\t\t\t\t\treturn StringKeyframeTrack;\n\n\t\t\t}\n\n\t\t\tthrow new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( KeyframeTrack.prototype, {\n\n\t\tconstructor: KeyframeTrack,\n\n\t\tTimeBufferType: Float32Array,\n\n\t\tValueBufferType: Float32Array,\n\n\t\tDefaultInterpolation: InterpolateLinear,\n\n\t\tInterpolantFactoryMethodDiscrete: function ( result ) {\n\n\t\t\treturn new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodLinear: function ( result ) {\n\n\t\t\treturn new LinearInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tInterpolantFactoryMethodSmooth: function ( result ) {\n\n\t\t\treturn new CubicInterpolant( this.times, this.values, this.getValueSize(), result );\n\n\t\t},\n\n\t\tsetInterpolation: function ( interpolation ) {\n\n\t\t\tvar factoryMethod;\n\n\t\t\tswitch ( interpolation ) {\n\n\t\t\t\tcase InterpolateDiscrete:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodDiscrete;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateLinear:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodLinear;\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase InterpolateSmooth:\n\n\t\t\t\t\tfactoryMethod = this.InterpolantFactoryMethodSmooth;\n\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tif ( factoryMethod === undefined ) {\n\n\t\t\t\tvar message = \"unsupported interpolation for \" +\n\t\t\t\t\tthis.ValueTypeName + \" keyframe track named \" + this.name;\n\n\t\t\t\tif ( this.createInterpolant === undefined ) {\n\n\t\t\t\t\t// fall back to default, unless the default itself is messed up\n\t\t\t\t\tif ( interpolation !== this.DefaultInterpolation ) {\n\n\t\t\t\t\t\tthis.setInterpolation( this.DefaultInterpolation );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tthrow new Error( message ); // fatal, in this case\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tconsole.warn( 'THREE.KeyframeTrack:', message );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.createInterpolant = factoryMethod;\n\n\t\t},\n\n\t\tgetInterpolation: function () {\n\n\t\t\tswitch ( this.createInterpolant ) {\n\n\t\t\t\tcase this.InterpolantFactoryMethodDiscrete:\n\n\t\t\t\t\treturn InterpolateDiscrete;\n\n\t\t\t\tcase this.InterpolantFactoryMethodLinear:\n\n\t\t\t\t\treturn InterpolateLinear;\n\n\t\t\t\tcase this.InterpolantFactoryMethodSmooth:\n\n\t\t\t\t\treturn InterpolateSmooth;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgetValueSize: function () {\n\n\t\t\treturn this.values.length / this.times.length;\n\n\t\t},\n\n\t\t// move all keyframes either forwards or backwards in time\n\t\tshift: function ( timeOffset ) {\n\n\t\t\tif ( timeOffset !== 0.0 ) {\n\n\t\t\t\tvar times = this.times;\n\n\t\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\t\ttimes[ i ] += timeOffset;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// scale all keyframe times by a factor (useful for frame <-> seconds conversions)\n\t\tscale: function ( timeScale ) {\n\n\t\t\tif ( timeScale !== 1.0 ) {\n\n\t\t\t\tvar times = this.times;\n\n\t\t\t\tfor ( var i = 0, n = times.length; i !== n; ++ i ) {\n\n\t\t\t\t\ttimes[ i ] *= timeScale;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// removes keyframes before and after animation without changing any values within the range [startTime, endTime].\n\t\t// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values\n\t\ttrim: function ( startTime, endTime ) {\n\n\t\t\tvar times = this.times,\n\t\t\t\tnKeys = times.length,\n\t\t\t\tfrom = 0,\n\t\t\t\tto = nKeys - 1;\n\n\t\t\twhile ( from !== nKeys && times[ from ] < startTime ) {\n\n\t\t\t\t++ from;\n\n\t\t\t}\n\n\t\t\twhile ( to !== - 1 && times[ to ] > endTime ) {\n\n\t\t\t\t-- to;\n\n\t\t\t}\n\n\t\t\t++ to; // inclusive -> exclusive bound\n\n\t\t\tif ( from !== 0 || to !== nKeys ) {\n\n\t\t\t\t// empty tracks are forbidden, so keep at least one keyframe\n\t\t\t\tif ( from >= to ) to = Math.max( to, 1 ), from = to - 1;\n\n\t\t\t\tvar stride = this.getValueSize();\n\t\t\t\tthis.times = AnimationUtils.arraySlice( times, from, to );\n\t\t\t\tthis.values = AnimationUtils.arraySlice( this.values, from * stride, to * stride );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable\n\t\tvalidate: function () {\n\n\t\t\tvar valid = true;\n\n\t\t\tvar valueSize = this.getValueSize();\n\t\t\tif ( valueSize - Math.floor( valueSize ) !== 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );\n\t\t\t\tvalid = false;\n\n\t\t\t}\n\n\t\t\tvar times = this.times,\n\t\t\t\tvalues = this.values,\n\n\t\t\t\tnKeys = times.length;\n\n\t\t\tif ( nKeys === 0 ) {\n\n\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Track is empty.', this );\n\t\t\t\tvalid = false;\n\n\t\t\t}\n\n\t\t\tvar prevTime = null;\n\n\t\t\tfor ( var i = 0; i !== nKeys; i ++ ) {\n\n\t\t\t\tvar currTime = times[ i ];\n\n\t\t\t\tif ( typeof currTime === 'number' && isNaN( currTime ) ) {\n\n\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tif ( prevTime !== null && prevTime > currTime ) {\n\n\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );\n\t\t\t\t\tvalid = false;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tprevTime = currTime;\n\n\t\t\t}\n\n\t\t\tif ( values !== undefined ) {\n\n\t\t\t\tif ( AnimationUtils.isTypedArray( values ) ) {\n\n\t\t\t\t\tfor ( var i = 0, n = values.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tvar value = values[ i ];\n\n\t\t\t\t\t\tif ( isNaN( value ) ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );\n\t\t\t\t\t\t\tvalid = false;\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn valid;\n\n\t\t},\n\n\t\t// removes equivalent sequential keys as common in morph target sequences\n\t\t// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)\n\t\toptimize: function () {\n\n\t\t\tvar times = this.times,\n\t\t\t\tvalues = this.values,\n\t\t\t\tstride = this.getValueSize(),\n\n\t\t\t\tsmoothInterpolation = this.getInterpolation() === InterpolateSmooth,\n\n\t\t\t\twriteIndex = 1,\n\t\t\t\tlastIndex = times.length - 1;\n\n\t\t\tfor ( var i = 1; i < lastIndex; ++ i ) {\n\n\t\t\t\tvar keep = false;\n\n\t\t\t\tvar time = times[ i ];\n\t\t\t\tvar timeNext = times[ i + 1 ];\n\n\t\t\t\t// remove adjacent keyframes scheduled at the same time\n\n\t\t\t\tif ( time !== timeNext && ( i !== 1 || time !== time[ 0 ] ) ) {\n\n\t\t\t\t\tif ( ! smoothInterpolation ) {\n\n\t\t\t\t\t\t// remove unnecessary keyframes same as their neighbors\n\n\t\t\t\t\t\tvar offset = i * stride,\n\t\t\t\t\t\t\toffsetP = offset - stride,\n\t\t\t\t\t\t\toffsetN = offset + stride;\n\n\t\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\t\tvar value = values[ offset + j ];\n\n\t\t\t\t\t\t\tif ( value !== values[ offsetP + j ] ||\n\t\t\t\t\t\t\t\tvalue !== values[ offsetN + j ] ) {\n\n\t\t\t\t\t\t\t\tkeep = true;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tkeep = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// in-place compaction\n\n\t\t\t\tif ( keep ) {\n\n\t\t\t\t\tif ( i !== writeIndex ) {\n\n\t\t\t\t\t\ttimes[ writeIndex ] = times[ i ];\n\n\t\t\t\t\t\tvar readOffset = i * stride,\n\t\t\t\t\t\t\twriteOffset = writeIndex * stride;\n\n\t\t\t\t\t\tfor ( var j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t++ writeIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// flush last keyframe (compaction looks ahead)\n\n\t\t\tif ( lastIndex > 0 ) {\n\n\t\t\t\ttimes[ writeIndex ] = times[ lastIndex ];\n\n\t\t\t\tfor ( var readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {\n\n\t\t\t\t\tvalues[ writeOffset + j ] = values[ readOffset + j ];\n\n\t\t\t\t}\n\n\t\t\t\t++ writeIndex;\n\n\t\t\t}\n\n\t\t\tif ( writeIndex !== times.length ) {\n\n\t\t\t\tthis.times = AnimationUtils.arraySlice( times, 0, writeIndex );\n\t\t\t\tthis.values = AnimationUtils.arraySlice( values, 0, writeIndex * stride );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * A Track of vectored keyframe values.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction VectorKeyframeTrack( name, times, values, interpolation ) {\n\n\t\tKeyframeTrack.call( this, name, times, values, interpolation );\n\n\t}\n\n\tVectorKeyframeTrack.prototype = Object.assign( Object.create( KeyframeTrack.prototype ), {\n\n\t\tconstructor: VectorKeyframeTrack,\n\n\t\tValueTypeName: 'vector'\n\n\t\t// ValueBufferType is inherited\n\n\t\t// DefaultInterpolation is inherited\n\n\t} );\n\n\t/**\n\t *\n\t * Reusable set of Tracks that represent an animation.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t */\n\n\tfunction AnimationClip( name, duration, tracks ) {\n\n\t\tthis.name = name;\n\t\tthis.tracks = tracks;\n\t\tthis.duration = ( duration !== undefined ) ? duration : - 1;\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\t// this means it should figure out its duration by scanning the tracks\n\t\tif ( this.duration < 0 ) {\n\n\t\t\tthis.resetDuration();\n\n\t\t}\n\n\t\tthis.optimize();\n\n\t}\n\n\tObject.assign( AnimationClip, {\n\n\t\tparse: function ( json ) {\n\n\t\t\tvar tracks = [],\n\t\t\t\tjsonTracks = json.tracks,\n\t\t\t\tframeTime = 1.0 / ( json.fps || 1.0 );\n\n\t\t\tfor ( var i = 0, n = jsonTracks.length; i !== n; ++ i ) {\n\n\t\t\t\ttracks.push( KeyframeTrack.parse( jsonTracks[ i ] ).scale( frameTime ) );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( json.name, json.duration, tracks );\n\n\t\t},\n\n\t\ttoJSON: function ( clip ) {\n\n\t\t\tvar tracks = [],\n\t\t\t\tclipTracks = clip.tracks;\n\n\t\t\tvar json = {\n\n\t\t\t\t'name': clip.name,\n\t\t\t\t'duration': clip.duration,\n\t\t\t\t'tracks': tracks,\n\t\t\t\t'uuid': clip.uuid\n\n\t\t\t};\n\n\t\t\tfor ( var i = 0, n = clipTracks.length; i !== n; ++ i ) {\n\n\t\t\t\ttracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );\n\n\t\t\t}\n\n\t\t\treturn json;\n\n\t\t},\n\n\t\tCreateFromMorphTargetSequence: function ( name, morphTargetSequence, fps, noLoop ) {\n\n\t\t\tvar numMorphTargets = morphTargetSequence.length;\n\t\t\tvar tracks = [];\n\n\t\t\tfor ( var i = 0; i < numMorphTargets; i ++ ) {\n\n\t\t\t\tvar times = [];\n\t\t\t\tvar values = [];\n\n\t\t\t\ttimes.push(\n\t\t\t\t\t( i + numMorphTargets - 1 ) % numMorphTargets,\n\t\t\t\t\ti,\n\t\t\t\t\t( i + 1 ) % numMorphTargets );\n\n\t\t\t\tvalues.push( 0, 1, 0 );\n\n\t\t\t\tvar order = AnimationUtils.getKeyframeOrder( times );\n\t\t\t\ttimes = AnimationUtils.sortedArray( times, 1, order );\n\t\t\t\tvalues = AnimationUtils.sortedArray( values, 1, order );\n\n\t\t\t\t// if there is a key at the first frame, duplicate it as the\n\t\t\t\t// last frame as well for perfect loop.\n\t\t\t\tif ( ! noLoop && times[ 0 ] === 0 ) {\n\n\t\t\t\t\ttimes.push( numMorphTargets );\n\t\t\t\t\tvalues.push( values[ 0 ] );\n\n\t\t\t\t}\n\n\t\t\t\ttracks.push(\n\t\t\t\t\tnew NumberKeyframeTrack(\n\t\t\t\t\t\t'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',\n\t\t\t\t\t\ttimes, values\n\t\t\t\t\t).scale( 1.0 / fps ) );\n\n\t\t\t}\n\n\t\t\treturn new AnimationClip( name, - 1, tracks );\n\n\t\t},\n\n\t\tfindByName: function ( objectOrClipArray, name ) {\n\n\t\t\tvar clipArray = objectOrClipArray;\n\n\t\t\tif ( ! Array.isArray( objectOrClipArray ) ) {\n\n\t\t\t\tvar o = objectOrClipArray;\n\t\t\t\tclipArray = o.geometry && o.geometry.animations || o.animations;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i < clipArray.length; i ++ ) {\n\n\t\t\t\tif ( clipArray[ i ].name === name ) {\n\n\t\t\t\t\treturn clipArray[ i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\tCreateClipsFromMorphTargetSequences: function ( morphTargets, fps, noLoop ) {\n\n\t\t\tvar animationToMorphTargets = {};\n\n\t\t\t// tested with https://regex101.com/ on trick sequences\n\t\t\t// such flamingo_flyA_003, flamingo_run1_003, crdeath0059\n\t\t\tvar pattern = /^([\\w-]*?)([\\d]+)$/;\n\n\t\t\t// sort morph target names into animation groups based\n\t\t\t// patterns like Walk_001, Walk_002, Run_001, Run_002\n\t\t\tfor ( var i = 0, il = morphTargets.length; i < il; i ++ ) {\n\n\t\t\t\tvar morphTarget = morphTargets[ i ];\n\t\t\t\tvar parts = morphTarget.name.match( pattern );\n\n\t\t\t\tif ( parts && parts.length > 1 ) {\n\n\t\t\t\t\tvar name = parts[ 1 ];\n\n\t\t\t\t\tvar animationMorphTargets = animationToMorphTargets[ name ];\n\t\t\t\t\tif ( ! animationMorphTargets ) {\n\n\t\t\t\t\t\tanimationToMorphTargets[ name ] = animationMorphTargets = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tanimationMorphTargets.push( morphTarget );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar clips = [];\n\n\t\t\tfor ( var name in animationToMorphTargets ) {\n\n\t\t\t\tclips.push( AnimationClip.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );\n\n\t\t\t}\n\n\t\t\treturn clips;\n\n\t\t},\n\n\t\t// parse the animation.hierarchy format\n\t\tparseAnimation: function ( animation, bones ) {\n\n\t\t\tif ( ! animation ) {\n\n\t\t\t\tconsole.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {\n\n\t\t\t\t// only return track if there are actually keys.\n\t\t\t\tif ( animationKeys.length !== 0 ) {\n\n\t\t\t\t\tvar times = [];\n\t\t\t\t\tvar values = [];\n\n\t\t\t\t\tAnimationUtils.flattenJSON( animationKeys, times, values, propertyName );\n\n\t\t\t\t\t// empty keys are filtered out, so check again\n\t\t\t\t\tif ( times.length !== 0 ) {\n\n\t\t\t\t\t\tdestTracks.push( new trackType( trackName, times, values ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t\tvar tracks = [];\n\n\t\t\tvar clipName = animation.name || 'default';\n\t\t\t// automatic length determination in AnimationClip.\n\t\t\tvar duration = animation.length || - 1;\n\t\t\tvar fps = animation.fps || 30;\n\n\t\t\tvar hierarchyTracks = animation.hierarchy || [];\n\n\t\t\tfor ( var h = 0; h < hierarchyTracks.length; h ++ ) {\n\n\t\t\t\tvar animationKeys = hierarchyTracks[ h ].keys;\n\n\t\t\t\t// skip empty tracks\n\t\t\t\tif ( ! animationKeys || animationKeys.length === 0 ) continue;\n\n\t\t\t\t// process morph targets\n\t\t\t\tif ( animationKeys[ 0 ].morphTargets ) {\n\n\t\t\t\t\t// figure out all morph targets used in this track\n\t\t\t\t\tvar morphTargetNames = {};\n\n\t\t\t\t\tfor ( var k = 0; k < animationKeys.length; k ++ ) {\n\n\t\t\t\t\t\tif ( animationKeys[ k ].morphTargets ) {\n\n\t\t\t\t\t\t\tfor ( var m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {\n\n\t\t\t\t\t\t\t\tmorphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// create a track for each morph target with all zero\n\t\t\t\t\t// morphTargetInfluences except for the keys in which\n\t\t\t\t\t// the morphTarget is named.\n\t\t\t\t\tfor ( var morphTargetName in morphTargetNames ) {\n\n\t\t\t\t\t\tvar times = [];\n\t\t\t\t\t\tvar values = [];\n\n\t\t\t\t\t\tfor ( var m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {\n\n\t\t\t\t\t\t\tvar animationKey = animationKeys[ k ];\n\n\t\t\t\t\t\t\ttimes.push( animationKey.time );\n\t\t\t\t\t\t\tvalues.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tduration = morphTargetNames.length * ( fps || 1.0 );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// ...assume skeletal animation\n\n\t\t\t\t\tvar boneName = '.bones[' + bones[ h ].name + ']';\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tVectorKeyframeTrack, boneName + '.position',\n\t\t\t\t\t\tanimationKeys, 'pos', tracks );\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tQuaternionKeyframeTrack, boneName + '.quaternion',\n\t\t\t\t\t\tanimationKeys, 'rot', tracks );\n\n\t\t\t\t\taddNonemptyTrack(\n\t\t\t\t\t\tVectorKeyframeTrack, boneName + '.scale',\n\t\t\t\t\t\tanimationKeys, 'scl', tracks );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( tracks.length === 0 ) {\n\n\t\t\t\treturn null;\n\n\t\t\t}\n\n\t\t\tvar clip = new AnimationClip( clipName, duration, tracks );\n\n\t\t\treturn clip;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( AnimationClip.prototype, {\n\n\t\tresetDuration: function () {\n\n\t\t\tvar tracks = this.tracks, duration = 0;\n\n\t\t\tfor ( var i = 0, n = tracks.length; i !== n; ++ i ) {\n\n\t\t\t\tvar track = this.tracks[ i ];\n\n\t\t\t\tduration = Math.max( duration, track.times[ track.times.length - 1 ] );\n\n\t\t\t}\n\n\t\t\tthis.duration = duration;\n\n\t\t},\n\n\t\ttrim: function () {\n\n\t\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\tthis.tracks[ i ].trim( 0, this.duration );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\toptimize: function () {\n\n\t\t\tfor ( var i = 0; i < this.tracks.length; i ++ ) {\n\n\t\t\t\tthis.tracks[ i ].optimize();\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction MaterialLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\t\tthis.textures = {};\n\n\t}\n\n\tObject.assign( MaterialLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetTextures: function ( value ) {\n\n\t\t\tthis.textures = value;\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\tvar textures = this.textures;\n\n\t\t\tfunction getTexture( name ) {\n\n\t\t\t\tif ( textures[ name ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.MaterialLoader: Undefined texture', name );\n\n\t\t\t\t}\n\n\t\t\t\treturn textures[ name ];\n\n\t\t\t}\n\n\t\t\tvar material = new Materials[ json.type ]();\n\n\t\t\tif ( json.uuid !== undefined ) material.uuid = json.uuid;\n\t\t\tif ( json.name !== undefined ) material.name = json.name;\n\t\t\tif ( json.color !== undefined ) material.color.setHex( json.color );\n\t\t\tif ( json.roughness !== undefined ) material.roughness = json.roughness;\n\t\t\tif ( json.metalness !== undefined ) material.metalness = json.metalness;\n\t\t\tif ( json.emissive !== undefined ) material.emissive.setHex( json.emissive );\n\t\t\tif ( json.specular !== undefined ) material.specular.setHex( json.specular );\n\t\t\tif ( json.shininess !== undefined ) material.shininess = json.shininess;\n\t\t\tif ( json.clearCoat !== undefined ) material.clearCoat = json.clearCoat;\n\t\t\tif ( json.clearCoatRoughness !== undefined ) material.clearCoatRoughness = json.clearCoatRoughness;\n\t\t\tif ( json.uniforms !== undefined ) material.uniforms = json.uniforms;\n\t\t\tif ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;\n\t\t\tif ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;\n\t\t\tif ( json.vertexColors !== undefined ) material.vertexColors = json.vertexColors;\n\t\t\tif ( json.fog !== undefined ) material.fog = json.fog;\n\t\t\tif ( json.flatShading !== undefined ) material.flatShading = json.flatShading;\n\t\t\tif ( json.blending !== undefined ) material.blending = json.blending;\n\t\t\tif ( json.side !== undefined ) material.side = json.side;\n\t\t\tif ( json.opacity !== undefined ) material.opacity = json.opacity;\n\t\t\tif ( json.transparent !== undefined ) material.transparent = json.transparent;\n\t\t\tif ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;\n\t\t\tif ( json.depthTest !== undefined ) material.depthTest = json.depthTest;\n\t\t\tif ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;\n\t\t\tif ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;\n\t\t\tif ( json.wireframe !== undefined ) material.wireframe = json.wireframe;\n\t\t\tif ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;\n\t\t\tif ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;\n\t\t\tif ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;\n\n\t\t\tif ( json.rotation !== undefined ) material.rotation = json.rotation;\n\n\t\t\tif ( json.linewidth !== 1 ) material.linewidth = json.linewidth;\n\t\t\tif ( json.dashSize !== undefined ) material.dashSize = json.dashSize;\n\t\t\tif ( json.gapSize !== undefined ) material.gapSize = json.gapSize;\n\t\t\tif ( json.scale !== undefined ) material.scale = json.scale;\n\n\t\t\tif ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;\n\t\t\tif ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;\n\t\t\tif ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;\n\n\t\t\tif ( json.skinning !== undefined ) material.skinning = json.skinning;\n\t\t\tif ( json.morphTargets !== undefined ) material.morphTargets = json.morphTargets;\n\t\t\tif ( json.dithering !== undefined ) material.dithering = json.dithering;\n\n\t\t\tif ( json.visible !== undefined ) material.visible = json.visible;\n\t\t\tif ( json.userData !== undefined ) material.userData = json.userData;\n\n\t\t\t// Deprecated\n\n\t\t\tif ( json.shading !== undefined ) material.flatShading = json.shading === 1; // THREE.FlatShading\n\n\t\t\t// for PointsMaterial\n\n\t\t\tif ( json.size !== undefined ) material.size = json.size;\n\t\t\tif ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;\n\n\t\t\t// maps\n\n\t\t\tif ( json.map !== undefined ) material.map = getTexture( json.map );\n\n\t\t\tif ( json.alphaMap !== undefined ) {\n\n\t\t\t\tmaterial.alphaMap = getTexture( json.alphaMap );\n\t\t\t\tmaterial.transparent = true;\n\n\t\t\t}\n\n\t\t\tif ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );\n\t\t\tif ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;\n\n\t\t\tif ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );\n\t\t\tif ( json.normalScale !== undefined ) {\n\n\t\t\t\tvar normalScale = json.normalScale;\n\n\t\t\t\tif ( Array.isArray( normalScale ) === false ) {\n\n\t\t\t\t\t// Blender exporter used to export a scalar. See #7459\n\n\t\t\t\t\tnormalScale = [ normalScale, normalScale ];\n\n\t\t\t\t}\n\n\t\t\t\tmaterial.normalScale = new Vector2().fromArray( normalScale );\n\n\t\t\t}\n\n\t\t\tif ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );\n\t\t\tif ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;\n\t\t\tif ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;\n\n\t\t\tif ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );\n\t\t\tif ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );\n\n\t\t\tif ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );\n\t\t\tif ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;\n\n\t\t\tif ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );\n\n\t\t\tif ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );\n\n\t\t\tif ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;\n\n\t\t\tif ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );\n\t\t\tif ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;\n\n\t\t\tif ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );\n\t\t\tif ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;\n\n\t\t\tif ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );\n\n\t\t\treturn material;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction BufferGeometryLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( BufferGeometryLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tonLoad( scope.parse( JSON.parse( text ) ) );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\tvar geometry = new BufferGeometry();\n\n\t\t\tvar index = json.data.index;\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tvar typedArray = new TYPED_ARRAYS[ index.type ]( index.array );\n\t\t\t\tgeometry.setIndex( new BufferAttribute( typedArray, 1 ) );\n\n\t\t\t}\n\n\t\t\tvar attributes = json.data.attributes;\n\n\t\t\tfor ( var key in attributes ) {\n\n\t\t\t\tvar attribute = attributes[ key ];\n\t\t\t\tvar typedArray = new TYPED_ARRAYS[ attribute.type ]( attribute.array );\n\n\t\t\t\tgeometry.addAttribute( key, new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized ) );\n\n\t\t\t}\n\n\t\t\tvar groups = json.data.groups || json.data.drawcalls || json.data.offsets;\n\n\t\t\tif ( groups !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, n = groups.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar group = groups[ i ];\n\n\t\t\t\t\tgeometry.addGroup( group.start, group.count, group.materialIndex );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar boundingSphere = json.data.boundingSphere;\n\n\t\t\tif ( boundingSphere !== undefined ) {\n\n\t\t\t\tvar center = new Vector3();\n\n\t\t\t\tif ( boundingSphere.center !== undefined ) {\n\n\t\t\t\t\tcenter.fromArray( boundingSphere.center );\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.boundingSphere = new Sphere( center, boundingSphere.radius );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t} );\n\n\tvar TYPED_ARRAYS = {\n\t\tInt8Array: Int8Array,\n\t\tUint8Array: Uint8Array,\n\t\t// Workaround for IE11 pre KB2929437. See #11440\n\t\tUint8ClampedArray: typeof Uint8ClampedArray !== 'undefined' ? Uint8ClampedArray : Uint8Array,\n\t\tInt16Array: Int16Array,\n\t\tUint16Array: Uint16Array,\n\t\tInt32Array: Int32Array,\n\t\tUint32Array: Uint32Array,\n\t\tFloat32Array: Float32Array,\n\t\tFloat64Array: Float64Array\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Loader() {}\n\n\tLoader.Handlers = {\n\n\t\thandlers: [],\n\n\t\tadd: function ( regex, loader ) {\n\n\t\t\tthis.handlers.push( regex, loader );\n\n\t\t},\n\n\t\tget: function ( file ) {\n\n\t\t\tvar handlers = this.handlers;\n\n\t\t\tfor ( var i = 0, l = handlers.length; i < l; i += 2 ) {\n\n\t\t\t\tvar regex = handlers[ i ];\n\t\t\t\tvar loader = handlers[ i + 1 ];\n\n\t\t\t\tif ( regex.test( file ) ) {\n\n\t\t\t\t\treturn loader;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t};\n\n\tObject.assign( Loader.prototype, {\n\n\t\tcrossOrigin: undefined,\n\n\t\tonLoadStart: function () {},\n\n\t\tonLoadProgress: function () {},\n\n\t\tonLoadComplete: function () {},\n\n\t\tinitMaterials: function ( materials, texturePath, crossOrigin ) {\n\n\t\t\tvar array = [];\n\n\t\t\tfor ( var i = 0; i < materials.length; ++ i ) {\n\n\t\t\t\tarray[ i ] = this.createMaterial( materials[ i ], texturePath, crossOrigin );\n\n\t\t\t}\n\n\t\t\treturn array;\n\n\t\t},\n\n\t\tcreateMaterial: ( function () {\n\n\t\t\tvar BlendingMode = {\n\t\t\t\tNoBlending: NoBlending,\n\t\t\t\tNormalBlending: NormalBlending,\n\t\t\t\tAdditiveBlending: AdditiveBlending,\n\t\t\t\tSubtractiveBlending: SubtractiveBlending,\n\t\t\t\tMultiplyBlending: MultiplyBlending,\n\t\t\t\tCustomBlending: CustomBlending\n\t\t\t};\n\n\t\t\tvar color = new Color();\n\t\t\tvar textureLoader = new TextureLoader();\n\t\t\tvar materialLoader = new MaterialLoader();\n\n\t\t\treturn function createMaterial( m, texturePath, crossOrigin ) {\n\n\t\t\t\t// convert from old material format\n\n\t\t\t\tvar textures = {};\n\n\t\t\t\tfunction loadTexture( path, repeat, offset, wrap, anisotropy ) {\n\n\t\t\t\t\tvar fullPath = texturePath + path;\n\t\t\t\t\tvar loader = Loader.Handlers.get( fullPath );\n\n\t\t\t\t\tvar texture;\n\n\t\t\t\t\tif ( loader !== null ) {\n\n\t\t\t\t\t\ttexture = loader.load( fullPath );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttextureLoader.setCrossOrigin( crossOrigin );\n\t\t\t\t\t\ttexture = textureLoader.load( fullPath );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( repeat !== undefined ) {\n\n\t\t\t\t\t\ttexture.repeat.fromArray( repeat );\n\n\t\t\t\t\t\tif ( repeat[ 0 ] !== 1 ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tif ( repeat[ 1 ] !== 1 ) texture.wrapT = RepeatWrapping;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( offset !== undefined ) {\n\n\t\t\t\t\t\ttexture.offset.fromArray( offset );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( wrap !== undefined ) {\n\n\t\t\t\t\t\tif ( wrap[ 0 ] === 'repeat' ) texture.wrapS = RepeatWrapping;\n\t\t\t\t\t\tif ( wrap[ 0 ] === 'mirror' ) texture.wrapS = MirroredRepeatWrapping;\n\n\t\t\t\t\t\tif ( wrap[ 1 ] === 'repeat' ) texture.wrapT = RepeatWrapping;\n\t\t\t\t\t\tif ( wrap[ 1 ] === 'mirror' ) texture.wrapT = MirroredRepeatWrapping;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( anisotropy !== undefined ) {\n\n\t\t\t\t\t\ttexture.anisotropy = anisotropy;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar uuid = _Math.generateUUID();\n\n\t\t\t\t\ttextures[ uuid ] = texture;\n\n\t\t\t\t\treturn uuid;\n\n\t\t\t\t}\n\n\t\t\t\t//\n\n\t\t\t\tvar json = {\n\t\t\t\t\tuuid: _Math.generateUUID(),\n\t\t\t\t\ttype: 'MeshLambertMaterial'\n\t\t\t\t};\n\n\t\t\t\tfor ( var name in m ) {\n\n\t\t\t\t\tvar value = m[ name ];\n\n\t\t\t\t\tswitch ( name ) {\n\n\t\t\t\t\t\tcase 'DbgColor':\n\t\t\t\t\t\tcase 'DbgIndex':\n\t\t\t\t\t\tcase 'opticalDensity':\n\t\t\t\t\t\tcase 'illumination':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'DbgName':\n\t\t\t\t\t\t\tjson.name = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'blending':\n\t\t\t\t\t\t\tjson.blending = BlendingMode[ value ];\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorAmbient':\n\t\t\t\t\t\tcase 'mapAmbient':\n\t\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial:', name, 'is no longer supported.' );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorDiffuse':\n\t\t\t\t\t\t\tjson.color = color.fromArray( value ).getHex();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorSpecular':\n\t\t\t\t\t\t\tjson.specular = color.fromArray( value ).getHex();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'colorEmissive':\n\t\t\t\t\t\t\tjson.emissive = color.fromArray( value ).getHex();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'specularCoef':\n\t\t\t\t\t\t\tjson.shininess = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'shading':\n\t\t\t\t\t\t\tif ( value.toLowerCase() === 'basic' ) json.type = 'MeshBasicMaterial';\n\t\t\t\t\t\t\tif ( value.toLowerCase() === 'phong' ) json.type = 'MeshPhongMaterial';\n\t\t\t\t\t\t\tif ( value.toLowerCase() === 'standard' ) json.type = 'MeshStandardMaterial';\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapDiffuse':\n\t\t\t\t\t\t\tjson.map = loadTexture( value, m.mapDiffuseRepeat, m.mapDiffuseOffset, m.mapDiffuseWrap, m.mapDiffuseAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapDiffuseRepeat':\n\t\t\t\t\t\tcase 'mapDiffuseOffset':\n\t\t\t\t\t\tcase 'mapDiffuseWrap':\n\t\t\t\t\t\tcase 'mapDiffuseAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapEmissive':\n\t\t\t\t\t\t\tjson.emissiveMap = loadTexture( value, m.mapEmissiveRepeat, m.mapEmissiveOffset, m.mapEmissiveWrap, m.mapEmissiveAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapEmissiveRepeat':\n\t\t\t\t\t\tcase 'mapEmissiveOffset':\n\t\t\t\t\t\tcase 'mapEmissiveWrap':\n\t\t\t\t\t\tcase 'mapEmissiveAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapLight':\n\t\t\t\t\t\t\tjson.lightMap = loadTexture( value, m.mapLightRepeat, m.mapLightOffset, m.mapLightWrap, m.mapLightAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapLightRepeat':\n\t\t\t\t\t\tcase 'mapLightOffset':\n\t\t\t\t\t\tcase 'mapLightWrap':\n\t\t\t\t\t\tcase 'mapLightAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAO':\n\t\t\t\t\t\t\tjson.aoMap = loadTexture( value, m.mapAORepeat, m.mapAOOffset, m.mapAOWrap, m.mapAOAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAORepeat':\n\t\t\t\t\t\tcase 'mapAOOffset':\n\t\t\t\t\t\tcase 'mapAOWrap':\n\t\t\t\t\t\tcase 'mapAOAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapBump':\n\t\t\t\t\t\t\tjson.bumpMap = loadTexture( value, m.mapBumpRepeat, m.mapBumpOffset, m.mapBumpWrap, m.mapBumpAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapBumpScale':\n\t\t\t\t\t\t\tjson.bumpScale = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapBumpRepeat':\n\t\t\t\t\t\tcase 'mapBumpOffset':\n\t\t\t\t\t\tcase 'mapBumpWrap':\n\t\t\t\t\t\tcase 'mapBumpAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapNormal':\n\t\t\t\t\t\t\tjson.normalMap = loadTexture( value, m.mapNormalRepeat, m.mapNormalOffset, m.mapNormalWrap, m.mapNormalAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapNormalFactor':\n\t\t\t\t\t\t\tjson.normalScale = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapNormalRepeat':\n\t\t\t\t\t\tcase 'mapNormalOffset':\n\t\t\t\t\t\tcase 'mapNormalWrap':\n\t\t\t\t\t\tcase 'mapNormalAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapSpecular':\n\t\t\t\t\t\t\tjson.specularMap = loadTexture( value, m.mapSpecularRepeat, m.mapSpecularOffset, m.mapSpecularWrap, m.mapSpecularAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapSpecularRepeat':\n\t\t\t\t\t\tcase 'mapSpecularOffset':\n\t\t\t\t\t\tcase 'mapSpecularWrap':\n\t\t\t\t\t\tcase 'mapSpecularAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapMetalness':\n\t\t\t\t\t\t\tjson.metalnessMap = loadTexture( value, m.mapMetalnessRepeat, m.mapMetalnessOffset, m.mapMetalnessWrap, m.mapMetalnessAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapMetalnessRepeat':\n\t\t\t\t\t\tcase 'mapMetalnessOffset':\n\t\t\t\t\t\tcase 'mapMetalnessWrap':\n\t\t\t\t\t\tcase 'mapMetalnessAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapRoughness':\n\t\t\t\t\t\t\tjson.roughnessMap = loadTexture( value, m.mapRoughnessRepeat, m.mapRoughnessOffset, m.mapRoughnessWrap, m.mapRoughnessAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapRoughnessRepeat':\n\t\t\t\t\t\tcase 'mapRoughnessOffset':\n\t\t\t\t\t\tcase 'mapRoughnessWrap':\n\t\t\t\t\t\tcase 'mapRoughnessAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAlpha':\n\t\t\t\t\t\t\tjson.alphaMap = loadTexture( value, m.mapAlphaRepeat, m.mapAlphaOffset, m.mapAlphaWrap, m.mapAlphaAnisotropy );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'mapAlphaRepeat':\n\t\t\t\t\t\tcase 'mapAlphaOffset':\n\t\t\t\t\t\tcase 'mapAlphaWrap':\n\t\t\t\t\t\tcase 'mapAlphaAnisotropy':\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'flipSided':\n\t\t\t\t\t\t\tjson.side = BackSide;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'doubleSided':\n\t\t\t\t\t\t\tjson.side = DoubleSide;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'transparency':\n\t\t\t\t\t\t\tconsole.warn( 'THREE.Loader.createMaterial: transparency has been renamed to opacity' );\n\t\t\t\t\t\t\tjson.opacity = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'depthTest':\n\t\t\t\t\t\tcase 'depthWrite':\n\t\t\t\t\t\tcase 'colorWrite':\n\t\t\t\t\t\tcase 'opacity':\n\t\t\t\t\t\tcase 'reflectivity':\n\t\t\t\t\t\tcase 'transparent':\n\t\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\tcase 'wireframe':\n\t\t\t\t\t\t\tjson[ name ] = value;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'vertexColors':\n\t\t\t\t\t\t\tif ( value === true ) json.vertexColors = VertexColors;\n\t\t\t\t\t\t\tif ( value === 'face' ) json.vertexColors = FaceColors;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tconsole.error( 'THREE.Loader.createMaterial: Unsupported', name, value );\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.type === 'MeshBasicMaterial' ) delete json.emissive;\n\t\t\t\tif ( json.type !== 'MeshPhongMaterial' ) delete json.specular;\n\n\t\t\t\tif ( json.opacity < 1 ) json.transparent = true;\n\n\t\t\t\tmaterialLoader.setTextures( textures );\n\n\t\t\t\treturn materialLoader.parse( json );\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * @author Don McCurdy / https://www.donmccurdy.com\n\t */\n\n\tvar LoaderUtils = {\n\n\t\tdecodeText: function ( array ) {\n\n\t\t\tif ( typeof TextDecoder !== 'undefined' ) {\n\n\t\t\t\treturn new TextDecoder().decode( array );\n\n\t\t\t}\n\n\t\t\t// Avoid the String.fromCharCode.apply(null, array) shortcut, which\n\t\t\t// throws a \"maximum call stack size exceeded\" error for large arrays.\n\n\t\t\tvar s = '';\n\n\t\t\tfor ( var i = 0, il = array.length; i < il; i ++ ) {\n\n\t\t\t\t// Implicitly assumes little-endian.\n\t\t\t\ts += String.fromCharCode( array[ i ] );\n\n\t\t\t}\n\n\t\t\t// Merges multi-byte utf-8 characters.\n\t\t\treturn decodeURIComponent( escape( s ) );\n\n\t\t},\n\n\t\textractUrlBase: function ( url ) {\n\n\t\t\tvar index = url.lastIndexOf( '/' );\n\n\t\t\tif ( index === - 1 ) return './';\n\n\t\t\treturn url.substr( 0, index + 1 );\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction JSONLoader( manager ) {\n\n\t\tif ( typeof manager === 'boolean' ) {\n\n\t\t\tconsole.warn( 'THREE.JSONLoader: showStatus parameter has been removed from constructor.' );\n\t\t\tmanager = undefined;\n\n\t\t}\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t\tthis.withCredentials = false;\n\n\t}\n\n\tObject.assign( JSONLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar texturePath = this.texturePath && ( typeof this.texturePath === 'string' ) ? this.texturePath : LoaderUtils.extractUrlBase( url );\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setWithCredentials( this.withCredentials );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tvar json = JSON.parse( text );\n\t\t\t\tvar metadata = json.metadata;\n\n\t\t\t\tif ( metadata !== undefined ) {\n\n\t\t\t\t\tvar type = metadata.type;\n\n\t\t\t\t\tif ( type !== undefined ) {\n\n\t\t\t\t\t\tif ( type.toLowerCase() === 'object' ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.JSONLoader: ' + url + ' should be loaded with THREE.ObjectLoader instead.' );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvar object = scope.parse( json, texturePath );\n\t\t\t\tonLoad( object.geometry, object.materials );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetTexturePath: function ( value ) {\n\n\t\t\tthis.texturePath = value;\n\n\t\t},\n\n\t\tparse: ( function () {\n\n\t\t\tfunction parseModel( json, geometry ) {\n\n\t\t\t\tfunction isBitSet( value, position ) {\n\n\t\t\t\t\treturn value & ( 1 << position );\n\n\t\t\t\t}\n\n\t\t\t\tvar i, j, fi,\n\n\t\t\t\t\toffset, zLength,\n\n\t\t\t\t\tcolorIndex, normalIndex, uvIndex, materialIndex,\n\n\t\t\t\t\ttype,\n\t\t\t\t\tisQuad,\n\t\t\t\t\thasMaterial,\n\t\t\t\t\thasFaceVertexUv,\n\t\t\t\t\thasFaceNormal, hasFaceVertexNormal,\n\t\t\t\t\thasFaceColor, hasFaceVertexColor,\n\n\t\t\t\t\tvertex, face, faceA, faceB, hex, normal,\n\n\t\t\t\t\tuvLayer, uv, u, v,\n\n\t\t\t\t\tfaces = json.faces,\n\t\t\t\t\tvertices = json.vertices,\n\t\t\t\t\tnormals = json.normals,\n\t\t\t\t\tcolors = json.colors,\n\n\t\t\t\t\tscale = json.scale,\n\n\t\t\t\t\tnUvLayers = 0;\n\n\n\t\t\t\tif ( json.uvs !== undefined ) {\n\n\t\t\t\t\t// disregard empty arrays\n\n\t\t\t\t\tfor ( i = 0; i < json.uvs.length; i ++ ) {\n\n\t\t\t\t\t\tif ( json.uvs[ i ].length ) nUvLayers ++;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\tgeometry.faceVertexUvs[ i ] = [];\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\toffset = 0;\n\t\t\t\tzLength = vertices.length;\n\n\t\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\t\tvertex = new Vector3();\n\n\t\t\t\t\tvertex.x = vertices[ offset ++ ] * scale;\n\t\t\t\t\tvertex.y = vertices[ offset ++ ] * scale;\n\t\t\t\t\tvertex.z = vertices[ offset ++ ] * scale;\n\n\t\t\t\t\tgeometry.vertices.push( vertex );\n\n\t\t\t\t}\n\n\t\t\t\toffset = 0;\n\t\t\t\tzLength = faces.length;\n\n\t\t\t\twhile ( offset < zLength ) {\n\n\t\t\t\t\ttype = faces[ offset ++ ];\n\n\t\t\t\t\tisQuad = isBitSet( type, 0 );\n\t\t\t\t\thasMaterial = isBitSet( type, 1 );\n\t\t\t\t\thasFaceVertexUv = isBitSet( type, 3 );\n\t\t\t\t\thasFaceNormal = isBitSet( type, 4 );\n\t\t\t\t\thasFaceVertexNormal = isBitSet( type, 5 );\n\t\t\t\t\thasFaceColor = isBitSet( type, 6 );\n\t\t\t\t\thasFaceVertexColor = isBitSet( type, 7 );\n\n\t\t\t\t\t// console.log(\"type\", type, \"bits\", isQuad, hasMaterial, hasFaceVertexUv, hasFaceNormal, hasFaceVertexNormal, hasFaceColor, hasFaceVertexColor);\n\n\t\t\t\t\tif ( isQuad ) {\n\n\t\t\t\t\t\tfaceA = new Face3();\n\t\t\t\t\t\tfaceA.a = faces[ offset ];\n\t\t\t\t\t\tfaceA.b = faces[ offset + 1 ];\n\t\t\t\t\t\tfaceA.c = faces[ offset + 3 ];\n\n\t\t\t\t\t\tfaceB = new Face3();\n\t\t\t\t\t\tfaceB.a = faces[ offset + 1 ];\n\t\t\t\t\t\tfaceB.b = faces[ offset + 2 ];\n\t\t\t\t\t\tfaceB.c = faces[ offset + 3 ];\n\n\t\t\t\t\t\toffset += 4;\n\n\t\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tfaceA.materialIndex = materialIndex;\n\t\t\t\t\t\t\tfaceB.materialIndex = materialIndex;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi + 1 ] = [];\n\n\t\t\t\t\t\t\t\tfor ( j = 0; j < 4; j ++ ) {\n\n\t\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\t\tif ( j !== 2 ) geometry.faceVertexUvs[ i ][ fi ].push( uv );\n\t\t\t\t\t\t\t\t\tif ( j !== 0 ) geometry.faceVertexUvs[ i ][ fi + 1 ].push( uv );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tfaceA.normal.set(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tfaceB.normal.copy( faceA.normal );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t\t);\n\n\n\t\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexNormals.push( normal );\n\t\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexNormals.push( normal );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\tfaceA.color.setHex( hex );\n\t\t\t\t\t\t\tfaceB.color.setHex( hex );\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 4; i ++ ) {\n\n\t\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\t\thex = colors[ colorIndex ];\n\n\t\t\t\t\t\t\t\tif ( i !== 2 ) faceA.vertexColors.push( new Color( hex ) );\n\t\t\t\t\t\t\t\tif ( i !== 0 ) faceB.vertexColors.push( new Color( hex ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry.faces.push( faceA );\n\t\t\t\t\t\tgeometry.faces.push( faceB );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tface = new Face3();\n\t\t\t\t\t\tface.a = faces[ offset ++ ];\n\t\t\t\t\t\tface.b = faces[ offset ++ ];\n\t\t\t\t\t\tface.c = faces[ offset ++ ];\n\n\t\t\t\t\t\tif ( hasMaterial ) {\n\n\t\t\t\t\t\t\tmaterialIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.materialIndex = materialIndex;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// to get face <=> uv index correspondence\n\n\t\t\t\t\t\tfi = geometry.faces.length;\n\n\t\t\t\t\t\tif ( hasFaceVertexUv ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < nUvLayers; i ++ ) {\n\n\t\t\t\t\t\t\t\tuvLayer = json.uvs[ i ];\n\n\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ] = [];\n\n\t\t\t\t\t\t\t\tfor ( j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\t\t\t\t\tuvIndex = faces[ offset ++ ];\n\n\t\t\t\t\t\t\t\t\tu = uvLayer[ uvIndex * 2 ];\n\t\t\t\t\t\t\t\t\tv = uvLayer[ uvIndex * 2 + 1 ];\n\n\t\t\t\t\t\t\t\t\tuv = new Vector2( u, v );\n\n\t\t\t\t\t\t\t\t\tgeometry.faceVertexUvs[ i ][ fi ].push( uv );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceNormal ) {\n\n\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\tface.normal.set(\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( hasFaceVertexNormal ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\t\tnormalIndex = faces[ offset ++ ] * 3;\n\n\t\t\t\t\t\t\t\tnormal = new Vector3(\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ++ ],\n\t\t\t\t\t\t\t\t\tnormals[ normalIndex ]\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tface.vertexNormals.push( normal );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceColor ) {\n\n\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\tface.color.setHex( colors[ colorIndex ] );\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\tif ( hasFaceVertexColor ) {\n\n\t\t\t\t\t\t\tfor ( i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\t\t\t\tcolorIndex = faces[ offset ++ ];\n\t\t\t\t\t\t\t\tface.vertexColors.push( new Color( colors[ colorIndex ] ) );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tgeometry.faces.push( face );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction parseSkin( json, geometry ) {\n\n\t\t\t\tvar influencesPerVertex = ( json.influencesPerVertex !== undefined ) ? json.influencesPerVertex : 2;\n\n\t\t\t\tif ( json.skinWeights ) {\n\n\t\t\t\t\tfor ( var i = 0, l = json.skinWeights.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\t\tvar x = json.skinWeights[ i ];\n\t\t\t\t\t\tvar y = ( influencesPerVertex > 1 ) ? json.skinWeights[ i + 1 ] : 0;\n\t\t\t\t\t\tvar z = ( influencesPerVertex > 2 ) ? json.skinWeights[ i + 2 ] : 0;\n\t\t\t\t\t\tvar w = ( influencesPerVertex > 3 ) ? json.skinWeights[ i + 3 ] : 0;\n\n\t\t\t\t\t\tgeometry.skinWeights.push( new Vector4( x, y, z, w ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.skinIndices ) {\n\n\t\t\t\t\tfor ( var i = 0, l = json.skinIndices.length; i < l; i += influencesPerVertex ) {\n\n\t\t\t\t\t\tvar a = json.skinIndices[ i ];\n\t\t\t\t\t\tvar b = ( influencesPerVertex > 1 ) ? json.skinIndices[ i + 1 ] : 0;\n\t\t\t\t\t\tvar c = ( influencesPerVertex > 2 ) ? json.skinIndices[ i + 2 ] : 0;\n\t\t\t\t\t\tvar d = ( influencesPerVertex > 3 ) ? json.skinIndices[ i + 3 ] : 0;\n\n\t\t\t\t\t\tgeometry.skinIndices.push( new Vector4( a, b, c, d ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tgeometry.bones = json.bones;\n\n\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 && ( geometry.skinWeights.length !== geometry.skinIndices.length || geometry.skinIndices.length !== geometry.vertices.length ) ) {\n\n\t\t\t\t\tconsole.warn( 'When skinning, number of vertices (' + geometry.vertices.length + '), skinIndices (' +\n\t\t\t\t\t\tgeometry.skinIndices.length + '), and skinWeights (' + geometry.skinWeights.length + ') should match.' );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction parseMorphing( json, geometry ) {\n\n\t\t\t\tvar scale = json.scale;\n\n\t\t\t\tif ( json.morphTargets !== undefined ) {\n\n\t\t\t\t\tfor ( var i = 0, l = json.morphTargets.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tgeometry.morphTargets[ i ] = {};\n\t\t\t\t\t\tgeometry.morphTargets[ i ].name = json.morphTargets[ i ].name;\n\t\t\t\t\t\tgeometry.morphTargets[ i ].vertices = [];\n\n\t\t\t\t\t\tvar dstVertices = geometry.morphTargets[ i ].vertices;\n\t\t\t\t\t\tvar srcVertices = json.morphTargets[ i ].vertices;\n\n\t\t\t\t\t\tfor ( var v = 0, vl = srcVertices.length; v < vl; v += 3 ) {\n\n\t\t\t\t\t\t\tvar vertex = new Vector3();\n\t\t\t\t\t\t\tvertex.x = srcVertices[ v ] * scale;\n\t\t\t\t\t\t\tvertex.y = srcVertices[ v + 1 ] * scale;\n\t\t\t\t\t\t\tvertex.z = srcVertices[ v + 2 ] * scale;\n\n\t\t\t\t\t\t\tdstVertices.push( vertex );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.morphColors !== undefined && json.morphColors.length > 0 ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.JSONLoader: \"morphColors\" no longer supported. Using them as face colors.' );\n\n\t\t\t\t\tvar faces = geometry.faces;\n\t\t\t\t\tvar morphColors = json.morphColors[ 0 ].colors;\n\n\t\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tfaces[ i ].color.fromArray( morphColors, i * 3 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tfunction parseAnimations( json, geometry ) {\n\n\t\t\t\tvar outputAnimations = [];\n\n\t\t\t\t// parse old style Bone/Hierarchy animations\n\t\t\t\tvar animations = [];\n\n\t\t\t\tif ( json.animation !== undefined ) {\n\n\t\t\t\t\tanimations.push( json.animation );\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.animations !== undefined ) {\n\n\t\t\t\t\tif ( json.animations.length ) {\n\n\t\t\t\t\t\tanimations = animations.concat( json.animations );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tanimations.push( json.animations );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var i = 0; i < animations.length; i ++ ) {\n\n\t\t\t\t\tvar clip = AnimationClip.parseAnimation( animations[ i ], geometry.bones );\n\t\t\t\t\tif ( clip ) outputAnimations.push( clip );\n\n\t\t\t\t}\n\n\t\t\t\t// parse implicit morph animations\n\t\t\t\tif ( geometry.morphTargets ) {\n\n\t\t\t\t\t// TODO: Figure out what an appropraite FPS is for morph target animations -- defaulting to 10, but really it is completely arbitrary.\n\t\t\t\t\tvar morphAnimationClips = AnimationClip.CreateClipsFromMorphTargetSequences( geometry.morphTargets, 10 );\n\t\t\t\t\toutputAnimations = outputAnimations.concat( morphAnimationClips );\n\n\t\t\t\t}\n\n\t\t\t\tif ( outputAnimations.length > 0 ) geometry.animations = outputAnimations;\n\n\t\t\t}\n\n\t\t\treturn function parse( json, texturePath ) {\n\n\t\t\t\tif ( json.data !== undefined ) {\n\n\t\t\t\t\t// Geometry 4.0 spec\n\t\t\t\t\tjson = json.data;\n\n\t\t\t\t}\n\n\t\t\t\tif ( json.scale !== undefined ) {\n\n\t\t\t\t\tjson.scale = 1.0 / json.scale;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tjson.scale = 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tvar geometry = new Geometry();\n\n\t\t\t\tparseModel( json, geometry );\n\t\t\t\tparseSkin( json, geometry );\n\t\t\t\tparseMorphing( json, geometry );\n\t\t\t\tparseAnimations( json, geometry );\n\n\t\t\t\tgeometry.computeFaceNormals();\n\t\t\t\tgeometry.computeBoundingSphere();\n\n\t\t\t\tif ( json.materials === undefined || json.materials.length === 0 ) {\n\n\t\t\t\t\treturn { geometry: geometry };\n\n\t\t\t\t} else {\n\n\t\t\t\t\tvar materials = Loader.prototype.initMaterials( json.materials, texturePath, this.crossOrigin );\n\n\t\t\t\t\treturn { geometry: geometry, materials: materials };\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction ObjectLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\t\tthis.texturePath = '';\n\n\t}\n\n\tObject.assign( ObjectLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( this.texturePath === '' ) {\n\n\t\t\t\tthis.texturePath = url.substring( 0, url.lastIndexOf( '/' ) + 1 );\n\n\t\t\t}\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( scope.manager );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tvar json = null;\n\n\t\t\t\ttry {\n\n\t\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t\t} catch ( error ) {\n\n\t\t\t\t\tif ( onError !== undefined ) onError( error );\n\n\t\t\t\t\tconsole.error( 'THREE:ObjectLoader: Can\\'t parse ' + url + '.', error.message );\n\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tvar metadata = json.metadata;\n\n\t\t\t\tif ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {\n\n\t\t\t\t\tconsole.error( 'THREE.ObjectLoader: Can\\'t load ' + url + '. Use THREE.JSONLoader instead.' );\n\t\t\t\t\treturn;\n\n\t\t\t\t}\n\n\t\t\t\tscope.parse( json, onLoad );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tsetTexturePath: function ( value ) {\n\n\t\t\tthis.texturePath = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( value ) {\n\n\t\t\tthis.crossOrigin = value;\n\t\t\treturn this;\n\n\t\t},\n\n\t\tparse: function ( json, onLoad ) {\n\n\t\t\tvar shapes = this.parseShape( json.shapes );\n\t\t\tvar geometries = this.parseGeometries( json.geometries, shapes );\n\n\t\t\tvar images = this.parseImages( json.images, function () {\n\n\t\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t\t} );\n\n\t\t\tvar textures = this.parseTextures( json.textures, images );\n\t\t\tvar materials = this.parseMaterials( json.materials, textures );\n\n\t\t\tvar object = this.parseObject( json.object, geometries, materials );\n\n\t\t\tif ( json.animations ) {\n\n\t\t\t\tobject.animations = this.parseAnimations( json.animations );\n\n\t\t\t}\n\n\t\t\tif ( json.images === undefined || json.images.length === 0 ) {\n\n\t\t\t\tif ( onLoad !== undefined ) onLoad( object );\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t},\n\n\t\tparseShape: function ( json ) {\n\n\t\t\tvar shapes = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar shape = new Shape().fromJSON( json[ i ] );\n\n\t\t\t\t\tshapes[ shape.uuid ] = shape;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t},\n\n\t\tparseGeometries: function ( json, shapes ) {\n\n\t\t\tvar geometries = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tvar geometryLoader = new JSONLoader();\n\t\t\t\tvar bufferGeometryLoader = new BufferGeometryLoader();\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar geometry;\n\t\t\t\t\tvar data = json[ i ];\n\n\t\t\t\t\tswitch ( data.type ) {\n\n\t\t\t\t\t\tcase 'PlaneGeometry':\n\t\t\t\t\t\tcase 'PlaneBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BoxGeometry':\n\t\t\t\t\t\tcase 'BoxBufferGeometry':\n\t\t\t\t\t\tcase 'CubeGeometry': // backwards compatible\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.width,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.depth,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.depthSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CircleGeometry':\n\t\t\t\t\t\tcase 'CircleBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'CylinderGeometry':\n\t\t\t\t\t\tcase 'CylinderBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radiusTop,\n\t\t\t\t\t\t\t\tdata.radiusBottom,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ConeGeometry':\n\t\t\t\t\t\tcase 'ConeBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.height,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.openEnded,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'SphereGeometry':\n\t\t\t\t\t\tcase 'SphereBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.widthSegments,\n\t\t\t\t\t\t\t\tdata.heightSegments,\n\t\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\t\tdata.phiLength,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'DodecahedronGeometry':\n\t\t\t\t\t\tcase 'DodecahedronBufferGeometry':\n\t\t\t\t\t\tcase 'IcosahedronGeometry':\n\t\t\t\t\t\tcase 'IcosahedronBufferGeometry':\n\t\t\t\t\t\tcase 'OctahedronGeometry':\n\t\t\t\t\t\tcase 'OctahedronBufferGeometry':\n\t\t\t\t\t\tcase 'TetrahedronGeometry':\n\t\t\t\t\t\tcase 'TetrahedronBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.detail\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'RingGeometry':\n\t\t\t\t\t\tcase 'RingBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.innerRadius,\n\t\t\t\t\t\t\t\tdata.outerRadius,\n\t\t\t\t\t\t\t\tdata.thetaSegments,\n\t\t\t\t\t\t\t\tdata.phiSegments,\n\t\t\t\t\t\t\t\tdata.thetaStart,\n\t\t\t\t\t\t\t\tdata.thetaLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusGeometry':\n\t\t\t\t\t\tcase 'TorusBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\t\tdata.arc\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'TorusKnotGeometry':\n\t\t\t\t\t\tcase 'TorusKnotBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.tube,\n\t\t\t\t\t\t\t\tdata.tubularSegments,\n\t\t\t\t\t\t\t\tdata.radialSegments,\n\t\t\t\t\t\t\t\tdata.p,\n\t\t\t\t\t\t\t\tdata.q\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'LatheGeometry':\n\t\t\t\t\t\tcase 'LatheBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.points,\n\t\t\t\t\t\t\t\tdata.segments,\n\t\t\t\t\t\t\t\tdata.phiStart,\n\t\t\t\t\t\t\t\tdata.phiLength\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'PolyhedronGeometry':\n\t\t\t\t\t\tcase 'PolyhedronBufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tdata.vertices,\n\t\t\t\t\t\t\t\tdata.indices,\n\t\t\t\t\t\t\t\tdata.radius,\n\t\t\t\t\t\t\t\tdata.details\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'ShapeGeometry':\n\t\t\t\t\t\tcase 'ShapeBufferGeometry':\n\n\t\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\t\tdata.curveSegments\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\n\t\t\t\t\t\tcase 'ExtrudeGeometry':\n\t\t\t\t\t\tcase 'ExtrudeBufferGeometry':\n\n\t\t\t\t\t\t\tvar geometryShapes = [];\n\n\t\t\t\t\t\t\tfor ( var j = 0, jl = data.shapes.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\t\t\tvar shape = shapes[ data.shapes[ j ] ];\n\n\t\t\t\t\t\t\t\tgeometryShapes.push( shape );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar extrudePath = data.options.extrudePath;\n\n\t\t\t\t\t\t\tif ( extrudePath !== undefined ) {\n\n\t\t\t\t\t\t\t\tdata.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tgeometry = new Geometries[ data.type ](\n\t\t\t\t\t\t\t\tgeometryShapes,\n\t\t\t\t\t\t\t\tdata.options\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'BufferGeometry':\n\n\t\t\t\t\t\t\tgeometry = bufferGeometryLoader.parse( data );\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'Geometry':\n\n\t\t\t\t\t\t\tgeometry = geometryLoader.parse( data, this.texturePath ).geometry;\n\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tdefault:\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Unsupported geometry type \"' + data.type + '\"' );\n\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tgeometry.uuid = data.uuid;\n\n\t\t\t\t\tif ( data.name !== undefined ) geometry.name = data.name;\n\t\t\t\t\tif ( geometry.isBufferGeometry === true && data.userData !== undefined ) geometry.userData = data.userData;\n\n\t\t\t\t\tgeometries[ data.uuid ] = geometry;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn geometries;\n\n\t\t},\n\n\t\tparseMaterials: function ( json, textures ) {\n\n\t\t\tvar materials = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tvar loader = new MaterialLoader();\n\t\t\t\tloader.setTextures( textures );\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar data = json[ i ];\n\n\t\t\t\t\tif ( data.type === 'MultiMaterial' ) {\n\n\t\t\t\t\t\t// Deprecated\n\n\t\t\t\t\t\tvar array = [];\n\n\t\t\t\t\t\tfor ( var j = 0; j < data.materials.length; j ++ ) {\n\n\t\t\t\t\t\t\tarray.push( loader.parse( data.materials[ j ] ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tmaterials[ data.uuid ] = array;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tmaterials[ data.uuid ] = loader.parse( data );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn materials;\n\n\t\t},\n\n\t\tparseAnimations: function ( json ) {\n\n\t\t\tvar animations = [];\n\n\t\t\tfor ( var i = 0; i < json.length; i ++ ) {\n\n\t\t\t\tvar data = json[ i ];\n\n\t\t\t\tvar clip = AnimationClip.parse( data );\n\n\t\t\t\tif ( data.uuid !== undefined ) clip.uuid = data.uuid;\n\n\t\t\t\tanimations.push( clip );\n\n\t\t\t}\n\n\t\t\treturn animations;\n\n\t\t},\n\n\t\tparseImages: function ( json, onLoad ) {\n\n\t\t\tvar scope = this;\n\t\t\tvar images = {};\n\n\t\t\tfunction loadImage( url ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\treturn loader.load( url, function () {\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, undefined, function () {\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t\t} );\n\n\t\t\t}\n\n\t\t\tif ( json !== undefined && json.length > 0 ) {\n\n\t\t\t\tvar manager = new LoadingManager( onLoad );\n\n\t\t\t\tvar loader = new ImageLoader( manager );\n\t\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar image = json[ i ];\n\t\t\t\t\tvar path = /^(\\/\\/)|([a-z]+:(\\/\\/)?)/i.test( image.url ) ? image.url : scope.texturePath + image.url;\n\n\t\t\t\t\timages[ image.uuid ] = loadImage( path );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn images;\n\n\t\t},\n\n\t\tparseTextures: function ( json, images ) {\n\n\t\t\tfunction parseConstant( value, type ) {\n\n\t\t\t\tif ( typeof value === 'number' ) return value;\n\n\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );\n\n\t\t\t\treturn type[ value ];\n\n\t\t\t}\n\n\t\t\tvar textures = {};\n\n\t\t\tif ( json !== undefined ) {\n\n\t\t\t\tfor ( var i = 0, l = json.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar data = json[ i ];\n\n\t\t\t\t\tif ( data.image === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: No \"image\" specified for', data.uuid );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( images[ data.image ] === undefined ) {\n\n\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined image', data.image );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar texture = new Texture( images[ data.image ] );\n\t\t\t\t\ttexture.needsUpdate = true;\n\n\t\t\t\t\ttexture.uuid = data.uuid;\n\n\t\t\t\t\tif ( data.name !== undefined ) texture.name = data.name;\n\n\t\t\t\t\tif ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );\n\n\t\t\t\t\tif ( data.offset !== undefined ) texture.offset.fromArray( data.offset );\n\t\t\t\t\tif ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );\n\t\t\t\t\tif ( data.center !== undefined ) texture.center.fromArray( data.center );\n\t\t\t\t\tif ( data.rotation !== undefined ) texture.rotation = data.rotation;\n\n\t\t\t\t\tif ( data.wrap !== undefined ) {\n\n\t\t\t\t\t\ttexture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );\n\t\t\t\t\t\ttexture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.format !== undefined ) texture.format = data.format;\n\n\t\t\t\t\tif ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );\n\t\t\t\t\tif ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );\n\t\t\t\t\tif ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;\n\n\t\t\t\t\tif ( data.flipY !== undefined ) texture.flipY = data.flipY;\n\n\t\t\t\t\ttextures[ data.uuid ] = texture;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn textures;\n\n\t\t},\n\n\t\tparseObject: function ( data, geometries, materials ) {\n\n\t\t\tvar object;\n\n\t\t\tfunction getGeometry( name ) {\n\n\t\t\t\tif ( geometries[ name ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined geometry', name );\n\n\t\t\t\t}\n\n\t\t\t\treturn geometries[ name ];\n\n\t\t\t}\n\n\t\t\tfunction getMaterial( name ) {\n\n\t\t\t\tif ( name === undefined ) return undefined;\n\n\t\t\t\tif ( Array.isArray( name ) ) {\n\n\t\t\t\t\tvar array = [];\n\n\t\t\t\t\tfor ( var i = 0, l = name.length; i < l; i ++ ) {\n\n\t\t\t\t\t\tvar uuid = name[ i ];\n\n\t\t\t\t\t\tif ( materials[ uuid ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', uuid );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tarray.push( materials[ uuid ] );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn array;\n\n\t\t\t\t}\n\n\t\t\t\tif ( materials[ name ] === undefined ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader: Undefined material', name );\n\n\t\t\t\t}\n\n\t\t\t\treturn materials[ name ];\n\n\t\t\t}\n\n\t\t\tswitch ( data.type ) {\n\n\t\t\t\tcase 'Scene':\n\n\t\t\t\t\tobject = new Scene();\n\n\t\t\t\t\tif ( data.background !== undefined ) {\n\n\t\t\t\t\t\tif ( Number.isInteger( data.background ) ) {\n\n\t\t\t\t\t\t\tobject.background = new Color( data.background );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( data.fog !== undefined ) {\n\n\t\t\t\t\t\tif ( data.fog.type === 'Fog' ) {\n\n\t\t\t\t\t\t\tobject.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );\n\n\t\t\t\t\t\t} else if ( data.fog.type === 'FogExp2' ) {\n\n\t\t\t\t\t\t\tobject.fog = new FogExp2( data.fog.color, data.fog.density );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PerspectiveCamera':\n\n\t\t\t\t\tobject = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );\n\n\t\t\t\t\tif ( data.focus !== undefined ) object.focus = data.focus;\n\t\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\t\tif ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;\n\t\t\t\t\tif ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;\n\t\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'OrthographicCamera':\n\n\t\t\t\t\tobject = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );\n\n\t\t\t\t\tif ( data.zoom !== undefined ) object.zoom = data.zoom;\n\t\t\t\t\tif ( data.view !== undefined ) object.view = Object.assign( {}, data.view );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'AmbientLight':\n\n\t\t\t\t\tobject = new AmbientLight( data.color, data.intensity );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'DirectionalLight':\n\n\t\t\t\t\tobject = new DirectionalLight( data.color, data.intensity );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointLight':\n\n\t\t\t\t\tobject = new PointLight( data.color, data.intensity, data.distance, data.decay );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'RectAreaLight':\n\n\t\t\t\t\tobject = new RectAreaLight( data.color, data.intensity, data.width, data.height );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SpotLight':\n\n\t\t\t\t\tobject = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'HemisphereLight':\n\n\t\t\t\t\tobject = new HemisphereLight( data.color, data.groundColor, data.intensity );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'SkinnedMesh':\n\n\t\t\t\t\tconsole.warn( 'THREE.ObjectLoader.parseObject() does not support SkinnedMesh yet.' );\n\n\t\t\t\tcase 'Mesh':\n\n\t\t\t\t\tvar geometry = getGeometry( data.geometry );\n\t\t\t\t\tvar material = getMaterial( data.material );\n\n\t\t\t\t\tif ( geometry.bones && geometry.bones.length > 0 ) {\n\n\t\t\t\t\t\tobject = new SkinnedMesh( geometry, material );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tobject = new Mesh( geometry, material );\n\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LOD':\n\n\t\t\t\t\tobject = new LOD();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Line':\n\n\t\t\t\t\tobject = new Line( getGeometry( data.geometry ), getMaterial( data.material ), data.mode );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LineLoop':\n\n\t\t\t\t\tobject = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'LineSegments':\n\n\t\t\t\t\tobject = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'PointCloud':\n\t\t\t\tcase 'Points':\n\n\t\t\t\t\tobject = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Sprite':\n\n\t\t\t\t\tobject = new Sprite( getMaterial( data.material ) );\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Group':\n\n\t\t\t\t\tobject = new Group();\n\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\n\t\t\t\t\tobject = new Object3D();\n\n\t\t\t}\n\n\t\t\tobject.uuid = data.uuid;\n\n\t\t\tif ( data.name !== undefined ) object.name = data.name;\n\n\t\t\tif ( data.matrix !== undefined ) {\n\n\t\t\t\tobject.matrix.fromArray( data.matrix );\n\n\t\t\t\tif ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;\n\t\t\t\tif ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );\n\n\t\t\t} else {\n\n\t\t\t\tif ( data.position !== undefined ) object.position.fromArray( data.position );\n\t\t\t\tif ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );\n\t\t\t\tif ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );\n\t\t\t\tif ( data.scale !== undefined ) object.scale.fromArray( data.scale );\n\n\t\t\t}\n\n\t\t\tif ( data.castShadow !== undefined ) object.castShadow = data.castShadow;\n\t\t\tif ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;\n\n\t\t\tif ( data.shadow ) {\n\n\t\t\t\tif ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;\n\t\t\t\tif ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;\n\t\t\t\tif ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );\n\t\t\t\tif ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );\n\n\t\t\t}\n\n\t\t\tif ( data.visible !== undefined ) object.visible = data.visible;\n\t\t\tif ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;\n\t\t\tif ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;\n\t\t\tif ( data.userData !== undefined ) object.userData = data.userData;\n\n\t\t\tif ( data.children !== undefined ) {\n\n\t\t\t\tvar children = data.children;\n\n\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\tobject.add( this.parseObject( children[ i ], geometries, materials ) );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( data.type === 'LOD' ) {\n\n\t\t\t\tvar levels = data.levels;\n\n\t\t\t\tfor ( var l = 0; l < levels.length; l ++ ) {\n\n\t\t\t\t\tvar level = levels[ l ];\n\t\t\t\t\tvar child = object.getObjectByProperty( 'uuid', level.object );\n\n\t\t\t\t\tif ( child !== undefined ) {\n\n\t\t\t\t\t\tobject.addLevel( child, level.distance );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn object;\n\n\t\t}\n\n\t} );\n\n\tvar TEXTURE_MAPPING = {\n\t\tUVMapping: UVMapping,\n\t\tCubeReflectionMapping: CubeReflectionMapping,\n\t\tCubeRefractionMapping: CubeRefractionMapping,\n\t\tEquirectangularReflectionMapping: EquirectangularReflectionMapping,\n\t\tEquirectangularRefractionMapping: EquirectangularRefractionMapping,\n\t\tSphericalReflectionMapping: SphericalReflectionMapping,\n\t\tCubeUVReflectionMapping: CubeUVReflectionMapping,\n\t\tCubeUVRefractionMapping: CubeUVRefractionMapping\n\t};\n\n\tvar TEXTURE_WRAPPING = {\n\t\tRepeatWrapping: RepeatWrapping,\n\t\tClampToEdgeWrapping: ClampToEdgeWrapping,\n\t\tMirroredRepeatWrapping: MirroredRepeatWrapping\n\t};\n\n\tvar TEXTURE_FILTER = {\n\t\tNearestFilter: NearestFilter,\n\t\tNearestMipMapNearestFilter: NearestMipMapNearestFilter,\n\t\tNearestMipMapLinearFilter: NearestMipMapLinearFilter,\n\t\tLinearFilter: LinearFilter,\n\t\tLinearMipMapNearestFilter: LinearMipMapNearestFilter,\n\t\tLinearMipMapLinearFilter: LinearMipMapLinearFilter\n\t};\n\n\t/**\n\t * @author thespite / http://clicktorelease.com/\n\t */\n\n\n\tfunction ImageBitmapLoader( manager ) {\n\n\t\tif ( typeof createImageBitmap === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );\n\n\t\t}\n\n\t\tif ( typeof fetch === 'undefined' ) {\n\n\t\t\tconsole.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );\n\n\t\t}\n\n\t\tthis.manager = manager !== undefined ? manager : DefaultLoadingManager;\n\t\tthis.options = undefined;\n\n\t}\n\n\tImageBitmapLoader.prototype = {\n\n\t\tconstructor: ImageBitmapLoader,\n\n\t\tsetOptions: function setOptions( options ) {\n\n\t\t\tthis.options = options;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tif ( url === undefined ) url = '';\n\n\t\t\tif ( this.path !== undefined ) url = this.path + url;\n\n\t\t\turl = this.manager.resolveURL( url );\n\n\t\t\tvar scope = this;\n\n\t\t\tvar cached = Cache.get( url );\n\n\t\t\tif ( cached !== undefined ) {\n\n\t\t\t\tscope.manager.itemStart( url );\n\n\t\t\t\tsetTimeout( function () {\n\n\t\t\t\t\tif ( onLoad ) onLoad( cached );\n\n\t\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t\t}, 0 );\n\n\t\t\t\treturn cached;\n\n\t\t\t}\n\n\t\t\tfetch( url ).then( function ( res ) {\n\n\t\t\t\treturn res.blob();\n\n\t\t\t} ).then( function ( blob ) {\n\n\t\t\t\treturn createImageBitmap( blob, scope.options );\n\n\t\t\t} ).then( function ( imageBitmap ) {\n\n\t\t\t\tCache.add( url, imageBitmap );\n\n\t\t\t\tif ( onLoad ) onLoad( imageBitmap );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\n\t\t\t} ).catch( function ( e ) {\n\n\t\t\t\tif ( onError ) onError( e );\n\n\t\t\t\tscope.manager.itemEnd( url );\n\t\t\t\tscope.manager.itemError( url );\n\n\t\t\t} );\n\n\t\t},\n\n\t\tsetCrossOrigin: function ( /* value */ ) {\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * minimal class for proxing functions to Path. Replaces old \"extractSubpaths()\"\n\t **/\n\n\tfunction ShapePath() {\n\n\t\tthis.type = 'ShapePath';\n\n\t\tthis.color = new Color();\n\n\t\tthis.subPaths = [];\n\t\tthis.currentPath = null;\n\n\t}\n\n\tObject.assign( ShapePath.prototype, {\n\n\t\tmoveTo: function ( x, y ) {\n\n\t\t\tthis.currentPath = new Path();\n\t\t\tthis.subPaths.push( this.currentPath );\n\t\t\tthis.currentPath.moveTo( x, y );\n\n\t\t},\n\n\t\tlineTo: function ( x, y ) {\n\n\t\t\tthis.currentPath.lineTo( x, y );\n\n\t\t},\n\n\t\tquadraticCurveTo: function ( aCPx, aCPy, aX, aY ) {\n\n\t\t\tthis.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );\n\n\t\t},\n\n\t\tbezierCurveTo: function ( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {\n\n\t\t\tthis.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );\n\n\t\t},\n\n\t\tsplineThru: function ( pts ) {\n\n\t\t\tthis.currentPath.splineThru( pts );\n\n\t\t},\n\n\t\ttoShapes: function ( isCCW, noHoles ) {\n\n\t\t\tfunction toShapesNoHoles( inSubpaths ) {\n\n\t\t\t\tvar shapes = [];\n\n\t\t\t\tfor ( var i = 0, l = inSubpaths.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar tmpPath = inSubpaths[ i ];\n\n\t\t\t\t\tvar tmpShape = new Shape();\n\t\t\t\t\ttmpShape.curves = tmpPath.curves;\n\n\t\t\t\t\tshapes.push( tmpShape );\n\n\t\t\t\t}\n\n\t\t\t\treturn shapes;\n\n\t\t\t}\n\n\t\t\tfunction isPointInsidePolygon( inPt, inPolygon ) {\n\n\t\t\t\tvar polyLen = inPolygon.length;\n\n\t\t\t\t// inPt on polygon contour => immediate success or\n\t\t\t\t// toggling of inside/outside at every single! intersection point of an edge\n\t\t\t\t// with the horizontal line through inPt, left of inPt\n\t\t\t\t// not counting lowerY endpoints of edges and whole edges on that line\n\t\t\t\tvar inside = false;\n\t\t\t\tfor ( var p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {\n\n\t\t\t\t\tvar edgeLowPt = inPolygon[ p ];\n\t\t\t\t\tvar edgeHighPt = inPolygon[ q ];\n\n\t\t\t\t\tvar edgeDx = edgeHighPt.x - edgeLowPt.x;\n\t\t\t\t\tvar edgeDy = edgeHighPt.y - edgeLowPt.y;\n\n\t\t\t\t\tif ( Math.abs( edgeDy ) > Number.EPSILON ) {\n\n\t\t\t\t\t\t// not parallel\n\t\t\t\t\t\tif ( edgeDy < 0 ) {\n\n\t\t\t\t\t\t\tedgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;\n\t\t\t\t\t\t\tedgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) \t\tcontinue;\n\n\t\t\t\t\t\tif ( inPt.y === edgeLowPt.y ) {\n\n\t\t\t\t\t\t\tif ( inPt.x === edgeLowPt.x )\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t\t// continue;\t\t\t\t// no intersection or edgeLowPt => doesn't count !!!\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tvar perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );\n\t\t\t\t\t\t\tif ( perpEdge === 0 )\t\t\t\treturn\ttrue;\t\t// inPt is on contour ?\n\t\t\t\t\t\t\tif ( perpEdge < 0 ) \t\t\t\tcontinue;\n\t\t\t\t\t\t\tinside = ! inside;\t\t// true intersection left of inPt\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// parallel or collinear\n\t\t\t\t\t\tif ( inPt.y !== edgeLowPt.y ) \t\tcontinue;\t\t\t// parallel\n\t\t\t\t\t\t// edge lies on the same horizontal line as inPt\n\t\t\t\t\t\tif ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||\n\t\t\t\t\t\t\t ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )\t\treturn\ttrue;\t// inPt: Point on contour !\n\t\t\t\t\t\t// continue;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn\tinside;\n\n\t\t\t}\n\n\t\t\tvar isClockWise = ShapeUtils.isClockWise;\n\n\t\t\tvar subPaths = this.subPaths;\n\t\t\tif ( subPaths.length === 0 ) return [];\n\n\t\t\tif ( noHoles === true )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\t\tvar solid, tmpPath, tmpShape, shapes = [];\n\n\t\t\tif ( subPaths.length === 1 ) {\n\n\t\t\t\ttmpPath = subPaths[ 0 ];\n\t\t\t\ttmpShape = new Shape();\n\t\t\t\ttmpShape.curves = tmpPath.curves;\n\t\t\t\tshapes.push( tmpShape );\n\t\t\t\treturn shapes;\n\n\t\t\t}\n\n\t\t\tvar holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );\n\t\t\tholesFirst = isCCW ? ! holesFirst : holesFirst;\n\n\t\t\t// console.log(\"Holes first\", holesFirst);\n\n\t\t\tvar betterShapeHoles = [];\n\t\t\tvar newShapes = [];\n\t\t\tvar newShapeHoles = [];\n\t\t\tvar mainIdx = 0;\n\t\t\tvar tmpPoints;\n\n\t\t\tnewShapes[ mainIdx ] = undefined;\n\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\tfor ( var i = 0, l = subPaths.length; i < l; i ++ ) {\n\n\t\t\t\ttmpPath = subPaths[ i ];\n\t\t\t\ttmpPoints = tmpPath.getPoints();\n\t\t\t\tsolid = isClockWise( tmpPoints );\n\t\t\t\tsolid = isCCW ? ! solid : solid;\n\n\t\t\t\tif ( solid ) {\n\n\t\t\t\t\tif ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )\tmainIdx ++;\n\n\t\t\t\t\tnewShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };\n\t\t\t\t\tnewShapes[ mainIdx ].s.curves = tmpPath.curves;\n\n\t\t\t\t\tif ( holesFirst )\tmainIdx ++;\n\t\t\t\t\tnewShapeHoles[ mainIdx ] = [];\n\n\t\t\t\t\t//console.log('cw', i);\n\n\t\t\t\t} else {\n\n\t\t\t\t\tnewShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );\n\n\t\t\t\t\t//console.log('ccw', i);\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// only Holes? -> probably all Shapes with wrong orientation\n\t\t\tif ( ! newShapes[ 0 ] )\treturn\ttoShapesNoHoles( subPaths );\n\n\n\t\t\tif ( newShapes.length > 1 ) {\n\n\t\t\t\tvar ambiguous = false;\n\t\t\t\tvar toChange = [];\n\n\t\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\t\tbetterShapeHoles[ sIdx ] = [];\n\n\t\t\t\t}\n\n\t\t\t\tfor ( var sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {\n\n\t\t\t\t\tvar sho = newShapeHoles[ sIdx ];\n\n\t\t\t\t\tfor ( var hIdx = 0; hIdx < sho.length; hIdx ++ ) {\n\n\t\t\t\t\t\tvar ho = sho[ hIdx ];\n\t\t\t\t\t\tvar hole_unassigned = true;\n\n\t\t\t\t\t\tfor ( var s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {\n\n\t\t\t\t\t\t\tif ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {\n\n\t\t\t\t\t\t\t\tif ( sIdx !== s2Idx )\ttoChange.push( { froms: sIdx, tos: s2Idx, hole: hIdx } );\n\t\t\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\t\t\thole_unassigned = false;\n\t\t\t\t\t\t\t\t\tbetterShapeHoles[ s2Idx ].push( ho );\n\n\t\t\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t\t\tambiguous = true;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( hole_unassigned ) {\n\n\t\t\t\t\t\t\tbetterShapeHoles[ sIdx ].push( ho );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t\t// console.log(\"ambiguous: \", ambiguous);\n\t\t\t\tif ( toChange.length > 0 ) {\n\n\t\t\t\t\t// console.log(\"to change: \", toChange);\n\t\t\t\t\tif ( ! ambiguous )\tnewShapeHoles = betterShapeHoles;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar tmpHoles;\n\n\t\t\tfor ( var i = 0, il = newShapes.length; i < il; i ++ ) {\n\n\t\t\t\ttmpShape = newShapes[ i ].s;\n\t\t\t\tshapes.push( tmpShape );\n\t\t\t\ttmpHoles = newShapeHoles[ i ];\n\n\t\t\t\tfor ( var j = 0, jl = tmpHoles.length; j < jl; j ++ ) {\n\n\t\t\t\t\ttmpShape.holes.push( tmpHoles[ j ].h );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t//console.log(\"shape\", shapes);\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author zz85 / http://www.lab4games.net/zz85/blog\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\n\tfunction Font( data ) {\n\n\t\tthis.type = 'Font';\n\n\t\tthis.data = data;\n\n\t}\n\n\tObject.assign( Font.prototype, {\n\n\t\tisFont: true,\n\n\t\tgenerateShapes: function ( text, size, divisions ) {\n\n\t\t\tif ( size === undefined ) size = 100;\n\t\t\tif ( divisions === undefined ) divisions = 4;\n\n\t\t\tvar shapes = [];\n\t\t\tvar paths = createPaths( text, size, divisions, this.data );\n\n\t\t\tfor ( var p = 0, pl = paths.length; p < pl; p ++ ) {\n\n\t\t\t\tArray.prototype.push.apply( shapes, paths[ p ].toShapes() );\n\n\t\t\t}\n\n\t\t\treturn shapes;\n\n\t\t}\n\n\t} );\n\n\tfunction createPaths( text, size, divisions, data ) {\n\n\t\tvar chars = Array.from ? Array.from( text ) : String( text ).split( '' ); // see #13988\n\t\tvar scale = size / data.resolution;\n\t\tvar line_height = ( data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness ) * scale;\n\n\t\tvar paths = [];\n\n\t\tvar offsetX = 0, offsetY = 0;\n\n\t\tfor ( var i = 0; i < chars.length; i ++ ) {\n\n\t\t\tvar char = chars[ i ];\n\n\t\t\tif ( char === '\\n' ) {\n\n\t\t\t\toffsetX = 0;\n\t\t\t\toffsetY -= line_height;\n\n\t\t\t} else {\n\n\t\t\t\tvar ret = createPath( char, divisions, scale, offsetX, offsetY, data );\n\t\t\t\toffsetX += ret.offsetX;\n\t\t\t\tpaths.push( ret.path );\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn paths;\n\n\t}\n\n\tfunction createPath( char, divisions, scale, offsetX, offsetY, data ) {\n\n\t\tvar glyph = data.glyphs[ char ] || data.glyphs[ '?' ];\n\n\t\tif ( ! glyph ) return;\n\n\t\tvar path = new ShapePath();\n\n\t\tvar x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n\n\t\tif ( glyph.o ) {\n\n\t\t\tvar outline = glyph._cachedOutline || ( glyph._cachedOutline = glyph.o.split( ' ' ) );\n\n\t\t\tfor ( var i = 0, l = outline.length; i < l; ) {\n\n\t\t\t\tvar action = outline[ i ++ ];\n\n\t\t\t\tswitch ( action ) {\n\n\t\t\t\t\tcase 'm': // moveTo\n\n\t\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.moveTo( x, y );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'l': // lineTo\n\n\t\t\t\t\t\tx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\ty = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.lineTo( x, y );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'q': // quadraticCurveTo\n\n\t\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.quadraticCurveTo( cpx1, cpy1, cpx, cpy );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'b': // bezierCurveTo\n\n\t\t\t\t\t\tcpx = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\tcpx1 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy1 = outline[ i ++ ] * scale + offsetY;\n\t\t\t\t\t\tcpx2 = outline[ i ++ ] * scale + offsetX;\n\t\t\t\t\t\tcpy2 = outline[ i ++ ] * scale + offsetY;\n\n\t\t\t\t\t\tpath.bezierCurveTo( cpx1, cpy1, cpx2, cpy2, cpx, cpy );\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn { offsetX: glyph.ha * scale, path: path };\n\n\t}\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction FontLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( FontLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar scope = this;\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setPath( this.path );\n\t\t\tloader.load( url, function ( text ) {\n\n\t\t\t\tvar json;\n\n\t\t\t\ttry {\n\n\t\t\t\t\tjson = JSON.parse( text );\n\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\tconsole.warn( 'THREE.FontLoader: typeface.js support is being deprecated. Use typeface.json instead.' );\n\t\t\t\t\tjson = JSON.parse( text.substring( 65, text.length - 2 ) );\n\n\t\t\t\t}\n\n\t\t\t\tvar font = scope.parse( json );\n\n\t\t\t\tif ( onLoad ) onLoad( font );\n\n\t\t\t}, onProgress, onError );\n\n\t\t},\n\n\t\tparse: function ( json ) {\n\n\t\t\treturn new Font( json );\n\n\t\t},\n\n\t\tsetPath: function ( value ) {\n\n\t\t\tthis.path = value;\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tvar context;\n\n\tvar AudioContext = {\n\n\t\tgetContext: function () {\n\n\t\t\tif ( context === undefined ) {\n\n\t\t\t\tcontext = new ( window.AudioContext || window.webkitAudioContext )();\n\n\t\t\t}\n\n\t\t\treturn context;\n\n\t\t},\n\n\t\tsetContext: function ( value ) {\n\n\t\t\tcontext = value;\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author Reece Aaron Lecrivain / http://reecenotes.com/\n\t */\n\n\tfunction AudioLoader( manager ) {\n\n\t\tthis.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;\n\n\t}\n\n\tObject.assign( AudioLoader.prototype, {\n\n\t\tload: function ( url, onLoad, onProgress, onError ) {\n\n\t\t\tvar loader = new FileLoader( this.manager );\n\t\t\tloader.setResponseType( 'arraybuffer' );\n\t\t\tloader.load( url, function ( buffer ) {\n\n\t\t\t\tvar context = AudioContext.getContext();\n\n\t\t\t\tcontext.decodeAudioData( buffer, function ( audioBuffer ) {\n\n\t\t\t\t\tonLoad( audioBuffer );\n\n\t\t\t\t} );\n\n\t\t\t}, onProgress, onError );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction StereoCamera() {\n\n\t\tthis.type = 'StereoCamera';\n\n\t\tthis.aspect = 1;\n\n\t\tthis.eyeSep = 0.064;\n\n\t\tthis.cameraL = new PerspectiveCamera();\n\t\tthis.cameraL.layers.enable( 1 );\n\t\tthis.cameraL.matrixAutoUpdate = false;\n\n\t\tthis.cameraR = new PerspectiveCamera();\n\t\tthis.cameraR.layers.enable( 2 );\n\t\tthis.cameraR.matrixAutoUpdate = false;\n\n\t}\n\n\tObject.assign( StereoCamera.prototype, {\n\n\t\tupdate: ( function () {\n\n\t\t\tvar instance, focus, fov, aspect, near, far, zoom, eyeSep;\n\n\t\t\tvar eyeRight = new Matrix4();\n\t\t\tvar eyeLeft = new Matrix4();\n\n\t\t\treturn function update( camera ) {\n\n\t\t\t\tvar needsUpdate = instance !== this || focus !== camera.focus || fov !== camera.fov ||\n\t\t\t\t\t\t\t\t\t\t\t\t\taspect !== camera.aspect * this.aspect || near !== camera.near ||\n\t\t\t\t\t\t\t\t\t\t\t\t\tfar !== camera.far || zoom !== camera.zoom || eyeSep !== this.eyeSep;\n\n\t\t\t\tif ( needsUpdate ) {\n\n\t\t\t\t\tinstance = this;\n\t\t\t\t\tfocus = camera.focus;\n\t\t\t\t\tfov = camera.fov;\n\t\t\t\t\taspect = camera.aspect * this.aspect;\n\t\t\t\t\tnear = camera.near;\n\t\t\t\t\tfar = camera.far;\n\t\t\t\t\tzoom = camera.zoom;\n\n\t\t\t\t\t// Off-axis stereoscopic effect based on\n\t\t\t\t\t// http://paulbourke.net/stereographics/stereorender/\n\n\t\t\t\t\tvar projectionMatrix = camera.projectionMatrix.clone();\n\t\t\t\t\teyeSep = this.eyeSep / 2;\n\t\t\t\t\tvar eyeSepOnProjection = eyeSep * near / focus;\n\t\t\t\t\tvar ymax = ( near * Math.tan( _Math.DEG2RAD * fov * 0.5 ) ) / zoom;\n\t\t\t\t\tvar xmin, xmax;\n\n\t\t\t\t\t// translate xOffset\n\n\t\t\t\t\teyeLeft.elements[ 12 ] = - eyeSep;\n\t\t\t\t\teyeRight.elements[ 12 ] = eyeSep;\n\n\t\t\t\t\t// for left eye\n\n\t\t\t\t\txmin = - ymax * aspect + eyeSepOnProjection;\n\t\t\t\t\txmax = ymax * aspect + eyeSepOnProjection;\n\n\t\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\t\tthis.cameraL.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t\t// for right eye\n\n\t\t\t\t\txmin = - ymax * aspect - eyeSepOnProjection;\n\t\t\t\t\txmax = ymax * aspect - eyeSepOnProjection;\n\n\t\t\t\t\tprojectionMatrix.elements[ 0 ] = 2 * near / ( xmax - xmin );\n\t\t\t\t\tprojectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );\n\n\t\t\t\t\tthis.cameraR.projectionMatrix.copy( projectionMatrix );\n\n\t\t\t\t}\n\n\t\t\t\tthis.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( eyeLeft );\n\t\t\t\tthis.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( eyeRight );\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * Camera for rendering cube maps\n\t *\t- renders scene into axis-aligned cube\n\t *\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction CubeCamera( near, far, cubeResolution ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'CubeCamera';\n\n\t\tvar fov = 90, aspect = 1;\n\n\t\tvar cameraPX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPX.up.set( 0, - 1, 0 );\n\t\tcameraPX.lookAt( new Vector3( 1, 0, 0 ) );\n\t\tthis.add( cameraPX );\n\n\t\tvar cameraNX = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNX.up.set( 0, - 1, 0 );\n\t\tcameraNX.lookAt( new Vector3( - 1, 0, 0 ) );\n\t\tthis.add( cameraNX );\n\n\t\tvar cameraPY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPY.up.set( 0, 0, 1 );\n\t\tcameraPY.lookAt( new Vector3( 0, 1, 0 ) );\n\t\tthis.add( cameraPY );\n\n\t\tvar cameraNY = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNY.up.set( 0, 0, - 1 );\n\t\tcameraNY.lookAt( new Vector3( 0, - 1, 0 ) );\n\t\tthis.add( cameraNY );\n\n\t\tvar cameraPZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraPZ.up.set( 0, - 1, 0 );\n\t\tcameraPZ.lookAt( new Vector3( 0, 0, 1 ) );\n\t\tthis.add( cameraPZ );\n\n\t\tvar cameraNZ = new PerspectiveCamera( fov, aspect, near, far );\n\t\tcameraNZ.up.set( 0, - 1, 0 );\n\t\tcameraNZ.lookAt( new Vector3( 0, 0, - 1 ) );\n\t\tthis.add( cameraNZ );\n\n\t\tvar options = { format: RGBFormat, magFilter: LinearFilter, minFilter: LinearFilter };\n\n\t\tthis.renderTarget = new WebGLRenderTargetCube( cubeResolution, cubeResolution, options );\n\t\tthis.renderTarget.texture.name = \"CubeCamera\";\n\n\t\tthis.update = function ( renderer, scene ) {\n\n\t\t\tif ( this.parent === null ) this.updateMatrixWorld();\n\n\t\t\tvar renderTarget = this.renderTarget;\n\t\t\tvar generateMipmaps = renderTarget.texture.generateMipmaps;\n\n\t\t\trenderTarget.texture.generateMipmaps = false;\n\n\t\t\trenderTarget.activeCubeFace = 0;\n\t\t\trenderer.render( scene, cameraPX, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 1;\n\t\t\trenderer.render( scene, cameraNX, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 2;\n\t\t\trenderer.render( scene, cameraPY, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 3;\n\t\t\trenderer.render( scene, cameraNY, renderTarget );\n\n\t\t\trenderTarget.activeCubeFace = 4;\n\t\t\trenderer.render( scene, cameraPZ, renderTarget );\n\n\t\t\trenderTarget.texture.generateMipmaps = generateMipmaps;\n\n\t\t\trenderTarget.activeCubeFace = 5;\n\t\t\trenderer.render( scene, cameraNZ, renderTarget );\n\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t};\n\n\t\tthis.clear = function ( renderer, color, depth, stencil ) {\n\n\t\t\tvar renderTarget = this.renderTarget;\n\n\t\t\tfor ( var i = 0; i < 6; i ++ ) {\n\n\t\t\t\trenderTarget.activeCubeFace = i;\n\t\t\t\trenderer.setRenderTarget( renderTarget );\n\n\t\t\t\trenderer.clear( color, depth, stencil );\n\n\t\t\t}\n\n\t\t\trenderer.setRenderTarget( null );\n\n\t\t};\n\n\t}\n\n\tCubeCamera.prototype = Object.create( Object3D.prototype );\n\tCubeCamera.prototype.constructor = CubeCamera;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AudioListener() {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'AudioListener';\n\n\t\tthis.context = AudioContext.getContext();\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( this.context.destination );\n\n\t\tthis.filter = null;\n\n\t}\n\n\tAudioListener.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: AudioListener,\n\n\t\tgetInput: function () {\n\n\t\t\treturn this.gain;\n\n\t\t},\n\n\t\tremoveFilter: function ( ) {\n\n\t\t\tif ( this.filter !== null ) {\n\n\t\t\t\tthis.gain.disconnect( this.filter );\n\t\t\t\tthis.filter.disconnect( this.context.destination );\n\t\t\t\tthis.gain.connect( this.context.destination );\n\t\t\t\tthis.filter = null;\n\n\t\t\t}\n\n\t\t},\n\n\t\tgetFilter: function () {\n\n\t\t\treturn this.filter;\n\n\t\t},\n\n\t\tsetFilter: function ( value ) {\n\n\t\t\tif ( this.filter !== null ) {\n\n\t\t\t\tthis.gain.disconnect( this.filter );\n\t\t\t\tthis.filter.disconnect( this.context.destination );\n\n\t\t\t} else {\n\n\t\t\t\tthis.gain.disconnect( this.context.destination );\n\n\t\t\t}\n\n\t\t\tthis.filter = value;\n\t\t\tthis.gain.connect( this.filter );\n\t\t\tthis.filter.connect( this.context.destination );\n\n\t\t},\n\n\t\tgetMasterVolume: function () {\n\n\t\t\treturn this.gain.gain.value;\n\n\t\t},\n\n\t\tsetMasterVolume: function ( value ) {\n\n\t\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\t},\n\n\t\tupdateMatrixWorld: ( function () {\n\n\t\t\tvar position = new Vector3();\n\t\t\tvar quaternion = new Quaternion();\n\t\t\tvar scale = new Vector3();\n\n\t\t\tvar orientation = new Vector3();\n\n\t\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\t\tvar listener = this.context.listener;\n\t\t\t\tvar up = this.up;\n\n\t\t\t\tthis.matrixWorld.decompose( position, quaternion, scale );\n\n\t\t\t\torientation.set( 0, 0, - 1 ).applyQuaternion( quaternion );\n\n\t\t\t\tif ( listener.positionX ) {\n\n\t\t\t\t\tlistener.positionX.setValueAtTime( position.x, this.context.currentTime );\n\t\t\t\t\tlistener.positionY.setValueAtTime( position.y, this.context.currentTime );\n\t\t\t\t\tlistener.positionZ.setValueAtTime( position.z, this.context.currentTime );\n\t\t\t\t\tlistener.forwardX.setValueAtTime( orientation.x, this.context.currentTime );\n\t\t\t\t\tlistener.forwardY.setValueAtTime( orientation.y, this.context.currentTime );\n\t\t\t\t\tlistener.forwardZ.setValueAtTime( orientation.z, this.context.currentTime );\n\t\t\t\t\tlistener.upX.setValueAtTime( up.x, this.context.currentTime );\n\t\t\t\t\tlistener.upY.setValueAtTime( up.y, this.context.currentTime );\n\t\t\t\t\tlistener.upZ.setValueAtTime( up.z, this.context.currentTime );\n\n\t\t\t\t} else {\n\n\t\t\t\t\tlistener.setPosition( position.x, position.y, position.z );\n\t\t\t\t\tlistener.setOrientation( orientation.x, orientation.y, orientation.z, up.x, up.y, up.z );\n\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t} )()\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Reece Aaron Lecrivain / http://reecenotes.com/\n\t */\n\n\tfunction Audio( listener ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.type = 'Audio';\n\n\t\tthis.context = listener.context;\n\n\t\tthis.gain = this.context.createGain();\n\t\tthis.gain.connect( listener.getInput() );\n\n\t\tthis.autoplay = false;\n\n\t\tthis.buffer = null;\n\t\tthis.loop = false;\n\t\tthis.startTime = 0;\n\t\tthis.offset = 0;\n\t\tthis.playbackRate = 1;\n\t\tthis.isPlaying = false;\n\t\tthis.hasPlaybackControl = true;\n\t\tthis.sourceType = 'empty';\n\n\t\tthis.filters = [];\n\n\t}\n\n\tAudio.prototype = Object.assign( Object.create( Object3D.prototype ), {\n\n\t\tconstructor: Audio,\n\n\t\tgetOutput: function () {\n\n\t\t\treturn this.gain;\n\n\t\t},\n\n\t\tsetNodeSource: function ( audioNode ) {\n\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'audioNode';\n\t\t\tthis.source = audioNode;\n\t\t\tthis.connect();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetMediaElementSource: function ( mediaElement ) {\n\n\t\t\tthis.hasPlaybackControl = false;\n\t\t\tthis.sourceType = 'mediaNode';\n\t\t\tthis.source = this.context.createMediaElementSource( mediaElement );\n\t\t\tthis.connect();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetBuffer: function ( audioBuffer ) {\n\n\t\t\tthis.buffer = audioBuffer;\n\t\t\tthis.sourceType = 'buffer';\n\n\t\t\tif ( this.autoplay ) this.play();\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tplay: function () {\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: Audio is already playing.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar source = this.context.createBufferSource();\n\n\t\t\tsource.buffer = this.buffer;\n\t\t\tsource.loop = this.loop;\n\t\t\tsource.onended = this.onEnded.bind( this );\n\t\t\tsource.playbackRate.setValueAtTime( this.playbackRate, this.startTime );\n\t\t\tthis.startTime = this.context.currentTime;\n\t\t\tsource.start( this.startTime, this.offset );\n\n\t\t\tthis.isPlaying = true;\n\n\t\t\tthis.source = source;\n\n\t\t\treturn this.connect();\n\n\t\t},\n\n\t\tpause: function () {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.stop();\n\t\t\t\tthis.offset += ( this.context.currentTime - this.startTime ) * this.playbackRate;\n\t\t\t\tthis.isPlaying = false;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.source.stop();\n\t\t\tthis.offset = 0;\n\t\t\tthis.isPlaying = false;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tconnect: function () {\n\n\t\t\tif ( this.filters.length > 0 ) {\n\n\t\t\t\tthis.source.connect( this.filters[ 0 ] );\n\n\t\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\t\tthis.filters[ i - 1 ].connect( this.filters[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis.filters[ this.filters.length - 1 ].connect( this.getOutput() );\n\n\t\t\t} else {\n\n\t\t\t\tthis.source.connect( this.getOutput() );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tdisconnect: function () {\n\n\t\t\tif ( this.filters.length > 0 ) {\n\n\t\t\t\tthis.source.disconnect( this.filters[ 0 ] );\n\n\t\t\t\tfor ( var i = 1, l = this.filters.length; i < l; i ++ ) {\n\n\t\t\t\t\tthis.filters[ i - 1 ].disconnect( this.filters[ i ] );\n\n\t\t\t\t}\n\n\t\t\t\tthis.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );\n\n\t\t\t} else {\n\n\t\t\t\tthis.source.disconnect( this.getOutput() );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetFilters: function () {\n\n\t\t\treturn this.filters;\n\n\t\t},\n\n\t\tsetFilters: function ( value ) {\n\n\t\t\tif ( ! value ) value = [];\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.disconnect();\n\t\t\t\tthis.filters = value;\n\t\t\t\tthis.connect();\n\n\t\t\t} else {\n\n\t\t\t\tthis.filters = value;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetFilter: function () {\n\n\t\t\treturn this.getFilters()[ 0 ];\n\n\t\t},\n\n\t\tsetFilter: function ( filter ) {\n\n\t\t\treturn this.setFilters( filter ? [ filter ] : [] );\n\n\t\t},\n\n\t\tsetPlaybackRate: function ( value ) {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.playbackRate = value;\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.playbackRate.setValueAtTime( this.playbackRate, this.context.currentTime );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetPlaybackRate: function () {\n\n\t\t\treturn this.playbackRate;\n\n\t\t},\n\n\t\tonEnded: function () {\n\n\t\t\tthis.isPlaying = false;\n\n\t\t},\n\n\t\tgetLoop: function () {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\treturn this.loop;\n\n\t\t},\n\n\t\tsetLoop: function ( value ) {\n\n\t\t\tif ( this.hasPlaybackControl === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Audio: this Audio has no playback control.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tthis.loop = value;\n\n\t\t\tif ( this.isPlaying === true ) {\n\n\t\t\t\tthis.source.loop = this.loop;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetVolume: function () {\n\n\t\t\treturn this.gain.gain.value;\n\n\t\t},\n\n\t\tsetVolume: function ( value ) {\n\n\t\t\tthis.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction PositionalAudio( listener ) {\n\n\t\tAudio.call( this, listener );\n\n\t\tthis.panner = this.context.createPanner();\n\t\tthis.panner.connect( this.gain );\n\n\t}\n\n\tPositionalAudio.prototype = Object.assign( Object.create( Audio.prototype ), {\n\n\t\tconstructor: PositionalAudio,\n\n\t\tgetOutput: function () {\n\n\t\t\treturn this.panner;\n\n\t\t},\n\n\t\tgetRefDistance: function () {\n\n\t\t\treturn this.panner.refDistance;\n\n\t\t},\n\n\t\tsetRefDistance: function ( value ) {\n\n\t\t\tthis.panner.refDistance = value;\n\n\t\t},\n\n\t\tgetRolloffFactor: function () {\n\n\t\t\treturn this.panner.rolloffFactor;\n\n\t\t},\n\n\t\tsetRolloffFactor: function ( value ) {\n\n\t\t\tthis.panner.rolloffFactor = value;\n\n\t\t},\n\n\t\tgetDistanceModel: function () {\n\n\t\t\treturn this.panner.distanceModel;\n\n\t\t},\n\n\t\tsetDistanceModel: function ( value ) {\n\n\t\t\tthis.panner.distanceModel = value;\n\n\t\t},\n\n\t\tgetMaxDistance: function () {\n\n\t\t\treturn this.panner.maxDistance;\n\n\t\t},\n\n\t\tsetMaxDistance: function ( value ) {\n\n\t\t\tthis.panner.maxDistance = value;\n\n\t\t},\n\n\t\tupdateMatrixWorld: ( function () {\n\n\t\t\tvar position = new Vector3();\n\n\t\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t\t\tposition.setFromMatrixPosition( this.matrixWorld );\n\n\t\t\t\tthis.panner.setPosition( position.x, position.y, position.z );\n\n\t\t\t};\n\n\t\t} )()\n\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AudioAnalyser( audio, fftSize ) {\n\n\t\tthis.analyser = audio.context.createAnalyser();\n\t\tthis.analyser.fftSize = fftSize !== undefined ? fftSize : 2048;\n\n\t\tthis.data = new Uint8Array( this.analyser.frequencyBinCount );\n\n\t\taudio.getOutput().connect( this.analyser );\n\n\t}\n\n\tObject.assign( AudioAnalyser.prototype, {\n\n\t\tgetFrequencyData: function () {\n\n\t\t\tthis.analyser.getByteFrequencyData( this.data );\n\n\t\t\treturn this.data;\n\n\t\t},\n\n\t\tgetAverageFrequency: function () {\n\n\t\t\tvar value = 0, data = this.getFrequencyData();\n\n\t\t\tfor ( var i = 0; i < data.length; i ++ ) {\n\n\t\t\t\tvalue += data[ i ];\n\n\t\t\t}\n\n\t\t\treturn value / data.length;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Buffered scene graph property that allows weighted accumulation.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction PropertyMixer( binding, typeName, valueSize ) {\n\n\t\tthis.binding = binding;\n\t\tthis.valueSize = valueSize;\n\n\t\tvar bufferType = Float64Array,\n\t\t\tmixFunction;\n\n\t\tswitch ( typeName ) {\n\n\t\t\tcase 'quaternion':\n\t\t\t\tmixFunction = this._slerp;\n\t\t\t\tbreak;\n\n\t\t\tcase 'string':\n\t\t\tcase 'bool':\n\t\t\t\tbufferType = Array;\n\t\t\t\tmixFunction = this._select;\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\tmixFunction = this._lerp;\n\n\t\t}\n\n\t\tthis.buffer = new bufferType( valueSize * 4 );\n\t\t// layout: [ incoming | accu0 | accu1 | orig ]\n\t\t//\n\t\t// interpolators can use .buffer as their .result\n\t\t// the data then goes to 'incoming'\n\t\t//\n\t\t// 'accu0' and 'accu1' are used frame-interleaved for\n\t\t// the cumulative result and are compared to detect\n\t\t// changes\n\t\t//\n\t\t// 'orig' stores the original state of the property\n\n\t\tthis._mixBufferRegion = mixFunction;\n\n\t\tthis.cumulativeWeight = 0;\n\n\t\tthis.useCount = 0;\n\t\tthis.referenceCount = 0;\n\n\t}\n\n\tObject.assign( PropertyMixer.prototype, {\n\n\t\t// accumulate data in the 'incoming' region into 'accu'\n\t\taccumulate: function ( accuIndex, weight ) {\n\n\t\t\t// note: happily accumulating nothing when weight = 0, the caller knows\n\t\t\t// the weight and shouldn't have made the call in the first place\n\n\t\t\tvar buffer = this.buffer,\n\t\t\t\tstride = this.valueSize,\n\t\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\t\tcurrentWeight = this.cumulativeWeight;\n\n\t\t\tif ( currentWeight === 0 ) {\n\n\t\t\t\t// accuN := incoming * weight\n\n\t\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\t\tbuffer[ offset + i ] = buffer[ i ];\n\n\t\t\t\t}\n\n\t\t\t\tcurrentWeight = weight;\n\n\t\t\t} else {\n\n\t\t\t\t// accuN := accuN + incoming * weight\n\n\t\t\t\tcurrentWeight += weight;\n\t\t\t\tvar mix = weight / currentWeight;\n\t\t\t\tthis._mixBufferRegion( buffer, offset, 0, mix, stride );\n\n\t\t\t}\n\n\t\t\tthis.cumulativeWeight = currentWeight;\n\n\t\t},\n\n\t\t// apply the state of 'accu' to the binding when accus differ\n\t\tapply: function ( accuIndex ) {\n\n\t\t\tvar stride = this.valueSize,\n\t\t\t\tbuffer = this.buffer,\n\t\t\t\toffset = accuIndex * stride + stride,\n\n\t\t\t\tweight = this.cumulativeWeight,\n\n\t\t\t\tbinding = this.binding;\n\n\t\t\tthis.cumulativeWeight = 0;\n\n\t\t\tif ( weight < 1 ) {\n\n\t\t\t\t// accuN := accuN + original * ( 1 - cumulativeWeight )\n\n\t\t\t\tvar originalValueOffset = stride * 3;\n\n\t\t\t\tthis._mixBufferRegion(\n\t\t\t\t\tbuffer, offset, originalValueOffset, 1 - weight, stride );\n\n\t\t\t}\n\n\t\t\tfor ( var i = stride, e = stride + stride; i !== e; ++ i ) {\n\n\t\t\t\tif ( buffer[ i ] !== buffer[ i + stride ] ) {\n\n\t\t\t\t\t// value has changed -> update scene graph\n\n\t\t\t\t\tbinding.setValue( buffer, offset );\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t// remember the state of the bound property and copy it to both accus\n\t\tsaveOriginalState: function () {\n\n\t\t\tvar binding = this.binding;\n\n\t\t\tvar buffer = this.buffer,\n\t\t\t\tstride = this.valueSize,\n\n\t\t\t\toriginalValueOffset = stride * 3;\n\n\t\t\tbinding.getValue( buffer, originalValueOffset );\n\n\t\t\t// accu[0..1] := orig -- initially detect changes against the original\n\t\t\tfor ( var i = stride, e = originalValueOffset; i !== e; ++ i ) {\n\n\t\t\t\tbuffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];\n\n\t\t\t}\n\n\t\t\tthis.cumulativeWeight = 0;\n\n\t\t},\n\n\t\t// apply the state previously taken via 'saveOriginalState' to the binding\n\t\trestoreOriginalState: function () {\n\n\t\t\tvar originalValueOffset = this.valueSize * 3;\n\t\t\tthis.binding.setValue( this.buffer, originalValueOffset );\n\n\t\t},\n\n\n\t\t// mix functions\n\n\t\t_select: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tif ( t >= 0.5 ) {\n\n\t\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\t\tbuffer[ dstOffset + i ] = buffer[ srcOffset + i ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_slerp: function ( buffer, dstOffset, srcOffset, t ) {\n\n\t\t\tQuaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );\n\n\t\t},\n\n\t\t_lerp: function ( buffer, dstOffset, srcOffset, t, stride ) {\n\n\t\t\tvar s = 1 - t;\n\n\t\t\tfor ( var i = 0; i !== stride; ++ i ) {\n\n\t\t\t\tvar j = dstOffset + i;\n\n\t\t\t\tbuffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * A reference to a real property in the scene graph.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\t// Characters [].:/ are reserved for track binding syntax.\n\tvar RESERVED_CHARS_RE = '\\\\[\\\\]\\\\.:\\\\/';\n\n\tfunction Composite( targetGroup, path, optionalParsedPath ) {\n\n\t\tvar parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis._targetGroup = targetGroup;\n\t\tthis._bindings = targetGroup.subscribe_( path, parsedPath );\n\n\t}\n\n\tObject.assign( Composite.prototype, {\n\n\t\tgetValue: function ( array, offset ) {\n\n\t\t\tthis.bind(); // bind all binding\n\n\t\t\tvar firstValidIndex = this._targetGroup.nCachedObjects_,\n\t\t\t\tbinding = this._bindings[ firstValidIndex ];\n\n\t\t\t// and only call .getValue on the first\n\t\t\tif ( binding !== undefined ) binding.getValue( array, offset );\n\n\t\t},\n\n\t\tsetValue: function ( array, offset ) {\n\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].setValue( array, offset );\n\n\t\t\t}\n\n\t\t},\n\n\t\tbind: function () {\n\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].bind();\n\n\t\t\t}\n\n\t\t},\n\n\t\tunbind: function () {\n\n\t\t\tvar bindings = this._bindings;\n\n\t\t\tfor ( var i = this._targetGroup.nCachedObjects_,\n\t\t\t\t\t n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tbindings[ i ].unbind();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\n\tfunction PropertyBinding( rootNode, path, parsedPath ) {\n\n\t\tthis.path = path;\n\t\tthis.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );\n\n\t\tthis.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName ) || rootNode;\n\n\t\tthis.rootNode = rootNode;\n\n\t}\n\n\tObject.assign( PropertyBinding, {\n\n\t\tComposite: Composite,\n\n\t\tcreate: function ( root, path, parsedPath ) {\n\n\t\t\tif ( ! ( root && root.isAnimationObjectGroup ) ) {\n\n\t\t\t\treturn new PropertyBinding( root, path, parsedPath );\n\n\t\t\t} else {\n\n\t\t\t\treturn new PropertyBinding.Composite( root, path, parsedPath );\n\n\t\t\t}\n\n\t\t},\n\n\t\t/**\n\t\t * Replaces spaces with underscores and removes unsupported characters from\n\t\t * node names, to ensure compatibility with parseTrackName().\n\t\t *\n\t\t * @param {string} name Node name to be sanitized.\n\t\t * @return {string}\n\t\t */\n\t\tsanitizeNodeName: ( function () {\n\n\t\t\tvar reservedRe = new RegExp( '[' + RESERVED_CHARS_RE + ']', 'g' );\n\n\t\t\treturn function sanitizeNodeName( name ) {\n\n\t\t\t\treturn name.replace( /\\s/g, '_' ).replace( reservedRe, '' );\n\n\t\t\t};\n\n\t\t}() ),\n\n\t\tparseTrackName: function () {\n\n\t\t\t// Attempts to allow node names from any language. ES5's `\\w` regexp matches\n\t\t\t// only latin characters, and the unicode \\p{L} is not yet supported. So\n\t\t\t// instead, we exclude reserved characters and match everything else.\n\t\t\tvar wordChar = '[^' + RESERVED_CHARS_RE + ']';\n\t\t\tvar wordCharOrDot = '[^' + RESERVED_CHARS_RE.replace( '\\\\.', '' ) + ']';\n\n\t\t\t// Parent directories, delimited by '/' or ':'. Currently unused, but must\n\t\t\t// be matched to parse the rest of the track name.\n\t\t\tvar directoryRe = /((?:WC+[\\/:])*)/.source.replace( 'WC', wordChar );\n\n\t\t\t// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.\n\t\t\tvar nodeRe = /(WCOD+)?/.source.replace( 'WCOD', wordCharOrDot );\n\n\t\t\t// Object on target node, and accessor. May not contain reserved\n\t\t\t// characters. Accessor may contain any character except closing bracket.\n\t\t\tvar objectRe = /(?:\\.(WC+)(?:\\[(.+)\\])?)?/.source.replace( 'WC', wordChar );\n\n\t\t\t// Property and accessor. May not contain reserved characters. Accessor may\n\t\t\t// contain any non-bracket characters.\n\t\t\tvar propertyRe = /\\.(WC+)(?:\\[(.+)\\])?/.source.replace( 'WC', wordChar );\n\n\t\t\tvar trackRe = new RegExp( ''\n\t\t\t\t+ '^'\n\t\t\t\t+ directoryRe\n\t\t\t\t+ nodeRe\n\t\t\t\t+ objectRe\n\t\t\t\t+ propertyRe\n\t\t\t\t+ '$'\n\t\t\t);\n\n\t\t\tvar supportedObjectNames = [ 'material', 'materials', 'bones' ];\n\n\t\t\treturn function parseTrackName( trackName ) {\n\n\t\t\t\tvar matches = trackRe.exec( trackName );\n\n\t\t\t\tif ( ! matches ) {\n\n\t\t\t\t\tthrow new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );\n\n\t\t\t\t}\n\n\t\t\t\tvar results = {\n\t\t\t\t\t// directoryName: matches[ 1 ], // (tschw) currently unused\n\t\t\t\t\tnodeName: matches[ 2 ],\n\t\t\t\t\tobjectName: matches[ 3 ],\n\t\t\t\t\tobjectIndex: matches[ 4 ],\n\t\t\t\t\tpropertyName: matches[ 5 ], // required\n\t\t\t\t\tpropertyIndex: matches[ 6 ]\n\t\t\t\t};\n\n\t\t\t\tvar lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );\n\n\t\t\t\tif ( lastDot !== undefined && lastDot !== - 1 ) {\n\n\t\t\t\t\tvar objectName = results.nodeName.substring( lastDot + 1 );\n\n\t\t\t\t\t// Object names must be checked against a whitelist. Otherwise, there\n\t\t\t\t\t// is no way to parse 'foo.bar.baz': 'baz' must be a property, but\n\t\t\t\t\t// 'bar' could be the objectName, or part of a nodeName (which can\n\t\t\t\t\t// include '.' characters).\n\t\t\t\t\tif ( supportedObjectNames.indexOf( objectName ) !== - 1 ) {\n\n\t\t\t\t\t\tresults.nodeName = results.nodeName.substring( 0, lastDot );\n\t\t\t\t\t\tresults.objectName = objectName;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( results.propertyName === null || results.propertyName.length === 0 ) {\n\n\t\t\t\t\tthrow new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );\n\n\t\t\t\t}\n\n\t\t\t\treturn results;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tfindNode: function ( root, nodeName ) {\n\n\t\t\tif ( ! nodeName || nodeName === \"\" || nodeName === \"root\" || nodeName === \".\" || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {\n\n\t\t\t\treturn root;\n\n\t\t\t}\n\n\t\t\t// search into skeleton bones.\n\t\t\tif ( root.skeleton ) {\n\n\t\t\t\tvar bone = root.skeleton.getBoneByName( nodeName );\n\n\t\t\t\tif ( bone !== undefined ) {\n\n\t\t\t\t\treturn bone;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// search into node subtree.\n\t\t\tif ( root.children ) {\n\n\t\t\t\tvar searchNodeSubtree = function ( children ) {\n\n\t\t\t\t\tfor ( var i = 0; i < children.length; i ++ ) {\n\n\t\t\t\t\t\tvar childNode = children[ i ];\n\n\t\t\t\t\t\tif ( childNode.name === nodeName || childNode.uuid === nodeName ) {\n\n\t\t\t\t\t\t\treturn childNode;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar result = searchNodeSubtree( childNode.children );\n\n\t\t\t\t\t\tif ( result ) return result;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn null;\n\n\t\t\t\t};\n\n\t\t\t\tvar subTreeNode = searchNodeSubtree( root.children );\n\n\t\t\t\tif ( subTreeNode ) {\n\n\t\t\t\t\treturn subTreeNode;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( PropertyBinding.prototype, { // prototype, continued\n\n\t\t// these are used to \"bind\" a nonexistent property\n\t\t_getValue_unavailable: function () {},\n\t\t_setValue_unavailable: function () {},\n\n\t\tBindingType: {\n\t\t\tDirect: 0,\n\t\t\tEntireArray: 1,\n\t\t\tArrayElement: 2,\n\t\t\tHasFromToArray: 3\n\t\t},\n\n\t\tVersioning: {\n\t\t\tNone: 0,\n\t\t\tNeedsUpdate: 1,\n\t\t\tMatrixWorldNeedsUpdate: 2\n\t\t},\n\n\t\tGetterByBindingType: [\n\n\t\t\tfunction getValue_direct( buffer, offset ) {\n\n\t\t\t\tbuffer[ offset ] = this.node[ this.propertyName ];\n\n\t\t\t},\n\n\t\t\tfunction getValue_array( buffer, offset ) {\n\n\t\t\t\tvar source = this.resolvedProperty;\n\n\t\t\t\tfor ( var i = 0, n = source.length; i !== n; ++ i ) {\n\n\t\t\t\t\tbuffer[ offset ++ ] = source[ i ];\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t\tfunction getValue_arrayElement( buffer, offset ) {\n\n\t\t\t\tbuffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];\n\n\t\t\t},\n\n\t\t\tfunction getValue_toArray( buffer, offset ) {\n\n\t\t\t\tthis.resolvedProperty.toArray( buffer, offset );\n\n\t\t\t}\n\n\t\t],\n\n\t\tSetterByBindingTypeAndVersioning: [\n\n\t\t\t[\n\t\t\t\t// Direct\n\n\t\t\t\tfunction setValue_direct( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_direct_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.targetObject[ this.propertyName ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// EntireArray\n\n\t\t\t\tfunction setValue_array( buffer, offset ) {\n\n\t\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_array_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tvar dest = this.resolvedProperty;\n\n\t\t\t\t\tfor ( var i = 0, n = dest.length; i !== n; ++ i ) {\n\n\t\t\t\t\t\tdest[ i ] = buffer[ offset ++ ];\n\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// ArrayElement\n\n\t\t\t\tfunction setValue_arrayElement( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_arrayElement_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t], [\n\n\t\t\t\t// HasToFromArray\n\n\t\t\t\tfunction setValue_fromArray( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_fromArray_setNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\t\tthis.targetObject.needsUpdate = true;\n\n\t\t\t\t},\n\n\t\t\t\tfunction setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {\n\n\t\t\t\t\tthis.resolvedProperty.fromArray( buffer, offset );\n\t\t\t\t\tthis.targetObject.matrixWorldNeedsUpdate = true;\n\n\t\t\t\t}\n\n\t\t\t]\n\n\t\t],\n\n\t\tgetValue: function getValue_unbound( targetArray, offset ) {\n\n\t\t\tthis.bind();\n\t\t\tthis.getValue( targetArray, offset );\n\n\t\t\t// Note: This class uses a State pattern on a per-method basis:\n\t\t\t// 'bind' sets 'this.getValue' / 'setValue' and shadows the\n\t\t\t// prototype version of these methods with one that represents\n\t\t\t// the bound state. When the property is not found, the methods\n\t\t\t// become no-ops.\n\n\t\t},\n\n\t\tsetValue: function getValue_unbound( sourceArray, offset ) {\n\n\t\t\tthis.bind();\n\t\t\tthis.setValue( sourceArray, offset );\n\n\t\t},\n\n\t\t// create getter / setter pair for a property in the scene graph\n\t\tbind: function () {\n\n\t\t\tvar targetObject = this.node,\n\t\t\t\tparsedPath = this.parsedPath,\n\n\t\t\t\tobjectName = parsedPath.objectName,\n\t\t\t\tpropertyName = parsedPath.propertyName,\n\t\t\t\tpropertyIndex = parsedPath.propertyIndex;\n\n\t\t\tif ( ! targetObject ) {\n\n\t\t\t\ttargetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName ) || this.rootNode;\n\n\t\t\t\tthis.node = targetObject;\n\n\t\t\t}\n\n\t\t\t// set fail state so we can just 'return' on error\n\t\t\tthis.getValue = this._getValue_unavailable;\n\t\t\tthis.setValue = this._setValue_unavailable;\n\n\t\t\t// ensure there is a value node\n\t\t\tif ( ! targetObject ) {\n\n\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\\'t found.' );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tif ( objectName ) {\n\n\t\t\t\tvar objectIndex = parsedPath.objectIndex;\n\n\t\t\t\t// special cases were we need to reach deeper into the hierarchy to get the face materials....\n\t\t\t\tswitch ( objectName ) {\n\n\t\t\t\t\tcase 'materials':\n\n\t\t\t\t\t\tif ( ! targetObject.material ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ! targetObject.material.materials ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject.material.materials;\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'bones':\n\n\t\t\t\t\t\tif ( ! targetObject.skeleton ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// potential future optimization: skip this if propertyIndex is already an integer\n\t\t\t\t\t\t// and convert the integer string to a true integer.\n\n\t\t\t\t\t\ttargetObject = targetObject.skeleton.bones;\n\n\t\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\t\tfor ( var i = 0; i < targetObject.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( targetObject[ i ].name === objectIndex ) {\n\n\t\t\t\t\t\t\t\tobjectIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tdefault:\n\n\t\t\t\t\t\tif ( targetObject[ objectName ] === undefined ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttargetObject = targetObject[ objectName ];\n\n\t\t\t\t}\n\n\n\t\t\t\tif ( objectIndex !== undefined ) {\n\n\t\t\t\t\tif ( targetObject[ objectIndex ] === undefined ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\ttargetObject = targetObject[ objectIndex ];\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// resolve property\n\t\t\tvar nodeProperty = targetObject[ propertyName ];\n\n\t\t\tif ( nodeProperty === undefined ) {\n\n\t\t\t\tvar nodeName = parsedPath.nodeName;\n\n\t\t\t\tconsole.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +\n\t\t\t\t\t'.' + propertyName + ' but it wasn\\'t found.', targetObject );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\t// determine versioning scheme\n\t\t\tvar versioning = this.Versioning.None;\n\n\t\t\tif ( targetObject.needsUpdate !== undefined ) { // material\n\n\t\t\t\tversioning = this.Versioning.NeedsUpdate;\n\t\t\t\tthis.targetObject = targetObject;\n\n\t\t\t} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform\n\n\t\t\t\tversioning = this.Versioning.MatrixWorldNeedsUpdate;\n\t\t\t\tthis.targetObject = targetObject;\n\n\t\t\t}\n\n\t\t\t// determine how the property gets bound\n\t\t\tvar bindingType = this.BindingType.Direct;\n\n\t\t\tif ( propertyIndex !== undefined ) {\n\n\t\t\t\t// access a sub element of the property array (only primitives are supported right now)\n\n\t\t\t\tif ( propertyName === \"morphTargetInfluences\" ) {\n\n\t\t\t\t\t// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.\n\n\t\t\t\t\t// support resolving morphTarget names into indices.\n\t\t\t\t\tif ( ! targetObject.geometry ) {\n\n\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( targetObject.geometry.isBufferGeometry ) {\n\n\t\t\t\t\t\tif ( ! targetObject.geometry.morphAttributes ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\tif ( ! targetObject.geometry.morphTargets ) {\n\n\t\t\t\t\t\t\tconsole.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphTargets.', this );\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfor ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {\n\n\t\t\t\t\t\t\tif ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {\n\n\t\t\t\t\t\t\t\tpropertyIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tbindingType = this.BindingType.ArrayElement;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\t\t\t\tthis.propertyIndex = propertyIndex;\n\n\t\t\t} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {\n\n\t\t\t\t// must use copy for Object3D.Euler/Quaternion\n\n\t\t\t\tbindingType = this.BindingType.HasFromToArray;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t\t} else if ( Array.isArray( nodeProperty ) ) {\n\n\t\t\t\tbindingType = this.BindingType.EntireArray;\n\n\t\t\t\tthis.resolvedProperty = nodeProperty;\n\n\t\t\t} else {\n\n\t\t\t\tthis.propertyName = propertyName;\n\n\t\t\t}\n\n\t\t\t// select getter / setter\n\t\t\tthis.getValue = this.GetterByBindingType[ bindingType ];\n\t\t\tthis.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];\n\n\t\t},\n\n\t\tunbind: function () {\n\n\t\t\tthis.node = null;\n\n\t\t\t// back to the prototype version of getValue / setValue\n\t\t\t// note: avoiding to mutate the shape of 'this' via 'delete'\n\t\t\tthis.getValue = this._getValue_unbound;\n\t\t\tthis.setValue = this._setValue_unbound;\n\n\t\t}\n\n\t} );\n\n\t//!\\ DECLARE ALIAS AFTER assign prototype !\n\tObject.assign( PropertyBinding.prototype, {\n\n\t\t// initial state of these methods that calls 'bind'\n\t\t_getValue_unbound: PropertyBinding.prototype.getValue,\n\t\t_setValue_unbound: PropertyBinding.prototype.setValue,\n\n\t} );\n\n\t/**\n\t *\n\t * A group of objects that receives a shared animation state.\n\t *\n\t * Usage:\n\t *\n\t * \t-\tAdd objects you would otherwise pass as 'root' to the\n\t * \t\tconstructor or the .clipAction method of AnimationMixer.\n\t *\n\t * \t-\tInstead pass this object as 'root'.\n\t *\n\t * \t-\tYou can also add and remove objects later when the mixer\n\t * \t\tis running.\n\t *\n\t * Note:\n\t *\n\t * \tObjects of this class appear as one object to the mixer,\n\t * \tso cache control of the individual objects must be done\n\t * \ton the group.\n\t *\n\t * Limitation:\n\t *\n\t * \t- \tThe animated properties must be compatible among the\n\t * \t\tall objects in the group.\n\t *\n\t * -\tA single property can either be controlled through a\n\t * \ttarget group or directly, but not both.\n\t *\n\t * @author tschw\n\t */\n\n\tfunction AnimationObjectGroup() {\n\n\t\tthis.uuid = _Math.generateUUID();\n\n\t\t// cached objects followed by the active ones\n\t\tthis._objects = Array.prototype.slice.call( arguments );\n\n\t\tthis.nCachedObjects_ = 0;\t\t\t// threshold\n\t\t// note: read by PropertyBinding.Composite\n\n\t\tvar indices = {};\n\t\tthis._indicesByUUID = indices;\t\t// for bookkeeping\n\n\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\tindices[ arguments[ i ].uuid ] = i;\n\n\t\t}\n\n\t\tthis._paths = [];\t\t\t\t\t// inside: string\n\t\tthis._parsedPaths = [];\t\t\t\t// inside: { we don't care, here }\n\t\tthis._bindings = []; \t\t\t\t// inside: Array< PropertyBinding >\n\t\tthis._bindingsIndicesByPath = {}; \t// inside: indices in these arrays\n\n\t\tvar scope = this;\n\n\t\tthis.stats = {\n\n\t\t\tobjects: {\n\t\t\t\tget total() {\n\n\t\t\t\t\treturn scope._objects.length;\n\n\t\t\t\t},\n\t\t\t\tget inUse() {\n\n\t\t\t\t\treturn this.total - scope.nCachedObjects_;\n\n\t\t\t\t}\n\t\t\t},\n\t\t\tget bindingsPerObject() {\n\n\t\t\t\treturn scope._bindings.length;\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n\tObject.assign( AnimationObjectGroup.prototype, {\n\n\t\tisAnimationObjectGroup: true,\n\n\t\tadd: function () {\n\n\t\t\tvar objects = this._objects,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tpaths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length,\n\t\t\t\tknownObject = undefined;\n\n\t\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index === undefined ) {\n\n\t\t\t\t\t// unknown object -> add it to the ACTIVE region\n\n\t\t\t\t\tindex = nObjects ++;\n\t\t\t\t\tindicesByUUID[ uuid ] = index;\n\t\t\t\t\tobjects.push( object );\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tbindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( index < nCachedObjects ) {\n\n\t\t\t\t\tknownObject = objects[ index ];\n\n\t\t\t\t\t// move existing object to the ACTIVE region\n\n\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ];\n\n\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\tindicesByUUID[ uuid ] = firstActiveIndex;\n\t\t\t\t\tobjects[ firstActiveIndex ] = object;\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\n\t\t\t\t\t\tif ( binding === undefined ) {\n\n\t\t\t\t\t\t\t// since we do not bother to create new bindings\n\t\t\t\t\t\t\t// for objects that are cached, the binding may\n\t\t\t\t\t\t\t// or may not exist\n\n\t\t\t\t\t\t\tbinding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = binding;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( objects[ index ] !== knownObject ) {\n\n\t\t\t\t\tconsole.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +\n\t\t\t\t\t\t\t'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );\n\n\t\t\t\t} // else the object is already where we want it to be\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\tremove: function () {\n\n\t\t\tvar objects = this._objects,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index !== undefined && index >= nCachedObjects ) {\n\n\t\t\t\t\t// move existing object into the CACHED region\n\n\t\t\t\t\tvar lastCachedIndex = nCachedObjects ++,\n\t\t\t\t\t\tfirstActiveObject = objects[ lastCachedIndex ];\n\n\t\t\t\t\tindicesByUUID[ firstActiveObject.uuid ] = index;\n\t\t\t\t\tobjects[ index ] = firstActiveObject;\n\n\t\t\t\t\tindicesByUUID[ uuid ] = lastCachedIndex;\n\t\t\t\t\tobjects[ lastCachedIndex ] = object;\n\n\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\tfirstActive = bindingsForPath[ lastCachedIndex ],\n\t\t\t\t\t\t\tbinding = bindingsForPath[ index ];\n\n\t\t\t\t\t\tbindingsForPath[ index ] = firstActive;\n\t\t\t\t\t\tbindingsForPath[ lastCachedIndex ] = binding;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\t// remove & forget\n\t\tuncache: function () {\n\n\t\t\tvar objects = this._objects,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tindicesByUUID = this._indicesByUUID,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = bindings.length;\n\n\t\t\tfor ( var i = 0, n = arguments.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = arguments[ i ],\n\t\t\t\t\tuuid = object.uuid,\n\t\t\t\t\tindex = indicesByUUID[ uuid ];\n\n\t\t\t\tif ( index !== undefined ) {\n\n\t\t\t\t\tdelete indicesByUUID[ uuid ];\n\n\t\t\t\t\tif ( index < nCachedObjects ) {\n\n\t\t\t\t\t\t// object is cached, shrink the CACHED region\n\n\t\t\t\t\t\tvar firstActiveIndex = -- nCachedObjects,\n\t\t\t\t\t\t\tlastCachedObject = objects[ firstActiveIndex ],\n\t\t\t\t\t\t\tlastIndex = -- nObjects,\n\t\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t\t// last cached object takes this object's place\n\t\t\t\t\t\tindicesByUUID[ lastCachedObject.uuid ] = index;\n\t\t\t\t\t\tobjects[ index ] = lastCachedObject;\n\n\t\t\t\t\t\t// last object goes to the activated slot and pop\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = firstActiveIndex;\n\t\t\t\t\t\tobjects[ firstActiveIndex ] = lastObject;\n\t\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tvar bindingsForPath = bindings[ j ],\n\t\t\t\t\t\t\t\tlastCached = bindingsForPath[ firstActiveIndex ],\n\t\t\t\t\t\t\t\tlast = bindingsForPath[ lastIndex ];\n\n\t\t\t\t\t\t\tbindingsForPath[ index ] = lastCached;\n\t\t\t\t\t\t\tbindingsForPath[ firstActiveIndex ] = last;\n\t\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// object is active, just swap with the last and pop\n\n\t\t\t\t\t\tvar lastIndex = -- nObjects,\n\t\t\t\t\t\t\tlastObject = objects[ lastIndex ];\n\n\t\t\t\t\t\tindicesByUUID[ lastObject.uuid ] = index;\n\t\t\t\t\t\tobjects[ index ] = lastObject;\n\t\t\t\t\t\tobjects.pop();\n\n\t\t\t\t\t\t// accounting is done, now do the same for all bindings\n\n\t\t\t\t\t\tfor ( var j = 0, m = nBindings; j !== m; ++ j ) {\n\n\t\t\t\t\t\t\tvar bindingsForPath = bindings[ j ];\n\n\t\t\t\t\t\t\tbindingsForPath[ index ] = bindingsForPath[ lastIndex ];\n\t\t\t\t\t\t\tbindingsForPath.pop();\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} // cached or active\n\n\t\t\t\t} // if object is known\n\n\t\t\t} // for arguments\n\n\t\t\tthis.nCachedObjects_ = nCachedObjects;\n\n\t\t},\n\n\t\t// Internal interface used by befriended PropertyBinding.Composite:\n\n\t\tsubscribe_: function ( path, parsedPath ) {\n\n\t\t\t// returns an array of bindings for the given path that is changed\n\t\t\t// according to the contained objects in the group\n\n\t\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\t\tindex = indicesByPath[ path ],\n\t\t\t\tbindings = this._bindings;\n\n\t\t\tif ( index !== undefined ) return bindings[ index ];\n\n\t\t\tvar paths = this._paths,\n\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\tobjects = this._objects,\n\t\t\t\tnObjects = objects.length,\n\t\t\t\tnCachedObjects = this.nCachedObjects_,\n\t\t\t\tbindingsForPath = new Array( nObjects );\n\n\t\t\tindex = bindings.length;\n\n\t\t\tindicesByPath[ path ] = index;\n\n\t\t\tpaths.push( path );\n\t\t\tparsedPaths.push( parsedPath );\n\t\t\tbindings.push( bindingsForPath );\n\n\t\t\tfor ( var i = nCachedObjects, n = objects.length; i !== n; ++ i ) {\n\n\t\t\t\tvar object = objects[ i ];\n\t\t\t\tbindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );\n\n\t\t\t}\n\n\t\t\treturn bindingsForPath;\n\n\t\t},\n\n\t\tunsubscribe_: function ( path ) {\n\n\t\t\t// tells the group to forget about a property path and no longer\n\t\t\t// update the array previously obtained with 'subscribe_'\n\n\t\t\tvar indicesByPath = this._bindingsIndicesByPath,\n\t\t\t\tindex = indicesByPath[ path ];\n\n\t\t\tif ( index !== undefined ) {\n\n\t\t\t\tvar paths = this._paths,\n\t\t\t\t\tparsedPaths = this._parsedPaths,\n\t\t\t\t\tbindings = this._bindings,\n\t\t\t\t\tlastBindingsIndex = bindings.length - 1,\n\t\t\t\t\tlastBindings = bindings[ lastBindingsIndex ],\n\t\t\t\t\tlastBindingsPath = path[ lastBindingsIndex ];\n\n\t\t\t\tindicesByPath[ lastBindingsPath ] = index;\n\n\t\t\t\tbindings[ index ] = lastBindings;\n\t\t\t\tbindings.pop();\n\n\t\t\t\tparsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];\n\t\t\t\tparsedPaths.pop();\n\n\t\t\t\tpaths[ index ] = paths[ lastBindingsIndex ];\n\t\t\t\tpaths.pop();\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Action provided by AnimationMixer for scheduling clip playback on specific\n\t * objects.\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t *\n\t */\n\n\tfunction AnimationAction( mixer, clip, localRoot ) {\n\n\t\tthis._mixer = mixer;\n\t\tthis._clip = clip;\n\t\tthis._localRoot = localRoot || null;\n\n\t\tvar tracks = clip.tracks,\n\t\t\tnTracks = tracks.length,\n\t\t\tinterpolants = new Array( nTracks );\n\n\t\tvar interpolantSettings = {\n\t\t\tendingStart: ZeroCurvatureEnding,\n\t\t\tendingEnd: ZeroCurvatureEnding\n\t\t};\n\n\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\tvar interpolant = tracks[ i ].createInterpolant( null );\n\t\t\tinterpolants[ i ] = interpolant;\n\t\t\tinterpolant.settings = interpolantSettings;\n\n\t\t}\n\n\t\tthis._interpolantSettings = interpolantSettings;\n\n\t\tthis._interpolants = interpolants;\t// bound by the mixer\n\n\t\t// inside: PropertyMixer (managed by the mixer)\n\t\tthis._propertyBindings = new Array( nTracks );\n\n\t\tthis._cacheIndex = null;\t\t\t// for the memory manager\n\t\tthis._byClipCacheIndex = null;\t\t// for the memory manager\n\n\t\tthis._timeScaleInterpolant = null;\n\t\tthis._weightInterpolant = null;\n\n\t\tthis.loop = LoopRepeat;\n\t\tthis._loopCount = - 1;\n\n\t\t// global mixer time when the action is to be started\n\t\t// it's set back to 'null' upon start of the action\n\t\tthis._startTime = null;\n\n\t\t// scaled local time of the action\n\t\t// gets clamped or wrapped to 0..clip.duration according to loop\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1;\n\t\tthis._effectiveTimeScale = 1;\n\n\t\tthis.weight = 1;\n\t\tthis._effectiveWeight = 1;\n\n\t\tthis.repetitions = Infinity; \t\t// no. of repetitions when looping\n\n\t\tthis.paused = false;\t\t\t\t// true -> zero effective time scale\n\t\tthis.enabled = true;\t\t\t\t// false -> zero effective weight\n\n\t\tthis.clampWhenFinished \t= false;\t// keep feeding the last frame?\n\n\t\tthis.zeroSlopeAtStart \t= true;\t\t// for smooth interpolation w/o separate\n\t\tthis.zeroSlopeAtEnd\t\t= true;\t\t// clips for start, loop and end\n\n\t}\n\n\tObject.assign( AnimationAction.prototype, {\n\n\t\t// State & Scheduling\n\n\t\tplay: function () {\n\n\t\t\tthis._mixer._activateAction( this );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tthis._mixer._deactivateAction( this );\n\n\t\t\treturn this.reset();\n\n\t\t},\n\n\t\treset: function () {\n\n\t\t\tthis.paused = false;\n\t\t\tthis.enabled = true;\n\n\t\t\tthis.time = 0;\t\t\t// restart clip\n\t\t\tthis._loopCount = - 1;\t// forget previous loops\n\t\t\tthis._startTime = null;\t// forget scheduling\n\n\t\t\treturn this.stopFading().stopWarping();\n\n\t\t},\n\n\t\tisRunning: function () {\n\n\t\t\treturn this.enabled && ! this.paused && this.timeScale !== 0 &&\n\t\t\t\t\tthis._startTime === null && this._mixer._isActiveAction( this );\n\n\t\t},\n\n\t\t// return true when play has been called\n\t\tisScheduled: function () {\n\n\t\t\treturn this._mixer._isActiveAction( this );\n\n\t\t},\n\n\t\tstartAt: function ( time ) {\n\n\t\t\tthis._startTime = time;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetLoop: function ( mode, repetitions ) {\n\n\t\t\tthis.loop = mode;\n\t\t\tthis.repetitions = repetitions;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Weight\n\n\t\t// set the weight stopping any scheduled fading\n\t\t// although .enabled = false yields an effective weight of zero, this\n\t\t// method does *not* change .enabled, because it would be confusing\n\t\tsetEffectiveWeight: function ( weight ) {\n\n\t\t\tthis.weight = weight;\n\n\t\t\t// note: same logic as when updated at runtime\n\t\t\tthis._effectiveWeight = this.enabled ? weight : 0;\n\n\t\t\treturn this.stopFading();\n\n\t\t},\n\n\t\t// return the weight considering fading and .enabled\n\t\tgetEffectiveWeight: function () {\n\n\t\t\treturn this._effectiveWeight;\n\n\t\t},\n\n\t\tfadeIn: function ( duration ) {\n\n\t\t\treturn this._scheduleFading( duration, 0, 1 );\n\n\t\t},\n\n\t\tfadeOut: function ( duration ) {\n\n\t\t\treturn this._scheduleFading( duration, 1, 0 );\n\n\t\t},\n\n\t\tcrossFadeFrom: function ( fadeOutAction, duration, warp ) {\n\n\t\t\tfadeOutAction.fadeOut( duration );\n\t\t\tthis.fadeIn( duration );\n\n\t\t\tif ( warp ) {\n\n\t\t\t\tvar fadeInDuration = this._clip.duration,\n\t\t\t\t\tfadeOutDuration = fadeOutAction._clip.duration,\n\n\t\t\t\t\tstartEndRatio = fadeOutDuration / fadeInDuration,\n\t\t\t\t\tendStartRatio = fadeInDuration / fadeOutDuration;\n\n\t\t\t\tfadeOutAction.warp( 1.0, startEndRatio, duration );\n\t\t\t\tthis.warp( endStartRatio, 1.0, duration );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcrossFadeTo: function ( fadeInAction, duration, warp ) {\n\n\t\t\treturn fadeInAction.crossFadeFrom( this, duration, warp );\n\n\t\t},\n\n\t\tstopFading: function () {\n\n\t\t\tvar weightInterpolant = this._weightInterpolant;\n\n\t\t\tif ( weightInterpolant !== null ) {\n\n\t\t\t\tthis._weightInterpolant = null;\n\t\t\t\tthis._mixer._takeBackControlInterpolant( weightInterpolant );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Time Scale Control\n\n\t\t// set the time scale stopping any scheduled warping\n\t\t// although .paused = true yields an effective time scale of zero, this\n\t\t// method does *not* change .paused, because it would be confusing\n\t\tsetEffectiveTimeScale: function ( timeScale ) {\n\n\t\t\tthis.timeScale = timeScale;\n\t\t\tthis._effectiveTimeScale = this.paused ? 0 : timeScale;\n\n\t\t\treturn this.stopWarping();\n\n\t\t},\n\n\t\t// return the time scale considering warping and .paused\n\t\tgetEffectiveTimeScale: function () {\n\n\t\t\treturn this._effectiveTimeScale;\n\n\t\t},\n\n\t\tsetDuration: function ( duration ) {\n\n\t\t\tthis.timeScale = this._clip.duration / duration;\n\n\t\t\treturn this.stopWarping();\n\n\t\t},\n\n\t\tsyncWith: function ( action ) {\n\n\t\t\tthis.time = action.time;\n\t\t\tthis.timeScale = action.timeScale;\n\n\t\t\treturn this.stopWarping();\n\n\t\t},\n\n\t\thalt: function ( duration ) {\n\n\t\t\treturn this.warp( this._effectiveTimeScale, 0, duration );\n\n\t\t},\n\n\t\twarp: function ( startTimeScale, endTimeScale, duration ) {\n\n\t\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\t\tinterpolant = this._timeScaleInterpolant,\n\n\t\t\t\ttimeScale = this.timeScale;\n\n\t\t\tif ( interpolant === null ) {\n\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._timeScaleInterpolant = interpolant;\n\n\t\t\t}\n\n\t\t\tvar times = interpolant.parameterPositions,\n\t\t\t\tvalues = interpolant.sampleValues;\n\n\t\t\ttimes[ 0 ] = now;\n\t\t\ttimes[ 1 ] = now + duration;\n\n\t\t\tvalues[ 0 ] = startTimeScale / timeScale;\n\t\t\tvalues[ 1 ] = endTimeScale / timeScale;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tstopWarping: function () {\n\n\t\t\tvar timeScaleInterpolant = this._timeScaleInterpolant;\n\n\t\t\tif ( timeScaleInterpolant !== null ) {\n\n\t\t\t\tthis._timeScaleInterpolant = null;\n\t\t\t\tthis._mixer._takeBackControlInterpolant( timeScaleInterpolant );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// Object Accessors\n\n\t\tgetMixer: function () {\n\n\t\t\treturn this._mixer;\n\n\t\t},\n\n\t\tgetClip: function () {\n\n\t\t\treturn this._clip;\n\n\t\t},\n\n\t\tgetRoot: function () {\n\n\t\t\treturn this._localRoot || this._mixer._root;\n\n\t\t},\n\n\t\t// Interna\n\n\t\t_update: function ( time, deltaTime, timeDirection, accuIndex ) {\n\n\t\t\t// called by the mixer\n\n\t\t\tif ( ! this.enabled ) {\n\n\t\t\t\t// call ._updateWeight() to update ._effectiveWeight\n\n\t\t\t\tthis._updateWeight( time );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t\tvar startTime = this._startTime;\n\n\t\t\tif ( startTime !== null ) {\n\n\t\t\t\t// check for scheduled start of action\n\n\t\t\t\tvar timeRunning = ( time - startTime ) * timeDirection;\n\t\t\t\tif ( timeRunning < 0 || timeDirection === 0 ) {\n\n\t\t\t\t\treturn; // yet to come / don't decide when delta = 0\n\n\t\t\t\t}\n\n\t\t\t\t// start\n\n\t\t\t\tthis._startTime = null; // unschedule\n\t\t\t\tdeltaTime = timeDirection * timeRunning;\n\n\t\t\t}\n\n\t\t\t// apply time scale and advance time\n\n\t\t\tdeltaTime *= this._updateTimeScale( time );\n\t\t\tvar clipTime = this._updateTime( deltaTime );\n\n\t\t\t// note: _updateTime may disable the action resulting in\n\t\t\t// an effective weight of 0\n\n\t\t\tvar weight = this._updateWeight( time );\n\n\t\t\tif ( weight > 0 ) {\n\n\t\t\t\tvar interpolants = this._interpolants;\n\t\t\t\tvar propertyMixers = this._propertyBindings;\n\n\t\t\t\tfor ( var j = 0, m = interpolants.length; j !== m; ++ j ) {\n\n\t\t\t\t\tinterpolants[ j ].evaluate( clipTime );\n\t\t\t\t\tpropertyMixers[ j ].accumulate( accuIndex, weight );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_updateWeight: function ( time ) {\n\n\t\t\tvar weight = 0;\n\n\t\t\tif ( this.enabled ) {\n\n\t\t\t\tweight = this.weight;\n\t\t\t\tvar interpolant = this._weightInterpolant;\n\n\t\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\t\tweight *= interpolantValue;\n\n\t\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\t\tthis.stopFading();\n\n\t\t\t\t\t\tif ( interpolantValue === 0 ) {\n\n\t\t\t\t\t\t\t// faded out, disable\n\t\t\t\t\t\t\tthis.enabled = false;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._effectiveWeight = weight;\n\t\t\treturn weight;\n\n\t\t},\n\n\t\t_updateTimeScale: function ( time ) {\n\n\t\t\tvar timeScale = 0;\n\n\t\t\tif ( ! this.paused ) {\n\n\t\t\t\ttimeScale = this.timeScale;\n\n\t\t\t\tvar interpolant = this._timeScaleInterpolant;\n\n\t\t\t\tif ( interpolant !== null ) {\n\n\t\t\t\t\tvar interpolantValue = interpolant.evaluate( time )[ 0 ];\n\n\t\t\t\t\ttimeScale *= interpolantValue;\n\n\t\t\t\t\tif ( time > interpolant.parameterPositions[ 1 ] ) {\n\n\t\t\t\t\t\tthis.stopWarping();\n\n\t\t\t\t\t\tif ( timeScale === 0 ) {\n\n\t\t\t\t\t\t\t// motion has halted, pause\n\t\t\t\t\t\t\tthis.paused = true;\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// warp done - apply final time scale\n\t\t\t\t\t\t\tthis.timeScale = timeScale;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis._effectiveTimeScale = timeScale;\n\t\t\treturn timeScale;\n\n\t\t},\n\n\t\t_updateTime: function ( deltaTime ) {\n\n\t\t\tvar time = this.time + deltaTime;\n\n\t\t\tif ( deltaTime === 0 ) return time;\n\n\t\t\tvar duration = this._clip.duration,\n\n\t\t\t\tloop = this.loop,\n\t\t\t\tloopCount = this._loopCount;\n\n\t\t\tif ( loop === LoopOnce ) {\n\n\t\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t\t// just started\n\n\t\t\t\t\tthis._loopCount = 0;\n\t\t\t\t\tthis._setEndings( true, true, false );\n\n\t\t\t\t}\n\n\t\t\t\thandle_stop: {\n\n\t\t\t\t\tif ( time >= duration ) {\n\n\t\t\t\t\t\ttime = duration;\n\n\t\t\t\t\t} else if ( time < 0 ) {\n\n\t\t\t\t\t\ttime = 0;\n\n\t\t\t\t\t} else break handle_stop;\n\n\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\tdirection: deltaTime < 0 ? - 1 : 1\n\t\t\t\t\t} );\n\n\t\t\t\t}\n\n\t\t\t} else { // repetitive Repeat or PingPong\n\n\t\t\t\tvar pingPong = ( loop === LoopPingPong );\n\n\t\t\t\tif ( loopCount === - 1 ) {\n\n\t\t\t\t\t// just started\n\n\t\t\t\t\tif ( deltaTime >= 0 ) {\n\n\t\t\t\t\t\tloopCount = 0;\n\n\t\t\t\t\t\tthis._setEndings( true, this.repetitions === 0, pingPong );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// when looping in reverse direction, the initial\n\t\t\t\t\t\t// transition through zero counts as a repetition,\n\t\t\t\t\t\t// so leave loopCount at -1\n\n\t\t\t\t\t\tthis._setEndings( this.repetitions === 0, true, pingPong );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( time >= duration || time < 0 ) {\n\n\t\t\t\t\t// wrap around\n\n\t\t\t\t\tvar loopDelta = Math.floor( time / duration ); // signed\n\t\t\t\t\ttime -= duration * loopDelta;\n\n\t\t\t\t\tloopCount += Math.abs( loopDelta );\n\n\t\t\t\t\tvar pending = this.repetitions - loopCount;\n\n\t\t\t\t\tif ( pending <= 0 ) {\n\n\t\t\t\t\t\t// have to stop (switch state, clamp time, fire event)\n\n\t\t\t\t\t\tif ( this.clampWhenFinished ) this.paused = true;\n\t\t\t\t\t\telse this.enabled = false;\n\n\t\t\t\t\t\ttime = deltaTime > 0 ? duration : 0;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\t\ttype: 'finished', action: this,\n\t\t\t\t\t\t\tdirection: deltaTime > 0 ? 1 : - 1\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// keep running\n\n\t\t\t\t\t\tif ( pending === 1 ) {\n\n\t\t\t\t\t\t\t// entering the last round\n\n\t\t\t\t\t\t\tvar atStart = deltaTime < 0;\n\t\t\t\t\t\t\tthis._setEndings( atStart, ! atStart, pingPong );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tthis._setEndings( false, false, pingPong );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._loopCount = loopCount;\n\n\t\t\t\t\t\tthis._mixer.dispatchEvent( {\n\t\t\t\t\t\t\ttype: 'loop', action: this, loopDelta: loopDelta\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tif ( pingPong && ( loopCount & 1 ) === 1 ) {\n\n\t\t\t\t\t// invert time for the \"pong round\"\n\n\t\t\t\t\tthis.time = time;\n\t\t\t\t\treturn duration - time;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tthis.time = time;\n\t\t\treturn time;\n\n\t\t},\n\n\t\t_setEndings: function ( atStart, atEnd, pingPong ) {\n\n\t\t\tvar settings = this._interpolantSettings;\n\n\t\t\tif ( pingPong ) {\n\n\t\t\t\tsettings.endingStart \t= ZeroSlopeEnding;\n\t\t\t\tsettings.endingEnd\t\t= ZeroSlopeEnding;\n\n\t\t\t} else {\n\n\t\t\t\t// assuming for LoopOnce atStart == atEnd == true\n\n\t\t\t\tif ( atStart ) {\n\n\t\t\t\t\tsettings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsettings.endingStart = WrapAroundEnding;\n\n\t\t\t\t}\n\n\t\t\t\tif ( atEnd ) {\n\n\t\t\t\t\tsettings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tsettings.endingEnd \t = WrapAroundEnding;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_scheduleFading: function ( duration, weightNow, weightThen ) {\n\n\t\t\tvar mixer = this._mixer, now = mixer.time,\n\t\t\t\tinterpolant = this._weightInterpolant;\n\n\t\t\tif ( interpolant === null ) {\n\n\t\t\t\tinterpolant = mixer._lendControlInterpolant();\n\t\t\t\tthis._weightInterpolant = interpolant;\n\n\t\t\t}\n\n\t\t\tvar times = interpolant.parameterPositions,\n\t\t\t\tvalues = interpolant.sampleValues;\n\n\t\t\ttimes[ 0 ] = now; \t\t\t\tvalues[ 0 ] = weightNow;\n\t\t\ttimes[ 1 ] = now + duration;\tvalues[ 1 ] = weightThen;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t *\n\t * Player for AnimationClips.\n\t *\n\t *\n\t * @author Ben Houston / http://clara.io/\n\t * @author David Sarno / http://lighthaus.us/\n\t * @author tschw\n\t */\n\n\tfunction AnimationMixer( root ) {\n\n\t\tthis._root = root;\n\t\tthis._initMemoryManager();\n\t\tthis._accuIndex = 0;\n\n\t\tthis.time = 0;\n\n\t\tthis.timeScale = 1.0;\n\n\t}\n\n\tAnimationMixer.prototype = Object.assign( Object.create( EventDispatcher.prototype ), {\n\n\t\tconstructor: AnimationMixer,\n\n\t\t_bindAction: function ( action, prototypeAction ) {\n\n\t\t\tvar root = action._localRoot || this._root,\n\t\t\t\ttracks = action._clip.tracks,\n\t\t\t\tnTracks = tracks.length,\n\t\t\t\tbindings = action._propertyBindings,\n\t\t\t\tinterpolants = action._interpolants,\n\t\t\t\trootUuid = root.uuid,\n\t\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingsByName = bindingsByRoot[ rootUuid ];\n\n\t\t\tif ( bindingsByName === undefined ) {\n\n\t\t\t\tbindingsByName = {};\n\t\t\t\tbindingsByRoot[ rootUuid ] = bindingsByName;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i !== nTracks; ++ i ) {\n\n\t\t\t\tvar track = tracks[ i ],\n\t\t\t\t\ttrackName = track.name,\n\t\t\t\t\tbinding = bindingsByName[ trackName ];\n\n\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tbinding = bindings[ i ];\n\n\t\t\t\t\tif ( binding !== undefined ) {\n\n\t\t\t\t\t\t// existing binding, make sure the cache knows\n\n\t\t\t\t\t\tif ( binding._cacheIndex === null ) {\n\n\t\t\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tvar path = prototypeAction && prototypeAction.\n\t\t\t\t\t\t_propertyBindings[ i ].binding.parsedPath;\n\n\t\t\t\t\tbinding = new PropertyMixer(\n\t\t\t\t\t\tPropertyBinding.create( root, trackName, path ),\n\t\t\t\t\t\ttrack.ValueTypeName, track.getValueSize() );\n\n\t\t\t\t\t++ binding.referenceCount;\n\t\t\t\t\tthis._addInactiveBinding( binding, rootUuid, trackName );\n\n\t\t\t\t\tbindings[ i ] = binding;\n\n\t\t\t\t}\n\n\t\t\t\tinterpolants[ i ].resultBuffer = binding.buffer;\n\n\t\t\t}\n\n\t\t},\n\n\t\t_activateAction: function ( action ) {\n\n\t\t\tif ( ! this._isActiveAction( action ) ) {\n\n\t\t\t\tif ( action._cacheIndex === null ) {\n\n\t\t\t\t\t// this action has been forgotten by the cache, but the user\n\t\t\t\t\t// appears to be still using it -> rebind\n\n\t\t\t\t\tvar rootUuid = ( action._localRoot || this._root ).uuid,\n\t\t\t\t\t\tclipUuid = action._clip.uuid,\n\t\t\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\t\t\tthis._bindAction( action,\n\t\t\t\t\t\tactionsForClip && actionsForClip.knownActions[ 0 ] );\n\n\t\t\t\t\tthis._addInactiveAction( action, clipUuid, rootUuid );\n\n\t\t\t\t}\n\n\t\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t\t// increment reference counts / sort out state\n\t\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\t\tif ( binding.useCount ++ === 0 ) {\n\n\t\t\t\t\t\tthis._lendBinding( binding );\n\t\t\t\t\t\tbinding.saveOriginalState();\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._lendAction( action );\n\n\t\t\t}\n\n\t\t},\n\n\t\t_deactivateAction: function ( action ) {\n\n\t\t\tif ( this._isActiveAction( action ) ) {\n\n\t\t\t\tvar bindings = action._propertyBindings;\n\n\t\t\t\t// decrement reference counts / sort out state\n\t\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\t\tif ( -- binding.useCount === 0 ) {\n\n\t\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\t\tthis._takeBackBinding( binding );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tthis._takeBackAction( action );\n\n\t\t\t}\n\n\t\t},\n\n\t\t// Memory manager\n\n\t\t_initMemoryManager: function () {\n\n\t\t\tthis._actions = []; // 'nActiveActions' followed by inactive ones\n\t\t\tthis._nActiveActions = 0;\n\n\t\t\tthis._actionsByClip = {};\n\t\t\t// inside:\n\t\t\t// {\n\t\t\t// \t\tknownActions: Array< AnimationAction >\t- used as prototypes\n\t\t\t// \t\tactionByRoot: AnimationAction\t\t\t- lookup\n\t\t\t// }\n\n\n\t\t\tthis._bindings = []; // 'nActiveBindings' followed by inactive ones\n\t\t\tthis._nActiveBindings = 0;\n\n\t\t\tthis._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >\n\n\n\t\t\tthis._controlInterpolants = []; // same game as above\n\t\t\tthis._nActiveControlInterpolants = 0;\n\n\t\t\tvar scope = this;\n\n\t\t\tthis.stats = {\n\n\t\t\t\tactions: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._actions.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveActions;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tbindings: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._bindings.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveBindings;\n\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcontrolInterpolants: {\n\t\t\t\t\tget total() {\n\n\t\t\t\t\t\treturn scope._controlInterpolants.length;\n\n\t\t\t\t\t},\n\t\t\t\t\tget inUse() {\n\n\t\t\t\t\t\treturn scope._nActiveControlInterpolants;\n\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t};\n\n\t\t},\n\n\t\t// Memory management for AnimationAction objects\n\n\t\t_isActiveAction: function ( action ) {\n\n\t\t\tvar index = action._cacheIndex;\n\t\t\treturn index !== null && index < this._nActiveActions;\n\n\t\t},\n\n\t\t_addInactiveAction: function ( action, clipUuid, rootUuid ) {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip === undefined ) {\n\n\t\t\t\tactionsForClip = {\n\n\t\t\t\t\tknownActions: [ action ],\n\t\t\t\t\tactionByRoot: {}\n\n\t\t\t\t};\n\n\t\t\t\taction._byClipCacheIndex = 0;\n\n\t\t\t\tactionsByClip[ clipUuid ] = actionsForClip;\n\n\t\t\t} else {\n\n\t\t\t\tvar knownActions = actionsForClip.knownActions;\n\n\t\t\t\taction._byClipCacheIndex = knownActions.length;\n\t\t\t\tknownActions.push( action );\n\n\t\t\t}\n\n\t\t\taction._cacheIndex = actions.length;\n\t\t\tactions.push( action );\n\n\t\t\tactionsForClip.actionByRoot[ rootUuid ] = action;\n\n\t\t},\n\n\t\t_removeInactiveAction: function ( action ) {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ],\n\t\t\t\tcacheIndex = action._cacheIndex;\n\n\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\tactions.pop();\n\n\t\t\taction._cacheIndex = null;\n\n\n\t\t\tvar clipUuid = action._clip.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ],\n\t\t\t\tknownActionsForClip = actionsForClip.knownActions,\n\n\t\t\t\tlastKnownAction =\n\t\t\t\t\tknownActionsForClip[ knownActionsForClip.length - 1 ],\n\n\t\t\t\tbyClipCacheIndex = action._byClipCacheIndex;\n\n\t\t\tlastKnownAction._byClipCacheIndex = byClipCacheIndex;\n\t\t\tknownActionsForClip[ byClipCacheIndex ] = lastKnownAction;\n\t\t\tknownActionsForClip.pop();\n\n\t\t\taction._byClipCacheIndex = null;\n\n\n\t\t\tvar actionByRoot = actionsForClip.actionByRoot,\n\t\t\t\trootUuid = ( action._localRoot || this._root ).uuid;\n\n\t\t\tdelete actionByRoot[ rootUuid ];\n\n\t\t\tif ( knownActionsForClip.length === 0 ) {\n\n\t\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t\t}\n\n\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t},\n\n\t\t_removeInactiveBindingsForAction: function ( action ) {\n\n\t\t\tvar bindings = action._propertyBindings;\n\t\t\tfor ( var i = 0, n = bindings.length; i !== n; ++ i ) {\n\n\t\t\t\tvar binding = bindings[ i ];\n\n\t\t\t\tif ( -- binding.referenceCount === 0 ) {\n\n\t\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t_lendAction: function ( action ) {\n\n\t\t\t// [ active actions | inactive actions ]\n\t\t\t// [ active actions >| inactive actions ]\n\t\t\t// s a\n\t\t\t// <-swap->\n\t\t\t// a s\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\t\tlastActiveIndex = this._nActiveActions ++,\n\n\t\t\t\tfirstInactiveAction = actions[ lastActiveIndex ];\n\n\t\t\taction._cacheIndex = lastActiveIndex;\n\t\t\tactions[ lastActiveIndex ] = action;\n\n\t\t\tfirstInactiveAction._cacheIndex = prevIndex;\n\t\t\tactions[ prevIndex ] = firstInactiveAction;\n\n\t\t},\n\n\t\t_takeBackAction: function ( action ) {\n\n\t\t\t// [ active actions | inactive actions ]\n\t\t\t// [ active actions |< inactive actions ]\n\t\t\t// a s\n\t\t\t// <-swap->\n\t\t\t// s a\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tprevIndex = action._cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveActions,\n\n\t\t\t\tlastActiveAction = actions[ firstInactiveIndex ];\n\n\t\t\taction._cacheIndex = firstInactiveIndex;\n\t\t\tactions[ firstInactiveIndex ] = action;\n\n\t\t\tlastActiveAction._cacheIndex = prevIndex;\n\t\t\tactions[ prevIndex ] = lastActiveAction;\n\n\t\t},\n\n\t\t// Memory management for PropertyMixer objects\n\n\t\t_addInactiveBinding: function ( binding, rootUuid, trackName ) {\n\n\t\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\t\tbindings = this._bindings;\n\n\t\t\tif ( bindingByName === undefined ) {\n\n\t\t\t\tbindingByName = {};\n\t\t\t\tbindingsByRoot[ rootUuid ] = bindingByName;\n\n\t\t\t}\n\n\t\t\tbindingByName[ trackName ] = binding;\n\n\t\t\tbinding._cacheIndex = bindings.length;\n\t\t\tbindings.push( binding );\n\n\t\t},\n\n\t\t_removeInactiveBinding: function ( binding ) {\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tpropBinding = binding.binding,\n\t\t\t\trootUuid = propBinding.rootNode.uuid,\n\t\t\t\ttrackName = propBinding.path,\n\t\t\t\tbindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ],\n\n\t\t\t\tlastInactiveBinding = bindings[ bindings.length - 1 ],\n\t\t\t\tcacheIndex = binding._cacheIndex;\n\n\t\t\tlastInactiveBinding._cacheIndex = cacheIndex;\n\t\t\tbindings[ cacheIndex ] = lastInactiveBinding;\n\t\t\tbindings.pop();\n\n\t\t\tdelete bindingByName[ trackName ];\n\n\t\t\tremove_empty_map: {\n\n\t\t\t\tfor ( var _ in bindingByName ) break remove_empty_map; // eslint-disable-line no-unused-vars\n\n\t\t\t\tdelete bindingsByRoot[ rootUuid ];\n\n\t\t\t}\n\n\t\t},\n\n\t\t_lendBinding: function ( binding ) {\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\t\tlastActiveIndex = this._nActiveBindings ++,\n\n\t\t\t\tfirstInactiveBinding = bindings[ lastActiveIndex ];\n\n\t\t\tbinding._cacheIndex = lastActiveIndex;\n\t\t\tbindings[ lastActiveIndex ] = binding;\n\n\t\t\tfirstInactiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[ prevIndex ] = firstInactiveBinding;\n\n\t\t},\n\n\t\t_takeBackBinding: function ( binding ) {\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tprevIndex = binding._cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveBindings,\n\n\t\t\t\tlastActiveBinding = bindings[ firstInactiveIndex ];\n\n\t\t\tbinding._cacheIndex = firstInactiveIndex;\n\t\t\tbindings[ firstInactiveIndex ] = binding;\n\n\t\t\tlastActiveBinding._cacheIndex = prevIndex;\n\t\t\tbindings[ prevIndex ] = lastActiveBinding;\n\n\t\t},\n\n\n\t\t// Memory management of Interpolants for weight and time scale\n\n\t\t_lendControlInterpolant: function () {\n\n\t\t\tvar interpolants = this._controlInterpolants,\n\t\t\t\tlastActiveIndex = this._nActiveControlInterpolants ++,\n\t\t\t\tinterpolant = interpolants[ lastActiveIndex ];\n\n\t\t\tif ( interpolant === undefined ) {\n\n\t\t\t\tinterpolant = new LinearInterpolant(\n\t\t\t\t\tnew Float32Array( 2 ), new Float32Array( 2 ),\n\t\t\t\t\t1, this._controlInterpolantsResultBuffer );\n\n\t\t\t\tinterpolant.__cacheIndex = lastActiveIndex;\n\t\t\t\tinterpolants[ lastActiveIndex ] = interpolant;\n\n\t\t\t}\n\n\t\t\treturn interpolant;\n\n\t\t},\n\n\t\t_takeBackControlInterpolant: function ( interpolant ) {\n\n\t\t\tvar interpolants = this._controlInterpolants,\n\t\t\t\tprevIndex = interpolant.__cacheIndex,\n\n\t\t\t\tfirstInactiveIndex = -- this._nActiveControlInterpolants,\n\n\t\t\t\tlastActiveInterpolant = interpolants[ firstInactiveIndex ];\n\n\t\t\tinterpolant.__cacheIndex = firstInactiveIndex;\n\t\t\tinterpolants[ firstInactiveIndex ] = interpolant;\n\n\t\t\tlastActiveInterpolant.__cacheIndex = prevIndex;\n\t\t\tinterpolants[ prevIndex ] = lastActiveInterpolant;\n\n\t\t},\n\n\t\t_controlInterpolantsResultBuffer: new Float32Array( 1 ),\n\n\t\t// return an action for a clip optionally using a custom root target\n\t\t// object (this method allocates a lot of dynamic memory in case a\n\t\t// previously unknown clip/root combination is specified)\n\t\tclipAction: function ( clip, optionalRoot ) {\n\n\t\t\tvar root = optionalRoot || this._root,\n\t\t\t\trootUuid = root.uuid,\n\n\t\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\t\tclipUuid = clipObject !== null ? clipObject.uuid : clip,\n\n\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ],\n\t\t\t\tprototypeAction = null;\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\tvar existingAction =\n\t\t\t\t\t\tactionsForClip.actionByRoot[ rootUuid ];\n\n\t\t\t\tif ( existingAction !== undefined ) {\n\n\t\t\t\t\treturn existingAction;\n\n\t\t\t\t}\n\n\t\t\t\t// we know the clip, so we don't have to parse all\n\t\t\t\t// the bindings again but can just copy\n\t\t\t\tprototypeAction = actionsForClip.knownActions[ 0 ];\n\n\t\t\t\t// also, take the clip from the prototype action\n\t\t\t\tif ( clipObject === null )\n\t\t\t\t\tclipObject = prototypeAction._clip;\n\n\t\t\t}\n\n\t\t\t// clip must be known when specified via string\n\t\t\tif ( clipObject === null ) return null;\n\n\t\t\t// allocate all resources required to run it\n\t\t\tvar newAction = new AnimationAction( this, clipObject, optionalRoot );\n\n\t\t\tthis._bindAction( newAction, prototypeAction );\n\n\t\t\t// and make the action known to the memory manager\n\t\t\tthis._addInactiveAction( newAction, clipUuid, rootUuid );\n\n\t\t\treturn newAction;\n\n\t\t},\n\n\t\t// get an existing action\n\t\texistingAction: function ( clip, optionalRoot ) {\n\n\t\t\tvar root = optionalRoot || this._root,\n\t\t\t\trootUuid = root.uuid,\n\n\t\t\t\tclipObject = typeof clip === 'string' ?\n\t\t\t\t\tAnimationClip.findByName( root, clip ) : clip,\n\n\t\t\t\tclipUuid = clipObject ? clipObject.uuid : clip,\n\n\t\t\t\tactionsForClip = this._actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\treturn actionsForClip.actionByRoot[ rootUuid ] || null;\n\n\t\t\t}\n\n\t\t\treturn null;\n\n\t\t},\n\n\t\t// deactivates all previously scheduled actions\n\t\tstopAllAction: function () {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tnActions = this._nActiveActions,\n\t\t\t\tbindings = this._bindings,\n\t\t\t\tnBindings = this._nActiveBindings;\n\n\t\t\tthis._nActiveActions = 0;\n\t\t\tthis._nActiveBindings = 0;\n\n\t\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\t\tactions[ i ].reset();\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\t\tbindings[ i ].useCount = 0;\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// advance the time and update apply the animation\n\t\tupdate: function ( deltaTime ) {\n\n\t\t\tdeltaTime *= this.timeScale;\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tnActions = this._nActiveActions,\n\n\t\t\t\ttime = this.time += deltaTime,\n\t\t\t\ttimeDirection = Math.sign( deltaTime ),\n\n\t\t\t\taccuIndex = this._accuIndex ^= 1;\n\n\t\t\t// run active actions\n\n\t\t\tfor ( var i = 0; i !== nActions; ++ i ) {\n\n\t\t\t\tvar action = actions[ i ];\n\n\t\t\t\taction._update( time, deltaTime, timeDirection, accuIndex );\n\n\t\t\t}\n\n\t\t\t// update scene graph\n\n\t\t\tvar bindings = this._bindings,\n\t\t\t\tnBindings = this._nActiveBindings;\n\n\t\t\tfor ( var i = 0; i !== nBindings; ++ i ) {\n\n\t\t\t\tbindings[ i ].apply( accuIndex );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// return this mixer's root target object\n\t\tgetRoot: function () {\n\n\t\t\treturn this._root;\n\n\t\t},\n\n\t\t// free all resources specific to a particular clip\n\t\tuncacheClip: function ( clip ) {\n\n\t\t\tvar actions = this._actions,\n\t\t\t\tclipUuid = clip.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip,\n\t\t\t\tactionsForClip = actionsByClip[ clipUuid ];\n\n\t\t\tif ( actionsForClip !== undefined ) {\n\n\t\t\t\t// note: just calling _removeInactiveAction would mess up the\n\t\t\t\t// iteration state and also require updating the state we can\n\t\t\t\t// just throw away\n\n\t\t\t\tvar actionsToRemove = actionsForClip.knownActions;\n\n\t\t\t\tfor ( var i = 0, n = actionsToRemove.length; i !== n; ++ i ) {\n\n\t\t\t\t\tvar action = actionsToRemove[ i ];\n\n\t\t\t\t\tthis._deactivateAction( action );\n\n\t\t\t\t\tvar cacheIndex = action._cacheIndex,\n\t\t\t\t\t\tlastInactiveAction = actions[ actions.length - 1 ];\n\n\t\t\t\t\taction._cacheIndex = null;\n\t\t\t\t\taction._byClipCacheIndex = null;\n\n\t\t\t\t\tlastInactiveAction._cacheIndex = cacheIndex;\n\t\t\t\t\tactions[ cacheIndex ] = lastInactiveAction;\n\t\t\t\t\tactions.pop();\n\n\t\t\t\t\tthis._removeInactiveBindingsForAction( action );\n\n\t\t\t\t}\n\n\t\t\t\tdelete actionsByClip[ clipUuid ];\n\n\t\t\t}\n\n\t\t},\n\n\t\t// free all resources specific to a particular root target object\n\t\tuncacheRoot: function ( root ) {\n\n\t\t\tvar rootUuid = root.uuid,\n\t\t\t\tactionsByClip = this._actionsByClip;\n\n\t\t\tfor ( var clipUuid in actionsByClip ) {\n\n\t\t\t\tvar actionByRoot = actionsByClip[ clipUuid ].actionByRoot,\n\t\t\t\t\taction = actionByRoot[ rootUuid ];\n\n\t\t\t\tif ( action !== undefined ) {\n\n\t\t\t\t\tthis._deactivateAction( action );\n\t\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tvar bindingsByRoot = this._bindingsByRootAndName,\n\t\t\t\tbindingByName = bindingsByRoot[ rootUuid ];\n\n\t\t\tif ( bindingByName !== undefined ) {\n\n\t\t\t\tfor ( var trackName in bindingByName ) {\n\n\t\t\t\t\tvar binding = bindingByName[ trackName ];\n\t\t\t\t\tbinding.restoreOriginalState();\n\t\t\t\t\tthis._removeInactiveBinding( binding );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t},\n\n\t\t// remove a targeted clip from the cache\n\t\tuncacheAction: function ( clip, optionalRoot ) {\n\n\t\t\tvar action = this.existingAction( clip, optionalRoot );\n\n\t\t\tif ( action !== null ) {\n\n\t\t\t\tthis._deactivateAction( action );\n\t\t\t\tthis._removeInactiveAction( action );\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Uniform( value ) {\n\n\t\tif ( typeof value === 'string' ) {\n\n\t\t\tconsole.warn( 'THREE.Uniform: Type parameter is no longer needed.' );\n\t\t\tvalue = arguments[ 1 ];\n\n\t\t}\n\n\t\tthis.value = value;\n\n\t}\n\n\tUniform.prototype.clone = function () {\n\n\t\treturn new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );\n\n\t};\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InstancedBufferGeometry() {\n\n\t\tBufferGeometry.call( this );\n\n\t\tthis.type = 'InstancedBufferGeometry';\n\t\tthis.maxInstancedCount = undefined;\n\n\t}\n\n\tInstancedBufferGeometry.prototype = Object.assign( Object.create( BufferGeometry.prototype ), {\n\n\t\tconstructor: InstancedBufferGeometry,\n\n\t\tisInstancedBufferGeometry: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tBufferGeometry.prototype.copy.call( this, source );\n\n\t\t\tthis.maxInstancedCount = source.maxInstancedCount;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InterleavedBufferAttribute( interleavedBuffer, itemSize, offset, normalized ) {\n\n\t\tthis.data = interleavedBuffer;\n\t\tthis.itemSize = itemSize;\n\t\tthis.offset = offset;\n\n\t\tthis.normalized = normalized === true;\n\n\t}\n\n\tObject.defineProperties( InterleavedBufferAttribute.prototype, {\n\n\t\tcount: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.data.count;\n\n\t\t\t}\n\n\t\t},\n\n\t\tarray: {\n\n\t\t\tget: function () {\n\n\t\t\t\treturn this.data.array;\n\n\t\t\t}\n\n\t\t}\n\n\t} );\n\n\tObject.assign( InterleavedBufferAttribute.prototype, {\n\n\t\tisInterleavedBufferAttribute: true,\n\n\t\tsetX: function ( index, x ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset ] = x;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetY: function ( index, y ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetZ: function ( index, z ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetW: function ( index, w ) {\n\n\t\t\tthis.data.array[ index * this.data.stride + this.offset + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tgetX: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset ];\n\n\t\t},\n\n\t\tgetY: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 1 ];\n\n\t\t},\n\n\t\tgetZ: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 2 ];\n\n\t\t},\n\n\t\tgetW: function ( index ) {\n\n\t\t\treturn this.data.array[ index * this.data.stride + this.offset + 3 ];\n\n\t\t},\n\n\t\tsetXY: function ( index, x, y ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZ: function ( index, x, y, z ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\t\t\tthis.data.array[ index + 2 ] = z;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetXYZW: function ( index, x, y, z, w ) {\n\n\t\t\tindex = index * this.data.stride + this.offset;\n\n\t\t\tthis.data.array[ index + 0 ] = x;\n\t\t\tthis.data.array[ index + 1 ] = y;\n\t\t\tthis.data.array[ index + 2 ] = z;\n\t\t\tthis.data.array[ index + 3 ] = w;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InterleavedBuffer( array, stride ) {\n\n\t\tthis.array = array;\n\t\tthis.stride = stride;\n\t\tthis.count = array !== undefined ? array.length / stride : 0;\n\n\t\tthis.dynamic = false;\n\t\tthis.updateRange = { offset: 0, count: - 1 };\n\n\t\tthis.version = 0;\n\n\t}\n\n\tObject.defineProperty( InterleavedBuffer.prototype, 'needsUpdate', {\n\n\t\tset: function ( value ) {\n\n\t\t\tif ( value === true ) this.version ++;\n\n\t\t}\n\n\t} );\n\n\tObject.assign( InterleavedBuffer.prototype, {\n\n\t\tisInterleavedBuffer: true,\n\n\t\tonUploadCallback: function () {},\n\n\t\tsetArray: function ( array ) {\n\n\t\t\tif ( Array.isArray( array ) ) {\n\n\t\t\t\tthrow new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );\n\n\t\t\t}\n\n\t\t\tthis.count = array !== undefined ? array.length / this.stride : 0;\n\t\t\tthis.array = array;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetDynamic: function ( value ) {\n\n\t\t\tthis.dynamic = value;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopy: function ( source ) {\n\n\t\t\tthis.array = new source.array.constructor( source.array );\n\t\t\tthis.count = source.count;\n\t\t\tthis.stride = source.stride;\n\t\t\tthis.dynamic = source.dynamic;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcopyAt: function ( index1, attribute, index2 ) {\n\n\t\t\tindex1 *= this.stride;\n\t\t\tindex2 *= attribute.stride;\n\n\t\t\tfor ( var i = 0, l = this.stride; i < l; i ++ ) {\n\n\t\t\t\tthis.array[ index1 + i ] = attribute.array[ index2 + i ];\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tset: function ( value, offset ) {\n\n\t\t\tif ( offset === undefined ) offset = 0;\n\n\t\t\tthis.array.set( value, offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tonUpload: function ( callback ) {\n\n\t\t\tthis.onUploadCallback = callback;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InstancedInterleavedBuffer( array, stride, meshPerAttribute ) {\n\n\t\tInterleavedBuffer.call( this, array, stride );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tInstancedInterleavedBuffer.prototype = Object.assign( Object.create( InterleavedBuffer.prototype ), {\n\n\t\tconstructor: InstancedInterleavedBuffer,\n\n\t\tisInstancedInterleavedBuffer: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tInterleavedBuffer.prototype.copy.call( this, source );\n\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author benaadams / https://twitter.com/ben_a_adams\n\t */\n\n\tfunction InstancedBufferAttribute( array, itemSize, meshPerAttribute ) {\n\n\t\tBufferAttribute.call( this, array, itemSize );\n\n\t\tthis.meshPerAttribute = meshPerAttribute || 1;\n\n\t}\n\n\tInstancedBufferAttribute.prototype = Object.assign( Object.create( BufferAttribute.prototype ), {\n\n\t\tconstructor: InstancedBufferAttribute,\n\n\t\tisInstancedBufferAttribute: true,\n\n\t\tcopy: function ( source ) {\n\n\t\t\tBufferAttribute.prototype.copy.call( this, source );\n\n\t\t\tthis.meshPerAttribute = source.meshPerAttribute;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author bhouston / http://clara.io/\n\t * @author stephomi / http://stephaneginier.com/\n\t */\n\n\tfunction Raycaster( origin, direction, near, far ) {\n\n\t\tthis.ray = new Ray( origin, direction );\n\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\tthis.near = near || 0;\n\t\tthis.far = far || Infinity;\n\n\t\tthis.params = {\n\t\t\tMesh: {},\n\t\t\tLine: {},\n\t\t\tLOD: {},\n\t\t\tPoints: { threshold: 1 },\n\t\t\tSprite: {}\n\t\t};\n\n\t\tObject.defineProperties( this.params, {\n\t\t\tPointCloud: {\n\t\t\t\tget: function () {\n\n\t\t\t\t\tconsole.warn( 'THREE.Raycaster: params.PointCloud has been renamed to params.Points.' );\n\t\t\t\t\treturn this.Points;\n\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t}\n\n\tfunction ascSort( a, b ) {\n\n\t\treturn a.distance - b.distance;\n\n\t}\n\n\tfunction intersectObject( object, raycaster, intersects, recursive ) {\n\n\t\tif ( object.visible === false ) return;\n\n\t\tobject.raycast( raycaster, intersects );\n\n\t\tif ( recursive === true ) {\n\n\t\t\tvar children = object.children;\n\n\t\t\tfor ( var i = 0, l = children.length; i < l; i ++ ) {\n\n\t\t\t\tintersectObject( children[ i ], raycaster, intersects, true );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tObject.assign( Raycaster.prototype, {\n\n\t\tlinePrecision: 1,\n\n\t\tset: function ( origin, direction ) {\n\n\t\t\t// direction is assumed to be normalized (for accurate distance calculations)\n\n\t\t\tthis.ray.set( origin, direction );\n\n\t\t},\n\n\t\tsetFromCamera: function ( coords, camera ) {\n\n\t\t\tif ( ( camera && camera.isPerspectiveCamera ) ) {\n\n\t\t\t\tthis.ray.origin.setFromMatrixPosition( camera.matrixWorld );\n\t\t\t\tthis.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();\n\n\t\t\t} else if ( ( camera && camera.isOrthographicCamera ) ) {\n\n\t\t\t\tthis.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera\n\t\t\t\tthis.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );\n\n\t\t\t} else {\n\n\t\t\t\tconsole.error( 'THREE.Raycaster: Unsupported camera type.' );\n\n\t\t\t}\n\n\t\t},\n\n\t\tintersectObject: function ( object, recursive, optionalTarget ) {\n\n\t\t\tvar intersects = optionalTarget || [];\n\n\t\t\tintersectObject( object, this, intersects, recursive );\n\n\t\t\tintersects.sort( ascSort );\n\n\t\t\treturn intersects;\n\n\t\t},\n\n\t\tintersectObjects: function ( objects, recursive, optionalTarget ) {\n\n\t\t\tvar intersects = optionalTarget || [];\n\n\t\t\tif ( Array.isArray( objects ) === false ) {\n\n\t\t\t\tconsole.warn( 'THREE.Raycaster.intersectObjects: objects is not an Array.' );\n\t\t\t\treturn intersects;\n\n\t\t\t}\n\n\t\t\tfor ( var i = 0, l = objects.length; i < l; i ++ ) {\n\n\t\t\t\tintersectObject( objects[ i ], this, intersects, recursive );\n\n\t\t\t}\n\n\t\t\tintersects.sort( ascSort );\n\n\t\t\treturn intersects;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction Clock( autoStart ) {\n\n\t\tthis.autoStart = ( autoStart !== undefined ) ? autoStart : true;\n\n\t\tthis.startTime = 0;\n\t\tthis.oldTime = 0;\n\t\tthis.elapsedTime = 0;\n\n\t\tthis.running = false;\n\n\t}\n\n\tObject.assign( Clock.prototype, {\n\n\t\tstart: function () {\n\n\t\t\tthis.startTime = ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732\n\n\t\t\tthis.oldTime = this.startTime;\n\t\t\tthis.elapsedTime = 0;\n\t\t\tthis.running = true;\n\n\t\t},\n\n\t\tstop: function () {\n\n\t\t\tthis.getElapsedTime();\n\t\t\tthis.running = false;\n\t\t\tthis.autoStart = false;\n\n\t\t},\n\n\t\tgetElapsedTime: function () {\n\n\t\t\tthis.getDelta();\n\t\t\treturn this.elapsedTime;\n\n\t\t},\n\n\t\tgetDelta: function () {\n\n\t\t\tvar diff = 0;\n\n\t\t\tif ( this.autoStart && ! this.running ) {\n\n\t\t\t\tthis.start();\n\t\t\t\treturn 0;\n\n\t\t\t}\n\n\t\t\tif ( this.running ) {\n\n\t\t\t\tvar newTime = ( typeof performance === 'undefined' ? Date : performance ).now();\n\n\t\t\t\tdiff = ( newTime - this.oldTime ) / 1000;\n\t\t\t\tthis.oldTime = newTime;\n\n\t\t\t\tthis.elapsedTime += diff;\n\n\t\t\t}\n\n\t\t\treturn diff;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t * @author WestLangley / http://github.com/WestLangley\n\t *\n\t * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system\n\t *\n\t * The poles (phi) are at the positive and negative y axis.\n\t * The equator starts at positive z.\n\t */\n\n\tfunction Spherical( radius, phi, theta ) {\n\n\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0;\n\t\tthis.phi = ( phi !== undefined ) ? phi : 0; // up / down towards top and bottom pole\n\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // around the equator of the sphere\n\n\t\treturn this;\n\n\t}\n\n\tObject.assign( Spherical.prototype, {\n\n\t\tset: function ( radius, phi, theta ) {\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.phi = phi;\n\t\t\tthis.theta = theta;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( other ) {\n\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.phi = other.phi;\n\t\t\tthis.theta = other.theta;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\t// restrict phi to be betwee EPS and PI-EPS\n\t\tmakeSafe: function () {\n\n\t\t\tvar EPS = 0.000001;\n\t\t\tthis.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromVector3: function ( vec3 ) {\n\n\t\t\tthis.radius = vec3.length();\n\n\t\t\tif ( this.radius === 0 ) {\n\n\t\t\t\tthis.theta = 0;\n\t\t\t\tthis.phi = 0;\n\n\t\t\t} else {\n\n\t\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z ); // equator angle around y-up axis\n\t\t\t\tthis.phi = Math.acos( _Math.clamp( vec3.y / this.radius, - 1, 1 ) ); // polar angle\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system\n\t *\n\t */\n\n\tfunction Cylindrical( radius, theta, y ) {\n\n\t\tthis.radius = ( radius !== undefined ) ? radius : 1.0; // distance from the origin to a point in the x-z plane\n\t\tthis.theta = ( theta !== undefined ) ? theta : 0; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis\n\t\tthis.y = ( y !== undefined ) ? y : 0; // height above the x-z plane\n\n\t\treturn this;\n\n\t}\n\n\tObject.assign( Cylindrical.prototype, {\n\n\t\tset: function ( radius, theta, y ) {\n\n\t\t\tthis.radius = radius;\n\t\t\tthis.theta = theta;\n\t\t\tthis.y = y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( other ) {\n\n\t\t\tthis.radius = other.radius;\n\t\t\tthis.theta = other.theta;\n\t\t\tthis.y = other.y;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromVector3: function ( vec3 ) {\n\n\t\t\tthis.radius = Math.sqrt( vec3.x * vec3.x + vec3.z * vec3.z );\n\t\t\tthis.theta = Math.atan2( vec3.x, vec3.z );\n\t\t\tthis.y = vec3.y;\n\n\t\t\treturn this;\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author bhouston / http://clara.io\n\t */\n\n\tfunction Box2( min, max ) {\n\n\t\tthis.min = ( min !== undefined ) ? min : new Vector2( + Infinity, + Infinity );\n\t\tthis.max = ( max !== undefined ) ? max : new Vector2( - Infinity, - Infinity );\n\n\t}\n\n\tObject.assign( Box2.prototype, {\n\n\t\tset: function ( min, max ) {\n\n\t\t\tthis.min.copy( min );\n\t\t\tthis.max.copy( max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromPoints: function ( points ) {\n\n\t\t\tthis.makeEmpty();\n\n\t\t\tfor ( var i = 0, il = points.length; i < il; i ++ ) {\n\n\t\t\t\tthis.expandByPoint( points[ i ] );\n\n\t\t\t}\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tsetFromCenterAndSize: function () {\n\n\t\t\tvar v1 = new Vector2();\n\n\t\t\treturn function setFromCenterAndSize( center, size ) {\n\n\t\t\t\tvar halfSize = v1.copy( size ).multiplyScalar( 0.5 );\n\t\t\t\tthis.min.copy( center ).sub( halfSize );\n\t\t\t\tthis.max.copy( center ).add( halfSize );\n\n\t\t\t\treturn this;\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tclone: function () {\n\n\t\t\treturn new this.constructor().copy( this );\n\n\t\t},\n\n\t\tcopy: function ( box ) {\n\n\t\t\tthis.min.copy( box.min );\n\t\t\tthis.max.copy( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tmakeEmpty: function () {\n\n\t\t\tthis.min.x = this.min.y = + Infinity;\n\t\t\tthis.max.x = this.max.y = - Infinity;\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tisEmpty: function () {\n\n\t\t\t// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes\n\n\t\t\treturn ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );\n\n\t\t},\n\n\t\tgetCenter: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .getCenter() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );\n\n\t\t},\n\n\t\tgetSize: function ( target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .getSize() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );\n\n\t\t},\n\n\t\texpandByPoint: function ( point ) {\n\n\t\t\tthis.min.min( point );\n\t\t\tthis.max.max( point );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByVector: function ( vector ) {\n\n\t\t\tthis.min.sub( vector );\n\t\t\tthis.max.add( vector );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\texpandByScalar: function ( scalar ) {\n\n\t\t\tthis.min.addScalar( - scalar );\n\t\t\tthis.max.addScalar( scalar );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tcontainsPoint: function ( point ) {\n\n\t\t\treturn point.x < this.min.x || point.x > this.max.x ||\n\t\t\t\tpoint.y < this.min.y || point.y > this.max.y ? false : true;\n\n\t\t},\n\n\t\tcontainsBox: function ( box ) {\n\n\t\t\treturn this.min.x <= box.min.x && box.max.x <= this.max.x &&\n\t\t\t\tthis.min.y <= box.min.y && box.max.y <= this.max.y;\n\n\t\t},\n\n\t\tgetParameter: function ( point, target ) {\n\n\t\t\t// This can potentially have a divide by zero if the box\n\t\t\t// has a size dimension of 0.\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .getParameter() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn target.set(\n\t\t\t\t( point.x - this.min.x ) / ( this.max.x - this.min.x ),\n\t\t\t\t( point.y - this.min.y ) / ( this.max.y - this.min.y )\n\t\t\t);\n\n\t\t},\n\n\t\tintersectsBox: function ( box ) {\n\n\t\t\t// using 4 splitting planes to rule out intersections\n\n\t\t\treturn box.max.x < this.min.x || box.min.x > this.max.x ||\n\t\t\t\tbox.max.y < this.min.y || box.min.y > this.max.y ? false : true;\n\n\t\t},\n\n\t\tclampPoint: function ( point, target ) {\n\n\t\t\tif ( target === undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.Box2: .clampPoint() target is now required' );\n\t\t\t\ttarget = new Vector2();\n\n\t\t\t}\n\n\t\t\treturn target.copy( point ).clamp( this.min, this.max );\n\n\t\t},\n\n\t\tdistanceToPoint: function () {\n\n\t\t\tvar v1 = new Vector2();\n\n\t\t\treturn function distanceToPoint( point ) {\n\n\t\t\t\tvar clampedPoint = v1.copy( point ).clamp( this.min, this.max );\n\t\t\t\treturn clampedPoint.sub( point ).length();\n\n\t\t\t};\n\n\t\t}(),\n\n\t\tintersect: function ( box ) {\n\n\t\t\tthis.min.max( box.min );\n\t\t\tthis.max.min( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tunion: function ( box ) {\n\n\t\t\tthis.min.min( box.min );\n\t\t\tthis.max.max( box.max );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\ttranslate: function ( offset ) {\n\n\t\t\tthis.min.add( offset );\n\t\t\tthis.max.add( offset );\n\n\t\t\treturn this;\n\n\t\t},\n\n\t\tequals: function ( box ) {\n\n\t\t\treturn box.min.equals( this.min ) && box.max.equals( this.max );\n\n\t\t}\n\n\t} );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t */\n\n\tfunction ImmediateRenderObject( material ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.material = material;\n\t\tthis.render = function ( /* renderCallback */ ) {};\n\n\t}\n\n\tImmediateRenderObject.prototype = Object.create( Object3D.prototype );\n\tImmediateRenderObject.prototype.constructor = ImmediateRenderObject;\n\n\tImmediateRenderObject.prototype.isImmediateRenderObject = true;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction VertexNormalsHelper( object, size, hex, linewidth ) {\n\n\t\tthis.object = object;\n\n\t\tthis.size = ( size !== undefined ) ? size : 1;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xff0000;\n\n\t\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t\t//\n\n\t\tvar nNormals = 0;\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tnNormals = objGeometry.faces.length * 3;\n\n\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\tnNormals = objGeometry.attributes.normal.count;\n\n\t\t}\n\n\t\t//\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\t\tgeometry.addAttribute( 'position', positions );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tVertexNormalsHelper.prototype = Object.create( LineSegments.prototype );\n\tVertexNormalsHelper.prototype.constructor = VertexNormalsHelper;\n\n\tVertexNormalsHelper.prototype.update = ( function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\t\tvar normalMatrix = new Matrix3();\n\n\t\treturn function update() {\n\n\t\t\tvar keys = [ 'a', 'b', 'c' ];\n\n\t\t\tthis.object.updateMatrixWorld( true );\n\n\t\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\t\tvar position = this.geometry.attributes.position;\n\n\t\t\t//\n\n\t\t\tvar objGeometry = this.object.geometry;\n\n\t\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\t\tvar faces = objGeometry.faces;\n\n\t\t\t\tvar idx = 0;\n\n\t\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\t\tfor ( var j = 0, jl = face.vertexNormals.length; j < jl; j ++ ) {\n\n\t\t\t\t\t\tvar vertex = vertices[ face[ keys[ j ] ] ];\n\n\t\t\t\t\t\tvar normal = face.vertexNormals[ j ];\n\n\t\t\t\t\t\tv1.copy( vertex ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else if ( objGeometry && objGeometry.isBufferGeometry ) {\n\n\t\t\t\tvar objPos = objGeometry.attributes.position;\n\n\t\t\t\tvar objNorm = objGeometry.attributes.normal;\n\n\t\t\t\tvar idx = 0;\n\n\t\t\t\t// for simplicity, ignore index and drawcalls, and render every normal\n\n\t\t\t\tfor ( var j = 0, jl = objPos.count; j < jl; j ++ ) {\n\n\t\t\t\t\tv1.set( objPos.getX( j ), objPos.getY( j ), objPos.getZ( j ) ).applyMatrix4( matrixWorld );\n\n\t\t\t\t\tv2.set( objNorm.getX( j ), objNorm.getY( j ), objNorm.getZ( j ) );\n\n\t\t\t\t\tv2.applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\t\tidx = idx + 1;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t};\n\n\t}() );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction SpotLightHelper( light, color ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar positions = [\n\t\t\t0, 0, 0, \t0, 0, 1,\n\t\t\t0, 0, 0, \t1, 0, 1,\n\t\t\t0, 0, 0,\t- 1, 0, 1,\n\t\t\t0, 0, 0, \t0, 1, 1,\n\t\t\t0, 0, 0, \t0, - 1, 1\n\t\t];\n\n\t\tfor ( var i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {\n\n\t\t\tvar p1 = ( i / l ) * Math.PI * 2;\n\t\t\tvar p2 = ( j / l ) * Math.PI * 2;\n\n\t\t\tpositions.push(\n\t\t\t\tMath.cos( p1 ), Math.sin( p1 ), 1,\n\t\t\t\tMath.cos( p2 ), Math.sin( p2 ), 1\n\t\t\t);\n\n\t\t}\n\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { fog: false } );\n\n\t\tthis.cone = new LineSegments( geometry, material );\n\t\tthis.add( this.cone );\n\n\t\tthis.update();\n\n\t}\n\n\tSpotLightHelper.prototype = Object.create( Object3D.prototype );\n\tSpotLightHelper.prototype.constructor = SpotLightHelper;\n\n\tSpotLightHelper.prototype.dispose = function () {\n\n\t\tthis.cone.geometry.dispose();\n\t\tthis.cone.material.dispose();\n\n\t};\n\n\tSpotLightHelper.prototype.update = function () {\n\n\t\tvar vector = new Vector3();\n\t\tvar vector2 = new Vector3();\n\n\t\treturn function update() {\n\n\t\t\tthis.light.updateMatrixWorld();\n\n\t\t\tvar coneLength = this.light.distance ? this.light.distance : 1000;\n\t\t\tvar coneWidth = coneLength * Math.tan( this.light.angle );\n\n\t\t\tthis.cone.scale.set( coneWidth, coneWidth, coneLength );\n\n\t\t\tvector.setFromMatrixPosition( this.light.matrixWorld );\n\t\t\tvector2.setFromMatrixPosition( this.light.target.matrixWorld );\n\n\t\t\tthis.cone.lookAt( vector2.sub( vector ) );\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.cone.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tthis.cone.material.color.copy( this.light.color );\n\n\t\t\t}\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author Sean Griffin / http://twitter.com/sgrif\n\t * @author Michael Guerrero / http://realitymeltdown.com\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author ikerr / http://verold.com\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction getBoneList( object ) {\n\n\t\tvar boneList = [];\n\n\t\tif ( object && object.isBone ) {\n\n\t\t\tboneList.push( object );\n\n\t\t}\n\n\t\tfor ( var i = 0; i < object.children.length; i ++ ) {\n\n\t\t\tboneList.push.apply( boneList, getBoneList( object.children[ i ] ) );\n\n\t\t}\n\n\t\treturn boneList;\n\n\t}\n\n\tfunction SkeletonHelper( object ) {\n\n\t\tvar bones = getBoneList( object );\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar vertices = [];\n\t\tvar colors = [];\n\n\t\tvar color1 = new Color( 0, 0, 1 );\n\t\tvar color2 = new Color( 0, 1, 0 );\n\n\t\tfor ( var i = 0; i < bones.length; i ++ ) {\n\n\t\t\tvar bone = bones[ i ];\n\n\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tvertices.push( 0, 0, 0 );\n\t\t\t\tcolors.push( color1.r, color1.g, color1.b );\n\t\t\t\tcolors.push( color2.r, color2.g, color2.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors, depthTest: false, depthWrite: false, transparent: true } );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t\tthis.root = object;\n\t\tthis.bones = bones;\n\n\t\tthis.matrix = object.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t}\n\n\tSkeletonHelper.prototype = Object.create( LineSegments.prototype );\n\tSkeletonHelper.prototype.constructor = SkeletonHelper;\n\n\tSkeletonHelper.prototype.updateMatrixWorld = function () {\n\n\t\tvar vector = new Vector3();\n\n\t\tvar boneMatrix = new Matrix4();\n\t\tvar matrixWorldInv = new Matrix4();\n\n\t\treturn function updateMatrixWorld( force ) {\n\n\t\t\tvar bones = this.bones;\n\n\t\t\tvar geometry = this.geometry;\n\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\tmatrixWorldInv.getInverse( this.root.matrixWorld );\n\n\t\t\tfor ( var i = 0, j = 0; i < bones.length; i ++ ) {\n\n\t\t\t\tvar bone = bones[ i ];\n\n\t\t\t\tif ( bone.parent && bone.parent.isBone ) {\n\n\t\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.matrixWorld );\n\t\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\t\tposition.setXYZ( j, vector.x, vector.y, vector.z );\n\n\t\t\t\t\tboneMatrix.multiplyMatrices( matrixWorldInv, bone.parent.matrixWorld );\n\t\t\t\t\tvector.setFromMatrixPosition( boneMatrix );\n\t\t\t\t\tposition.setXYZ( j + 1, vector.x, vector.y, vector.z );\n\n\t\t\t\t\tj += 2;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction PointLightHelper( light, sphereSize, color ) {\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.color = color;\n\n\t\tvar geometry = new SphereBufferGeometry( sphereSize, 4, 2 );\n\t\tvar material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\n\t\tMesh.call( this, geometry, material );\n\n\t\tthis.matrix = this.light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\n\t\t/*\n\t\tvar distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );\n\t\tvar distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );\n\n\t\tthis.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );\n\t\tthis.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );\n\n\t\tvar d = light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\n\t\tthis.add( this.lightDistance );\n\t\t*/\n\n\t}\n\n\tPointLightHelper.prototype = Object.create( Mesh.prototype );\n\tPointLightHelper.prototype.constructor = PointLightHelper;\n\n\tPointLightHelper.prototype.dispose = function () {\n\n\t\tthis.geometry.dispose();\n\t\tthis.material.dispose();\n\n\t};\n\n\tPointLightHelper.prototype.update = function () {\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.material.color.copy( this.light.color );\n\n\t\t}\n\n\t\t/*\n\t\tvar d = this.light.distance;\n\n\t\tif ( d === 0.0 ) {\n\n\t\t\tthis.lightDistance.visible = false;\n\n\t\t} else {\n\n\t\t\tthis.lightDistance.visible = true;\n\t\t\tthis.lightDistance.scale.set( d, d, d );\n\n\t\t}\n\t\t*/\n\n\t};\n\n\t/**\n\t * @author abelnation / http://github.com/abelnation\n\t * @author Mugen87 / http://github.com/Mugen87\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction RectAreaLightHelper( light, color ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tvar material = new LineBasicMaterial( { fog: false } );\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tgeometry.addAttribute( 'position', new BufferAttribute( new Float32Array( 5 * 3 ), 3 ) );\n\n\t\tthis.line = new Line( geometry, material );\n\t\tthis.add( this.line );\n\n\n\t\tthis.update();\n\n\t}\n\n\tRectAreaLightHelper.prototype = Object.create( Object3D.prototype );\n\tRectAreaLightHelper.prototype.constructor = RectAreaLightHelper;\n\n\tRectAreaLightHelper.prototype.dispose = function () {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t};\n\n\tRectAreaLightHelper.prototype.update = function () {\n\n\t\t// calculate new dimensions of the helper\n\n\t\tvar hx = this.light.width * 0.5;\n\t\tvar hy = this.light.height * 0.5;\n\n\t\tvar position = this.line.geometry.attributes.position;\n\t\tvar array = position.array;\n\n\t\t// update vertices\n\n\t\tarray[ 0 ] = hx; array[ 1 ] = - hy; array[ 2 ] = 0;\n\t\tarray[ 3 ] = hx; array[ 4 ] = hy; array[ 5 ] = 0;\n\t\tarray[ 6 ] = - hx; array[ 7 ] = hy; array[ 8 ] = 0;\n\t\tarray[ 9 ] = - hx; array[ 10 ] = - hy; array[ 11 ] = 0;\n\t\tarray[ 12 ] = hx; array[ 13 ] = - hy; array[ 14 ] = 0;\n\n\t\tposition.needsUpdate = true;\n\n\t\tif ( this.color !== undefined ) {\n\n\t\t\tthis.line.material.color.set( this.color );\n\n\t\t} else {\n\n\t\t\tthis.line.material.color.copy( this.light.color );\n\n\t\t}\n\n\t};\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t */\n\n\tfunction HemisphereLightHelper( light, size, color ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tvar geometry = new OctahedronBufferGeometry( size );\n\t\tgeometry.rotateY( Math.PI * 0.5 );\n\n\t\tthis.material = new MeshBasicMaterial( { wireframe: true, fog: false } );\n\t\tif ( this.color === undefined ) this.material.vertexColors = VertexColors;\n\n\t\tvar position = geometry.getAttribute( 'position' );\n\t\tvar colors = new Float32Array( position.count * 3 );\n\n\t\tgeometry.addAttribute( 'color', new BufferAttribute( colors, 3 ) );\n\n\t\tthis.add( new Mesh( geometry, this.material ) );\n\n\t\tthis.update();\n\n\t}\n\n\tHemisphereLightHelper.prototype = Object.create( Object3D.prototype );\n\tHemisphereLightHelper.prototype.constructor = HemisphereLightHelper;\n\n\tHemisphereLightHelper.prototype.dispose = function () {\n\n\t\tthis.children[ 0 ].geometry.dispose();\n\t\tthis.children[ 0 ].material.dispose();\n\n\t};\n\n\tHemisphereLightHelper.prototype.update = function () {\n\n\t\tvar vector = new Vector3();\n\n\t\tvar color1 = new Color();\n\t\tvar color2 = new Color();\n\n\t\treturn function update() {\n\n\t\t\tvar mesh = this.children[ 0 ];\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tvar colors = mesh.geometry.getAttribute( 'color' );\n\n\t\t\t\tcolor1.copy( this.light.color );\n\t\t\t\tcolor2.copy( this.light.groundColor );\n\n\t\t\t\tfor ( var i = 0, l = colors.count; i < l; i ++ ) {\n\n\t\t\t\t\tvar color = ( i < ( l / 2 ) ) ? color1 : color2;\n\n\t\t\t\t\tcolors.setXYZ( i, color.r, color.g, color.b );\n\n\t\t\t\t}\n\n\t\t\t\tcolors.needsUpdate = true;\n\n\t\t\t}\n\n\t\t\tmesh.lookAt( vector.setFromMatrixPosition( this.light.matrixWorld ).negate() );\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction GridHelper( size, divisions, color1, color2 ) {\n\n\t\tsize = size || 10;\n\t\tdivisions = divisions || 10;\n\t\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\t\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\t\tvar center = divisions / 2;\n\t\tvar step = size / divisions;\n\t\tvar halfSize = size / 2;\n\n\t\tvar vertices = [], colors = [];\n\n\t\tfor ( var i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {\n\n\t\t\tvertices.push( - halfSize, 0, k, halfSize, 0, k );\n\t\t\tvertices.push( k, 0, - halfSize, k, 0, halfSize );\n\n\t\t\tvar color = i === center ? color1 : color2;\n\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\t\t\tcolor.toArray( colors, j ); j += 3;\n\n\t\t}\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t}\n\n\tGridHelper.prototype = Object.create( LineSegments.prototype );\n\tGridHelper.prototype.constructor = GridHelper;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / http://github.com/Mugen87\n\t * @author Hectate / http://www.github.com/Hectate\n\t */\n\n\tfunction PolarGridHelper( radius, radials, circles, divisions, color1, color2 ) {\n\n\t\tradius = radius || 10;\n\t\tradials = radials || 16;\n\t\tcircles = circles || 8;\n\t\tdivisions = divisions || 64;\n\t\tcolor1 = new Color( color1 !== undefined ? color1 : 0x444444 );\n\t\tcolor2 = new Color( color2 !== undefined ? color2 : 0x888888 );\n\n\t\tvar vertices = [];\n\t\tvar colors = [];\n\n\t\tvar x, z;\n\t\tvar v, i, j, r, color;\n\n\t\t// create the radials\n\n\t\tfor ( i = 0; i <= radials; i ++ ) {\n\n\t\t\tv = ( i / radials ) * ( Math.PI * 2 );\n\n\t\t\tx = Math.sin( v ) * radius;\n\t\t\tz = Math.cos( v ) * radius;\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tvertices.push( x, 0, z );\n\n\t\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\t\tcolors.push( color.r, color.g, color.b );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t}\n\n\t\t// create the circles\n\n\t\tfor ( i = 0; i <= circles; i ++ ) {\n\n\t\t\tcolor = ( i & 1 ) ? color1 : color2;\n\n\t\t\tr = radius - ( radius / circles * i );\n\n\t\t\tfor ( j = 0; j < divisions; j ++ ) {\n\n\t\t\t\t// first vertex\n\n\t\t\t\tv = ( j / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t\t// second vertex\n\n\t\t\t\tv = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );\n\n\t\t\t\tx = Math.sin( v ) * r;\n\t\t\t\tz = Math.cos( v ) * r;\n\n\t\t\t\tvertices.push( x, 0, z );\n\t\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\t}\n\n\t\t}\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t}\n\n\tPolarGridHelper.prototype = Object.create( LineSegments.prototype );\n\tPolarGridHelper.prototype.constructor = PolarGridHelper;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction FaceNormalsHelper( object, size, hex, linewidth ) {\n\n\t\t// FaceNormalsHelper only supports THREE.Geometry\n\n\t\tthis.object = object;\n\n\t\tthis.size = ( size !== undefined ) ? size : 1;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\t\tvar width = ( linewidth !== undefined ) ? linewidth : 1;\n\n\t\t//\n\n\t\tvar nNormals = 0;\n\n\t\tvar objGeometry = this.object.geometry;\n\n\t\tif ( objGeometry && objGeometry.isGeometry ) {\n\n\t\t\tnNormals = objGeometry.faces.length;\n\n\t\t} else {\n\n\t\t\tconsole.warn( 'THREE.FaceNormalsHelper: only THREE.Geometry is supported. Use THREE.VertexNormalsHelper, instead.' );\n\n\t\t}\n\n\t\t//\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tvar positions = new Float32BufferAttribute( nNormals * 2 * 3, 3 );\n\n\t\tgeometry.addAttribute( 'position', positions );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color, linewidth: width } ) );\n\n\t\t//\n\n\t\tthis.matrixAutoUpdate = false;\n\t\tthis.update();\n\n\t}\n\n\tFaceNormalsHelper.prototype = Object.create( LineSegments.prototype );\n\tFaceNormalsHelper.prototype.constructor = FaceNormalsHelper;\n\n\tFaceNormalsHelper.prototype.update = ( function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\t\tvar normalMatrix = new Matrix3();\n\n\t\treturn function update() {\n\n\t\t\tthis.object.updateMatrixWorld( true );\n\n\t\t\tnormalMatrix.getNormalMatrix( this.object.matrixWorld );\n\n\t\t\tvar matrixWorld = this.object.matrixWorld;\n\n\t\t\tvar position = this.geometry.attributes.position;\n\n\t\t\t//\n\n\t\t\tvar objGeometry = this.object.geometry;\n\n\t\t\tvar vertices = objGeometry.vertices;\n\n\t\t\tvar faces = objGeometry.faces;\n\n\t\t\tvar idx = 0;\n\n\t\t\tfor ( var i = 0, l = faces.length; i < l; i ++ ) {\n\n\t\t\t\tvar face = faces[ i ];\n\n\t\t\t\tvar normal = face.normal;\n\n\t\t\t\tv1.copy( vertices[ face.a ] )\n\t\t\t\t\t.add( vertices[ face.b ] )\n\t\t\t\t\t.add( vertices[ face.c ] )\n\t\t\t\t\t.divideScalar( 3 )\n\t\t\t\t\t.applyMatrix4( matrixWorld );\n\n\t\t\t\tv2.copy( normal ).applyMatrix3( normalMatrix ).normalize().multiplyScalar( this.size ).add( v1 );\n\n\t\t\t\tposition.setXYZ( idx, v1.x, v1.y, v1.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t\tposition.setXYZ( idx, v2.x, v2.y, v2.z );\n\n\t\t\t\tidx = idx + 1;\n\n\t\t\t}\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t};\n\n\t}() );\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction DirectionalLightHelper( light, size, color ) {\n\n\t\tObject3D.call( this );\n\n\t\tthis.light = light;\n\t\tthis.light.updateMatrixWorld();\n\n\t\tthis.matrix = light.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.color = color;\n\n\t\tif ( size === undefined ) size = 1;\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [\n\t\t\t- size, size, 0,\n\t\t\tsize, size, 0,\n\t\t\tsize, - size, 0,\n\t\t\t- size, - size, 0,\n\t\t\t- size, size, 0\n\t\t], 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { fog: false } );\n\n\t\tthis.lightPlane = new Line( geometry, material );\n\t\tthis.add( this.lightPlane );\n\n\t\tgeometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );\n\n\t\tthis.targetLine = new Line( geometry, material );\n\t\tthis.add( this.targetLine );\n\n\t\tthis.update();\n\n\t}\n\n\tDirectionalLightHelper.prototype = Object.create( Object3D.prototype );\n\tDirectionalLightHelper.prototype.constructor = DirectionalLightHelper;\n\n\tDirectionalLightHelper.prototype.dispose = function () {\n\n\t\tthis.lightPlane.geometry.dispose();\n\t\tthis.lightPlane.material.dispose();\n\t\tthis.targetLine.geometry.dispose();\n\t\tthis.targetLine.material.dispose();\n\n\t};\n\n\tDirectionalLightHelper.prototype.update = function () {\n\n\t\tvar v1 = new Vector3();\n\t\tvar v2 = new Vector3();\n\t\tvar v3 = new Vector3();\n\n\t\treturn function update() {\n\n\t\t\tv1.setFromMatrixPosition( this.light.matrixWorld );\n\t\t\tv2.setFromMatrixPosition( this.light.target.matrixWorld );\n\t\t\tv3.subVectors( v2, v1 );\n\n\t\t\tthis.lightPlane.lookAt( v3 );\n\n\t\t\tif ( this.color !== undefined ) {\n\n\t\t\t\tthis.lightPlane.material.color.set( this.color );\n\t\t\t\tthis.targetLine.material.color.set( this.color );\n\n\t\t\t} else {\n\n\t\t\t\tthis.lightPlane.material.color.copy( this.light.color );\n\t\t\t\tthis.targetLine.material.color.copy( this.light.color );\n\n\t\t\t}\n\n\t\t\tthis.targetLine.lookAt( v3 );\n\t\t\tthis.targetLine.scale.z = v3.length();\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author alteredq / http://alteredqualia.com/\n\t * @author Mugen87 / https://github.com/Mugen87\n\t *\n\t *\t- shows frustum, line of sight and up of the camera\n\t *\t- suitable for fast updates\n\t * \t- based on frustum visualization in lightgl.js shadowmap example\n\t *\t\thttp://evanw.github.com/lightgl.js/tests/shadowmap.html\n\t */\n\n\tfunction CameraHelper( camera ) {\n\n\t\tvar geometry = new BufferGeometry();\n\t\tvar material = new LineBasicMaterial( { color: 0xffffff, vertexColors: FaceColors } );\n\n\t\tvar vertices = [];\n\t\tvar colors = [];\n\n\t\tvar pointMap = {};\n\n\t\t// colors\n\n\t\tvar colorFrustum = new Color( 0xffaa00 );\n\t\tvar colorCone = new Color( 0xff0000 );\n\t\tvar colorUp = new Color( 0x00aaff );\n\t\tvar colorTarget = new Color( 0xffffff );\n\t\tvar colorCross = new Color( 0x333333 );\n\n\t\t// near\n\n\t\taddLine( 'n1', 'n2', colorFrustum );\n\t\taddLine( 'n2', 'n4', colorFrustum );\n\t\taddLine( 'n4', 'n3', colorFrustum );\n\t\taddLine( 'n3', 'n1', colorFrustum );\n\n\t\t// far\n\n\t\taddLine( 'f1', 'f2', colorFrustum );\n\t\taddLine( 'f2', 'f4', colorFrustum );\n\t\taddLine( 'f4', 'f3', colorFrustum );\n\t\taddLine( 'f3', 'f1', colorFrustum );\n\n\t\t// sides\n\n\t\taddLine( 'n1', 'f1', colorFrustum );\n\t\taddLine( 'n2', 'f2', colorFrustum );\n\t\taddLine( 'n3', 'f3', colorFrustum );\n\t\taddLine( 'n4', 'f4', colorFrustum );\n\n\t\t// cone\n\n\t\taddLine( 'p', 'n1', colorCone );\n\t\taddLine( 'p', 'n2', colorCone );\n\t\taddLine( 'p', 'n3', colorCone );\n\t\taddLine( 'p', 'n4', colorCone );\n\n\t\t// up\n\n\t\taddLine( 'u1', 'u2', colorUp );\n\t\taddLine( 'u2', 'u3', colorUp );\n\t\taddLine( 'u3', 'u1', colorUp );\n\n\t\t// target\n\n\t\taddLine( 'c', 't', colorTarget );\n\t\taddLine( 'p', 'c', colorCross );\n\n\t\t// cross\n\n\t\taddLine( 'cn1', 'cn2', colorCross );\n\t\taddLine( 'cn3', 'cn4', colorCross );\n\n\t\taddLine( 'cf1', 'cf2', colorCross );\n\t\taddLine( 'cf3', 'cf4', colorCross );\n\n\t\tfunction addLine( a, b, color ) {\n\n\t\t\taddPoint( a, color );\n\t\t\taddPoint( b, color );\n\n\t\t}\n\n\t\tfunction addPoint( id, color ) {\n\n\t\t\tvertices.push( 0, 0, 0 );\n\t\t\tcolors.push( color.r, color.g, color.b );\n\n\t\t\tif ( pointMap[ id ] === undefined ) {\n\n\t\t\t\tpointMap[ id ] = [];\n\n\t\t\t}\n\n\t\t\tpointMap[ id ].push( ( vertices.length / 3 ) - 1 );\n\n\t\t}\n\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t\tthis.camera = camera;\n\t\tif ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();\n\n\t\tthis.matrix = camera.matrixWorld;\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.pointMap = pointMap;\n\n\t\tthis.update();\n\n\t}\n\n\tCameraHelper.prototype = Object.create( LineSegments.prototype );\n\tCameraHelper.prototype.constructor = CameraHelper;\n\n\tCameraHelper.prototype.update = function () {\n\n\t\tvar geometry, pointMap;\n\n\t\tvar vector = new Vector3();\n\t\tvar camera = new Camera();\n\n\t\tfunction setPoint( point, x, y, z ) {\n\n\t\t\tvector.set( x, y, z ).unproject( camera );\n\n\t\t\tvar points = pointMap[ point ];\n\n\t\t\tif ( points !== undefined ) {\n\n\t\t\t\tvar position = geometry.getAttribute( 'position' );\n\n\t\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\t\tposition.setXYZ( points[ i ], vector.x, vector.y, vector.z );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn function update() {\n\n\t\t\tgeometry = this.geometry;\n\t\t\tpointMap = this.pointMap;\n\n\t\t\tvar w = 1, h = 1;\n\n\t\t\t// we need just camera projection matrix\n\t\t\t// world matrix must be identity\n\n\t\t\tcamera.projectionMatrix.copy( this.camera.projectionMatrix );\n\n\t\t\t// center / target\n\n\t\t\tsetPoint( 'c', 0, 0, - 1 );\n\t\t\tsetPoint( 't', 0, 0, 1 );\n\n\t\t\t// near\n\n\t\t\tsetPoint( 'n1', - w, - h, - 1 );\n\t\t\tsetPoint( 'n2', w, - h, - 1 );\n\t\t\tsetPoint( 'n3', - w, h, - 1 );\n\t\t\tsetPoint( 'n4', w, h, - 1 );\n\n\t\t\t// far\n\n\t\t\tsetPoint( 'f1', - w, - h, 1 );\n\t\t\tsetPoint( 'f2', w, - h, 1 );\n\t\t\tsetPoint( 'f3', - w, h, 1 );\n\t\t\tsetPoint( 'f4', w, h, 1 );\n\n\t\t\t// up\n\n\t\t\tsetPoint( 'u1', w * 0.7, h * 1.1, - 1 );\n\t\t\tsetPoint( 'u2', - w * 0.7, h * 1.1, - 1 );\n\t\t\tsetPoint( 'u3', 0, h * 2, - 1 );\n\n\t\t\t// cross\n\n\t\t\tsetPoint( 'cf1', - w, 0, 1 );\n\t\t\tsetPoint( 'cf2', w, 0, 1 );\n\t\t\tsetPoint( 'cf3', 0, - h, 1 );\n\t\t\tsetPoint( 'cf4', 0, h, 1 );\n\n\t\t\tsetPoint( 'cn1', - w, 0, - 1 );\n\t\t\tsetPoint( 'cn2', w, 0, - 1 );\n\t\t\tsetPoint( 'cn3', 0, - h, - 1 );\n\t\t\tsetPoint( 'cn4', 0, h, - 1 );\n\n\t\t\tgeometry.getAttribute( 'position' ).needsUpdate = true;\n\n\t\t};\n\n\t}();\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t * @author Mugen87 / http://github.com/Mugen87\n\t */\n\n\tfunction BoxHelper( object, color ) {\n\n\t\tthis.object = object;\n\n\t\tif ( color === undefined ) color = 0xffff00;\n\n\t\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\t\tvar positions = new Float32Array( 8 * 3 );\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\t\tgeometry.addAttribute( 'position', new BufferAttribute( positions, 3 ) );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t\tthis.matrixAutoUpdate = false;\n\n\t\tthis.update();\n\n\t}\n\n\tBoxHelper.prototype = Object.create( LineSegments.prototype );\n\tBoxHelper.prototype.constructor = BoxHelper;\n\n\tBoxHelper.prototype.update = ( function () {\n\n\t\tvar box = new Box3();\n\n\t\treturn function update( object ) {\n\n\t\t\tif ( object !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );\n\n\t\t\t}\n\n\t\t\tif ( this.object !== undefined ) {\n\n\t\t\t\tbox.setFromObject( this.object );\n\n\t\t\t}\n\n\t\t\tif ( box.isEmpty() ) return;\n\n\t\t\tvar min = box.min;\n\t\t\tvar max = box.max;\n\n\t\t\t/*\n\t\t\t 5____4\n\t\t\t1/___0/|\n\t\t\t| 6__|_7\n\t\t\t2/___3/\n\n\t\t\t0: max.x, max.y, max.z\n\t\t\t1: min.x, max.y, max.z\n\t\t\t2: min.x, min.y, max.z\n\t\t\t3: max.x, min.y, max.z\n\t\t\t4: max.x, max.y, min.z\n\t\t\t5: min.x, max.y, min.z\n\t\t\t6: min.x, min.y, min.z\n\t\t\t7: max.x, min.y, min.z\n\t\t\t*/\n\n\t\t\tvar position = this.geometry.attributes.position;\n\t\t\tvar array = position.array;\n\n\t\t\tarray[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;\n\t\t\tarray[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;\n\t\t\tarray[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;\n\t\t\tarray[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;\n\t\t\tarray[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;\n\t\t\tarray[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;\n\t\t\tarray[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;\n\t\t\tarray[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;\n\n\t\t\tposition.needsUpdate = true;\n\n\t\t\tthis.geometry.computeBoundingSphere();\n\n\t\t};\n\n\t} )();\n\n\tBoxHelper.prototype.setFromObject = function ( object ) {\n\n\t\tthis.object = object;\n\t\tthis.update();\n\n\t\treturn this;\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction Box3Helper( box, hex ) {\n\n\t\tthis.type = 'Box3Helper';\n\n\t\tthis.box = box;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\t\tvar indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );\n\n\t\tvar positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];\n\n\t\tvar geometry = new BufferGeometry();\n\n\t\tgeometry.setIndex( new BufferAttribute( indices, 1 ) );\n\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\n\t\tLineSegments.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t\tthis.geometry.computeBoundingSphere();\n\n\t}\n\n\tBox3Helper.prototype = Object.create( LineSegments.prototype );\n\tBox3Helper.prototype.constructor = Box3Helper;\n\n\tBox3Helper.prototype.updateMatrixWorld = function ( force ) {\n\n\t\tvar box = this.box;\n\n\t\tif ( box.isEmpty() ) return;\n\n\t\tbox.getCenter( this.position );\n\n\t\tbox.getSize( this.scale );\n\n\t\tthis.scale.multiplyScalar( 0.5 );\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t */\n\n\tfunction PlaneHelper( plane, size, hex ) {\n\n\t\tthis.type = 'PlaneHelper';\n\n\t\tthis.plane = plane;\n\n\t\tthis.size = ( size === undefined ) ? 1 : size;\n\n\t\tvar color = ( hex !== undefined ) ? hex : 0xffff00;\n\n\t\tvar positions = [ 1, - 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0 ];\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );\n\t\tgeometry.computeBoundingSphere();\n\n\t\tLine.call( this, geometry, new LineBasicMaterial( { color: color } ) );\n\n\t\t//\n\n\t\tvar positions2 = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, 1, 1, - 1, - 1, 1, 1, - 1, 1 ];\n\n\t\tvar geometry2 = new BufferGeometry();\n\t\tgeometry2.addAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );\n\t\tgeometry2.computeBoundingSphere();\n\n\t\tthis.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false } ) ) );\n\n\t}\n\n\tPlaneHelper.prototype = Object.create( Line.prototype );\n\tPlaneHelper.prototype.constructor = PlaneHelper;\n\n\tPlaneHelper.prototype.updateMatrixWorld = function ( force ) {\n\n\t\tvar scale = - this.plane.constant;\n\n\t\tif ( Math.abs( scale ) < 1e-8 ) scale = 1e-8; // sign does not matter\n\n\t\tthis.scale.set( 0.5 * this.size, 0.5 * this.size, scale );\n\n\t\tthis.children[ 0 ].material.side = ( scale < 0 ) ? BackSide : FrontSide; // renderer flips side when determinant < 0; flipping not wanted here\n\n\t\tthis.lookAt( this.plane.normal );\n\n\t\tObject3D.prototype.updateMatrixWorld.call( this, force );\n\n\t};\n\n\t/**\n\t * @author WestLangley / http://github.com/WestLangley\n\t * @author zz85 / http://github.com/zz85\n\t * @author bhouston / http://clara.io\n\t *\n\t * Creates an arrow for visualizing directions\n\t *\n\t * Parameters:\n\t * dir - Vector3\n\t * origin - Vector3\n\t * length - Number\n\t * color - color in hex value\n\t * headLength - Number\n\t * headWidth - Number\n\t */\n\n\tvar lineGeometry, coneGeometry;\n\n\tfunction ArrowHelper( dir, origin, length, color, headLength, headWidth ) {\n\n\t\t// dir is assumed to be normalized\n\n\t\tObject3D.call( this );\n\n\t\tif ( color === undefined ) color = 0xffff00;\n\t\tif ( length === undefined ) length = 1;\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tif ( lineGeometry === undefined ) {\n\n\t\t\tlineGeometry = new BufferGeometry();\n\t\t\tlineGeometry.addAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );\n\n\t\t\tconeGeometry = new CylinderBufferGeometry( 0, 0.5, 1, 5, 1 );\n\t\t\tconeGeometry.translate( 0, - 0.5, 0 );\n\n\t\t}\n\n\t\tthis.position.copy( origin );\n\n\t\tthis.line = new Line( lineGeometry, new LineBasicMaterial( { color: color } ) );\n\t\tthis.line.matrixAutoUpdate = false;\n\t\tthis.add( this.line );\n\n\t\tthis.cone = new Mesh( coneGeometry, new MeshBasicMaterial( { color: color } ) );\n\t\tthis.cone.matrixAutoUpdate = false;\n\t\tthis.add( this.cone );\n\n\t\tthis.setDirection( dir );\n\t\tthis.setLength( length, headLength, headWidth );\n\n\t}\n\n\tArrowHelper.prototype = Object.create( Object3D.prototype );\n\tArrowHelper.prototype.constructor = ArrowHelper;\n\n\tArrowHelper.prototype.setDirection = ( function () {\n\n\t\tvar axis = new Vector3();\n\t\tvar radians;\n\n\t\treturn function setDirection( dir ) {\n\n\t\t\t// dir is assumed to be normalized\n\n\t\t\tif ( dir.y > 0.99999 ) {\n\n\t\t\t\tthis.quaternion.set( 0, 0, 0, 1 );\n\n\t\t\t} else if ( dir.y < - 0.99999 ) {\n\n\t\t\t\tthis.quaternion.set( 1, 0, 0, 0 );\n\n\t\t\t} else {\n\n\t\t\t\taxis.set( dir.z, 0, - dir.x ).normalize();\n\n\t\t\t\tradians = Math.acos( dir.y );\n\n\t\t\t\tthis.quaternion.setFromAxisAngle( axis, radians );\n\n\t\t\t}\n\n\t\t};\n\n\t}() );\n\n\tArrowHelper.prototype.setLength = function ( length, headLength, headWidth ) {\n\n\t\tif ( headLength === undefined ) headLength = 0.2 * length;\n\t\tif ( headWidth === undefined ) headWidth = 0.2 * headLength;\n\n\t\tthis.line.scale.set( 1, Math.max( 0, length - headLength ), 1 );\n\t\tthis.line.updateMatrix();\n\n\t\tthis.cone.scale.set( headWidth, headLength, headWidth );\n\t\tthis.cone.position.y = length;\n\t\tthis.cone.updateMatrix();\n\n\t};\n\n\tArrowHelper.prototype.setColor = function ( color ) {\n\n\t\tthis.line.material.color.copy( color );\n\t\tthis.cone.material.color.copy( color );\n\n\t};\n\n\t/**\n\t * @author sroucheray / http://sroucheray.org/\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction AxesHelper( size ) {\n\n\t\tsize = size || 1;\n\n\t\tvar vertices = [\n\t\t\t0, 0, 0,\tsize, 0, 0,\n\t\t\t0, 0, 0,\t0, size, 0,\n\t\t\t0, 0, 0,\t0, 0, size\n\t\t];\n\n\t\tvar colors = [\n\t\t\t1, 0, 0,\t1, 0.6, 0,\n\t\t\t0, 1, 0,\t0.6, 1, 0,\n\t\t\t0, 0, 1,\t0, 0.6, 1\n\t\t];\n\n\t\tvar geometry = new BufferGeometry();\n\t\tgeometry.addAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );\n\t\tgeometry.addAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );\n\n\t\tvar material = new LineBasicMaterial( { vertexColors: VertexColors } );\n\n\t\tLineSegments.call( this, geometry, material );\n\n\t}\n\n\tAxesHelper.prototype = Object.create( LineSegments.prototype );\n\tAxesHelper.prototype.constructor = AxesHelper;\n\n\t/**\n\t * @author mrdoob / http://mrdoob.com/\n\t */\n\n\tfunction Face4( a, b, c, d, normal, color, materialIndex ) {\n\n\t\tconsole.warn( 'THREE.Face4 has been removed. A THREE.Face3 will be created instead.' );\n\t\treturn new Face3( a, b, c, normal, color, materialIndex );\n\n\t}\n\n\tvar LineStrip = 0;\n\n\tvar LinePieces = 1;\n\n\tfunction MeshFaceMaterial( materials ) {\n\n\t\tconsole.warn( 'THREE.MeshFaceMaterial has been removed. Use an Array instead.' );\n\t\treturn materials;\n\n\t}\n\n\tfunction MultiMaterial( materials ) {\n\n\t\tif ( materials === undefined ) materials = [];\n\n\t\tconsole.warn( 'THREE.MultiMaterial has been removed. Use an Array instead.' );\n\t\tmaterials.isMultiMaterial = true;\n\t\tmaterials.materials = materials;\n\t\tmaterials.clone = function () {\n\n\t\t\treturn materials.slice();\n\n\t\t};\n\t\treturn materials;\n\n\t}\n\n\tfunction PointCloud( geometry, material ) {\n\n\t\tconsole.warn( 'THREE.PointCloud has been renamed to THREE.Points.' );\n\t\treturn new Points( geometry, material );\n\n\t}\n\n\tfunction Particle( material ) {\n\n\t\tconsole.warn( 'THREE.Particle has been renamed to THREE.Sprite.' );\n\t\treturn new Sprite( material );\n\n\t}\n\n\tfunction ParticleSystem( geometry, material ) {\n\n\t\tconsole.warn( 'THREE.ParticleSystem has been renamed to THREE.Points.' );\n\t\treturn new Points( geometry, material );\n\n\t}\n\n\tfunction PointCloudMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.PointCloudMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction ParticleBasicMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.ParticleBasicMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction ParticleSystemMaterial( parameters ) {\n\n\t\tconsole.warn( 'THREE.ParticleSystemMaterial has been renamed to THREE.PointsMaterial.' );\n\t\treturn new PointsMaterial( parameters );\n\n\t}\n\n\tfunction Vertex( x, y, z ) {\n\n\t\tconsole.warn( 'THREE.Vertex has been removed. Use THREE.Vector3 instead.' );\n\t\treturn new Vector3( x, y, z );\n\n\t}\n\n\t//\n\n\tfunction DynamicBufferAttribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.DynamicBufferAttribute has been removed. Use new THREE.BufferAttribute().setDynamic( true ) instead.' );\n\t\treturn new BufferAttribute( array, itemSize ).setDynamic( true );\n\n\t}\n\n\tfunction Int8Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int8Attribute has been removed. Use new THREE.Int8BufferAttribute() instead.' );\n\t\treturn new Int8BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint8Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint8Attribute has been removed. Use new THREE.Uint8BufferAttribute() instead.' );\n\t\treturn new Uint8BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint8ClampedAttribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint8ClampedAttribute has been removed. Use new THREE.Uint8ClampedBufferAttribute() instead.' );\n\t\treturn new Uint8ClampedBufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Int16Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int16Attribute has been removed. Use new THREE.Int16BufferAttribute() instead.' );\n\t\treturn new Int16BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint16Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint16Attribute has been removed. Use new THREE.Uint16BufferAttribute() instead.' );\n\t\treturn new Uint16BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Int32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Int32Attribute has been removed. Use new THREE.Int32BufferAttribute() instead.' );\n\t\treturn new Int32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Uint32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Uint32Attribute has been removed. Use new THREE.Uint32BufferAttribute() instead.' );\n\t\treturn new Uint32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Float32Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Float32Attribute has been removed. Use new THREE.Float32BufferAttribute() instead.' );\n\t\treturn new Float32BufferAttribute( array, itemSize );\n\n\t}\n\n\tfunction Float64Attribute( array, itemSize ) {\n\n\t\tconsole.warn( 'THREE.Float64Attribute has been removed. Use new THREE.Float64BufferAttribute() instead.' );\n\t\treturn new Float64BufferAttribute( array, itemSize );\n\n\t}\n\n\t//\n\n\tCurve.create = function ( construct, getPoint ) {\n\n\t\tconsole.log( 'THREE.Curve.create() has been deprecated' );\n\n\t\tconstruct.prototype = Object.create( Curve.prototype );\n\t\tconstruct.prototype.constructor = construct;\n\t\tconstruct.prototype.getPoint = getPoint;\n\n\t\treturn construct;\n\n\t};\n\n\t//\n\n\tObject.assign( CurvePath.prototype, {\n\n\t\tcreatePointsGeometry: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\t// generate geometry from path points (for Line or Points objects)\n\n\t\t\tvar pts = this.getPoints( divisions );\n\t\t\treturn this.createGeometry( pts );\n\n\t\t},\n\n\t\tcreateSpacedPointsGeometry: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createSpacedPointsGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\t// generate geometry from equidistant sampling along the path\n\n\t\t\tvar pts = this.getSpacedPoints( divisions );\n\t\t\treturn this.createGeometry( pts );\n\n\t\t},\n\n\t\tcreateGeometry: function ( points ) {\n\n\t\t\tconsole.warn( 'THREE.CurvePath: .createGeometry() has been removed. Use new THREE.Geometry().setFromPoints( points ) instead.' );\n\n\t\t\tvar geometry = new Geometry();\n\n\t\t\tfor ( var i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\t\tvar point = points[ i ];\n\t\t\t\tgeometry.vertices.push( new Vector3( point.x, point.y, point.z || 0 ) );\n\n\t\t\t}\n\n\t\t\treturn geometry;\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( Path.prototype, {\n\n\t\tfromPoints: function ( points ) {\n\n\t\t\tconsole.warn( 'THREE.Path: .fromPoints() has been renamed to .setFromPoints().' );\n\t\t\tthis.setFromPoints( points );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction ClosedSplineCurve3( points ) {\n\n\t\tconsole.warn( 'THREE.ClosedSplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\t\tthis.closed = true;\n\n\t}\n\n\tClosedSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\t//\n\n\tfunction SplineCurve3( points ) {\n\n\t\tconsole.warn( 'THREE.SplineCurve3 has been deprecated. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\n\t}\n\n\tSplineCurve3.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\t//\n\n\tfunction Spline( points ) {\n\n\t\tconsole.warn( 'THREE.Spline has been removed. Use THREE.CatmullRomCurve3 instead.' );\n\n\t\tCatmullRomCurve3.call( this, points );\n\t\tthis.type = 'catmullrom';\n\n\t}\n\n\tSpline.prototype = Object.create( CatmullRomCurve3.prototype );\n\n\tObject.assign( Spline.prototype, {\n\n\t\tinitFromArray: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .initFromArray() has been removed.' );\n\n\t\t},\n\t\tgetControlPointsArray: function ( /* optionalTarget */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .getControlPointsArray() has been removed.' );\n\n\t\t},\n\t\treparametrizeByArcLength: function ( /* samplingCoef */ ) {\n\n\t\t\tconsole.error( 'THREE.Spline: .reparametrizeByArcLength() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tfunction AxisHelper( size ) {\n\n\t\tconsole.warn( 'THREE.AxisHelper has been renamed to THREE.AxesHelper.' );\n\t\treturn new AxesHelper( size );\n\n\t}\n\n\tfunction BoundingBoxHelper( object, color ) {\n\n\t\tconsole.warn( 'THREE.BoundingBoxHelper has been deprecated. Creating a THREE.BoxHelper instead.' );\n\t\treturn new BoxHelper( object, color );\n\n\t}\n\n\tfunction EdgesHelper( object, hex ) {\n\n\t\tconsole.warn( 'THREE.EdgesHelper has been removed. Use THREE.EdgesGeometry instead.' );\n\t\treturn new LineSegments( new EdgesGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n\t}\n\n\tGridHelper.prototype.setColors = function () {\n\n\t\tconsole.error( 'THREE.GridHelper: setColors() has been deprecated, pass them in the constructor instead.' );\n\n\t};\n\n\tSkeletonHelper.prototype.update = function () {\n\n\t\tconsole.error( 'THREE.SkeletonHelper: update() no longer needs to be called.' );\n\n\t};\n\n\tfunction WireframeHelper( object, hex ) {\n\n\t\tconsole.warn( 'THREE.WireframeHelper has been removed. Use THREE.WireframeGeometry instead.' );\n\t\treturn new LineSegments( new WireframeGeometry( object.geometry ), new LineBasicMaterial( { color: hex !== undefined ? hex : 0xffffff } ) );\n\n\t}\n\n\t//\n\n\tObject.assign( Loader.prototype, {\n\n\t\textractUrlBase: function ( url ) {\n\n\t\t\tconsole.warn( 'THREE.Loader: .extractUrlBase() has been deprecated. Use THREE.LoaderUtils.extractUrlBase() instead.' );\n\t\t\treturn LoaderUtils.extractUrlBase( url );\n\n\t\t}\n\n\t} );\n\n\tfunction XHRLoader( manager ) {\n\n\t\tconsole.warn( 'THREE.XHRLoader has been renamed to THREE.FileLoader.' );\n\t\treturn new FileLoader( manager );\n\n\t}\n\n\tfunction BinaryTextureLoader( manager ) {\n\n\t\tconsole.warn( 'THREE.BinaryTextureLoader has been renamed to THREE.DataTextureLoader.' );\n\t\treturn new DataTextureLoader( manager );\n\n\t}\n\n\t//\n\n\tObject.assign( Box2.prototype, {\n\n\t\tcenter: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .center() has been renamed to .getCenter().' );\n\t\t\treturn this.getCenter( optionalTarget );\n\n\t\t},\n\t\tempty: function () {\n\n\t\t\tconsole.warn( 'THREE.Box2: .empty() has been renamed to .isEmpty().' );\n\t\t\treturn this.isEmpty();\n\n\t\t},\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tsize: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box2: .size() has been renamed to .getSize().' );\n\t\t\treturn this.getSize( optionalTarget );\n\n\t\t}\n\t} );\n\n\tObject.assign( Box3.prototype, {\n\n\t\tcenter: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .center() has been renamed to .getCenter().' );\n\t\t\treturn this.getCenter( optionalTarget );\n\n\t\t},\n\t\tempty: function () {\n\n\t\t\tconsole.warn( 'THREE.Box3: .empty() has been renamed to .isEmpty().' );\n\t\t\treturn this.isEmpty();\n\n\t\t},\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tisIntersectionSphere: function ( sphere ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t},\n\t\tsize: function ( optionalTarget ) {\n\n\t\t\tconsole.warn( 'THREE.Box3: .size() has been renamed to .getSize().' );\n\t\t\treturn this.getSize( optionalTarget );\n\n\t\t}\n\t} );\n\n\tLine3.prototype.center = function ( optionalTarget ) {\n\n\t\tconsole.warn( 'THREE.Line3: .center() has been renamed to .getCenter().' );\n\t\treturn this.getCenter( optionalTarget );\n\n\t};\n\n\tObject.assign( _Math, {\n\n\t\trandom16: function () {\n\n\t\t\tconsole.warn( 'THREE.Math: .random16() has been deprecated. Use Math.random() instead.' );\n\t\t\treturn Math.random();\n\n\t\t},\n\n\t\tnearestPowerOfTwo: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Math: .nearestPowerOfTwo() has been renamed to .floorPowerOfTwo().' );\n\t\t\treturn _Math.floorPowerOfTwo( value );\n\n\t\t},\n\n\t\tnextPowerOfTwo: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Math: .nextPowerOfTwo() has been renamed to .ceilPowerOfTwo().' );\n\t\t\treturn _Math.ceilPowerOfTwo( value );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Matrix3.prototype, {\n\n\t\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\t\tconsole.warn( \"THREE.Matrix3: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\t\treturn this.toArray( array, offset );\n\n\t\t},\n\t\tmultiplyVector3: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix3( this );\n\n\t\t},\n\t\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: .multiplyVector3Array() has been removed.' );\n\n\t\t},\n\t\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix3: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\t\treturn this.applyToBufferAttribute( buffer );\n\n\t\t},\n\t\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix3: .applyToVector3Array() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Matrix4.prototype, {\n\n\t\textractPosition: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .extractPosition() has been renamed to .copyPosition().' );\n\t\t\treturn this.copyPosition( m );\n\n\t\t},\n\t\tflattenToArrayOffset: function ( array, offset ) {\n\n\t\t\tconsole.warn( \"THREE.Matrix4: .flattenToArrayOffset() has been deprecated. Use .toArray() instead.\" );\n\t\t\treturn this.toArray( array, offset );\n\n\t\t},\n\t\tgetPosition: function () {\n\n\t\t\tvar v1;\n\n\t\t\treturn function getPosition() {\n\n\t\t\t\tif ( v1 === undefined ) v1 = new Vector3();\n\t\t\t\tconsole.warn( 'THREE.Matrix4: .getPosition() has been removed. Use Vector3.setFromMatrixPosition( matrix ) instead.' );\n\t\t\t\treturn v1.setFromMatrixColumn( this, 3 );\n\n\t\t\t};\n\n\t\t}(),\n\t\tsetRotationFromQuaternion: function ( q ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .setRotationFromQuaternion() has been renamed to .makeRotationFromQuaternion().' );\n\t\t\treturn this.makeRotationFromQuaternion( q );\n\n\t\t},\n\t\tmultiplyToArray: function () {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyToArray() has been removed.' );\n\n\t\t},\n\t\tmultiplyVector3: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector3() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\tmultiplyVector4: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .multiplyVector4() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\tmultiplyVector3Array: function ( /* a */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .multiplyVector3Array() has been removed.' );\n\n\t\t},\n\t\trotateAxis: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .rotateAxis() has been removed. Use Vector3.transformDirection( matrix ) instead.' );\n\t\t\tv.transformDirection( this );\n\n\t\t},\n\t\tcrossVector: function ( vector ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .crossVector() has been removed. Use vector.applyMatrix4( matrix ) instead.' );\n\t\t\treturn vector.applyMatrix4( this );\n\n\t\t},\n\t\ttranslate: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .translate() has been removed.' );\n\n\t\t},\n\t\trotateX: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateX() has been removed.' );\n\n\t\t},\n\t\trotateY: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateY() has been removed.' );\n\n\t\t},\n\t\trotateZ: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateZ() has been removed.' );\n\n\t\t},\n\t\trotateByAxis: function () {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .rotateByAxis() has been removed.' );\n\n\t\t},\n\t\tapplyToBuffer: function ( buffer /*, offset, length */ ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .applyToBuffer() has been removed. Use matrix.applyToBufferAttribute( attribute ) instead.' );\n\t\t\treturn this.applyToBufferAttribute( buffer );\n\n\t\t},\n\t\tapplyToVector3Array: function ( /* array, offset, length */ ) {\n\n\t\t\tconsole.error( 'THREE.Matrix4: .applyToVector3Array() has been removed.' );\n\n\t\t},\n\t\tmakeFrustum: function ( left, right, bottom, top, near, far ) {\n\n\t\t\tconsole.warn( 'THREE.Matrix4: .makeFrustum() has been removed. Use .makePerspective( left, right, top, bottom, near, far ) instead.' );\n\t\t\treturn this.makePerspective( left, right, top, bottom, near, far );\n\n\t\t}\n\n\t} );\n\n\tPlane.prototype.isIntersectionLine = function ( line ) {\n\n\t\tconsole.warn( 'THREE.Plane: .isIntersectionLine() has been renamed to .intersectsLine().' );\n\t\treturn this.intersectsLine( line );\n\n\t};\n\n\tQuaternion.prototype.multiplyVector3 = function ( vector ) {\n\n\t\tconsole.warn( 'THREE.Quaternion: .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.' );\n\t\treturn vector.applyQuaternion( this );\n\n\t};\n\n\tObject.assign( Ray.prototype, {\n\n\t\tisIntersectionBox: function ( box ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionBox() has been renamed to .intersectsBox().' );\n\t\t\treturn this.intersectsBox( box );\n\n\t\t},\n\t\tisIntersectionPlane: function ( plane ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionPlane() has been renamed to .intersectsPlane().' );\n\t\t\treturn this.intersectsPlane( plane );\n\n\t\t},\n\t\tisIntersectionSphere: function ( sphere ) {\n\n\t\t\tconsole.warn( 'THREE.Ray: .isIntersectionSphere() has been renamed to .intersectsSphere().' );\n\t\t\treturn this.intersectsSphere( sphere );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Triangle.prototype, {\n\n\t\tarea: function () {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .area() has been renamed to .getArea().' );\n\t\t\treturn this.getArea();\n\n\t\t},\n\t\tbarycoordFromPoint: function ( point, target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\t\treturn this.getBarycoord( point, target );\n\n\t\t},\n\t\tmidpoint: function ( target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .midpoint() has been renamed to .getMidpoint().' );\n\t\t\treturn this.getMidpoint( target );\n\n\t\t},\n\t\tnormal: function ( target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\t\treturn this.getNormal( target );\n\n\t\t},\n\t\tplane: function ( target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .plane() has been renamed to .getPlane().' );\n\t\t\treturn this.getPlane( target );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Triangle, {\n\n\t\tbarycoordFromPoint: function ( point, a, b, c, target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .barycoordFromPoint() has been renamed to .getBarycoord().' );\n\t\t\treturn Triangle.getBarycoord( point, a, b, c, target );\n\n\t\t},\n\t\tnormal: function ( a, b, c, target ) {\n\n\t\t\tconsole.warn( 'THREE.Triangle: .normal() has been renamed to .getNormal().' );\n\t\t\treturn Triangle.getNormal( a, b, c, target );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Shape.prototype, {\n\n\t\textractAllPoints: function ( divisions ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .extractAllPoints() has been removed. Use .extractPoints() instead.' );\n\t\t\treturn this.extractPoints( divisions );\n\n\t\t},\n\t\textrude: function ( options ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .extrude() has been removed. Use ExtrudeGeometry() instead.' );\n\t\t\treturn new ExtrudeGeometry( this, options );\n\n\t\t},\n\t\tmakeGeometry: function ( options ) {\n\n\t\t\tconsole.warn( 'THREE.Shape: .makeGeometry() has been removed. Use ShapeGeometry() instead.' );\n\t\t\treturn new ShapeGeometry( this, options );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector2.prototype, {\n\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tdistanceToManhattan: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\t\treturn this.manhattanDistanceTo( v );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector2: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector3.prototype, {\n\n\t\tsetEulerFromRotationMatrix: function () {\n\n\t\t\tconsole.error( 'THREE.Vector3: .setEulerFromRotationMatrix() has been removed. Use Euler.setFromRotationMatrix() instead.' );\n\n\t\t},\n\t\tsetEulerFromQuaternion: function () {\n\n\t\t\tconsole.error( 'THREE.Vector3: .setEulerFromQuaternion() has been removed. Use Euler.setFromQuaternion() instead.' );\n\n\t\t},\n\t\tgetPositionFromMatrix: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getPositionFromMatrix() has been renamed to .setFromMatrixPosition().' );\n\t\t\treturn this.setFromMatrixPosition( m );\n\n\t\t},\n\t\tgetScaleFromMatrix: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getScaleFromMatrix() has been renamed to .setFromMatrixScale().' );\n\t\t\treturn this.setFromMatrixScale( m );\n\n\t\t},\n\t\tgetColumnFromMatrix: function ( index, matrix ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .getColumnFromMatrix() has been renamed to .setFromMatrixColumn().' );\n\t\t\treturn this.setFromMatrixColumn( matrix, index );\n\n\t\t},\n\t\tapplyProjection: function ( m ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .applyProjection() has been removed. Use .applyMatrix4( m ) instead.' );\n\t\t\treturn this.applyMatrix4( m );\n\n\t\t},\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tdistanceToManhattan: function ( v ) {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .distanceToManhattan() has been renamed to .manhattanDistanceTo().' );\n\t\t\treturn this.manhattanDistanceTo( v );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector3: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Vector4.prototype, {\n\n\t\tfromAttribute: function ( attribute, index, offset ) {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .fromAttribute() has been renamed to .fromBufferAttribute().' );\n\t\t\treturn this.fromBufferAttribute( attribute, index, offset );\n\n\t\t},\n\t\tlengthManhattan: function () {\n\n\t\t\tconsole.warn( 'THREE.Vector4: .lengthManhattan() has been renamed to .manhattanLength().' );\n\t\t\treturn this.manhattanLength();\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( Geometry.prototype, {\n\n\t\tcomputeTangents: function () {\n\n\t\t\tconsole.error( 'THREE.Geometry: .computeTangents() has been removed.' );\n\n\t\t},\n\t\tcomputeLineDistances: function () {\n\n\t\t\tconsole.error( 'THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.' );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( Object3D.prototype, {\n\n\t\tgetChildByName: function ( name ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .getChildByName() has been renamed to .getObjectByName().' );\n\t\t\treturn this.getObjectByName( name );\n\n\t\t},\n\t\trenderDepth: function () {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .renderDepth has been removed. Use .renderOrder, instead.' );\n\n\t\t},\n\t\ttranslate: function ( distance, axis ) {\n\n\t\t\tconsole.warn( 'THREE.Object3D: .translate() has been removed. Use .translateOnAxis( axis, distance ) instead.' );\n\t\t\treturn this.translateOnAxis( axis, distance );\n\n\t\t},\n\t\tgetWorldRotation: function () {\n\n\t\t\tconsole.error( 'THREE.Object3D: .getWorldRotation() has been removed. Use THREE.Object3D.getWorldQuaternion( target ) instead.' );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( Object3D.prototype, {\n\n\t\teulerOrder: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\t\treturn this.rotation.order;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .eulerOrder is now .rotation.order.' );\n\t\t\t\tthis.rotation.order = value;\n\n\t\t\t}\n\t\t},\n\t\tuseQuaternion: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Object3D: .useQuaternion has been removed. The library now uses quaternions by default.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( LOD.prototype, {\n\n\t\tobjects: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.LOD: .objects has been renamed to .levels.' );\n\t\t\t\treturn this.levels;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Skeleton.prototype, 'useVertexTexture', {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t\t},\n\t\tset: function () {\n\n\t\t\tconsole.warn( 'THREE.Skeleton: useVertexTexture has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperty( Curve.prototype, '__arcLengthDivisions', {\n\n\t\tget: function () {\n\n\t\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\t\treturn this.arcLengthDivisions;\n\n\t\t},\n\t\tset: function ( value ) {\n\n\t\t\tconsole.warn( 'THREE.Curve: .__arcLengthDivisions is now .arcLengthDivisions.' );\n\t\t\tthis.arcLengthDivisions = value;\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tPerspectiveCamera.prototype.setLens = function ( focalLength, filmGauge ) {\n\n\t\tconsole.warn( \"THREE.PerspectiveCamera.setLens is deprecated. \" +\n\t\t\t\t\"Use .setFocalLength and .filmGauge for a photographic setup.\" );\n\n\t\tif ( filmGauge !== undefined ) this.filmGauge = filmGauge;\n\t\tthis.setFocalLength( focalLength );\n\n\t};\n\n\t//\n\n\tObject.defineProperties( Light.prototype, {\n\t\tonlyShadow: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .onlyShadow has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraFov: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFov is now .shadow.camera.fov.' );\n\t\t\t\tthis.shadow.camera.fov = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraLeft: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraLeft is now .shadow.camera.left.' );\n\t\t\t\tthis.shadow.camera.left = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraRight: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraRight is now .shadow.camera.right.' );\n\t\t\t\tthis.shadow.camera.right = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraTop: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraTop is now .shadow.camera.top.' );\n\t\t\t\tthis.shadow.camera.top = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraBottom: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraBottom is now .shadow.camera.bottom.' );\n\t\t\t\tthis.shadow.camera.bottom = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraNear: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraNear is now .shadow.camera.near.' );\n\t\t\t\tthis.shadow.camera.near = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraFar: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraFar is now .shadow.camera.far.' );\n\t\t\t\tthis.shadow.camera.far = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowCameraVisible: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowCameraVisible has been removed. Use new THREE.CameraHelper( light.shadow.camera ) instead.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowBias: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowBias is now .shadow.bias.' );\n\t\t\t\tthis.shadow.bias = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowDarkness: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowDarkness has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\tshadowMapWidth: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowMapWidth is now .shadow.mapSize.width.' );\n\t\t\t\tthis.shadow.mapSize.width = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapHeight: {\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.Light: .shadowMapHeight is now .shadow.mapSize.height.' );\n\t\t\t\tthis.shadow.mapSize.height = value;\n\n\t\t\t}\n\t\t}\n\t} );\n\n\t//\n\n\tObject.defineProperties( BufferAttribute.prototype, {\n\n\t\tlength: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.BufferAttribute: .length has been deprecated. Use .count instead.' );\n\t\t\t\treturn this.array.length;\n\n\t\t\t}\n\t\t},\n\t\tcopyIndicesArray: function ( /* indices */ ) {\n\n\t\t\tconsole.error( 'THREE.BufferAttribute: .copyIndicesArray() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.assign( BufferGeometry.prototype, {\n\n\t\taddIndex: function ( index ) {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addIndex() has been renamed to .setIndex().' );\n\t\t\tthis.setIndex( index );\n\n\t\t},\n\t\taddDrawCall: function ( start, count, indexOffset ) {\n\n\t\t\tif ( indexOffset !== undefined ) {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() no longer supports indexOffset.' );\n\n\t\t\t}\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .addDrawCall() is now .addGroup().' );\n\t\t\tthis.addGroup( start, count );\n\n\t\t},\n\t\tclearDrawCalls: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .clearDrawCalls() is now .clearGroups().' );\n\t\t\tthis.clearGroups();\n\n\t\t},\n\t\tcomputeTangents: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .computeTangents() has been removed.' );\n\n\t\t},\n\t\tcomputeOffsets: function () {\n\n\t\t\tconsole.warn( 'THREE.BufferGeometry: .computeOffsets() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( BufferGeometry.prototype, {\n\n\t\tdrawcalls: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.error( 'THREE.BufferGeometry: .drawcalls has been renamed to .groups.' );\n\t\t\t\treturn this.groups;\n\n\t\t\t}\n\t\t},\n\t\toffsets: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.BufferGeometry: .offsets has been renamed to .groups.' );\n\t\t\t\treturn this.groups;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( ExtrudeBufferGeometry.prototype, {\n\n\t\tgetArrays: function () {\n\n\t\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .getArrays() has been removed.' );\n\n\t\t},\n\n\t\taddShapeList: function () {\n\n\t\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShapeList() has been removed.' );\n\n\t\t},\n\n\t\taddShape: function () {\n\n\t\t\tconsole.error( 'THREE.ExtrudeBufferGeometry: .addShape() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( Uniform.prototype, {\n\n\t\tdynamic: {\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Uniform: .dynamic has been removed. Use object.onBeforeRender() instead.' );\n\n\t\t\t}\n\t\t},\n\t\tonUpdate: {\n\t\t\tvalue: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Uniform: .onUpdate() has been removed. Use object.onBeforeRender() instead.' );\n\t\t\t\treturn this;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( Material.prototype, {\n\n\t\twrapAround: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapAround has been removed.' );\n\n\t\t\t}\n\t\t},\n\t\twrapRGB: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.Material: .wrapRGB has been removed.' );\n\t\t\t\treturn new Color();\n\n\t\t\t}\n\t\t},\n\n\t\tshading: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.error( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.' + this.type + ': .shading has been removed. Use the boolean .flatShading instead.' );\n\t\t\t\tthis.flatShading = ( value === FlatShading );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( MeshPhongMaterial.prototype, {\n\n\t\tmetal: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead.' );\n\t\t\t\treturn false;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.MeshPhongMaterial: .metal has been removed. Use THREE.MeshStandardMaterial instead' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( ShaderMaterial.prototype, {\n\n\t\tderivatives: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\t\treturn this.extensions.derivatives;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE. ShaderMaterial: .derivatives has been moved to .extensions.derivatives.' );\n\t\t\t\tthis.extensions.derivatives = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.assign( WebGLRenderer.prototype, {\n\n\t\tanimate: function ( callback ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .animate() is now .setAnimationLoop().' );\n\t\t\tthis.setAnimationLoop( callback );\n\n\t\t},\n\n\t\tgetCurrentRenderTarget: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getCurrentRenderTarget() is now .getRenderTarget().' );\n\t\t\treturn this.getRenderTarget();\n\n\t\t},\n\n\t\tgetMaxAnisotropy: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getMaxAnisotropy() is now .capabilities.getMaxAnisotropy().' );\n\t\t\treturn this.capabilities.getMaxAnisotropy();\n\n\t\t},\n\n\t\tgetPrecision: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .getPrecision() is now .capabilities.precision.' );\n\t\t\treturn this.capabilities.precision;\n\n\t\t},\n\n\t\tresetGLState: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .resetGLState() is now .state.reset().' );\n\t\t\treturn this.state.reset();\n\n\t\t},\n\n\t\tsupportsFloatTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsFloatTextures() is now .extensions.get( \\'OES_texture_float\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_texture_float' );\n\n\t\t},\n\t\tsupportsHalfFloatTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsHalfFloatTextures() is now .extensions.get( \\'OES_texture_half_float\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_texture_half_float' );\n\n\t\t},\n\t\tsupportsStandardDerivatives: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsStandardDerivatives() is now .extensions.get( \\'OES_standard_derivatives\\' ).' );\n\t\t\treturn this.extensions.get( 'OES_standard_derivatives' );\n\n\t\t},\n\t\tsupportsCompressedTextureS3TC: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTextureS3TC() is now .extensions.get( \\'WEBGL_compressed_texture_s3tc\\' ).' );\n\t\t\treturn this.extensions.get( 'WEBGL_compressed_texture_s3tc' );\n\n\t\t},\n\t\tsupportsCompressedTexturePVRTC: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsCompressedTexturePVRTC() is now .extensions.get( \\'WEBGL_compressed_texture_pvrtc\\' ).' );\n\t\t\treturn this.extensions.get( 'WEBGL_compressed_texture_pvrtc' );\n\n\t\t},\n\t\tsupportsBlendMinMax: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsBlendMinMax() is now .extensions.get( \\'EXT_blend_minmax\\' ).' );\n\t\t\treturn this.extensions.get( 'EXT_blend_minmax' );\n\n\t\t},\n\t\tsupportsVertexTextures: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsVertexTextures() is now .capabilities.vertexTextures.' );\n\t\t\treturn this.capabilities.vertexTextures;\n\n\t\t},\n\t\tsupportsInstancedArrays: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .supportsInstancedArrays() is now .extensions.get( \\'ANGLE_instanced_arrays\\' ).' );\n\t\t\treturn this.extensions.get( 'ANGLE_instanced_arrays' );\n\n\t\t},\n\t\tenableScissorTest: function ( boolean ) {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .enableScissorTest() is now .setScissorTest().' );\n\t\t\tthis.setScissorTest( boolean );\n\n\t\t},\n\t\tinitMaterial: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .initMaterial() has been removed.' );\n\n\t\t},\n\t\taddPrePlugin: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .addPrePlugin() has been removed.' );\n\n\t\t},\n\t\taddPostPlugin: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .addPostPlugin() has been removed.' );\n\n\t\t},\n\t\tupdateShadowMap: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .updateShadowMap() has been removed.' );\n\n\t\t},\n\t\tsetFaceCulling: function () {\n\n\t\t\tconsole.warn( 'THREE.WebGLRenderer: .setFaceCulling() has been removed.' );\n\n\t\t}\n\n\t} );\n\n\tObject.defineProperties( WebGLRenderer.prototype, {\n\n\t\tshadowMapEnabled: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.shadowMap.enabled;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapEnabled is now .shadowMap.enabled.' );\n\t\t\t\tthis.shadowMap.enabled = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapType: {\n\t\t\tget: function () {\n\n\t\t\t\treturn this.shadowMap.type;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapType is now .shadowMap.type.' );\n\t\t\t\tthis.shadowMap.type = value;\n\n\t\t\t}\n\t\t},\n\t\tshadowMapCullFace: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function ( /* value */ ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMapCullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t}\n\t} );\n\n\tObject.defineProperties( WebGLShadowMap.prototype, {\n\n\t\tcullFace: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function ( /* cullFace */ ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.cullFace has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t},\n\t\trenderReverseSided: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderReverseSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t},\n\t\trenderSingleSided: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\t\t\t\treturn undefined;\n\n\t\t\t},\n\t\t\tset: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderer: .shadowMap.renderSingleSided has been removed. Set Material.shadowSide instead.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( WebGLRenderTarget.prototype, {\n\n\t\twrapS: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\t\treturn this.texture.wrapS;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapS is now .texture.wrapS.' );\n\t\t\t\tthis.texture.wrapS = value;\n\n\t\t\t}\n\t\t},\n\t\twrapT: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\t\treturn this.texture.wrapT;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .wrapT is now .texture.wrapT.' );\n\t\t\t\tthis.texture.wrapT = value;\n\n\t\t\t}\n\t\t},\n\t\tmagFilter: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\t\treturn this.texture.magFilter;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .magFilter is now .texture.magFilter.' );\n\t\t\t\tthis.texture.magFilter = value;\n\n\t\t\t}\n\t\t},\n\t\tminFilter: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\t\treturn this.texture.minFilter;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .minFilter is now .texture.minFilter.' );\n\t\t\t\tthis.texture.minFilter = value;\n\n\t\t\t}\n\t\t},\n\t\tanisotropy: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\t\treturn this.texture.anisotropy;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .anisotropy is now .texture.anisotropy.' );\n\t\t\t\tthis.texture.anisotropy = value;\n\n\t\t\t}\n\t\t},\n\t\toffset: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\t\treturn this.texture.offset;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .offset is now .texture.offset.' );\n\t\t\t\tthis.texture.offset = value;\n\n\t\t\t}\n\t\t},\n\t\trepeat: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\t\treturn this.texture.repeat;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .repeat is now .texture.repeat.' );\n\t\t\t\tthis.texture.repeat = value;\n\n\t\t\t}\n\t\t},\n\t\tformat: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\t\treturn this.texture.format;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .format is now .texture.format.' );\n\t\t\t\tthis.texture.format = value;\n\n\t\t\t}\n\t\t},\n\t\ttype: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\t\treturn this.texture.type;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .type is now .texture.type.' );\n\t\t\t\tthis.texture.type = value;\n\n\t\t\t}\n\t\t},\n\t\tgenerateMipmaps: {\n\t\t\tget: function () {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\t\treturn this.texture.generateMipmaps;\n\n\t\t\t},\n\t\t\tset: function ( value ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebGLRenderTarget: .generateMipmaps is now .texture.generateMipmaps.' );\n\t\t\t\tthis.texture.generateMipmaps = value;\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tObject.defineProperties( WebVRManager.prototype, {\n\n\t\tstanding: {\n\t\t\tset: function ( /* value */ ) {\n\n\t\t\t\tconsole.warn( 'THREE.WebVRManager: .standing has been removed.' );\n\n\t\t\t}\n\t\t}\n\n\t} );\n\n\t//\n\n\tAudio.prototype.load = function ( file ) {\n\n\t\tconsole.warn( 'THREE.Audio: .load has been deprecated. Use THREE.AudioLoader instead.' );\n\t\tvar scope = this;\n\t\tvar audioLoader = new AudioLoader();\n\t\taudioLoader.load( file, function ( buffer ) {\n\n\t\t\tscope.setBuffer( buffer );\n\n\t\t} );\n\t\treturn this;\n\n\t};\n\n\tAudioAnalyser.prototype.getData = function () {\n\n\t\tconsole.warn( 'THREE.AudioAnalyser: .getData() is now .getFrequencyData().' );\n\t\treturn this.getFrequencyData();\n\n\t};\n\n\t//\n\n\tCubeCamera.prototype.updateCubeMap = function ( renderer, scene ) {\n\n\t\tconsole.warn( 'THREE.CubeCamera: .updateCubeMap() is now .update().' );\n\t\treturn this.update( renderer, scene );\n\n\t};\n\n\t//\n\n\tvar GeometryUtils = {\n\n\t\tmerge: function ( geometry1, geometry2, materialIndexOffset ) {\n\n\t\t\tconsole.warn( 'THREE.GeometryUtils: .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );\n\t\t\tvar matrix;\n\n\t\t\tif ( geometry2.isMesh ) {\n\n\t\t\t\tgeometry2.matrixAutoUpdate && geometry2.updateMatrix();\n\n\t\t\t\tmatrix = geometry2.matrix;\n\t\t\t\tgeometry2 = geometry2.geometry;\n\n\t\t\t}\n\n\t\t\tgeometry1.merge( geometry2, matrix, materialIndexOffset );\n\n\t\t},\n\n\t\tcenter: function ( geometry ) {\n\n\t\t\tconsole.warn( 'THREE.GeometryUtils: .center() has been moved to Geometry. Use geometry.center() instead.' );\n\t\t\treturn geometry.center();\n\n\t\t}\n\n\t};\n\n\tvar ImageUtils = {\n\n\t\tcrossOrigin: undefined,\n\n\t\tloadTexture: function ( url, mapping, onLoad, onError ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.loadTexture has been deprecated. Use THREE.TextureLoader() instead.' );\n\n\t\t\tvar loader = new TextureLoader();\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tvar texture = loader.load( url, onLoad, undefined, onError );\n\n\t\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tloadTextureCube: function ( urls, mapping, onLoad, onError ) {\n\n\t\t\tconsole.warn( 'THREE.ImageUtils.loadTextureCube has been deprecated. Use THREE.CubeTextureLoader() instead.' );\n\n\t\t\tvar loader = new CubeTextureLoader();\n\t\t\tloader.setCrossOrigin( this.crossOrigin );\n\n\t\t\tvar texture = loader.load( urls, onLoad, undefined, onError );\n\n\t\t\tif ( mapping ) texture.mapping = mapping;\n\n\t\t\treturn texture;\n\n\t\t},\n\n\t\tloadCompressedTexture: function () {\n\n\t\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTexture has been removed. Use THREE.DDSLoader instead.' );\n\n\t\t},\n\n\t\tloadCompressedTextureCube: function () {\n\n\t\t\tconsole.error( 'THREE.ImageUtils.loadCompressedTextureCube has been removed. Use THREE.DDSLoader instead.' );\n\n\t\t}\n\n\t};\n\n\t//\n\n\tfunction Projector() {\n\n\t\tconsole.error( 'THREE.Projector has been moved to /examples/js/renderers/Projector.js.' );\n\n\t\tthis.projectVector = function ( vector, camera ) {\n\n\t\t\tconsole.warn( 'THREE.Projector: .projectVector() is now vector.project().' );\n\t\t\tvector.project( camera );\n\n\t\t};\n\n\t\tthis.unprojectVector = function ( vector, camera ) {\n\n\t\t\tconsole.warn( 'THREE.Projector: .unprojectVector() is now vector.unproject().' );\n\t\t\tvector.unproject( camera );\n\n\t\t};\n\n\t\tthis.pickingRay = function () {\n\n\t\t\tconsole.error( 'THREE.Projector: .pickingRay() is now raycaster.setFromCamera().' );\n\n\t\t};\n\n\t}\n\n\t//\n\n\tfunction CanvasRenderer() {\n\n\t\tconsole.error( 'THREE.CanvasRenderer has been moved to /examples/js/renderers/CanvasRenderer.js' );\n\n\t\tthis.domElement = document.createElementNS( 'http://www.w3.org/1999/xhtml', 'canvas' );\n\t\tthis.clear = function () {};\n\t\tthis.render = function () {};\n\t\tthis.setClearColor = function () {};\n\t\tthis.setSize = function () {};\n\n\t}\n\n\t//\n\n\tvar SceneUtils = {\n\n\t\tcreateMultiMaterialObject: function ( /* geometry, materials */ ) {\n\n\t\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t\t},\n\n\t\tdetach: function ( /* child, parent, scene */ ) {\n\n\t\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t\t},\n\n\t\tattach: function ( /* child, scene, parent */ ) {\n\n\t\t\tconsole.error( 'THREE.SceneUtils has been moved to /examples/js/utils/SceneUtils.js' );\n\n\t\t}\n\n\t};\n\n\t//\n\n\tfunction LensFlare() {\n\n\t\tconsole.error( 'THREE.LensFlare has been moved to /examples/js/objects/Lensflare.js' );\n\n\t}\n\n\texports.WebGLRenderTargetCube = WebGLRenderTargetCube;\n\texports.WebGLRenderTarget = WebGLRenderTarget;\n\texports.WebGLRenderer = WebGLRenderer;\n\texports.ShaderLib = ShaderLib;\n\texports.UniformsLib = UniformsLib;\n\texports.UniformsUtils = UniformsUtils;\n\texports.ShaderChunk = ShaderChunk;\n\texports.FogExp2 = FogExp2;\n\texports.Fog = Fog;\n\texports.Scene = Scene;\n\texports.Sprite = Sprite;\n\texports.LOD = LOD;\n\texports.SkinnedMesh = SkinnedMesh;\n\texports.Skeleton = Skeleton;\n\texports.Bone = Bone;\n\texports.Mesh = Mesh;\n\texports.LineSegments = LineSegments;\n\texports.LineLoop = LineLoop;\n\texports.Line = Line;\n\texports.Points = Points;\n\texports.Group = Group;\n\texports.VideoTexture = VideoTexture;\n\texports.DataTexture = DataTexture;\n\texports.CompressedTexture = CompressedTexture;\n\texports.CubeTexture = CubeTexture;\n\texports.CanvasTexture = CanvasTexture;\n\texports.DepthTexture = DepthTexture;\n\texports.Texture = Texture;\n\texports.CompressedTextureLoader = CompressedTextureLoader;\n\texports.DataTextureLoader = DataTextureLoader;\n\texports.CubeTextureLoader = CubeTextureLoader;\n\texports.TextureLoader = TextureLoader;\n\texports.ObjectLoader = ObjectLoader;\n\texports.MaterialLoader = MaterialLoader;\n\texports.BufferGeometryLoader = BufferGeometryLoader;\n\texports.DefaultLoadingManager = DefaultLoadingManager;\n\texports.LoadingManager = LoadingManager;\n\texports.JSONLoader = JSONLoader;\n\texports.ImageLoader = ImageLoader;\n\texports.ImageBitmapLoader = ImageBitmapLoader;\n\texports.FontLoader = FontLoader;\n\texports.FileLoader = FileLoader;\n\texports.Loader = Loader;\n\texports.LoaderUtils = LoaderUtils;\n\texports.Cache = Cache;\n\texports.AudioLoader = AudioLoader;\n\texports.SpotLightShadow = SpotLightShadow;\n\texports.SpotLight = SpotLight;\n\texports.PointLight = PointLight;\n\texports.RectAreaLight = RectAreaLight;\n\texports.HemisphereLight = HemisphereLight;\n\texports.DirectionalLightShadow = DirectionalLightShadow;\n\texports.DirectionalLight = DirectionalLight;\n\texports.AmbientLight = AmbientLight;\n\texports.LightShadow = LightShadow;\n\texports.Light = Light;\n\texports.StereoCamera = StereoCamera;\n\texports.PerspectiveCamera = PerspectiveCamera;\n\texports.OrthographicCamera = OrthographicCamera;\n\texports.CubeCamera = CubeCamera;\n\texports.ArrayCamera = ArrayCamera;\n\texports.Camera = Camera;\n\texports.AudioListener = AudioListener;\n\texports.PositionalAudio = PositionalAudio;\n\texports.AudioContext = AudioContext;\n\texports.AudioAnalyser = AudioAnalyser;\n\texports.Audio = Audio;\n\texports.VectorKeyframeTrack = VectorKeyframeTrack;\n\texports.StringKeyframeTrack = StringKeyframeTrack;\n\texports.QuaternionKeyframeTrack = QuaternionKeyframeTrack;\n\texports.NumberKeyframeTrack = NumberKeyframeTrack;\n\texports.ColorKeyframeTrack = ColorKeyframeTrack;\n\texports.BooleanKeyframeTrack = BooleanKeyframeTrack;\n\texports.PropertyMixer = PropertyMixer;\n\texports.PropertyBinding = PropertyBinding;\n\texports.KeyframeTrack = KeyframeTrack;\n\texports.AnimationUtils = AnimationUtils;\n\texports.AnimationObjectGroup = AnimationObjectGroup;\n\texports.AnimationMixer = AnimationMixer;\n\texports.AnimationClip = AnimationClip;\n\texports.Uniform = Uniform;\n\texports.InstancedBufferGeometry = InstancedBufferGeometry;\n\texports.BufferGeometry = BufferGeometry;\n\texports.Geometry = Geometry;\n\texports.InterleavedBufferAttribute = InterleavedBufferAttribute;\n\texports.InstancedInterleavedBuffer = InstancedInterleavedBuffer;\n\texports.InterleavedBuffer = InterleavedBuffer;\n\texports.InstancedBufferAttribute = InstancedBufferAttribute;\n\texports.Face3 = Face3;\n\texports.Object3D = Object3D;\n\texports.Raycaster = Raycaster;\n\texports.Layers = Layers;\n\texports.EventDispatcher = EventDispatcher;\n\texports.Clock = Clock;\n\texports.QuaternionLinearInterpolant = QuaternionLinearInterpolant;\n\texports.LinearInterpolant = LinearInterpolant;\n\texports.DiscreteInterpolant = DiscreteInterpolant;\n\texports.CubicInterpolant = CubicInterpolant;\n\texports.Interpolant = Interpolant;\n\texports.Triangle = Triangle;\n\texports.Math = _Math;\n\texports.Spherical = Spherical;\n\texports.Cylindrical = Cylindrical;\n\texports.Plane = Plane;\n\texports.Frustum = Frustum;\n\texports.Sphere = Sphere;\n\texports.Ray = Ray;\n\texports.Matrix4 = Matrix4;\n\texports.Matrix3 = Matrix3;\n\texports.Box3 = Box3;\n\texports.Box2 = Box2;\n\texports.Line3 = Line3;\n\texports.Euler = Euler;\n\texports.Vector4 = Vector4;\n\texports.Vector3 = Vector3;\n\texports.Vector2 = Vector2;\n\texports.Quaternion = Quaternion;\n\texports.Color = Color;\n\texports.ImmediateRenderObject = ImmediateRenderObject;\n\texports.VertexNormalsHelper = VertexNormalsHelper;\n\texports.SpotLightHelper = SpotLightHelper;\n\texports.SkeletonHelper = SkeletonHelper;\n\texports.PointLightHelper = PointLightHelper;\n\texports.RectAreaLightHelper = RectAreaLightHelper;\n\texports.HemisphereLightHelper = HemisphereLightHelper;\n\texports.GridHelper = GridHelper;\n\texports.PolarGridHelper = PolarGridHelper;\n\texports.FaceNormalsHelper = FaceNormalsHelper;\n\texports.DirectionalLightHelper = DirectionalLightHelper;\n\texports.CameraHelper = CameraHelper;\n\texports.BoxHelper = BoxHelper;\n\texports.Box3Helper = Box3Helper;\n\texports.PlaneHelper = PlaneHelper;\n\texports.ArrowHelper = ArrowHelper;\n\texports.AxesHelper = AxesHelper;\n\texports.Shape = Shape;\n\texports.Path = Path;\n\texports.ShapePath = ShapePath;\n\texports.Font = Font;\n\texports.CurvePath = CurvePath;\n\texports.Curve = Curve;\n\texports.ShapeUtils = ShapeUtils;\n\texports.WebGLUtils = WebGLUtils;\n\texports.WireframeGeometry = WireframeGeometry;\n\texports.ParametricGeometry = ParametricGeometry;\n\texports.ParametricBufferGeometry = ParametricBufferGeometry;\n\texports.TetrahedronGeometry = TetrahedronGeometry;\n\texports.TetrahedronBufferGeometry = TetrahedronBufferGeometry;\n\texports.OctahedronGeometry = OctahedronGeometry;\n\texports.OctahedronBufferGeometry = OctahedronBufferGeometry;\n\texports.IcosahedronGeometry = IcosahedronGeometry;\n\texports.IcosahedronBufferGeometry = IcosahedronBufferGeometry;\n\texports.DodecahedronGeometry = DodecahedronGeometry;\n\texports.DodecahedronBufferGeometry = DodecahedronBufferGeometry;\n\texports.PolyhedronGeometry = PolyhedronGeometry;\n\texports.PolyhedronBufferGeometry = PolyhedronBufferGeometry;\n\texports.TubeGeometry = TubeGeometry;\n\texports.TubeBufferGeometry = TubeBufferGeometry;\n\texports.TorusKnotGeometry = TorusKnotGeometry;\n\texports.TorusKnotBufferGeometry = TorusKnotBufferGeometry;\n\texports.TorusGeometry = TorusGeometry;\n\texports.TorusBufferGeometry = TorusBufferGeometry;\n\texports.TextGeometry = TextGeometry;\n\texports.TextBufferGeometry = TextBufferGeometry;\n\texports.SphereGeometry = SphereGeometry;\n\texports.SphereBufferGeometry = SphereBufferGeometry;\n\texports.RingGeometry = RingGeometry;\n\texports.RingBufferGeometry = RingBufferGeometry;\n\texports.PlaneGeometry = PlaneGeometry;\n\texports.PlaneBufferGeometry = PlaneBufferGeometry;\n\texports.LatheGeometry = LatheGeometry;\n\texports.LatheBufferGeometry = LatheBufferGeometry;\n\texports.ShapeGeometry = ShapeGeometry;\n\texports.ShapeBufferGeometry = ShapeBufferGeometry;\n\texports.ExtrudeGeometry = ExtrudeGeometry;\n\texports.ExtrudeBufferGeometry = ExtrudeBufferGeometry;\n\texports.EdgesGeometry = EdgesGeometry;\n\texports.ConeGeometry = ConeGeometry;\n\texports.ConeBufferGeometry = ConeBufferGeometry;\n\texports.CylinderGeometry = CylinderGeometry;\n\texports.CylinderBufferGeometry = CylinderBufferGeometry;\n\texports.CircleGeometry = CircleGeometry;\n\texports.CircleBufferGeometry = CircleBufferGeometry;\n\texports.BoxGeometry = BoxGeometry;\n\texports.BoxBufferGeometry = BoxBufferGeometry;\n\texports.ShadowMaterial = ShadowMaterial;\n\texports.SpriteMaterial = SpriteMaterial;\n\texports.RawShaderMaterial = RawShaderMaterial;\n\texports.ShaderMaterial = ShaderMaterial;\n\texports.PointsMaterial = PointsMaterial;\n\texports.MeshPhysicalMaterial = MeshPhysicalMaterial;\n\texports.MeshStandardMaterial = MeshStandardMaterial;\n\texports.MeshPhongMaterial = MeshPhongMaterial;\n\texports.MeshToonMaterial = MeshToonMaterial;\n\texports.MeshNormalMaterial = MeshNormalMaterial;\n\texports.MeshLambertMaterial = MeshLambertMaterial;\n\texports.MeshDepthMaterial = MeshDepthMaterial;\n\texports.MeshDistanceMaterial = MeshDistanceMaterial;\n\texports.MeshBasicMaterial = MeshBasicMaterial;\n\texports.LineDashedMaterial = LineDashedMaterial;\n\texports.LineBasicMaterial = LineBasicMaterial;\n\texports.Material = Material;\n\texports.Float64BufferAttribute = Float64BufferAttribute;\n\texports.Float32BufferAttribute = Float32BufferAttribute;\n\texports.Uint32BufferAttribute = Uint32BufferAttribute;\n\texports.Int32BufferAttribute = Int32BufferAttribute;\n\texports.Uint16BufferAttribute = Uint16BufferAttribute;\n\texports.Int16BufferAttribute = Int16BufferAttribute;\n\texports.Uint8ClampedBufferAttribute = Uint8ClampedBufferAttribute;\n\texports.Uint8BufferAttribute = Uint8BufferAttribute;\n\texports.Int8BufferAttribute = Int8BufferAttribute;\n\texports.BufferAttribute = BufferAttribute;\n\texports.ArcCurve = ArcCurve;\n\texports.CatmullRomCurve3 = CatmullRomCurve3;\n\texports.CubicBezierCurve = CubicBezierCurve;\n\texports.CubicBezierCurve3 = CubicBezierCurve3;\n\texports.EllipseCurve = EllipseCurve;\n\texports.LineCurve = LineCurve;\n\texports.LineCurve3 = LineCurve3;\n\texports.QuadraticBezierCurve = QuadraticBezierCurve;\n\texports.QuadraticBezierCurve3 = QuadraticBezierCurve3;\n\texports.SplineCurve = SplineCurve;\n\texports.REVISION = REVISION;\n\texports.MOUSE = MOUSE;\n\texports.CullFaceNone = CullFaceNone;\n\texports.CullFaceBack = CullFaceBack;\n\texports.CullFaceFront = CullFaceFront;\n\texports.CullFaceFrontBack = CullFaceFrontBack;\n\texports.FrontFaceDirectionCW = FrontFaceDirectionCW;\n\texports.FrontFaceDirectionCCW = FrontFaceDirectionCCW;\n\texports.BasicShadowMap = BasicShadowMap;\n\texports.PCFShadowMap = PCFShadowMap;\n\texports.PCFSoftShadowMap = PCFSoftShadowMap;\n\texports.FrontSide = FrontSide;\n\texports.BackSide = BackSide;\n\texports.DoubleSide = DoubleSide;\n\texports.FlatShading = FlatShading;\n\texports.SmoothShading = SmoothShading;\n\texports.NoColors = NoColors;\n\texports.FaceColors = FaceColors;\n\texports.VertexColors = VertexColors;\n\texports.NoBlending = NoBlending;\n\texports.NormalBlending = NormalBlending;\n\texports.AdditiveBlending = AdditiveBlending;\n\texports.SubtractiveBlending = SubtractiveBlending;\n\texports.MultiplyBlending = MultiplyBlending;\n\texports.CustomBlending = CustomBlending;\n\texports.AddEquation = AddEquation;\n\texports.SubtractEquation = SubtractEquation;\n\texports.ReverseSubtractEquation = ReverseSubtractEquation;\n\texports.MinEquation = MinEquation;\n\texports.MaxEquation = MaxEquation;\n\texports.ZeroFactor = ZeroFactor;\n\texports.OneFactor = OneFactor;\n\texports.SrcColorFactor = SrcColorFactor;\n\texports.OneMinusSrcColorFactor = OneMinusSrcColorFactor;\n\texports.SrcAlphaFactor = SrcAlphaFactor;\n\texports.OneMinusSrcAlphaFactor = OneMinusSrcAlphaFactor;\n\texports.DstAlphaFactor = DstAlphaFactor;\n\texports.OneMinusDstAlphaFactor = OneMinusDstAlphaFactor;\n\texports.DstColorFactor = DstColorFactor;\n\texports.OneMinusDstColorFactor = OneMinusDstColorFactor;\n\texports.SrcAlphaSaturateFactor = SrcAlphaSaturateFactor;\n\texports.NeverDepth = NeverDepth;\n\texports.AlwaysDepth = AlwaysDepth;\n\texports.LessDepth = LessDepth;\n\texports.LessEqualDepth = LessEqualDepth;\n\texports.EqualDepth = EqualDepth;\n\texports.GreaterEqualDepth = GreaterEqualDepth;\n\texports.GreaterDepth = GreaterDepth;\n\texports.NotEqualDepth = NotEqualDepth;\n\texports.MultiplyOperation = MultiplyOperation;\n\texports.MixOperation = MixOperation;\n\texports.AddOperation = AddOperation;\n\texports.NoToneMapping = NoToneMapping;\n\texports.LinearToneMapping = LinearToneMapping;\n\texports.ReinhardToneMapping = ReinhardToneMapping;\n\texports.Uncharted2ToneMapping = Uncharted2ToneMapping;\n\texports.CineonToneMapping = CineonToneMapping;\n\texports.UVMapping = UVMapping;\n\texports.CubeReflectionMapping = CubeReflectionMapping;\n\texports.CubeRefractionMapping = CubeRefractionMapping;\n\texports.EquirectangularReflectionMapping = EquirectangularReflectionMapping;\n\texports.EquirectangularRefractionMapping = EquirectangularRefractionMapping;\n\texports.SphericalReflectionMapping = SphericalReflectionMapping;\n\texports.CubeUVReflectionMapping = CubeUVReflectionMapping;\n\texports.CubeUVRefractionMapping = CubeUVRefractionMapping;\n\texports.RepeatWrapping = RepeatWrapping;\n\texports.ClampToEdgeWrapping = ClampToEdgeWrapping;\n\texports.MirroredRepeatWrapping = MirroredRepeatWrapping;\n\texports.NearestFilter = NearestFilter;\n\texports.NearestMipMapNearestFilter = NearestMipMapNearestFilter;\n\texports.NearestMipMapLinearFilter = NearestMipMapLinearFilter;\n\texports.LinearFilter = LinearFilter;\n\texports.LinearMipMapNearestFilter = LinearMipMapNearestFilter;\n\texports.LinearMipMapLinearFilter = LinearMipMapLinearFilter;\n\texports.UnsignedByteType = UnsignedByteType;\n\texports.ByteType = ByteType;\n\texports.ShortType = ShortType;\n\texports.UnsignedShortType = UnsignedShortType;\n\texports.IntType = IntType;\n\texports.UnsignedIntType = UnsignedIntType;\n\texports.FloatType = FloatType;\n\texports.HalfFloatType = HalfFloatType;\n\texports.UnsignedShort4444Type = UnsignedShort4444Type;\n\texports.UnsignedShort5551Type = UnsignedShort5551Type;\n\texports.UnsignedShort565Type = UnsignedShort565Type;\n\texports.UnsignedInt248Type = UnsignedInt248Type;\n\texports.AlphaFormat = AlphaFormat;\n\texports.RGBFormat = RGBFormat;\n\texports.RGBAFormat = RGBAFormat;\n\texports.LuminanceFormat = LuminanceFormat;\n\texports.LuminanceAlphaFormat = LuminanceAlphaFormat;\n\texports.RGBEFormat = RGBEFormat;\n\texports.DepthFormat = DepthFormat;\n\texports.DepthStencilFormat = DepthStencilFormat;\n\texports.RGB_S3TC_DXT1_Format = RGB_S3TC_DXT1_Format;\n\texports.RGBA_S3TC_DXT1_Format = RGBA_S3TC_DXT1_Format;\n\texports.RGBA_S3TC_DXT3_Format = RGBA_S3TC_DXT3_Format;\n\texports.RGBA_S3TC_DXT5_Format = RGBA_S3TC_DXT5_Format;\n\texports.RGB_PVRTC_4BPPV1_Format = RGB_PVRTC_4BPPV1_Format;\n\texports.RGB_PVRTC_2BPPV1_Format = RGB_PVRTC_2BPPV1_Format;\n\texports.RGBA_PVRTC_4BPPV1_Format = RGBA_PVRTC_4BPPV1_Format;\n\texports.RGBA_PVRTC_2BPPV1_Format = RGBA_PVRTC_2BPPV1_Format;\n\texports.RGB_ETC1_Format = RGB_ETC1_Format;\n\texports.RGBA_ASTC_4x4_Format = RGBA_ASTC_4x4_Format;\n\texports.RGBA_ASTC_5x4_Format = RGBA_ASTC_5x4_Format;\n\texports.RGBA_ASTC_5x5_Format = RGBA_ASTC_5x5_Format;\n\texports.RGBA_ASTC_6x5_Format = RGBA_ASTC_6x5_Format;\n\texports.RGBA_ASTC_6x6_Format = RGBA_ASTC_6x6_Format;\n\texports.RGBA_ASTC_8x5_Format = RGBA_ASTC_8x5_Format;\n\texports.RGBA_ASTC_8x6_Format = RGBA_ASTC_8x6_Format;\n\texports.RGBA_ASTC_8x8_Format = RGBA_ASTC_8x8_Format;\n\texports.RGBA_ASTC_10x5_Format = RGBA_ASTC_10x5_Format;\n\texports.RGBA_ASTC_10x6_Format = RGBA_ASTC_10x6_Format;\n\texports.RGBA_ASTC_10x8_Format = RGBA_ASTC_10x8_Format;\n\texports.RGBA_ASTC_10x10_Format = RGBA_ASTC_10x10_Format;\n\texports.RGBA_ASTC_12x10_Format = RGBA_ASTC_12x10_Format;\n\texports.RGBA_ASTC_12x12_Format = RGBA_ASTC_12x12_Format;\n\texports.LoopOnce = LoopOnce;\n\texports.LoopRepeat = LoopRepeat;\n\texports.LoopPingPong = LoopPingPong;\n\texports.InterpolateDiscrete = InterpolateDiscrete;\n\texports.InterpolateLinear = InterpolateLinear;\n\texports.InterpolateSmooth = InterpolateSmooth;\n\texports.ZeroCurvatureEnding = ZeroCurvatureEnding;\n\texports.ZeroSlopeEnding = ZeroSlopeEnding;\n\texports.WrapAroundEnding = WrapAroundEnding;\n\texports.TrianglesDrawMode = TrianglesDrawMode;\n\texports.TriangleStripDrawMode = TriangleStripDrawMode;\n\texports.TriangleFanDrawMode = TriangleFanDrawMode;\n\texports.LinearEncoding = LinearEncoding;\n\texports.sRGBEncoding = sRGBEncoding;\n\texports.GammaEncoding = GammaEncoding;\n\texports.RGBEEncoding = RGBEEncoding;\n\texports.LogLuvEncoding = LogLuvEncoding;\n\texports.RGBM7Encoding = RGBM7Encoding;\n\texports.RGBM16Encoding = RGBM16Encoding;\n\texports.RGBDEncoding = RGBDEncoding;\n\texports.BasicDepthPacking = BasicDepthPacking;\n\texports.RGBADepthPacking = RGBADepthPacking;\n\texports.CubeGeometry = BoxGeometry;\n\texports.Face4 = Face4;\n\texports.LineStrip = LineStrip;\n\texports.LinePieces = LinePieces;\n\texports.MeshFaceMaterial = MeshFaceMaterial;\n\texports.MultiMaterial = MultiMaterial;\n\texports.PointCloud = PointCloud;\n\texports.Particle = Particle;\n\texports.ParticleSystem = ParticleSystem;\n\texports.PointCloudMaterial = PointCloudMaterial;\n\texports.ParticleBasicMaterial = ParticleBasicMaterial;\n\texports.ParticleSystemMaterial = ParticleSystemMaterial;\n\texports.Vertex = Vertex;\n\texports.DynamicBufferAttribute = DynamicBufferAttribute;\n\texports.Int8Attribute = Int8Attribute;\n\texports.Uint8Attribute = Uint8Attribute;\n\texports.Uint8ClampedAttribute = Uint8ClampedAttribute;\n\texports.Int16Attribute = Int16Attribute;\n\texports.Uint16Attribute = Uint16Attribute;\n\texports.Int32Attribute = Int32Attribute;\n\texports.Uint32Attribute = Uint32Attribute;\n\texports.Float32Attribute = Float32Attribute;\n\texports.Float64Attribute = Float64Attribute;\n\texports.ClosedSplineCurve3 = ClosedSplineCurve3;\n\texports.SplineCurve3 = SplineCurve3;\n\texports.Spline = Spline;\n\texports.AxisHelper = AxisHelper;\n\texports.BoundingBoxHelper = BoundingBoxHelper;\n\texports.EdgesHelper = EdgesHelper;\n\texports.WireframeHelper = WireframeHelper;\n\texports.XHRLoader = XHRLoader;\n\texports.BinaryTextureLoader = BinaryTextureLoader;\n\texports.GeometryUtils = GeometryUtils;\n\texports.ImageUtils = ImageUtils;\n\texports.Projector = Projector;\n\texports.CanvasRenderer = CanvasRenderer;\n\texports.SceneUtils = SceneUtils;\n\texports.LensFlare = LensFlare;\n\n\tObject.defineProperty(exports, '__esModule', { value: true });\n\n})));\n","module.exports = function (module) {\n if (!module.webpackPolyfill) {\n module.deprecate = function () {};\n\n module.paths = []; // module.parent = undefined by default\n\n if (!module.children) module.children = [];\n Object.defineProperty(module, \"loaded\", {\n enumerable: true,\n get: function get() {\n return module.l;\n }\n });\n Object.defineProperty(module, \"id\", {\n enumerable: true,\n get: function get() {\n return module.i;\n }\n });\n module.webpackPolyfill = 1;\n }\n\n return module;\n};","\n/**\n * @author mrdoob / http://mrdoob.com/\n */\n\nTHREE.OBJLoader = function(manager) {\n\n this.manager = (manager !== undefined) ? manager : THREE.DefaultLoadingManager;\n\n this.materials = null;\n\n this.regexp = {\n // v float float float\n vertex_pattern: /^v\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\n // vn float float float\n normal_pattern: /^vn\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\n // vt float float\n uv_pattern: /^vt\\s+([\\d|\\.|\\+|\\-|e|E]+)\\s+([\\d|\\.|\\+|\\-|e|E]+)/,\n // f vertex vertex vertex\n face_vertex: /^f\\s+(-?\\d+)\\s+(-?\\d+)\\s+(-?\\d+)(?:\\s+(-?\\d+))?/,\n // f vertex/uv vertex/uv vertex/uv\n face_vertex_uv: /^f\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+))?/,\n // f vertex/uv/normal vertex/uv/normal vertex/uv/normal\n face_vertex_uv_normal: /^f\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+)(?:\\s+(-?\\d+)\\/(-?\\d+)\\/(-?\\d+))?/,\n // f vertex//normal vertex//normal vertex//normal\n face_vertex_normal: /^f\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)\\s+(-?\\d+)\\/\\/(-?\\d+)(?:\\s+(-?\\d+)\\/\\/(-?\\d+))?/,\n // o object_name | g group_name\n object_pattern: /^[og]\\s*(.+)?/,\n // s boolean\n smoothing_pattern: /^s\\s+(\\d+|on|off)/,\n // mtllib file_reference\n material_library_pattern: /^mtllib /,\n // usemtl material_name\n material_use_pattern: /^usemtl /\n };\n\n};\n\nTHREE.OBJLoader.prototype = {\n\n constructor: THREE.OBJLoader,\n\n load: function(url, onLoad, onProgress, onError) {\n\n var scope = this;\n\n var loader = new THREE.XHRLoader(scope.manager);\n loader.setPath(this.path);\n loader.load(url, function(text) {\n\n onLoad(scope.parse(text));\n\n }, onProgress, onError);\n\n },\n\n setPath: function(value) {\n\n this.path = value;\n\n },\n\n setMaterials: function(materials) {\n\n this.materials = materials;\n\n },\n\n _createParserState: function() {\n\n var state = {\n objects: [],\n object: {},\n\n vertices: [],\n normals: [],\n uvs: [],\n\n materialLibraries: [],\n\n startObject: function(name, fromDeclaration) {\n\n // If the current object (initial from reset) is not from a g/o declaration in the parsed\n // file. We need to use it for the first parsed g/o to keep things in sync.\n if (this.object && this.object.fromDeclaration === false) {\n\n this.object.name = name;\n this.object.fromDeclaration = (fromDeclaration !== false);\n return;\n\n }\n\n if (this.object && typeof this.object._finalize === 'function') {\n\n this.object._finalize();\n\n }\n\n var previousMaterial = (this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined);\n\n this.object = {\n name: name || '',\n fromDeclaration: (fromDeclaration !== false),\n\n geometry: {\n vertices: [],\n normals: [],\n uvs: []\n },\n materials: [],\n smooth: true,\n\n startMaterial: function(name, libraries) {\n\n var previous = this._finalize(false);\n\n // New usemtl declaration overwrites an inherited material, except if faces were declared\n // after the material, then it must be preserved for proper MultiMaterial continuation.\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n\n this.materials.splice(previous.index, 1);\n\n }\n\n var material = {\n index: this.materials.length,\n name: name || '',\n mtllib: (Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : ''),\n smooth: (previous !== undefined ? previous.smooth : this.smooth),\n groupStart: (previous !== undefined ? previous.groupEnd : 0),\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n\n clone: function(index) {\n return {\n index: (typeof index === 'number' ? index : this.index),\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: this.groupEnd,\n groupEnd: -1,\n groupCount: -1,\n inherited: false\n };\n }\n };\n\n this.materials.push(material);\n\n return material;\n\n },\n\n currentMaterial: function() {\n\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n\n return undefined;\n\n },\n\n _finalize: function(end) {\n\n var lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n\n }\n\n // Guarantee at least one empty material, this makes the creation later more straight forward.\n if (end !== false && this.materials.length === 0) {\n this.materials.push({\n name: '',\n smooth: this.smooth\n });\n }\n\n return lastMultiMaterial;\n\n }\n };\n\n // Inherit previous objects material.\n // Spec tells us that a declared material must be set to all objects until a new material is declared.\n // If a usemtl declaration is encountered while this new object is being parsed, it will\n // overwrite the inherited material. Exception being that there was already face declarations\n // to the inherited material, then it will be preserved for proper MultiMaterial continuation.\n\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === \"function\") {\n\n var declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n\n }\n\n this.objects.push(this.object);\n\n },\n\n finalize: function() {\n\n if (this.object && typeof this.object._finalize === 'function') {\n\n this.object._finalize();\n\n }\n\n },\n\n parseVertexIndex: function(value, len) {\n\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n\n },\n\n parseNormalIndex: function(value, len) {\n\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n\n },\n\n parseUVIndex: function(value, len) {\n\n var index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n\n },\n\n addVertex: function(a, b, c) {\n\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[a + 2]);\n dst.push(src[b + 0]);\n dst.push(src[b + 1]);\n dst.push(src[b + 2]);\n dst.push(src[c + 0]);\n dst.push(src[c + 1]);\n dst.push(src[c + 2]);\n\n },\n\n addVertexLine: function(a) {\n\n var src = this.vertices;\n var dst = this.object.geometry.vertices;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[a + 2]);\n\n },\n\n addNormal: function(a, b, c) {\n\n var src = this.normals;\n var dst = this.object.geometry.normals;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[a + 2]);\n dst.push(src[b + 0]);\n dst.push(src[b + 1]);\n dst.push(src[b + 2]);\n dst.push(src[c + 0]);\n dst.push(src[c + 1]);\n dst.push(src[c + 2]);\n\n },\n\n addUV: function(a, b, c) {\n\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n dst.push(src[b + 0]);\n dst.push(src[b + 1]);\n dst.push(src[c + 0]);\n dst.push(src[c + 1]);\n\n },\n\n addUVLine: function(a) {\n\n var src = this.uvs;\n var dst = this.object.geometry.uvs;\n\n dst.push(src[a + 0]);\n dst.push(src[a + 1]);\n\n },\n\n addFace: function(a, b, c, d, ua, ub, uc, ud, na, nb, nc, nd) {\n\n var vLen = this.vertices.length;\n\n var ia = this.parseVertexIndex(a, vLen);\n var ib = this.parseVertexIndex(b, vLen);\n var ic = this.parseVertexIndex(c, vLen);\n var id;\n\n if (d === undefined) {\n\n this.addVertex(ia, ib, ic);\n\n } else {\n\n id = this.parseVertexIndex(d, vLen);\n\n this.addVertex(ia, ib, id);\n this.addVertex(ib, ic, id);\n\n }\n\n if (ua !== undefined) {\n\n var uvLen = this.uvs.length;\n\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n\n if (d === undefined) {\n\n this.addUV(ia, ib, ic);\n\n } else {\n\n id = this.parseUVIndex(ud, uvLen);\n\n this.addUV(ia, ib, id);\n this.addUV(ib, ic, id);\n\n }\n\n }\n\n if (na !== undefined) {\n\n // Normals are many times the same. If so, skip function call and parseInt.\n var nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n\n ib = na === nb ? ia : this.parseNormalIndex(nb, nLen);\n ic = na === nc ? ia : this.parseNormalIndex(nc, nLen);\n\n if (d === undefined) {\n\n this.addNormal(ia, ib, ic);\n\n } else {\n\n id = this.parseNormalIndex(nd, nLen);\n\n this.addNormal(ia, ib, id);\n this.addNormal(ib, ic, id);\n\n }\n\n }\n\n },\n\n addLineGeometry: function(vertices, uvs) {\n\n this.object.geometry.type = 'Line';\n\n var vLen = this.vertices.length;\n var uvLen = this.uvs.length;\n\n for (var vi = 0, l = vertices.length; vi < l; vi++) {\n\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen));\n\n }\n\n for (var uvi = 0, l = uvs.length; uvi < l; uvi++) {\n\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen));\n\n }\n\n }\n\n };\n\n state.startObject('', false);\n\n return state;\n\n },\n\n parse: function(text) {\n\n console.time('OBJLoader');\n\n var state = this._createParserState();\n\n if (text.indexOf('\\r\\n') !== -1) {\n\n // This is faster than String.split with regex that splits on both\n text = text.replace('\\r\\n', '\\n');\n\n }\n\n var lines = text.split('\\n');\n var line = '',\n lineFirstChar = '',\n lineSecondChar = '';\n var lineLength = 0;\n var result = [];\n\n // Faster to just trim left side of the line. Use if available.\n var trimLeft = (typeof ''.trimLeft === 'function');\n\n for (var i = 0, l = lines.length; i < l; i++) {\n\n line = lines[i];\n\n line = trimLeft ? line.trimLeft() : line.trim();\n\n lineLength = line.length;\n\n if (lineLength === 0) continue;\n\n lineFirstChar = line.charAt(0);\n\n // @todo invoke passed in handler if any\n if (lineFirstChar === '#') continue;\n\n if (lineFirstChar === 'v') {\n\n lineSecondChar = line.charAt(1);\n\n if (lineSecondChar === ' ' && (result = this.regexp.vertex_pattern.exec(line)) !== null) {\n\n // 0 1 2 3\n // [\"v 1.0 2.0 3.0\", \"1.0\", \"2.0\", \"3.0\"]\n\n state.vertices.push(\n parseFloat(result[1]),\n parseFloat(result[2]),\n parseFloat(result[3]));\n\n } else if (lineSecondChar === 'n' && (result = this.regexp.normal_pattern.exec(line)) !== null) {\n\n // 0 1 2 3\n // [\"vn 1.0 2.0 3.0\", \"1.0\", \"2.0\", \"3.0\"]\n\n state.normals.push(\n parseFloat(result[1]),\n parseFloat(result[2]),\n parseFloat(result[3]));\n\n } else if (lineSecondChar === 't' && (result = this.regexp.uv_pattern.exec(line)) !== null) {\n\n // 0 1 2\n // [\"vt 0.1 0.2\", \"0.1\", \"0.2\"]\n\n state.uvs.push(\n parseFloat(result[1]),\n parseFloat(result[2]));\n\n } else {\n\n throw new Error(\"Unexpected vertex/normal/uv line: '\" + line + \"'\");\n\n }\n\n } else if (lineFirstChar === \"f\") {\n\n if ((result = this.regexp.face_vertex_uv_normal.exec(line)) !== null) {\n\n // f vertex/uv/normal vertex/uv/normal vertex/uv/normal\n // 0 1 2 3 4 5 6 7 8 9 10 11 12\n // [\"f 1/1/1 2/2/2 3/3/3\", \"1\", \"1\", \"1\", \"2\", \"2\", \"2\", \"3\", \"3\", \"3\", undefined, undefined, undefined]\n\n state.addFace(\n result[1], result[4], result[7], result[10],\n result[2], result[5], result[8], result[11],\n result[3], result[6], result[9], result[12]);\n\n } else if ((result = this.regexp.face_vertex_uv.exec(line)) !== null) {\n\n // f vertex/uv vertex/uv vertex/uv\n // 0 1 2 3 4 5 6 7 8\n // [\"f 1/1 2/2 3/3\", \"1\", \"1\", \"2\", \"2\", \"3\", \"3\", undefined, undefined]\n\n state.addFace(\n result[1], result[3], result[5], result[7],\n result[2], result[4], result[6], result[8]);\n\n } else if ((result = this.regexp.face_vertex_normal.exec(line)) !== null) {\n\n // f vertex//normal vertex//normal vertex//normal\n // 0 1 2 3 4 5 6 7 8\n // [\"f 1//1 2//2 3//3\", \"1\", \"1\", \"2\", \"2\", \"3\", \"3\", undefined, undefined]\n\n state.addFace(\n result[1], result[3], result[5], result[7],\n undefined, undefined, undefined, undefined,\n result[2], result[4], result[6], result[8]);\n\n } else if ((result = this.regexp.face_vertex.exec(line)) !== null) {\n\n // f vertex vertex vertex\n // 0 1 2 3 4\n // [\"f 1 2 3\", \"1\", \"2\", \"3\", undefined]\n\n state.addFace(\n result[1], result[2], result[3], result[4]);\n\n } else {\n\n throw new Error(\"Unexpected face line: '\" + line + \"'\");\n\n }\n\n } else if (lineFirstChar === \"l\") {\n\n var lineParts = line.substring(1).trim().split(\" \");\n var lineVertices = [],\n lineUVs = [];\n\n if (line.indexOf(\"/\") === -1) {\n\n lineVertices = lineParts;\n\n } else {\n\n for (var li = 0, llen = lineParts.length; li < llen; li++) {\n\n var parts = lineParts[li].split(\"/\");\n\n if (parts[0] !== \"\") lineVertices.push(parts[0]);\n if (parts[1] !== \"\") lineUVs.push(parts[1]);\n\n }\n\n }\n state.addLineGeometry(lineVertices, lineUVs);\n\n } else if ((result = this.regexp.object_pattern.exec(line)) !== null) {\n\n // o object_name\n // or\n // g group_name\n\n var name = result[0].substr(1).trim();\n state.startObject(name);\n\n } else if (this.regexp.material_use_pattern.test(line)) {\n\n // material\n\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n\n } else if (this.regexp.material_library_pattern.test(line)) {\n\n // mtl file\n\n state.materialLibraries.push(line.substring(7).trim());\n\n } else if ((result = this.regexp.smoothing_pattern.exec(line)) !== null) {\n\n // smooth shading\n\n // @todo Handle files that have varying smooth values for a set of faces inside one geometry,\n // but does not define a usemtl for each face set.\n // This should be detected and a dummy material created (later MultiMaterial and geometry groups).\n // This requires some care to not create extra material on each smooth value for \"normal\" obj files.\n // where explicit usemtl defines geometry groups.\n // Example asset: examples/models/obj/cerberus/Cerberus.obj\n\n var value = result[1].trim().toLowerCase();\n state.object.smooth = (value === '1' || value === 'on');\n\n var material = state.object.currentMaterial();\n if (material) {\n\n material.smooth = state.object.smooth;\n\n }\n\n } else {\n\n // Handle null terminated files without exception\n if (line === '\\0') continue;\n\n throw new Error(\"Unexpected line: '\" + line + \"'\");\n\n }\n\n }\n\n state.finalize();\n\n var container = new THREE.Group();\n container.materialLibraries = [].concat(state.materialLibraries);\n\n for (var i = 0, l = state.objects.length; i < l; i++) {\n\n var object = state.objects[i];\n var geometry = object.geometry;\n var materials = object.materials;\n var isLine = (geometry.type === 'Line');\n\n // Skip o/g line declarations that did not follow with any faces\n if (geometry.vertices.length === 0) continue;\n\n var buffergeometry = new THREE.BufferGeometry();\n\n buffergeometry.addAttribute('position', new THREE.BufferAttribute(new Float32Array(geometry.vertices), 3));\n\n if (geometry.normals.length > 0) {\n\n buffergeometry.addAttribute('normal', new THREE.BufferAttribute(new Float32Array(geometry.normals), 3));\n\n } else {\n\n buffergeometry.computeVertexNormals();\n\n }\n\n if (geometry.uvs.length > 0) {\n\n buffergeometry.addAttribute('uv', new THREE.BufferAttribute(new Float32Array(geometry.uvs), 2));\n\n }\n\n // Create materials\n\n var createdMaterials = [];\n\n for (var mi = 0, miLen = materials.length; mi < miLen; mi++) {\n\n var sourceMaterial = materials[mi];\n var material = undefined;\n\n if (this.materials !== null) {\n\n material = this.materials.create(sourceMaterial.name);\n\n // mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.\n if (isLine && material && !(material instanceof THREE.LineBasicMaterial)) {\n\n var materialLine = new THREE.LineBasicMaterial();\n materialLine.copy(material);\n material = materialLine;\n\n }\n\n }\n\n if (!material) {\n\n material = (!isLine ? new THREE.MeshPhongMaterial() : new THREE.LineBasicMaterial());\n material.name = sourceMaterial.name;\n\n }\n\n material.shading = sourceMaterial.smooth ? THREE.SmoothShading : THREE.FlatShading;\n\n createdMaterials.push(material);\n\n }\n\n // Create mesh\n\n var mesh;\n\n if (createdMaterials.length > 1) {\n\n for (var mi = 0, miLen = materials.length; mi < miLen; mi++) {\n\n var sourceMaterial = materials[mi];\n buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi);\n\n }\n\n var multiMaterial = new THREE.MultiMaterial(createdMaterials);\n mesh = (!isLine ? new THREE.Mesh(buffergeometry, multiMaterial) : new THREE.Line(buffergeometry, multiMaterial));\n\n } else {\n\n mesh = (!isLine ? new THREE.Mesh(buffergeometry, createdMaterials[0]) : new THREE.Line(buffergeometry, createdMaterials[0]));\n }\n\n mesh.name = object.name;\n\n container.add(mesh);\n\n }\n\n console.timeEnd('OBJLoader');\n\n return container;\n\n }\n\n}; ","/**\n * @author qiao / https://github.com/qiao\n * @author mrdoob / http://mrdoob.com\n * @author alteredq / http://alteredqualia.com/\n * @author WestLangley / http://github.com/WestLangley\n * @author erich666 / http://erichaines.com\n */\n\n// This set of controls performs orbiting, dollying (zooming), and panning.\n// Unlike TrackballControls, it maintains the \"up\" direction object.up (+Y by default).\n//\n// Orbit - left mouse / touch: one-finger move\n// Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish\n// Pan - right mouse, or arrow keys / touch: two-finger move\n\nTHREE.OrbitControls = function ( object, domElement ) {\n\n this.object = object;\n\n this.domElement = ( domElement !== undefined ) ? domElement : document;\n\n // Set to false to disable this control\n this.enabled = true;\n\n // \"target\" sets the location of focus, where the object orbits around\n this.target = new THREE.Vector3();\n\n // How far you can dolly in and out ( PerspectiveCamera only )\n this.minDistance = 0;\n this.maxDistance = Infinity;\n\n // How far you can zoom in and out ( OrthographicCamera only )\n this.minZoom = 0;\n this.maxZoom = Infinity;\n\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n this.minPolarAngle = 0; // radians\n this.maxPolarAngle = Math.PI; // radians\n\n // How far you can orbit horizontally, upper and lower limits.\n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n this.minAzimuthAngle = - Infinity; // radians\n this.maxAzimuthAngle = Infinity; // radians\n\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n this.enableDamping = false;\n this.dampingFactor = 0.25;\n\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n this.enableZoom = true;\n this.zoomSpeed = 1.0;\n\n // Set to false to disable rotating\n this.enableRotate = true;\n this.rotateSpeed = 1.0;\n\n // Set to false to disable panning\n this.enablePan = true;\n this.panSpeed = 1.0;\n this.screenSpacePanning = false; // if true, pan in screen-space\n this.keyPanSpeed = 7.0; // pixels moved per arrow key push\n\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n this.autoRotate = false;\n this.autoRotateSpeed = 2.0; // 30 seconds per round when fps is 60\n\n // Set to false to disable use of the keys\n this.enableKeys = true;\n\n // The four arrow keys\n this.keys = { LEFT: 37, UP: 38, RIGHT: 39, BOTTOM: 40 };\n\n // Mouse buttons\n this.mouseButtons = { ORBIT: THREE.MOUSE.LEFT, ZOOM: THREE.MOUSE.MIDDLE, PAN: THREE.MOUSE.RIGHT };\n\n // for reset\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object.zoom;\n\n //\n // public methods\n //\n\n this.getPolarAngle = function () {\n\n return spherical.phi;\n\n };\n\n this.getAzimuthalAngle = function () {\n\n return spherical.theta;\n\n };\n\n this.saveState = function () {\n\n scope.target0.copy( scope.target );\n scope.position0.copy( scope.object.position );\n scope.zoom0 = scope.object.zoom;\n\n };\n\n this.reset = function () {\n\n scope.target.copy( scope.target0 );\n scope.object.position.copy( scope.position0 );\n scope.object.zoom = scope.zoom0;\n\n scope.object.updateProjectionMatrix();\n scope.dispatchEvent( changeEvent );\n\n scope.update();\n\n state = STATE.NONE;\n\n };\n\n // this method is exposed, but perhaps it would be better if we can make it private...\n this.update = function () {\n\n var offset = new THREE.Vector3();\n\n // so camera.up is the orbit axis\n var quat = new THREE.Quaternion().setFromUnitVectors( object.up, new THREE.Vector3( 0, 1, 0 ) );\n var quatInverse = quat.clone().inverse();\n\n var lastPosition = new THREE.Vector3();\n var lastQuaternion = new THREE.Quaternion();\n\n return function update() {\n\n var position = scope.object.position;\n\n offset.copy( position ).sub( scope.target );\n\n // rotate offset to \"y-axis-is-up\" space\n offset.applyQuaternion( quat );\n\n // angle from z-axis around y-axis\n spherical.setFromVector3( offset );\n\n if ( scope.autoRotate && state === STATE.NONE ) {\n\n rotateLeft( getAutoRotationAngle() );\n\n }\n\n spherical.theta += sphericalDelta.theta;\n spherical.phi += sphericalDelta.phi;\n\n // restrict theta to be between desired limits\n spherical.theta = Math.max( scope.minAzimuthAngle, Math.min( scope.maxAzimuthAngle, spherical.theta ) );\n\n // restrict phi to be between desired limits\n spherical.phi = Math.max( scope.minPolarAngle, Math.min( scope.maxPolarAngle, spherical.phi ) );\n\n spherical.makeSafe();\n\n\n spherical.radius *= scale;\n\n // restrict radius to be between desired limits\n spherical.radius = Math.max( scope.minDistance, Math.min( scope.maxDistance, spherical.radius ) );\n\n // move target to panned location\n scope.target.add( panOffset );\n\n offset.setFromSpherical( spherical );\n\n // rotate offset back to \"camera-up-vector-is-up\" space\n offset.applyQuaternion( quatInverse );\n\n position.copy( scope.target ).add( offset );\n\n scope.object.lookAt( scope.target );\n\n if ( scope.enableDamping === true ) {\n\n sphericalDelta.theta *= ( 1 - scope.dampingFactor );\n sphericalDelta.phi *= ( 1 - scope.dampingFactor );\n\n panOffset.multiplyScalar( 1 - scope.dampingFactor );\n\n } else {\n\n sphericalDelta.set( 0, 0, 0 );\n\n panOffset.set( 0, 0, 0 );\n\n }\n\n scale = 1;\n\n // update condition is:\n // min(camera displacement, camera rotation in radians)^2 > EPS\n // using small-angle approximation cos(x/2) = 1 - x^2 / 8\n\n if ( zoomChanged ||\n lastPosition.distanceToSquared( scope.object.position ) > EPS ||\n 8 * ( 1 - lastQuaternion.dot( scope.object.quaternion ) ) > EPS ) {\n\n scope.dispatchEvent( changeEvent );\n\n lastPosition.copy( scope.object.position );\n lastQuaternion.copy( scope.object.quaternion );\n zoomChanged = false;\n\n return true;\n\n }\n\n return false;\n\n };\n\n }();\n\n this.dispose = function () {\n\n scope.domElement.removeEventListener( 'contextmenu', onContextMenu, false );\n scope.domElement.removeEventListener( 'mousedown', onMouseDown, false );\n scope.domElement.removeEventListener( 'wheel', onMouseWheel, false );\n\n scope.domElement.removeEventListener( 'touchstart', onTouchStart, false );\n scope.domElement.removeEventListener( 'touchend', onTouchEnd, false );\n scope.domElement.removeEventListener( 'touchmove', onTouchMove, false );\n\n document.removeEventListener( 'mousemove', onMouseMove, false );\n document.removeEventListener( 'mouseup', onMouseUp, false );\n\n window.removeEventListener( 'keydown', onKeyDown, false );\n\n //scope.dispatchEvent( { type: 'dispose' } ); // should this be added here?\n\n };\n\n //\n // internals\n //\n\n var scope = this;\n\n var changeEvent = { type: 'change' };\n var startEvent = { type: 'start' };\n var endEvent = { type: 'end' };\n\n var STATE = { NONE: - 1, ROTATE: 0, DOLLY: 1, PAN: 2, TOUCH_ROTATE: 3, TOUCH_DOLLY_PAN: 4 };\n\n var state = STATE.NONE;\n\n var EPS = 0.000001;\n\n // current position in spherical coordinates\n var spherical = new THREE.Spherical();\n var sphericalDelta = new THREE.Spherical();\n\n var scale = 1;\n var panOffset = new THREE.Vector3();\n var zoomChanged = false;\n\n var rotateStart = new THREE.Vector2();\n var rotateEnd = new THREE.Vector2();\n var rotateDelta = new THREE.Vector2();\n\n var panStart = new THREE.Vector2();\n var panEnd = new THREE.Vector2();\n var panDelta = new THREE.Vector2();\n\n var dollyStart = new THREE.Vector2();\n var dollyEnd = new THREE.Vector2();\n var dollyDelta = new THREE.Vector2();\n\n function getAutoRotationAngle() {\n\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n\n }\n\n function getZoomScale() {\n\n return Math.pow( 0.95, scope.zoomSpeed );\n\n }\n\n function rotateLeft( angle ) {\n\n sphericalDelta.theta -= angle;\n\n }\n\n function rotateUp( angle ) {\n\n sphericalDelta.phi -= angle;\n\n }\n\n var panLeft = function () {\n\n var v = new THREE.Vector3();\n\n return function panLeft( distance, objectMatrix ) {\n\n v.setFromMatrixColumn( objectMatrix, 0 ); // get X column of objectMatrix\n v.multiplyScalar( - distance );\n\n panOffset.add( v );\n\n };\n\n }();\n\n var panUp = function () {\n\n var v = new THREE.Vector3();\n\n return function panUp( distance, objectMatrix ) {\n\n if ( scope.screenSpacePanning === true ) {\n\n v.setFromMatrixColumn( objectMatrix, 1 );\n\n } else {\n\n v.setFromMatrixColumn( objectMatrix, 0 );\n v.crossVectors( scope.object.up, v );\n\n }\n\n v.multiplyScalar( distance );\n\n panOffset.add( v );\n\n };\n\n }();\n\n // deltaX and deltaY are in pixels; right and down are positive\n var pan = function () {\n\n var offset = new THREE.Vector3();\n\n return function pan( deltaX, deltaY ) {\n\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n if ( scope.object.isPerspectiveCamera ) {\n\n // perspective\n var position = scope.object.position;\n offset.copy( position ).sub( scope.target );\n var targetDistance = offset.length();\n\n // half of the fov is center to top of screen\n targetDistance *= Math.tan( ( scope.object.fov / 2 ) * Math.PI / 180.0 );\n\n // we use only clientHeight here so aspect ratio does not distort speed\n panLeft( 2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix );\n panUp( 2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix );\n\n } else if ( scope.object.isOrthographicCamera ) {\n\n // orthographic\n panLeft( deltaX * ( scope.object.right - scope.object.left ) / scope.object.zoom / element.clientWidth, scope.object.matrix );\n panUp( deltaY * ( scope.object.top - scope.object.bottom ) / scope.object.zoom / element.clientHeight, scope.object.matrix );\n\n } else {\n\n // camera neither orthographic nor perspective\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.' );\n scope.enablePan = false;\n\n }\n\n };\n\n }();\n\n function dollyIn( dollyScale ) {\n\n if ( scope.object.isPerspectiveCamera ) {\n\n scale /= dollyScale;\n\n } else if ( scope.object.isOrthographicCamera ) {\n\n scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom * dollyScale ) );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n } else {\n\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n scope.enableZoom = false;\n\n }\n\n }\n\n function dollyOut( dollyScale ) {\n\n if ( scope.object.isPerspectiveCamera ) {\n\n scale *= dollyScale;\n\n } else if ( scope.object.isOrthographicCamera ) {\n\n scope.object.zoom = Math.max( scope.minZoom, Math.min( scope.maxZoom, scope.object.zoom / dollyScale ) );\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n\n } else {\n\n console.warn( 'WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.' );\n scope.enableZoom = false;\n\n }\n\n }\n\n //\n // event callbacks - update the object state\n //\n\n function handleMouseDownRotate( event ) {\n\n //console.log( 'handleMouseDownRotate' );\n\n rotateStart.set( event.clientX, event.clientY );\n\n }\n\n function handleMouseDownDolly( event ) {\n\n //console.log( 'handleMouseDownDolly' );\n\n dollyStart.set( event.clientX, event.clientY );\n\n }\n\n function handleMouseDownPan( event ) {\n\n //console.log( 'handleMouseDownPan' );\n\n panStart.set( event.clientX, event.clientY );\n\n }\n\n function handleMouseMoveRotate( event ) {\n\n //console.log( 'handleMouseMoveRotate' );\n\n rotateEnd.set( event.clientX, event.clientY );\n\n rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n rotateStart.copy( rotateEnd );\n\n scope.update();\n\n }\n\n function handleMouseMoveDolly( event ) {\n\n //console.log( 'handleMouseMoveDolly' );\n\n dollyEnd.set( event.clientX, event.clientY );\n\n dollyDelta.subVectors( dollyEnd, dollyStart );\n\n if ( dollyDelta.y > 0 ) {\n\n dollyIn( getZoomScale() );\n\n } else if ( dollyDelta.y < 0 ) {\n\n dollyOut( getZoomScale() );\n\n }\n\n dollyStart.copy( dollyEnd );\n\n scope.update();\n\n }\n\n function handleMouseMovePan( event ) {\n\n //console.log( 'handleMouseMovePan' );\n\n panEnd.set( event.clientX, event.clientY );\n\n panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n pan( panDelta.x, panDelta.y );\n\n panStart.copy( panEnd );\n\n scope.update();\n\n }\n\n function handleMouseUp( event ) {\n\n // console.log( 'handleMouseUp' );\n\n }\n\n function handleMouseWheel( event ) {\n\n // console.log( 'handleMouseWheel' );\n\n if ( event.deltaY < 0 ) {\n\n dollyOut( getZoomScale() );\n\n } else if ( event.deltaY > 0 ) {\n\n dollyIn( getZoomScale() );\n\n }\n\n scope.update();\n\n }\n\n function handleKeyDown( event ) {\n\n //console.log( 'handleKeyDown' );\n\n switch ( event.keyCode ) {\n\n case scope.keys.UP:\n pan( 0, scope.keyPanSpeed );\n scope.update();\n break;\n\n case scope.keys.BOTTOM:\n pan( 0, - scope.keyPanSpeed );\n scope.update();\n break;\n\n case scope.keys.LEFT:\n pan( scope.keyPanSpeed, 0 );\n scope.update();\n break;\n\n case scope.keys.RIGHT:\n pan( - scope.keyPanSpeed, 0 );\n scope.update();\n break;\n\n }\n\n }\n\n function handleTouchStartRotate( event ) {\n\n //console.log( 'handleTouchStartRotate' );\n\n rotateStart.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n }\n\n function handleTouchStartDollyPan( event ) {\n\n //console.log( 'handleTouchStartDollyPan' );\n\n if ( scope.enableZoom ) {\n\n var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n var distance = Math.sqrt( dx * dx + dy * dy );\n\n dollyStart.set( 0, distance );\n\n }\n\n if ( scope.enablePan ) {\n\n var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n panStart.set( x, y );\n\n }\n\n }\n\n function handleTouchMoveRotate( event ) {\n\n //console.log( 'handleTouchMoveRotate' );\n\n rotateEnd.set( event.touches[ 0 ].pageX, event.touches[ 0 ].pageY );\n\n rotateDelta.subVectors( rotateEnd, rotateStart ).multiplyScalar( scope.rotateSpeed );\n\n var element = scope.domElement === document ? scope.domElement.body : scope.domElement;\n\n rotateLeft( 2 * Math.PI * rotateDelta.x / element.clientHeight ); // yes, height\n\n rotateUp( 2 * Math.PI * rotateDelta.y / element.clientHeight );\n\n rotateStart.copy( rotateEnd );\n\n scope.update();\n\n }\n\n function handleTouchMoveDollyPan( event ) {\n\n //console.log( 'handleTouchMoveDollyPan' );\n\n if ( scope.enableZoom ) {\n\n var dx = event.touches[ 0 ].pageX - event.touches[ 1 ].pageX;\n var dy = event.touches[ 0 ].pageY - event.touches[ 1 ].pageY;\n\n var distance = Math.sqrt( dx * dx + dy * dy );\n\n dollyEnd.set( 0, distance );\n\n dollyDelta.set( 0, Math.pow( dollyEnd.y / dollyStart.y, scope.zoomSpeed ) );\n\n dollyIn( dollyDelta.y );\n\n dollyStart.copy( dollyEnd );\n\n }\n\n if ( scope.enablePan ) {\n\n var x = 0.5 * ( event.touches[ 0 ].pageX + event.touches[ 1 ].pageX );\n var y = 0.5 * ( event.touches[ 0 ].pageY + event.touches[ 1 ].pageY );\n\n panEnd.set( x, y );\n\n panDelta.subVectors( panEnd, panStart ).multiplyScalar( scope.panSpeed );\n\n pan( panDelta.x, panDelta.y );\n\n panStart.copy( panEnd );\n\n }\n\n scope.update();\n\n }\n\n function handleTouchEnd( event ) {\n\n //console.log( 'handleTouchEnd' );\n\n }\n\n //\n // event handlers - FSM: listen for events and reset state\n //\n\n function onMouseDown( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n\n switch ( event.button ) {\n\n case scope.mouseButtons.ORBIT:\n\n if ( scope.enableRotate === false ) return;\n\n handleMouseDownRotate( event );\n\n state = STATE.ROTATE;\n\n break;\n\n case scope.mouseButtons.ZOOM:\n\n if ( scope.enableZoom === false ) return;\n\n handleMouseDownDolly( event );\n\n state = STATE.DOLLY;\n\n break;\n\n case scope.mouseButtons.PAN:\n\n if ( scope.enablePan === false ) return;\n\n handleMouseDownPan( event );\n\n state = STATE.PAN;\n\n break;\n\n }\n\n if ( state !== STATE.NONE ) {\n\n document.addEventListener( 'mousemove', onMouseMove, false );\n document.addEventListener( 'mouseup', onMouseUp, false );\n\n scope.dispatchEvent( startEvent );\n\n }\n\n }\n\n function onMouseMove( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n\n switch ( state ) {\n\n case STATE.ROTATE:\n\n if ( scope.enableRotate === false ) return;\n\n handleMouseMoveRotate( event );\n\n break;\n\n case STATE.DOLLY:\n\n if ( scope.enableZoom === false ) return;\n\n handleMouseMoveDolly( event );\n\n break;\n\n case STATE.PAN:\n\n if ( scope.enablePan === false ) return;\n\n handleMouseMovePan( event );\n\n break;\n\n }\n\n }\n\n function onMouseUp( event ) {\n\n if ( scope.enabled === false ) return;\n\n handleMouseUp( event );\n\n document.removeEventListener( 'mousemove', onMouseMove, false );\n document.removeEventListener( 'mouseup', onMouseUp, false );\n\n scope.dispatchEvent( endEvent );\n\n state = STATE.NONE;\n\n }\n\n function onMouseWheel( event ) {\n\n if ( scope.enabled === false || scope.enableZoom === false || ( state !== STATE.NONE && state !== STATE.ROTATE ) ) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n scope.dispatchEvent( startEvent );\n\n handleMouseWheel( event );\n\n scope.dispatchEvent( endEvent );\n\n }\n\n function onKeyDown( event ) {\n\n if ( scope.enabled === false || scope.enableKeys === false || scope.enablePan === false ) return;\n\n handleKeyDown( event );\n\n }\n\n function onTouchStart( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n\n switch ( event.touches.length ) {\n\n case 1: // one-fingered touch: rotate\n\n if ( scope.enableRotate === false ) return;\n\n handleTouchStartRotate( event );\n\n state = STATE.TOUCH_ROTATE;\n\n break;\n\n case 2: // two-fingered touch: dolly-pan\n\n if ( scope.enableZoom === false && scope.enablePan === false ) return;\n\n handleTouchStartDollyPan( event );\n\n state = STATE.TOUCH_DOLLY_PAN;\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n if ( state !== STATE.NONE ) {\n\n scope.dispatchEvent( startEvent );\n\n }\n\n }\n\n function onTouchMove( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n switch ( event.touches.length ) {\n\n case 1: // one-fingered touch: rotate\n\n if ( scope.enableRotate === false ) return;\n if ( state !== STATE.TOUCH_ROTATE ) return; // is this needed?\n\n handleTouchMoveRotate( event );\n\n break;\n\n case 2: // two-fingered touch: dolly-pan\n\n if ( scope.enableZoom === false && scope.enablePan === false ) return;\n if ( state !== STATE.TOUCH_DOLLY_PAN ) return; // is this needed?\n\n handleTouchMoveDollyPan( event );\n\n break;\n\n default:\n\n state = STATE.NONE;\n\n }\n\n }\n\n function onTouchEnd( event ) {\n\n if ( scope.enabled === false ) return;\n\n handleTouchEnd( event );\n\n scope.dispatchEvent( endEvent );\n\n state = STATE.NONE;\n\n }\n\n function onContextMenu( event ) {\n\n if ( scope.enabled === false ) return;\n\n event.preventDefault();\n\n }\n\n //\n\n scope.domElement.addEventListener( 'contextmenu', onContextMenu, false );\n\n scope.domElement.addEventListener( 'mousedown', onMouseDown, false );\n scope.domElement.addEventListener( 'wheel', onMouseWheel, false );\n\n scope.domElement.addEventListener( 'touchstart', onTouchStart, false );\n scope.domElement.addEventListener( 'touchend', onTouchEnd, false );\n scope.domElement.addEventListener( 'touchmove', onTouchMove, false );\n\n window.addEventListener( 'keydown', onKeyDown, false );\n\n // force an update at start\n\n this.update();\n\n};\n\nTHREE.OrbitControls.prototype = Object.create( THREE.EventDispatcher.prototype );\nTHREE.OrbitControls.prototype.constructor = THREE.OrbitControls;\n\nObject.defineProperties( THREE.OrbitControls.prototype, {\n\n center: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .center has been renamed to .target' );\n return this.target;\n\n }\n\n },\n\n // backward compatibility\n\n noZoom: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n return ! this.enableZoom;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noZoom has been deprecated. Use .enableZoom instead.' );\n this.enableZoom = ! value;\n\n }\n\n },\n\n noRotate: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n return ! this.enableRotate;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noRotate has been deprecated. Use .enableRotate instead.' );\n this.enableRotate = ! value;\n\n }\n\n },\n\n noPan: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n return ! this.enablePan;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noPan has been deprecated. Use .enablePan instead.' );\n this.enablePan = ! value;\n\n }\n\n },\n\n noKeys: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n return ! this.enableKeys;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .noKeys has been deprecated. Use .enableKeys instead.' );\n this.enableKeys = ! value;\n\n }\n\n },\n\n staticMoving: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n return ! this.enableDamping;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .staticMoving has been deprecated. Use .enableDamping instead.' );\n this.enableDamping = ! value;\n\n }\n\n },\n\n dynamicDampingFactor: {\n\n get: function () {\n\n console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n return this.dampingFactor;\n\n },\n\n set: function ( value ) {\n\n console.warn( 'THREE.OrbitControls: .dynamicDampingFactor has been renamed. Use .dampingFactor instead.' );\n this.dampingFactor = value;\n\n }\n\n }\n\n} );","/*\n * Konami Code For jQuery Plugin\n * 1.3.0, 7 March 2014\n *\n * Using the Konami code, easily configure and Easter Egg for your page or any element on the page.\n *\n * Copyright 2011 - 2014 Tom McFarlin, http://tommcfarlin.com\n * Released under the MIT License\n */\n!function(e){\"use strict\";e.fn.konami=function(t){var n,i;return n=e.extend({},e.fn.konami.defaults,t),i=[],n.eventProperties=e.extend({},t,n.eventProperties),this.keyup(function(e){var t=e.keyCode||e.which;n.code.length>i.push(t)||(n.code.length= 0) {\n return 1;\n }\n }\n\n return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n var called = false;\n return function () {\n if (called) {\n return;\n }\n\n called = true;\n window.Promise.resolve().then(function () {\n called = false;\n fn();\n });\n };\n}\n\nfunction taskDebounce(fn) {\n var scheduled = false;\n return function () {\n if (!scheduled) {\n scheduled = true;\n setTimeout(function () {\n scheduled = false;\n fn();\n }, timeoutDuration);\n }\n };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\n\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\n\nfunction isFunction(functionToCheck) {\n var getType = {};\n return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\n\n\nfunction getStyleComputedProperty(element, property) {\n if (element.nodeType !== 1) {\n return [];\n } // NOTE: 1 DOM access here\n\n\n var window = element.ownerDocument.defaultView;\n var css = window.getComputedStyle(element, null);\n return property ? css[property] : css;\n}\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\n\n\nfunction getParentNode(element) {\n if (element.nodeName === 'HTML') {\n return element;\n }\n\n return element.parentNode || element.host;\n}\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\n\n\nfunction getScrollParent(element) {\n // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n if (!element) {\n return document.body;\n }\n\n switch (element.nodeName) {\n case 'HTML':\n case 'BODY':\n return element.ownerDocument.body;\n\n case '#document':\n return element.body;\n } // Firefox want us to check `-x` and `-y` variations as well\n\n\n var _getStyleComputedProp = getStyleComputedProperty(element),\n overflow = _getStyleComputedProp.overflow,\n overflowX = _getStyleComputedProp.overflowX,\n overflowY = _getStyleComputedProp.overflowY;\n\n if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n return element;\n }\n\n return getScrollParent(getParentNode(element));\n}\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\n\n\nfunction getReferenceNode(reference) {\n return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\n\nfunction isIE(version) {\n if (version === 11) {\n return isIE11;\n }\n\n if (version === 10) {\n return isIE10;\n }\n\n return isIE11 || isIE10;\n}\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n\n\nfunction getOffsetParent(element) {\n if (!element) {\n return document.documentElement;\n }\n\n var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here\n\n var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent\n\n while (offsetParent === noOffsetParent && element.nextElementSibling) {\n offsetParent = (element = element.nextElementSibling).offsetParent;\n }\n\n var nodeName = offsetParent && offsetParent.nodeName;\n\n if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n return element ? element.ownerDocument.documentElement : document.documentElement;\n } // .offsetParent will return the closest TH, TD or TABLE in case\n // no offsetParent is present, I hate this job...\n\n\n if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n return getOffsetParent(offsetParent);\n }\n\n return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY') {\n return false;\n }\n\n return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\n\n\nfunction getRoot(node) {\n if (node.parentNode !== null) {\n return getRoot(node.parentNode);\n }\n\n return node;\n}\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\n\n\nfunction findCommonOffsetParent(element1, element2) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n return document.documentElement;\n } // Here we make sure to give as \"start\" the element that comes first in the DOM\n\n\n var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n var start = order ? element1 : element2;\n var end = order ? element2 : element1; // Get common ancestor container\n\n var range = document.createRange();\n range.setStart(start, 0);\n range.setEnd(end, 0);\n var commonAncestorContainer = range.commonAncestorContainer; // Both nodes are inside #document\n\n if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n if (isOffsetContainer(commonAncestorContainer)) {\n return commonAncestorContainer;\n }\n\n return getOffsetParent(commonAncestorContainer);\n } // one of the nodes is inside shadowDOM, find which one\n\n\n var element1root = getRoot(element1);\n\n if (element1root.host) {\n return findCommonOffsetParent(element1root.host, element2);\n } else {\n return findCommonOffsetParent(element1, getRoot(element2).host);\n }\n}\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\n\n\nfunction getScroll(element) {\n var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n var html = element.ownerDocument.documentElement;\n var scrollingElement = element.ownerDocument.scrollingElement || html;\n return scrollingElement[upperSide];\n }\n\n return element[upperSide];\n}\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\n\n\nfunction includeScroll(rect, element) {\n var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n var modifier = subtract ? -1 : 1;\n rect.top += scrollTop * modifier;\n rect.bottom += scrollTop * modifier;\n rect.left += scrollLeft * modifier;\n rect.right += scrollLeft * modifier;\n return rect;\n}\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\n\nfunction getBordersSize(styles, axis) {\n var sideA = axis === 'x' ? 'Left' : 'Top';\n var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n return parseFloat(styles['border' + sideA + 'Width']) + parseFloat(styles['border' + sideB + 'Width']);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n var body = document.body;\n var html = document.documentElement;\n var computedStyle = isIE(10) && getComputedStyle(html);\n return {\n height: getSize('Height', body, html, computedStyle),\n width: getSize('Width', body, html, computedStyle)\n };\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n};\n\nvar createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n}();\n\nvar defineProperty = function defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n};\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\n\n\nfunction getClientRect(offsets) {\n return _extends({}, offsets, {\n right: offsets.left + offsets.width,\n bottom: offsets.top + offsets.height\n });\n}\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\n\n\nfunction getBoundingClientRect(element) {\n var rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't\n // considered in DOM in some circumstances...\n // This isn't reproducible in IE10 compatibility mode of IE11\n\n try {\n if (isIE(10)) {\n rect = element.getBoundingClientRect();\n var scrollTop = getScroll(element, 'top');\n var scrollLeft = getScroll(element, 'left');\n rect.top += scrollTop;\n rect.left += scrollLeft;\n rect.bottom += scrollTop;\n rect.right += scrollLeft;\n } else {\n rect = element.getBoundingClientRect();\n }\n } catch (e) {}\n\n var result = {\n left: rect.left,\n top: rect.top,\n width: rect.right - rect.left,\n height: rect.bottom - rect.top\n }; // subtract scrollbar size from sizes\n\n var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n var width = sizes.width || element.clientWidth || result.width;\n var height = sizes.height || element.clientHeight || result.height;\n var horizScrollbar = element.offsetWidth - width;\n var vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n // we make this check conditional for performance reasons\n\n if (horizScrollbar || vertScrollbar) {\n var styles = getStyleComputedProperty(element);\n horizScrollbar -= getBordersSize(styles, 'x');\n vertScrollbar -= getBordersSize(styles, 'y');\n result.width -= horizScrollbar;\n result.height -= vertScrollbar;\n }\n\n return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n var isIE10 = isIE(10);\n var isHTML = parent.nodeName === 'HTML';\n var childrenRect = getBoundingClientRect(children);\n var parentRect = getBoundingClientRect(parent);\n var scrollParent = getScrollParent(children);\n var styles = getStyleComputedProperty(parent);\n var borderTopWidth = parseFloat(styles.borderTopWidth);\n var borderLeftWidth = parseFloat(styles.borderLeftWidth); // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n\n if (fixedPosition && isHTML) {\n parentRect.top = Math.max(parentRect.top, 0);\n parentRect.left = Math.max(parentRect.left, 0);\n }\n\n var offsets = getClientRect({\n top: childrenRect.top - parentRect.top - borderTopWidth,\n left: childrenRect.left - parentRect.left - borderLeftWidth,\n width: childrenRect.width,\n height: childrenRect.height\n });\n offsets.marginTop = 0;\n offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent\n // we do this only on HTML because it's the only element that behaves\n // differently when margins are applied to it. The margins are included in\n // the box of the documentElement, in the other cases not.\n\n if (!isIE10 && isHTML) {\n var marginTop = parseFloat(styles.marginTop);\n var marginLeft = parseFloat(styles.marginLeft);\n offsets.top -= borderTopWidth - marginTop;\n offsets.bottom -= borderTopWidth - marginTop;\n offsets.left -= borderLeftWidth - marginLeft;\n offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them\n\n offsets.marginTop = marginTop;\n offsets.marginLeft = marginLeft;\n }\n\n if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n offsets = includeScroll(offsets, parent);\n }\n\n return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var html = element.ownerDocument.documentElement;\n var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n var width = Math.max(html.clientWidth, window.innerWidth || 0);\n var height = Math.max(html.clientHeight, window.innerHeight || 0);\n var scrollTop = !excludeScroll ? getScroll(html) : 0;\n var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n var offset = {\n top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n width: width,\n height: height\n };\n return getClientRect(offset);\n}\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\n\n\nfunction isFixed(element) {\n var nodeName = element.nodeName;\n\n if (nodeName === 'BODY' || nodeName === 'HTML') {\n return false;\n }\n\n if (getStyleComputedProperty(element, 'position') === 'fixed') {\n return true;\n }\n\n var parentNode = getParentNode(element);\n\n if (!parentNode) {\n return false;\n }\n\n return isFixed(parentNode);\n}\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\n\nfunction getFixedPositionOffsetParent(element) {\n // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n if (!element || !element.parentElement || isIE()) {\n return document.documentElement;\n }\n\n var el = element.parentElement;\n\n while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n el = el.parentElement;\n }\n\n return el || document.documentElement;\n}\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\n\n\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here\n\n var boundaries = {\n top: 0,\n left: 0\n };\n var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); // Handle viewport case\n\n if (boundariesElement === 'viewport') {\n boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n } else {\n // Handle other cases based on DOM element used as boundaries\n var boundariesNode = void 0;\n\n if (boundariesElement === 'scrollParent') {\n boundariesNode = getScrollParent(getParentNode(reference));\n\n if (boundariesNode.nodeName === 'BODY') {\n boundariesNode = popper.ownerDocument.documentElement;\n }\n } else if (boundariesElement === 'window') {\n boundariesNode = popper.ownerDocument.documentElement;\n } else {\n boundariesNode = boundariesElement;\n }\n\n var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation\n\n if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n height = _getWindowSizes.height,\n width = _getWindowSizes.width;\n\n boundaries.top += offsets.top - offsets.marginTop;\n boundaries.bottom = height + offsets.top;\n boundaries.left += offsets.left - offsets.marginLeft;\n boundaries.right = width + offsets.left;\n } else {\n // for all the other DOM elements, this one is good\n boundaries = offsets;\n }\n } // Add paddings\n\n\n padding = padding || 0;\n var isPaddingNumber = typeof padding === 'number';\n boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n return boundaries;\n}\n\nfunction getArea(_ref) {\n var width = _ref.width,\n height = _ref.height;\n return width * height;\n}\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n if (placement.indexOf('auto') === -1) {\n return placement;\n }\n\n var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n var rects = {\n top: {\n width: boundaries.width,\n height: refRect.top - boundaries.top\n },\n right: {\n width: boundaries.right - refRect.right,\n height: boundaries.height\n },\n bottom: {\n width: boundaries.width,\n height: boundaries.bottom - refRect.bottom\n },\n left: {\n width: refRect.left - boundaries.left,\n height: boundaries.height\n }\n };\n var sortedAreas = Object.keys(rects).map(function (key) {\n return _extends({\n key: key\n }, rects[key], {\n area: getArea(rects[key])\n });\n }).sort(function (a, b) {\n return b.area - a.area;\n });\n var filteredAreas = sortedAreas.filter(function (_ref2) {\n var width = _ref2.width,\n height = _ref2.height;\n return width >= popper.clientWidth && height >= popper.clientHeight;\n });\n var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n var variation = placement.split('-')[1];\n return computedPlacement + (variation ? '-' + variation : '');\n}\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n\n\nfunction getReferenceOffsets(state, popper, reference) {\n var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\n\n\nfunction getOuterSizes(element) {\n var window = element.ownerDocument.defaultView;\n var styles = window.getComputedStyle(element);\n var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n var result = {\n width: element.offsetWidth + y,\n height: element.offsetHeight + x\n };\n return result;\n}\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\n\n\nfunction getOppositePlacement(placement) {\n var hash = {\n left: 'right',\n right: 'left',\n bottom: 'top',\n top: 'bottom'\n };\n return placement.replace(/left|right|bottom|top/g, function (matched) {\n return hash[matched];\n });\n}\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\n\n\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n placement = placement.split('-')[0]; // Get popper node sizes\n\n var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object\n\n var popperOffsets = {\n width: popperRect.width,\n height: popperRect.height\n }; // depending by the popper placement we have to compute its offsets slightly differently\n\n var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n var mainSide = isHoriz ? 'top' : 'left';\n var secondarySide = isHoriz ? 'left' : 'top';\n var measurement = isHoriz ? 'height' : 'width';\n var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n\n if (placement === secondarySide) {\n popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n } else {\n popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n }\n\n return popperOffsets;\n}\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n\n\nfunction find(arr, check) {\n // use native find if supported\n if (Array.prototype.find) {\n return arr.find(check);\n } // use `filter` to obtain the same behavior of `find`\n\n\n return arr.filter(check)[0];\n}\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n\n\nfunction findIndex(arr, prop, value) {\n // use native findIndex if supported\n if (Array.prototype.findIndex) {\n return arr.findIndex(function (cur) {\n return cur[prop] === value;\n });\n } // use `find` + `indexOf` if `findIndex` isn't supported\n\n\n var match = find(arr, function (obj) {\n return obj[prop] === value;\n });\n return arr.indexOf(match);\n}\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\n\n\nfunction runModifiers(modifiers, data, ends) {\n var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n modifiersToRun.forEach(function (modifier) {\n if (modifier['function']) {\n // eslint-disable-line dot-notation\n console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n }\n\n var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n\n if (modifier.enabled && isFunction(fn)) {\n // Add properties to offsets to make them a complete clientRect object\n // we do this before each modifier to make sure the previous one doesn't\n // mess with these values\n data.offsets.popper = getClientRect(data.offsets.popper);\n data.offsets.reference = getClientRect(data.offsets.reference);\n data = fn(data, modifier);\n }\n });\n return data;\n}\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.
\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\n\n\nfunction update() {\n // if popper is destroyed, don't perform any further update\n if (this.state.isDestroyed) {\n return;\n }\n\n var data = {\n instance: this,\n styles: {},\n arrowStyles: {},\n attributes: {},\n flipped: false,\n offsets: {}\n }; // compute reference element offsets\n\n data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n\n data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement`\n\n data.originalPlacement = data.placement;\n data.positionFixed = this.options.positionFixed; // compute the popper offsets\n\n data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers\n\n data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback\n // the other ones will call `onUpdate` callback\n\n if (!this.state.isCreated) {\n this.state.isCreated = true;\n this.options.onCreate(data);\n } else {\n this.options.onUpdate(data);\n }\n}\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\n\n\nfunction isModifierEnabled(modifiers, modifierName) {\n return modifiers.some(function (_ref) {\n var name = _ref.name,\n enabled = _ref.enabled;\n return enabled && name === modifierName;\n });\n}\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\n\n\nfunction getSupportedPropertyName(property) {\n var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n for (var i = 0; i < prefixes.length; i++) {\n var prefix = prefixes[i];\n var toCheck = prefix ? '' + prefix + upperProp : property;\n\n if (typeof document.body.style[toCheck] !== 'undefined') {\n return toCheck;\n }\n }\n\n return null;\n}\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\n\n\nfunction destroy() {\n this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled\n\n if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n this.popper.removeAttribute('x-placement');\n this.popper.style.position = '';\n this.popper.style.top = '';\n this.popper.style.left = '';\n this.popper.style.right = '';\n this.popper.style.bottom = '';\n this.popper.style.willChange = '';\n this.popper.style[getSupportedPropertyName('transform')] = '';\n }\n\n this.disableEventListeners(); // remove the popper if user explicitly asked for the deletion on destroy\n // do not use `remove` because IE11 doesn't support it\n\n if (this.options.removeOnDestroy) {\n this.popper.parentNode.removeChild(this.popper);\n }\n\n return this;\n}\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\n\n\nfunction getWindow(element) {\n var ownerDocument = element.ownerDocument;\n return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n var isBody = scrollParent.nodeName === 'BODY';\n var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n target.addEventListener(event, callback, {\n passive: true\n });\n\n if (!isBody) {\n attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n }\n\n scrollParents.push(target);\n}\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction setupEventListeners(reference, options, state, updateBound) {\n // Resize event listener on window\n state.updateBound = updateBound;\n getWindow(reference).addEventListener('resize', state.updateBound, {\n passive: true\n }); // Scroll event listener on scroll parents\n\n var scrollElement = getScrollParent(reference);\n attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n state.scrollElement = scrollElement;\n state.eventsEnabled = true;\n return state;\n}\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\n\n\nfunction enableEventListeners() {\n if (!this.state.eventsEnabled) {\n this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n }\n}\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction removeEventListeners(reference, state) {\n // Remove resize event listener on window\n getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents\n\n state.scrollParents.forEach(function (target) {\n target.removeEventListener('scroll', state.updateBound);\n }); // Reset state\n\n state.updateBound = null;\n state.scrollParents = [];\n state.scrollElement = null;\n state.eventsEnabled = false;\n return state;\n}\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\n\n\nfunction disableEventListeners() {\n if (this.state.eventsEnabled) {\n cancelAnimationFrame(this.scheduleUpdate);\n this.state = removeEventListeners(this.reference, this.state);\n }\n}\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\n\n\nfunction isNumeric(n) {\n return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n\n\nfunction setStyles(element, styles) {\n Object.keys(styles).forEach(function (prop) {\n var unit = ''; // add unit if the value is numeric and is one of the following\n\n if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n unit = 'px';\n }\n\n element.style[prop] = styles[prop] + unit;\n });\n}\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n\n\nfunction setAttributes(element, attributes) {\n Object.keys(attributes).forEach(function (prop) {\n var value = attributes[prop];\n\n if (value !== false) {\n element.setAttribute(prop, attributes[prop]);\n } else {\n element.removeAttribute(prop);\n }\n });\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\n\n\nfunction applyStyle(data) {\n // any property present in `data.styles` will be applied to the popper,\n // in this way we can make the 3rd party modifiers add custom styles to it\n // Be aware, modifiers could override the properties defined in the previous\n // lines of this modifier!\n setStyles(data.instance.popper, data.styles); // any property present in `data.attributes` will be applied to the popper,\n // they will be set as HTML attributes of the element\n\n setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties\n\n if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n setStyles(data.arrowElement, data.arrowStyles);\n }\n\n return data;\n}\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\n\n\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n // compute reference element offsets\n var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // compute auto placement, store placement inside the data object,\n // modifiers will be able to edit `placement` if needed\n // and refer to originalPlacement to know the original value\n\n var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because\n // without the position applied we can't guarantee correct computations\n\n setStyles(popper, {\n position: options.positionFixed ? 'fixed' : 'absolute'\n });\n return options;\n}\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\n\n\nfunction getRoundedOffsets(data, shouldRound) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var round = Math.round,\n floor = Math.floor;\n\n var noRound = function noRound(v) {\n return v;\n };\n\n var referenceWidth = round(reference.width);\n var popperWidth = round(popper.width);\n var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n var isVariation = data.placement.indexOf('-') !== -1;\n var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n var verticalToInteger = !shouldRound ? noRound : round;\n return {\n left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n top: verticalToInteger(popper.top),\n bottom: verticalToInteger(popper.bottom),\n right: horizontalToInteger(popper.right)\n };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\nfunction computeStyle(data, options) {\n var x = options.x,\n y = options.y;\n var popper = data.offsets.popper; // Remove this legacy support in Popper.js v2\n\n var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'applyStyle';\n }).gpuAcceleration;\n\n if (legacyGpuAccelerationOption !== undefined) {\n console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n }\n\n var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n var offsetParent = getOffsetParent(data.instance.popper);\n var offsetParentRect = getBoundingClientRect(offsetParent); // Styles\n\n var styles = {\n position: popper.position\n };\n var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n var sideA = x === 'bottom' ? 'top' : 'bottom';\n var sideB = y === 'right' ? 'left' : 'right'; // if gpuAcceleration is set to `true` and transform is supported,\n // we use `translate3d` to apply the position to the popper we\n // automatically use the supported prefixed version if needed\n\n var prefixedProperty = getSupportedPropertyName('transform'); // now, let's make a step back and look at this code closely (wtf?)\n // If the content of the popper grows once it's been positioned, it\n // may happen that the popper gets misplaced because of the new content\n // overflowing its reference element\n // To avoid this problem, we provide two options (x and y), which allow\n // the consumer to define the offset origin.\n // If we position a popper on top of a reference element, we can set\n // `x` to `top` to make the popper grow towards its top instead of\n // its bottom.\n\n var left = void 0,\n top = void 0;\n\n if (sideA === 'bottom') {\n // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar)\n // and not the bottom of the html element\n if (offsetParent.nodeName === 'HTML') {\n top = -offsetParent.clientHeight + offsets.bottom;\n } else {\n top = -offsetParentRect.height + offsets.bottom;\n }\n } else {\n top = offsets.top;\n }\n\n if (sideB === 'right') {\n if (offsetParent.nodeName === 'HTML') {\n left = -offsetParent.clientWidth + offsets.right;\n } else {\n left = -offsetParentRect.width + offsets.right;\n }\n } else {\n left = offsets.left;\n }\n\n if (gpuAcceleration && prefixedProperty) {\n styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n styles[sideA] = 0;\n styles[sideB] = 0;\n styles.willChange = 'transform';\n } else {\n // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n var invertTop = sideA === 'bottom' ? -1 : 1;\n var invertLeft = sideB === 'right' ? -1 : 1;\n styles[sideA] = top * invertTop;\n styles[sideB] = left * invertLeft;\n styles.willChange = sideA + ', ' + sideB;\n } // Attributes\n\n\n var attributes = {\n 'x-placement': data.placement\n }; // Update `data` attributes, styles and arrowStyles\n\n data.attributes = _extends({}, attributes, data.attributes);\n data.styles = _extends({}, styles, data.styles);\n data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n return data;\n}\n/**\n * Helper used to know if the given modifier depends from another one.
\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\n\n\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n var requesting = find(modifiers, function (_ref) {\n var name = _ref.name;\n return name === requestingName;\n });\n var isRequired = !!requesting && modifiers.some(function (modifier) {\n return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n });\n\n if (!isRequired) {\n var _requesting = '`' + requestingName + '`';\n\n var requested = '`' + requestedName + '`';\n console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n }\n\n return isRequired;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction arrow(data, options) {\n var _data$offsets$arrow; // arrow depends on keepTogether in order to work\n\n\n if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n return data;\n }\n\n var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector\n\n if (typeof arrowElement === 'string') {\n arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier\n\n if (!arrowElement) {\n return data;\n }\n } else {\n // if the arrowElement isn't a query selector we must check that the\n // provided DOM node is child of its popper node\n if (!data.instance.popper.contains(arrowElement)) {\n console.warn('WARNING: `arrow.element` must be child of its popper element!');\n return data;\n }\n }\n\n var placement = data.placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n var len = isVertical ? 'height' : 'width';\n var sideCapitalized = isVertical ? 'Top' : 'Left';\n var side = sideCapitalized.toLowerCase();\n var altSide = isVertical ? 'left' : 'top';\n var opSide = isVertical ? 'bottom' : 'right';\n var arrowElementSize = getOuterSizes(arrowElement)[len]; //\n // extends keepTogether behavior making sure the popper and its\n // reference have enough pixels in conjunction\n //\n // top/left side\n\n if (reference[opSide] - arrowElementSize < popper[side]) {\n data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n } // bottom/right side\n\n\n if (reference[side] + arrowElementSize > popper[opSide]) {\n data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n }\n\n data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper\n\n var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets\n // take popper margin in account because we don't have this info available\n\n var css = getStyleComputedProperty(data.instance.popper);\n var popperMarginSide = parseFloat(css['margin' + sideCapitalized]);\n var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width']);\n var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper\n\n sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n data.arrowElement = arrowElement;\n data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n return data;\n}\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\n\n\nfunction getOppositeVariation(variation) {\n if (variation === 'end') {\n return 'start';\n } else if (variation === 'start') {\n return 'end';\n }\n\n return variation;\n}\n/**\n * List of accepted placements to use as values of the `placement` option.
\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.
\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\n\n\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; // Get rid of `auto` `auto-start` and `auto-end`\n\nvar validPlacements = placements.slice(3);\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\n\nfunction clockwise(placement) {\n var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n var index = validPlacements.indexOf(placement);\n var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n FLIP: 'flip',\n CLOCKWISE: 'clockwise',\n COUNTERCLOCKWISE: 'counterclockwise'\n};\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\nfunction flip(data, options) {\n // if `inner` modifier is enabled, we can't use the `flip` modifier\n if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n return data;\n }\n\n if (data.flipped && data.placement === data.originalPlacement) {\n // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n return data;\n }\n\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n var placement = data.placement.split('-')[0];\n var placementOpposite = getOppositePlacement(placement);\n var variation = data.placement.split('-')[1] || '';\n var flipOrder = [];\n\n switch (options.behavior) {\n case BEHAVIORS.FLIP:\n flipOrder = [placement, placementOpposite];\n break;\n\n case BEHAVIORS.CLOCKWISE:\n flipOrder = clockwise(placement);\n break;\n\n case BEHAVIORS.COUNTERCLOCKWISE:\n flipOrder = clockwise(placement, true);\n break;\n\n default:\n flipOrder = options.behavior;\n }\n\n flipOrder.forEach(function (step, index) {\n if (placement !== step || flipOrder.length === index + 1) {\n return data;\n }\n\n placement = data.placement.split('-')[0];\n placementOpposite = getOppositePlacement(placement);\n var popperOffsets = data.offsets.popper;\n var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here\n\n var floor = Math.floor;\n var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required\n\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; // flips variation if reference element overflows boundaries\n\n var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); // flips variation if popper content overflows boundaries\n\n var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n if (overlapsRef || overflowsBoundaries || flippedVariation) {\n // this boolean to detect any flip loop\n data.flipped = true;\n\n if (overlapsRef || overflowsBoundaries) {\n placement = flipOrder[index + 1];\n }\n\n if (flippedVariation) {\n variation = getOppositeVariation(variation);\n }\n\n data.placement = placement + (variation ? '-' + variation : ''); // this object contains `position`, we want to preserve it along with\n // any additional property we may add in the future\n\n data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n data = runModifiers(data.instance.modifiers, data, 'flip');\n }\n });\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction keepTogether(data) {\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var placement = data.placement.split('-')[0];\n var floor = Math.floor;\n var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n var side = isVertical ? 'right' : 'bottom';\n var opSide = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n\n if (popper[side] < floor(reference[opSide])) {\n data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n }\n\n if (popper[opSide] > floor(reference[side])) {\n data.offsets.popper[opSide] = floor(reference[side]);\n }\n\n return data;\n}\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\n\n\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n // separate value from unit\n var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n var value = +split[1];\n var unit = split[2]; // If it's not a number it's an operator, I guess\n\n if (!value) {\n return str;\n }\n\n if (unit.indexOf('%') === 0) {\n var element = void 0;\n\n switch (unit) {\n case '%p':\n element = popperOffsets;\n break;\n\n case '%':\n case '%r':\n default:\n element = referenceOffsets;\n }\n\n var rect = getClientRect(element);\n return rect[measurement] / 100 * value;\n } else if (unit === 'vh' || unit === 'vw') {\n // if is a vh or vw, we calculate the size based on the viewport\n var size = void 0;\n\n if (unit === 'vh') {\n size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n } else {\n size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n }\n\n return size / 100 * value;\n } else {\n // if is an explicit pixel unit, we get rid of the unit and keep the value\n // if is an implicit unit, it's px, and we return just the value\n return value;\n }\n}\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\n\n\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n var offsets = [0, 0]; // Use height if placement is left or right and index is 0 otherwise use width\n // in this way the first offset will use an axis and the second one\n // will use the other one\n\n var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // Split the offset string to obtain a list of values and operands\n // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n\n var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n return frag.trim();\n }); // Detect if the offset string contains a pair of values or a single one\n // they could be separated by comma or space\n\n var divider = fragments.indexOf(find(fragments, function (frag) {\n return frag.search(/,|\\s/) !== -1;\n }));\n\n if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n } // If divider is found, we divide the list of values and operands to divide\n // them by ofset X and Y.\n\n\n var splitRegex = /\\s*,\\s*|\\s+/;\n var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; // Convert the values with units to absolute pixels to allow our computations\n\n ops = ops.map(function (op, index) {\n // Most of the units rely on the orientation of the popper\n var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n var mergeWithPrevious = false;\n return op // This aggregates any `+` or `-` sign that aren't considered operators\n // e.g.: 10 + +5 => [10, +, +5]\n .reduce(function (a, b) {\n if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n a[a.length - 1] = b;\n mergeWithPrevious = true;\n return a;\n } else if (mergeWithPrevious) {\n a[a.length - 1] += b;\n mergeWithPrevious = false;\n return a;\n } else {\n return a.concat(b);\n }\n }, []) // Here we convert the string values into number values (in px)\n .map(function (str) {\n return toValue(str, measurement, popperOffsets, referenceOffsets);\n });\n }); // Loop trough the offsets arrays and execute the operations\n\n ops.forEach(function (op, index) {\n op.forEach(function (frag, index2) {\n if (isNumeric(frag)) {\n offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n }\n });\n });\n return offsets;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction offset(data, _ref) {\n var offset = _ref.offset;\n var placement = data.placement,\n _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var basePlacement = placement.split('-')[0];\n var offsets = void 0;\n\n if (isNumeric(+offset)) {\n offsets = [+offset, 0];\n } else {\n offsets = parseOffset(offset, popper, reference, basePlacement);\n }\n\n if (basePlacement === 'left') {\n popper.top += offsets[0];\n popper.left -= offsets[1];\n } else if (basePlacement === 'right') {\n popper.top += offsets[0];\n popper.left += offsets[1];\n } else if (basePlacement === 'top') {\n popper.left += offsets[0];\n popper.top -= offsets[1];\n } else if (basePlacement === 'bottom') {\n popper.left += offsets[0];\n popper.top += offsets[1];\n }\n\n data.popper = popper;\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction preventOverflow(data, options) {\n var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to\n // go one step up and use the next offsetParent as reference to\n // avoid to make this modifier completely useless and look like broken\n\n if (data.instance.reference === boundariesElement) {\n boundariesElement = getOffsetParent(boundariesElement);\n } // NOTE: DOM access here\n // resets the popper's position so that the document size can be calculated excluding\n // the size of the popper element itself\n\n\n var transformProp = getSupportedPropertyName('transform');\n var popperStyles = data.instance.popper.style; // assignment to help minification\n\n var top = popperStyles.top,\n left = popperStyles.left,\n transform = popperStyles[transformProp];\n popperStyles.top = '';\n popperStyles.left = '';\n popperStyles[transformProp] = '';\n var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here\n // restores the original style properties after the offsets have been computed\n\n popperStyles.top = top;\n popperStyles.left = left;\n popperStyles[transformProp] = transform;\n options.boundaries = boundaries;\n var order = options.priority;\n var popper = data.offsets.popper;\n var check = {\n primary: function primary(placement) {\n var value = popper[placement];\n\n if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n value = Math.max(popper[placement], boundaries[placement]);\n }\n\n return defineProperty({}, placement, value);\n },\n secondary: function secondary(placement) {\n var mainSide = placement === 'right' ? 'left' : 'top';\n var value = popper[mainSide];\n\n if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n }\n\n return defineProperty({}, mainSide, value);\n }\n };\n order.forEach(function (placement) {\n var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n popper = _extends({}, popper, check[side](placement));\n });\n data.offsets.popper = popper;\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction shift(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier\n\n if (shiftvariation) {\n var _data$offsets = data.offsets,\n reference = _data$offsets.reference,\n popper = _data$offsets.popper;\n var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n var side = isVertical ? 'left' : 'top';\n var measurement = isVertical ? 'width' : 'height';\n var shiftOffsets = {\n start: defineProperty({}, side, reference[side]),\n end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n };\n data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n }\n\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction hide(data) {\n if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n return data;\n }\n\n var refRect = data.offsets.reference;\n var bound = find(data.instance.modifiers, function (modifier) {\n return modifier.name === 'preventOverflow';\n }).boundaries;\n\n if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === true) {\n return data;\n }\n\n data.hide = true;\n data.attributes['x-out-of-boundaries'] = '';\n } else {\n // Avoid unnecessary DOM access if visibility hasn't changed\n if (data.hide === false) {\n return data;\n }\n\n data.hide = false;\n data.attributes['x-out-of-boundaries'] = false;\n }\n\n return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction inner(data) {\n var placement = data.placement;\n var basePlacement = placement.split('-')[0];\n var _data$offsets = data.offsets,\n popper = _data$offsets.popper,\n reference = _data$offsets.reference;\n var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n data.placement = getOppositePlacement(placement);\n data.offsets.popper = getClientRect(popper);\n return data;\n}\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.
\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.
\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\n\n\nvar modifiers = {\n /**\n * Modifier used to shift the popper on the start or end of its reference\n * element.
\n * It will read the variation of the `placement` property.
\n * It can be one either `-end` or `-start`.\n * @memberof modifiers\n * @inner\n */\n shift: {\n /** @prop {number} order=100 - Index used to define the order of execution */\n order: 100,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: shift\n },\n\n /**\n * The `offset` modifier can shift your popper on both its axis.\n *\n * It accepts the following units:\n * - `px` or unit-less, interpreted as pixels\n * - `%` or `%r`, percentage relative to the length of the reference element\n * - `%p`, percentage relative to the length of the popper element\n * - `vw`, CSS viewport width unit\n * - `vh`, CSS viewport height unit\n *\n * For length is intended the main axis relative to the placement of the popper.
\n * This means that if the placement is `top` or `bottom`, the length will be the\n * `width`. In case of `left` or `right`, it will be the `height`.\n *\n * You can provide a single value (as `Number` or `String`), or a pair of values\n * as `String` divided by a comma or one (or more) white spaces.
\n * The latter is a deprecated method because it leads to confusion and will be\n * removed in v2.
\n * Additionally, it accepts additions and subtractions between different units.\n * Note that multiplications and divisions aren't supported.\n *\n * Valid examples are:\n * ```\n * 10\n * '10%'\n * '10, 10'\n * '10%, 10'\n * '10 + 10%'\n * '10 - 5vh + 3%'\n * '-10px + 5vh, 5px - 6%'\n * ```\n * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n *\n * @memberof modifiers\n * @inner\n */\n offset: {\n /** @prop {number} order=200 - Index used to define the order of execution */\n order: 200,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: offset,\n\n /** @prop {Number|String} offset=0\n * The offset value as described in the modifier description\n */\n offset: 0\n },\n\n /**\n * Modifier used to prevent the popper from being positioned outside the boundary.\n *\n * A scenario exists where the reference itself is not within the boundaries.
\n * We can say it has \"escaped the boundaries\" — or just \"escaped\".
\n * In this case we need to decide whether the popper should either:\n *\n * - detach from the reference and remain \"trapped\" in the boundaries, or\n * - if it should ignore the boundary and \"escape with its reference\"\n *\n * When `escapeWithReference` is set to`true` and reference is completely\n * outside its boundaries, the popper will overflow (or completely leave)\n * the boundaries in order to remain attached to the edge of the reference.\n *\n * @memberof modifiers\n * @inner\n */\n preventOverflow: {\n /** @prop {number} order=300 - Index used to define the order of execution */\n order: 300,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: preventOverflow,\n\n /**\n * @prop {Array} [priority=['left','right','top','bottom']]\n * Popper will try to prevent overflow following these priorities by default,\n * then, it could overflow on the left and on top of the `boundariesElement`\n */\n priority: ['left', 'right', 'top', 'bottom'],\n\n /**\n * @prop {number} padding=5\n * Amount of pixel used to define a minimum distance between the boundaries\n * and the popper. This makes sure the popper always has a little padding\n * between the edges of its container\n */\n padding: 5,\n\n /**\n * @prop {String|HTMLElement} boundariesElement='scrollParent'\n * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n * `viewport` or any DOM element.\n */\n boundariesElement: 'scrollParent'\n },\n\n /**\n * Modifier used to make sure the reference and its popper stay near each other\n * without leaving any gap between the two. Especially useful when the arrow is\n * enabled and you want to ensure that it points to its reference element.\n * It cares only about the first axis. You can still have poppers with margin\n * between the popper and its reference element.\n * @memberof modifiers\n * @inner\n */\n keepTogether: {\n /** @prop {number} order=400 - Index used to define the order of execution */\n order: 400,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: keepTogether\n },\n\n /**\n * This modifier is used to move the `arrowElement` of the popper to make\n * sure it is positioned between the reference element and its popper element.\n * It will read the outer size of the `arrowElement` node to detect how many\n * pixels of conjunction are needed.\n *\n * It has no effect if no `arrowElement` is provided.\n * @memberof modifiers\n * @inner\n */\n arrow: {\n /** @prop {number} order=500 - Index used to define the order of execution */\n order: 500,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: arrow,\n\n /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n element: '[x-arrow]'\n },\n\n /**\n * Modifier used to flip the popper's placement when it starts to overlap its\n * reference element.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n *\n * **NOTE:** this modifier will interrupt the current update cycle and will\n * restart it if it detects the need to flip the placement.\n * @memberof modifiers\n * @inner\n */\n flip: {\n /** @prop {number} order=600 - Index used to define the order of execution */\n order: 600,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: flip,\n\n /**\n * @prop {String|Array} behavior='flip'\n * The behavior used to change the popper's placement. It can be one of\n * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n * placements (with optional variations)\n */\n behavior: 'flip',\n\n /**\n * @prop {number} padding=5\n * The popper will flip if it hits the edges of the `boundariesElement`\n */\n padding: 5,\n\n /**\n * @prop {String|HTMLElement} boundariesElement='viewport'\n * The element which will define the boundaries of the popper position.\n * The popper will never be placed outside of the defined boundaries\n * (except if `keepTogether` is enabled)\n */\n boundariesElement: 'viewport',\n\n /**\n * @prop {Boolean} flipVariations=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the reference element overlaps its boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariations: false,\n\n /**\n * @prop {Boolean} flipVariationsByContent=false\n * The popper will switch placement variation between `-start` and `-end` when\n * the popper element overlaps its reference boundaries.\n *\n * The original placement should have a set variation.\n */\n flipVariationsByContent: false\n },\n\n /**\n * Modifier used to make the popper flow toward the inner of the reference element.\n * By default, when this modifier is disabled, the popper will be placed outside\n * the reference element.\n * @memberof modifiers\n * @inner\n */\n inner: {\n /** @prop {number} order=700 - Index used to define the order of execution */\n order: 700,\n\n /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n enabled: false,\n\n /** @prop {ModifierFn} */\n fn: inner\n },\n\n /**\n * Modifier used to hide the popper when its reference element is outside of the\n * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n * be used to hide with a CSS selector the popper when its reference is\n * out of boundaries.\n *\n * Requires the `preventOverflow` modifier before it in order to work.\n * @memberof modifiers\n * @inner\n */\n hide: {\n /** @prop {number} order=800 - Index used to define the order of execution */\n order: 800,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: hide\n },\n\n /**\n * Computes the style that will be applied to the popper element to gets\n * properly positioned.\n *\n * Note that this modifier will not touch the DOM, it just prepares the styles\n * so that `applyStyle` modifier can apply it. This separation is useful\n * in case you need to replace `applyStyle` with a custom implementation.\n *\n * This modifier has `850` as `order` value to maintain backward compatibility\n * with previous versions of Popper.js. Expect the modifiers ordering method\n * to change in future major versions of the library.\n *\n * @memberof modifiers\n * @inner\n */\n computeStyle: {\n /** @prop {number} order=850 - Index used to define the order of execution */\n order: 850,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: computeStyle,\n\n /**\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: true,\n\n /**\n * @prop {string} [x='bottom']\n * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n * Change this if your popper should grow in a direction different from `bottom`\n */\n x: 'bottom',\n\n /**\n * @prop {string} [x='left']\n * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n * Change this if your popper should grow in a direction different from `right`\n */\n y: 'right'\n },\n\n /**\n * Applies the computed styles to the popper element.\n *\n * All the DOM manipulations are limited to this modifier. This is useful in case\n * you want to integrate Popper.js inside a framework or view library and you\n * want to delegate all the DOM manipulations to it.\n *\n * Note that if you disable this modifier, you must make sure the popper element\n * has its position set to `absolute` before Popper.js can do its work!\n *\n * Just disable this modifier and define your own to achieve the desired effect.\n *\n * @memberof modifiers\n * @inner\n */\n applyStyle: {\n /** @prop {number} order=900 - Index used to define the order of execution */\n order: 900,\n\n /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n enabled: true,\n\n /** @prop {ModifierFn} */\n fn: applyStyle,\n\n /** @prop {Function} */\n onLoad: applyStyleOnLoad,\n\n /**\n * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n * @prop {Boolean} gpuAcceleration=true\n * If true, it uses the CSS 3D transformation to position the popper.\n * Otherwise, it will use the `top` and `left` properties\n */\n gpuAcceleration: undefined\n }\n};\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.
\n * These can be overridden using the `options` argument of Popper.js.
\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n * modifiers: {\n * preventOverflow: { enabled: false }\n * }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\n\nvar Defaults = {\n /**\n * Popper's placement.\n * @prop {Popper.placements} placement='bottom'\n */\n placement: 'bottom',\n\n /**\n * Set this to true if you want popper to position it self in 'fixed' mode\n * @prop {Boolean} positionFixed=false\n */\n positionFixed: false,\n\n /**\n * Whether events (resize, scroll) are initially enabled.\n * @prop {Boolean} eventsEnabled=true\n */\n eventsEnabled: true,\n\n /**\n * Set to true if you want to automatically remove the popper when\n * you call the `destroy` method.\n * @prop {Boolean} removeOnDestroy=false\n */\n removeOnDestroy: false,\n\n /**\n * Callback called when the popper is created.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onCreate}\n */\n onCreate: function onCreate() {},\n\n /**\n * Callback called when the popper is updated. This callback is not called\n * on the initialization/creation of the popper, but only on subsequent\n * updates.
\n * By default, it is set to no-op.
\n * Access Popper.js instance with `data.instance`.\n * @prop {onUpdate}\n */\n onUpdate: function onUpdate() {},\n\n /**\n * List of modifiers used to modify the offsets before they are applied to the popper.\n * They provide most of the functionalities of Popper.js.\n * @prop {modifiers}\n */\n modifiers: modifiers\n};\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n// Utils\n// Methods\n\nvar Popper = function () {\n /**\n * Creates a new Popper.js instance.\n * @class Popper\n * @param {Element|referenceObject} reference - The reference element used to position the popper\n * @param {Element} popper - The HTML / XML element used as the popper\n * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n * @return {Object} instance - The generated Popper.js instance\n */\n function Popper(reference, popper) {\n var _this = this;\n\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n classCallCheck(this, Popper);\n\n this.scheduleUpdate = function () {\n return requestAnimationFrame(_this.update);\n }; // make update() debounced, so that it only runs at most once-per-tick\n\n\n this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it\n\n this.options = _extends({}, Popper.Defaults, options); // init state\n\n this.state = {\n isDestroyed: false,\n isCreated: false,\n scrollParents: []\n }; // get reference and popper elements (allow jQuery wrappers)\n\n this.reference = reference && reference.jquery ? reference[0] : reference;\n this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options\n\n this.options.modifiers = {};\n Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n }); // Refactoring modifiers' list (Object => Array)\n\n this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n return _extends({\n name: name\n }, _this.options.modifiers[name]);\n }) // sort the modifiers by order\n .sort(function (a, b) {\n return a.order - b.order;\n }); // modifiers have the ability to execute arbitrary code when Popper.js get inited\n // such code is executed in the same order of its modifier\n // they could add new properties to their options configuration\n // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n\n this.modifiers.forEach(function (modifierOptions) {\n if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n }\n }); // fire the first update to position the popper in the right place\n\n this.update();\n var eventsEnabled = this.options.eventsEnabled;\n\n if (eventsEnabled) {\n // setup event listeners, they will take care of update the position in specific situations\n this.enableEventListeners();\n }\n\n this.state.eventsEnabled = eventsEnabled;\n } // We can't use class properties because they don't get listed in the\n // class prototype and break stuff like Sinon stubs\n\n\n createClass(Popper, [{\n key: 'update',\n value: function update$$1() {\n return update.call(this);\n }\n }, {\n key: 'destroy',\n value: function destroy$$1() {\n return destroy.call(this);\n }\n }, {\n key: 'enableEventListeners',\n value: function enableEventListeners$$1() {\n return enableEventListeners.call(this);\n }\n }, {\n key: 'disableEventListeners',\n value: function disableEventListeners$$1() {\n return disableEventListeners.call(this);\n }\n /**\n * Schedules an update. It will run on the next UI update available.\n * @method scheduleUpdate\n * @memberof Popper\n */\n\n /**\n * Collection of utilities useful when writing custom modifiers.\n * Starting from version 1.7, this method is available only if you\n * include `popper-utils.js` before `popper.js`.\n *\n * **DEPRECATION**: This way to access PopperUtils is deprecated\n * and will be removed in v2! Use the PopperUtils module directly instead.\n * Due to the high instability of the methods contained in Utils, we can't\n * guarantee them to follow semver. Use them at your own risk!\n * @static\n * @private\n * @type {Object}\n * @deprecated since version 1.8\n * @member Utils\n * @memberof Popper\n */\n\n }]);\n return Popper;\n}();\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.
\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\nexport default Popper;","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n \"use strict\";\n\n function createCommonjsModule(fn, module) {\n return module = {\n exports: {}\n }, fn(module, module.exports), module.exports;\n }\n\n var sparkMd5 = createCommonjsModule(function (module, exports) {\n (function (factory) {\n {\n module.exports = factory();\n }\n })(function (undefined) {\n var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n function md5cycle(x, k) {\n var a = x[0],\n b = x[1],\n c = x[2],\n d = x[3];\n a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[10] - 42063 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n a = (a << 7 | a >>> 25) + b | 0;\n d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n d = (d << 12 | d >>> 20) + a | 0;\n c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n c = (c << 17 | c >>> 15) + d | 0;\n b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n b = (b << 22 | b >>> 10) + c | 0;\n a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n a = (a << 5 | a >>> 27) + b | 0;\n d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n d = (d << 9 | d >>> 23) + a | 0;\n c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n c = (c << 14 | c >>> 18) + d | 0;\n b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n b = (b << 20 | b >>> 12) + c | 0;\n a += (b ^ c ^ d) + k[5] - 378558 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n a = (a << 4 | a >>> 28) + b | 0;\n d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n d = (d << 11 | d >>> 21) + a | 0;\n c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n c = (c << 16 | c >>> 16) + d | 0;\n b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n b = (b << 23 | b >>> 9) + c | 0;\n a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n a = (a << 6 | a >>> 26) + b | 0;\n d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n d = (d << 10 | d >>> 22) + a | 0;\n c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n c = (c << 15 | c >>> 17) + d | 0;\n b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n b = (b << 21 | b >>> 11) + c | 0;\n x[0] = a + x[0] | 0;\n x[1] = b + x[1] | 0;\n x[2] = c + x[2] | 0;\n x[3] = d + x[3] | 0;\n }\n\n function md5blk(s) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n }\n\n return md5blks;\n }\n\n function md5blk_array(a) {\n var md5blks = [],\n i;\n\n for (i = 0; i < 64; i += 4) {\n md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n }\n\n return md5blks;\n }\n\n function md51(s) {\n var n = s.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk(s.substring(i - 64, i)));\n }\n\n s = s.substring(i - 64);\n length = s.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function md51_array(a) {\n var n = a.length,\n state = [1732584193, -271733879, -1732584194, 271733878],\n i,\n length,\n tail,\n tmp,\n lo,\n hi;\n\n for (i = 64; i <= n; i += 64) {\n md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n }\n\n a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n length = a.length;\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= a[i] << (i % 4 << 3);\n }\n\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(state, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = n * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(state, tail);\n return state;\n }\n\n function rhex(n) {\n var s = \"\",\n j;\n\n for (j = 0; j < 4; j += 1) {\n s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n }\n\n return s;\n }\n\n function hex(x) {\n var i;\n\n for (i = 0; i < x.length; i += 1) {\n x[i] = rhex(x[i]);\n }\n\n return x.join(\"\");\n }\n\n if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n (function () {\n function clamp(val, length) {\n val = val | 0 || 0;\n\n if (val < 0) {\n return Math.max(val + length, 0);\n }\n\n return Math.min(val, length);\n }\n\n ArrayBuffer.prototype.slice = function (from, to) {\n var length = this.byteLength,\n begin = clamp(from, length),\n end = length,\n num,\n target,\n targetArray,\n sourceArray;\n\n if (to !== undefined) {\n end = clamp(to, length);\n }\n\n if (begin > end) {\n return new ArrayBuffer(0);\n }\n\n num = end - begin;\n target = new ArrayBuffer(num);\n targetArray = new Uint8Array(target);\n sourceArray = new Uint8Array(this, begin, num);\n targetArray.set(sourceArray);\n return target;\n };\n })();\n }\n\n function toUtf8(str) {\n if (/[\\u0080-\\uFFFF]/.test(str)) {\n str = unescape(encodeURIComponent(str));\n }\n\n return str;\n }\n\n function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n var length = str.length,\n buff = new ArrayBuffer(length),\n arr = new Uint8Array(buff),\n i;\n\n for (i = 0; i < length; i += 1) {\n arr[i] = str.charCodeAt(i);\n }\n\n return returnUInt8Array ? arr : buff;\n }\n\n function arrayBuffer2Utf8Str(buff) {\n return String.fromCharCode.apply(null, new Uint8Array(buff));\n }\n\n function concatenateArrayBuffers(first, second, returnUInt8Array) {\n var result = new Uint8Array(first.byteLength + second.byteLength);\n result.set(new Uint8Array(first));\n result.set(new Uint8Array(second), first.byteLength);\n return returnUInt8Array ? result : result.buffer;\n }\n\n function hexToBinaryString(hex) {\n var bytes = [],\n length = hex.length,\n x;\n\n for (x = 0; x < length - 1; x += 2) {\n bytes.push(parseInt(hex.substr(x, 2), 16));\n }\n\n return String.fromCharCode.apply(String, bytes);\n }\n\n function SparkMD5() {\n this.reset();\n }\n\n SparkMD5.prototype.append = function (str) {\n this.appendBinary(toUtf8(str));\n return this;\n };\n\n SparkMD5.prototype.appendBinary = function (contents) {\n this._buff += contents;\n this._length += contents.length;\n var length = this._buff.length,\n i;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n }\n\n this._buff = this._buff.substring(i - 64);\n return this;\n };\n\n SparkMD5.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n i,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.prototype.reset = function () {\n this._buff = \"\";\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.prototype.getState = function () {\n return {\n buff: this._buff,\n length: this._length,\n hash: this._hash\n };\n };\n\n SparkMD5.prototype.setState = function (state) {\n this._buff = state.buff;\n this._length = state.length;\n this._hash = state.hash;\n return this;\n };\n\n SparkMD5.prototype.destroy = function () {\n delete this._hash;\n delete this._buff;\n delete this._length;\n };\n\n SparkMD5.prototype._finish = function (tail, length) {\n var i = length,\n tmp,\n lo,\n hi;\n tail[i >> 2] |= 128 << (i % 4 << 3);\n\n if (i > 55) {\n md5cycle(this._hash, tail);\n\n for (i = 0; i < 16; i += 1) {\n tail[i] = 0;\n }\n }\n\n tmp = this._length * 8;\n tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n lo = parseInt(tmp[2], 16);\n hi = parseInt(tmp[1], 16) || 0;\n tail[14] = lo;\n tail[15] = hi;\n md5cycle(this._hash, tail);\n };\n\n SparkMD5.hash = function (str, raw) {\n return SparkMD5.hashBinary(toUtf8(str), raw);\n };\n\n SparkMD5.hashBinary = function (content, raw) {\n var hash = md51(content),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n SparkMD5.ArrayBuffer = function () {\n this.reset();\n };\n\n SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n length = buff.length,\n i;\n this._length += arr.byteLength;\n\n for (i = 64; i <= length; i += 64) {\n md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n }\n\n this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n var buff = this._buff,\n length = buff.length,\n tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n i,\n ret;\n\n for (i = 0; i < length; i += 1) {\n tail[i >> 2] |= buff[i] << (i % 4 << 3);\n }\n\n this._finish(tail, length);\n\n ret = hex(this._hash);\n\n if (raw) {\n ret = hexToBinaryString(ret);\n }\n\n this.reset();\n return ret;\n };\n\n SparkMD5.ArrayBuffer.prototype.reset = function () {\n this._buff = new Uint8Array(0);\n this._length = 0;\n this._hash = [1732584193, -271733879, -1732584194, 271733878];\n return this;\n };\n\n SparkMD5.ArrayBuffer.prototype.getState = function () {\n var state = SparkMD5.prototype.getState.call(this);\n state.buff = arrayBuffer2Utf8Str(state.buff);\n return state;\n };\n\n SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n state.buff = utf8Str2ArrayBuffer(state.buff, true);\n return SparkMD5.prototype.setState.call(this, state);\n };\n\n SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n var hash = md51_array(new Uint8Array(arr)),\n ret = hex(hash);\n return raw ? hexToBinaryString(ret) : ret;\n };\n\n return SparkMD5;\n });\n });\n\n var classCallCheck = function classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n\n var createClass = function () {\n function defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n return function (Constructor, protoProps, staticProps) {\n if (protoProps) defineProperties(Constructor.prototype, protoProps);\n if (staticProps) defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n\n var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n var FileChecksum = function () {\n createClass(FileChecksum, null, [{\n key: \"create\",\n value: function create(file, callback) {\n var instance = new FileChecksum(file);\n instance.create(callback);\n }\n }]);\n\n function FileChecksum(file) {\n classCallCheck(this, FileChecksum);\n this.file = file;\n this.chunkSize = 2097152;\n this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n this.chunkIndex = 0;\n }\n\n createClass(FileChecksum, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n this.callback = callback;\n this.md5Buffer = new sparkMd5.ArrayBuffer();\n this.fileReader = new FileReader();\n this.fileReader.addEventListener(\"load\", function (event) {\n return _this.fileReaderDidLoad(event);\n });\n this.fileReader.addEventListener(\"error\", function (event) {\n return _this.fileReaderDidError(event);\n });\n this.readNextChunk();\n }\n }, {\n key: \"fileReaderDidLoad\",\n value: function fileReaderDidLoad(event) {\n this.md5Buffer.append(event.target.result);\n\n if (!this.readNextChunk()) {\n var binaryDigest = this.md5Buffer.end(true);\n var base64digest = btoa(binaryDigest);\n this.callback(null, base64digest);\n }\n }\n }, {\n key: \"fileReaderDidError\",\n value: function fileReaderDidError(event) {\n this.callback(\"Error reading \" + this.file.name);\n }\n }, {\n key: \"readNextChunk\",\n value: function readNextChunk() {\n if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n var start = this.chunkIndex * this.chunkSize;\n var end = Math.min(start + this.chunkSize, this.file.size);\n var bytes = fileSlice.call(this.file, start, end);\n this.fileReader.readAsArrayBuffer(bytes);\n this.chunkIndex++;\n return true;\n } else {\n return false;\n }\n }\n }]);\n return FileChecksum;\n }();\n\n function getMetaValue(name) {\n var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n\n if (element) {\n return element.getAttribute(\"content\");\n }\n }\n\n function findElements(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n var elements = root.querySelectorAll(selector);\n return toArray$1(elements);\n }\n\n function findElement(root, selector) {\n if (typeof root == \"string\") {\n selector = root;\n root = document;\n }\n\n return root.querySelector(selector);\n }\n\n function dispatchEvent(element, type) {\n var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var disabled = element.disabled;\n var bubbles = eventInit.bubbles,\n cancelable = eventInit.cancelable,\n detail = eventInit.detail;\n var event = document.createEvent(\"Event\");\n event.initEvent(type, bubbles || true, cancelable || true);\n event.detail = detail || {};\n\n try {\n element.disabled = false;\n element.dispatchEvent(event);\n } finally {\n element.disabled = disabled;\n }\n\n return event;\n }\n\n function toArray$1(value) {\n if (Array.isArray(value)) {\n return value;\n } else if (Array.from) {\n return Array.from(value);\n } else {\n return [].slice.call(value);\n }\n }\n\n var BlobRecord = function () {\n function BlobRecord(file, checksum, url) {\n var _this = this;\n\n classCallCheck(this, BlobRecord);\n this.file = file;\n this.attributes = {\n filename: file.name,\n content_type: file.type || \"application/octet-stream\",\n byte_size: file.size,\n checksum: checksum\n };\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"POST\", url, true);\n this.xhr.responseType = \"json\";\n this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n var csrfToken = getMetaValue(\"csrf-token\");\n\n if (csrfToken != undefined) {\n this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobRecord, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(JSON.stringify({\n blob: this.attributes\n }));\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n if (this.status >= 200 && this.status < 300) {\n var response = this.response;\n var direct_upload = response.direct_upload;\n delete response.direct_upload;\n this.attributes = response;\n this.directUploadData = direct_upload;\n this.callback(null, this.toJSON());\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n }\n }, {\n key: \"toJSON\",\n value: function toJSON() {\n var result = {};\n\n for (var key in this.attributes) {\n result[key] = this.attributes[key];\n }\n\n return result;\n }\n }, {\n key: \"status\",\n get: function get$$1() {\n return this.xhr.status;\n }\n }, {\n key: \"response\",\n get: function get$$1() {\n var _xhr = this.xhr,\n responseType = _xhr.responseType,\n response = _xhr.response;\n\n if (responseType == \"json\") {\n return response;\n } else {\n return JSON.parse(response);\n }\n }\n }]);\n return BlobRecord;\n }();\n\n var BlobUpload = function () {\n function BlobUpload(blob) {\n var _this = this;\n\n classCallCheck(this, BlobUpload);\n this.blob = blob;\n this.file = blob.file;\n var _blob$directUploadDat = blob.directUploadData,\n url = _blob$directUploadDat.url,\n headers = _blob$directUploadDat.headers;\n this.xhr = new XMLHttpRequest();\n this.xhr.open(\"PUT\", url, true);\n this.xhr.responseType = \"text\";\n\n for (var key in headers) {\n this.xhr.setRequestHeader(key, headers[key]);\n }\n\n this.xhr.addEventListener(\"load\", function (event) {\n return _this.requestDidLoad(event);\n });\n this.xhr.addEventListener(\"error\", function (event) {\n return _this.requestDidError(event);\n });\n }\n\n createClass(BlobUpload, [{\n key: \"create\",\n value: function create(callback) {\n this.callback = callback;\n this.xhr.send(this.file.slice());\n }\n }, {\n key: \"requestDidLoad\",\n value: function requestDidLoad(event) {\n var _xhr = this.xhr,\n status = _xhr.status,\n response = _xhr.response;\n\n if (status >= 200 && status < 300) {\n this.callback(null, response);\n } else {\n this.requestDidError(event);\n }\n }\n }, {\n key: \"requestDidError\",\n value: function requestDidError(event) {\n this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n }\n }]);\n return BlobUpload;\n }();\n\n var id = 0;\n\n var DirectUpload = function () {\n function DirectUpload(file, url, delegate) {\n classCallCheck(this, DirectUpload);\n this.id = ++id;\n this.file = file;\n this.url = url;\n this.delegate = delegate;\n }\n\n createClass(DirectUpload, [{\n key: \"create\",\n value: function create(callback) {\n var _this = this;\n\n FileChecksum.create(this.file, function (error, checksum) {\n if (error) {\n callback(error);\n return;\n }\n\n var blob = new BlobRecord(_this.file, checksum, _this.url);\n notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n blob.create(function (error) {\n if (error) {\n callback(error);\n } else {\n var upload = new BlobUpload(blob);\n notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n upload.create(function (error) {\n if (error) {\n callback(error);\n } else {\n callback(null, blob.toJSON());\n }\n });\n }\n });\n });\n }\n }]);\n return DirectUpload;\n }();\n\n function notify(object, methodName) {\n if (object && typeof object[methodName] == \"function\") {\n for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n messages[_key - 2] = arguments[_key];\n }\n\n return object[methodName].apply(object, messages);\n }\n }\n\n var DirectUploadController = function () {\n function DirectUploadController(input, file) {\n classCallCheck(this, DirectUploadController);\n this.input = input;\n this.file = file;\n this.directUpload = new DirectUpload(this.file, this.url, this);\n this.dispatch(\"initialize\");\n }\n\n createClass(DirectUploadController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var hiddenInput = document.createElement(\"input\");\n hiddenInput.type = \"hidden\";\n hiddenInput.name = this.input.name;\n this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n this.dispatch(\"start\");\n this.directUpload.create(function (error, attributes) {\n if (error) {\n hiddenInput.parentNode.removeChild(hiddenInput);\n\n _this.dispatchError(error);\n } else {\n hiddenInput.value = attributes.signed_id;\n }\n\n _this.dispatch(\"end\");\n\n callback(error);\n });\n }\n }, {\n key: \"uploadRequestDidProgress\",\n value: function uploadRequestDidProgress(event) {\n var progress = event.loaded / event.total * 100;\n\n if (progress) {\n this.dispatch(\"progress\", {\n progress: progress\n });\n }\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n detail.file = this.file;\n detail.id = this.directUpload.id;\n return dispatchEvent(this.input, \"direct-upload:\" + name, {\n detail: detail\n });\n }\n }, {\n key: \"dispatchError\",\n value: function dispatchError(error) {\n var event = this.dispatch(\"error\", {\n error: error\n });\n\n if (!event.defaultPrevented) {\n alert(error);\n }\n }\n }, {\n key: \"directUploadWillCreateBlobWithXHR\",\n value: function directUploadWillCreateBlobWithXHR(xhr) {\n this.dispatch(\"before-blob-request\", {\n xhr: xhr\n });\n }\n }, {\n key: \"directUploadWillStoreFileWithXHR\",\n value: function directUploadWillStoreFileWithXHR(xhr) {\n var _this2 = this;\n\n this.dispatch(\"before-storage-request\", {\n xhr: xhr\n });\n xhr.upload.addEventListener(\"progress\", function (event) {\n return _this2.uploadRequestDidProgress(event);\n });\n }\n }, {\n key: \"url\",\n get: function get$$1() {\n return this.input.getAttribute(\"data-direct-upload-url\");\n }\n }]);\n return DirectUploadController;\n }();\n\n var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\n var DirectUploadsController = function () {\n function DirectUploadsController(form) {\n classCallCheck(this, DirectUploadsController);\n this.form = form;\n this.inputs = findElements(form, inputSelector).filter(function (input) {\n return input.files.length;\n });\n }\n\n createClass(DirectUploadsController, [{\n key: \"start\",\n value: function start(callback) {\n var _this = this;\n\n var controllers = this.createDirectUploadControllers();\n\n var startNextController = function startNextController() {\n var controller = controllers.shift();\n\n if (controller) {\n controller.start(function (error) {\n if (error) {\n callback(error);\n\n _this.dispatch(\"end\");\n } else {\n startNextController();\n }\n });\n } else {\n callback();\n\n _this.dispatch(\"end\");\n }\n };\n\n this.dispatch(\"start\");\n startNextController();\n }\n }, {\n key: \"createDirectUploadControllers\",\n value: function createDirectUploadControllers() {\n var controllers = [];\n this.inputs.forEach(function (input) {\n toArray$1(input.files).forEach(function (file) {\n var controller = new DirectUploadController(input, file);\n controllers.push(controller);\n });\n });\n return controllers;\n }\n }, {\n key: \"dispatch\",\n value: function dispatch(name) {\n var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n detail: detail\n });\n }\n }]);\n return DirectUploadsController;\n }();\n\n var processingAttribute = \"data-direct-uploads-processing\";\n var submitButtonsByForm = new WeakMap();\n var started = false;\n\n function start() {\n if (!started) {\n started = true;\n document.addEventListener(\"click\", didClick, true);\n document.addEventListener(\"submit\", didSubmitForm);\n document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n }\n }\n\n function didClick(event) {\n var target = event.target;\n\n if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n submitButtonsByForm.set(target.form, target);\n }\n }\n\n function didSubmitForm(event) {\n handleFormSubmissionEvent(event);\n }\n\n function didSubmitRemoteElement(event) {\n if (event.target.tagName == \"FORM\") {\n handleFormSubmissionEvent(event);\n }\n }\n\n function handleFormSubmissionEvent(event) {\n var form = event.target;\n\n if (form.hasAttribute(processingAttribute)) {\n event.preventDefault();\n return;\n }\n\n var controller = new DirectUploadsController(form);\n var inputs = controller.inputs;\n\n if (inputs.length) {\n event.preventDefault();\n form.setAttribute(processingAttribute, \"\");\n inputs.forEach(disable);\n controller.start(function (error) {\n form.removeAttribute(processingAttribute);\n\n if (error) {\n inputs.forEach(enable);\n } else {\n submitForm(form);\n }\n });\n }\n }\n\n function submitForm(form) {\n var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n if (button) {\n var _button = button,\n disabled = _button.disabled;\n button.disabled = false;\n button.focus();\n button.click();\n button.disabled = disabled;\n } else {\n button = document.createElement(\"input\");\n button.type = \"submit\";\n button.style.display = \"none\";\n form.appendChild(button);\n button.click();\n form.removeChild(button);\n }\n\n submitButtonsByForm[\"delete\"](form);\n }\n\n function disable(input) {\n input.disabled = true;\n }\n\n function enable(input) {\n input.disabled = false;\n }\n\n function autostart() {\n if (window.ActiveStorage) {\n start();\n }\n }\n\n setTimeout(autostart, 1);\n exports.start = start;\n exports.DirectUpload = DirectUpload;\n Object.defineProperty(exports, \"__esModule\", {\n value: true\n });\n});","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nrequire('@rails/ujs').start();\nrequire('turbolinks').start();\nrequire('@rails/activestorage').start();\nrequire('channels');\nrequire('jquery');\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\nconst images = require.context('../images', true);\nconst imagePath = (name) => images(name, true);\nrequire.context('../../assets/images', true);\n\nimport 'bootstrap';\nimport './src/application.scss';\nimport select2 from 'select2/dist/js/select2';\nimport 'select2/dist/css/select2.css';\nimport 'easy-autocomplete/dist/jquery.easy-autocomplete';\n\nimport * as THREE from './lib/3js/three.js';\nwindow.THREE = THREE;\nrequire('./lib/3js/OBJLoader.js');\nrequire('./lib/3js/OrbitControls.js');\nrequire('./lib/jquery.konami.min.js');\n\nrequire(\"trix\")\nrequire(\"@rails/actiontext\")","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n;\n(function () {\n var context = this;\n (function () {\n (function () {\n this.Rails = {\n linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n buttonClickSelector: {\n selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n exclude: 'form button'\n },\n inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n formSubmitSelector: 'form',\n formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n fileInputSelector: 'input[name][type=file]:not([disabled])',\n linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n };\n }).call(this);\n }).call(context);\n var Rails = context.Rails;\n (function () {\n (function () {\n var nonce;\n nonce = null;\n\n Rails.loadCSPNonce = function () {\n var ref;\n return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n };\n\n Rails.cspNonce = function () {\n return nonce != null ? nonce : Rails.loadCSPNonce();\n };\n }).call(this);\n (function () {\n var expando, m;\n m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n Rails.matches = function (element, selector) {\n if (selector.exclude != null) {\n return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n } else {\n return m.call(element, selector);\n }\n };\n\n expando = '_ujsData';\n\n Rails.getData = function (element, key) {\n var ref;\n return (ref = element[expando]) != null ? ref[key] : void 0;\n };\n\n Rails.setData = function (element, key, value) {\n if (element[expando] == null) {\n element[expando] = {};\n }\n\n return element[expando][key] = value;\n };\n\n Rails.$ = function (selector) {\n return Array.prototype.slice.call(document.querySelectorAll(selector));\n };\n }).call(this);\n (function () {\n var $, csrfParam, csrfToken;\n $ = Rails.$;\n\n csrfToken = Rails.csrfToken = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-token]');\n return meta && meta.content;\n };\n\n csrfParam = Rails.csrfParam = function () {\n var meta;\n meta = document.querySelector('meta[name=csrf-param]');\n return meta && meta.content;\n };\n\n Rails.CSRFProtection = function (xhr) {\n var token;\n token = csrfToken();\n\n if (token != null) {\n return xhr.setRequestHeader('X-CSRF-Token', token);\n }\n };\n\n Rails.refreshCSRFTokens = function () {\n var param, token;\n token = csrfToken();\n param = csrfParam();\n\n if (token != null && param != null) {\n return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n return input.value = token;\n });\n }\n };\n }).call(this);\n (function () {\n var CustomEvent, fire, matches, preventDefault;\n matches = Rails.matches;\n CustomEvent = window.CustomEvent;\n\n if (typeof CustomEvent !== 'function') {\n CustomEvent = function CustomEvent(event, params) {\n var evt;\n evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt;\n };\n\n CustomEvent.prototype = window.Event.prototype;\n preventDefault = CustomEvent.prototype.preventDefault;\n\n CustomEvent.prototype.preventDefault = function () {\n var result;\n result = preventDefault.call(this);\n\n if (this.cancelable && !this.defaultPrevented) {\n Object.defineProperty(this, 'defaultPrevented', {\n get: function get() {\n return true;\n }\n });\n }\n\n return result;\n };\n }\n\n fire = Rails.fire = function (obj, name, data) {\n var event;\n event = new CustomEvent(name, {\n bubbles: true,\n cancelable: true,\n detail: data\n });\n obj.dispatchEvent(event);\n return !event.defaultPrevented;\n };\n\n Rails.stopEverything = function (e) {\n fire(e.target, 'ujs:everythingStopped');\n e.preventDefault();\n e.stopPropagation();\n return e.stopImmediatePropagation();\n };\n\n Rails.delegate = function (element, selector, eventType, handler) {\n return element.addEventListener(eventType, function (e) {\n var target;\n target = e.target;\n\n while (!(!(target instanceof Element) || matches(target, selector))) {\n target = target.parentNode;\n }\n\n if (target instanceof Element && handler.call(target, e) === false) {\n e.preventDefault();\n return e.stopPropagation();\n }\n });\n };\n }).call(this);\n (function () {\n var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n AcceptHeaders = {\n '*': '*/*',\n text: 'text/plain',\n html: 'text/html',\n xml: 'application/xml, text/xml',\n json: 'application/json, text/javascript',\n script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n };\n\n Rails.ajax = function (options) {\n var xhr;\n options = prepareOptions(options);\n xhr = createXHR(options, function () {\n var ref, response;\n response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n if (Math.floor(xhr.status / 100) === 2) {\n if (typeof options.success === \"function\") {\n options.success(response, xhr.statusText, xhr);\n }\n } else {\n if (typeof options.error === \"function\") {\n options.error(response, xhr.statusText, xhr);\n }\n }\n\n return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n });\n\n if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n return false;\n }\n\n if (xhr.readyState === XMLHttpRequest.OPENED) {\n return xhr.send(options.data);\n }\n };\n\n prepareOptions = function prepareOptions(options) {\n options.url = options.url || location.href;\n options.type = options.type.toUpperCase();\n\n if (options.type === 'GET' && options.data) {\n if (options.url.indexOf('?') < 0) {\n options.url += '?' + options.data;\n } else {\n options.url += '&' + options.data;\n }\n }\n\n if (AcceptHeaders[options.dataType] == null) {\n options.dataType = '*';\n }\n\n options.accept = AcceptHeaders[options.dataType];\n\n if (options.dataType !== '*') {\n options.accept += ', */*; q=0.01';\n }\n\n return options;\n };\n\n createXHR = function createXHR(options, done) {\n var xhr;\n xhr = new XMLHttpRequest();\n xhr.open(options.type, options.url, true);\n xhr.setRequestHeader('Accept', options.accept);\n\n if (typeof options.data === 'string') {\n xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n }\n\n if (!options.crossDomain) {\n xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n }\n\n CSRFProtection(xhr);\n xhr.withCredentials = !!options.withCredentials;\n\n xhr.onreadystatechange = function () {\n if (xhr.readyState === XMLHttpRequest.DONE) {\n return done(xhr);\n }\n };\n\n return xhr;\n };\n\n processResponse = function processResponse(response, type) {\n var parser, script;\n\n if (typeof response === 'string' && typeof type === 'string') {\n if (type.match(/\\bjson\\b/)) {\n try {\n response = JSON.parse(response);\n } catch (error) {}\n } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n script = document.createElement('script');\n script.setAttribute('nonce', cspNonce());\n script.text = response;\n document.head.appendChild(script).parentNode.removeChild(script);\n } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n parser = new DOMParser();\n type = type.replace(/;.+/, '');\n\n try {\n response = parser.parseFromString(response, type);\n } catch (error) {}\n }\n }\n\n return response;\n };\n\n Rails.href = function (element) {\n return element.href;\n };\n\n Rails.isCrossDomain = function (url) {\n var e, originAnchor, urlAnchor;\n originAnchor = document.createElement('a');\n originAnchor.href = location.href;\n urlAnchor = document.createElement('a');\n\n try {\n urlAnchor.href = url;\n return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n } catch (error) {\n e = error;\n return true;\n }\n };\n }).call(this);\n (function () {\n var matches, toArray;\n matches = Rails.matches;\n\n toArray = function toArray(e) {\n return Array.prototype.slice.call(e);\n };\n\n Rails.serializeElement = function (element, additionalParam) {\n var inputs, params;\n inputs = [element];\n\n if (matches(element, 'form')) {\n inputs = toArray(element.elements);\n }\n\n params = [];\n inputs.forEach(function (input) {\n if (!input.name || input.disabled) {\n return;\n }\n\n if (matches(input, 'fieldset[disabled] *')) {\n return;\n }\n\n if (matches(input, 'select')) {\n return toArray(input.options).forEach(function (option) {\n if (option.selected) {\n return params.push({\n name: input.name,\n value: option.value\n });\n }\n });\n } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n return params.push({\n name: input.name,\n value: input.value\n });\n }\n });\n\n if (additionalParam) {\n params.push(additionalParam);\n }\n\n return params.map(function (param) {\n if (param.name != null) {\n return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n } else {\n return param;\n }\n }).join('&');\n };\n\n Rails.formElements = function (form, selector) {\n if (matches(form, 'form')) {\n return toArray(form.elements).filter(function (el) {\n return matches(el, selector);\n });\n } else {\n return toArray(form.querySelectorAll(selector));\n }\n };\n }).call(this);\n (function () {\n var allowAction, fire, stopEverything;\n fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n Rails.handleConfirm = function (e) {\n if (!allowAction(this)) {\n return stopEverything(e);\n }\n };\n\n Rails.confirm = function (message, element) {\n return confirm(message);\n };\n\n allowAction = function allowAction(element) {\n var answer, callback, message;\n message = element.getAttribute('data-confirm');\n\n if (!message) {\n return true;\n }\n\n answer = false;\n\n if (fire(element, 'confirm')) {\n try {\n answer = Rails.confirm(message, element);\n } catch (error) {}\n\n callback = fire(element, 'confirm:complete', [answer]);\n }\n\n return answer && callback;\n };\n }).call(this);\n (function () {\n var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n Rails.handleDisabledElement = function (e) {\n var element;\n element = this;\n\n if (element.disabled) {\n return stopEverything(e);\n }\n };\n\n Rails.enableElement = function (e) {\n var element;\n\n if (e instanceof Event) {\n if (isXhrRedirect(e)) {\n return;\n }\n\n element = e.target;\n } else {\n element = e;\n }\n\n if (matches(element, Rails.linkDisableSelector)) {\n return enableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n return enableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return enableFormElements(element);\n }\n };\n\n Rails.disableElement = function (e) {\n var element;\n element = e instanceof Event ? e.target : e;\n\n if (matches(element, Rails.linkDisableSelector)) {\n return disableLinkElement(element);\n } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n return disableFormElement(element);\n } else if (matches(element, Rails.formSubmitSelector)) {\n return disableFormElements(element);\n }\n };\n\n disableLinkElement = function disableLinkElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n }\n\n element.addEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', true);\n };\n\n enableLinkElement = function enableLinkElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n element.innerHTML = originalText;\n setData(element, 'ujs:enable-with', null);\n }\n\n element.removeEventListener('click', stopEverything);\n return setData(element, 'ujs:disabled', null);\n };\n\n disableFormElements = function disableFormElements(form) {\n return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n };\n\n disableFormElement = function disableFormElement(element) {\n var replacement;\n\n if (getData(element, 'ujs:disabled')) {\n return;\n }\n\n replacement = element.getAttribute('data-disable-with');\n\n if (replacement != null) {\n if (matches(element, 'button')) {\n setData(element, 'ujs:enable-with', element.innerHTML);\n element.innerHTML = replacement;\n } else {\n setData(element, 'ujs:enable-with', element.value);\n element.value = replacement;\n }\n }\n\n element.disabled = true;\n return setData(element, 'ujs:disabled', true);\n };\n\n enableFormElements = function enableFormElements(form) {\n return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n };\n\n enableFormElement = function enableFormElement(element) {\n var originalText;\n originalText = getData(element, 'ujs:enable-with');\n\n if (originalText != null) {\n if (matches(element, 'button')) {\n element.innerHTML = originalText;\n } else {\n element.value = originalText;\n }\n\n setData(element, 'ujs:enable-with', null);\n }\n\n element.disabled = false;\n return setData(element, 'ujs:disabled', null);\n };\n\n isXhrRedirect = function isXhrRedirect(event) {\n var ref, xhr;\n xhr = (ref = event.detail) != null ? ref[0] : void 0;\n return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n };\n }).call(this);\n (function () {\n var stopEverything;\n stopEverything = Rails.stopEverything;\n\n Rails.handleMethod = function (e) {\n var csrfParam, csrfToken, form, formContent, href, link, method;\n link = this;\n method = link.getAttribute('data-method');\n\n if (!method) {\n return;\n }\n\n href = Rails.href(link);\n csrfToken = Rails.csrfToken();\n csrfParam = Rails.csrfParam();\n form = document.createElement('form');\n formContent = \"\";\n\n if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n formContent += \"\";\n }\n\n formContent += '';\n form.method = 'post';\n form.action = href;\n form.target = link.target;\n form.innerHTML = formContent;\n form.style.display = 'none';\n document.body.appendChild(form);\n form.querySelector('[type=\"submit\"]').click();\n return stopEverything(e);\n };\n }).call(this);\n (function () {\n var ajax,\n fire,\n getData,\n isCrossDomain,\n isRemote,\n matches,\n serializeElement,\n setData,\n stopEverything,\n slice = [].slice;\n matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n isRemote = function isRemote(element) {\n var value;\n value = element.getAttribute('data-remote');\n return value != null && value !== 'false';\n };\n\n Rails.handleRemote = function (e) {\n var button, data, dataType, element, method, url, withCredentials;\n element = this;\n\n if (!isRemote(element)) {\n return true;\n }\n\n if (!fire(element, 'ajax:before')) {\n fire(element, 'ajax:stopped');\n return false;\n }\n\n withCredentials = element.getAttribute('data-with-credentials');\n dataType = element.getAttribute('data-type') || 'script';\n\n if (matches(element, Rails.formSubmitSelector)) {\n button = getData(element, 'ujs:submit-button');\n method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n if (method.toUpperCase() === 'GET') {\n url = url.replace(/\\?.*$/, '');\n }\n\n if (element.enctype === 'multipart/form-data') {\n data = new FormData(element);\n\n if (button != null) {\n data.append(button.name, button.value);\n }\n } else {\n data = serializeElement(element, button);\n }\n\n setData(element, 'ujs:submit-button', null);\n setData(element, 'ujs:submit-button-formmethod', null);\n setData(element, 'ujs:submit-button-formaction', null);\n } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n method = element.getAttribute('data-method');\n url = element.getAttribute('data-url');\n data = serializeElement(element, element.getAttribute('data-params'));\n } else {\n method = element.getAttribute('data-method');\n url = Rails.href(element);\n data = element.getAttribute('data-params');\n }\n\n ajax({\n type: method || 'GET',\n url: url,\n data: data,\n dataType: dataType,\n beforeSend: function beforeSend(xhr, options) {\n if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n return fire(element, 'ajax:send', [xhr]);\n } else {\n fire(element, 'ajax:stopped');\n return false;\n }\n },\n success: function success() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:success', args);\n },\n error: function error() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:error', args);\n },\n complete: function complete() {\n var args;\n args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n return fire(element, 'ajax:complete', args);\n },\n crossDomain: isCrossDomain(url),\n withCredentials: withCredentials != null && withCredentials !== 'false'\n });\n return stopEverything(e);\n };\n\n Rails.formSubmitButtonClick = function (e) {\n var button, form;\n button = this;\n form = button.form;\n\n if (!form) {\n return;\n }\n\n if (button.name) {\n setData(form, 'ujs:submit-button', {\n name: button.name,\n value: button.value\n });\n }\n\n setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n };\n\n Rails.preventInsignificantClick = function (e) {\n var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n link = this;\n method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n data = link.getAttribute('data-params');\n metaClick = e.metaKey || e.ctrlKey;\n insignificantMetaClick = metaClick && method === 'GET' && !data;\n nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n if (nonPrimaryMouseClick || insignificantMetaClick) {\n return e.stopImmediatePropagation();\n }\n };\n }).call(this);\n (function () {\n var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n if (jQuery.rails) {\n throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n }\n\n jQuery.rails = Rails;\n jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n if (!options.crossDomain) {\n return CSRFProtection(xhr);\n }\n });\n }\n\n Rails.start = function () {\n if (window._rails_loaded) {\n throw new Error('rails-ujs has already been loaded!');\n }\n\n window.addEventListener('pageshow', function () {\n $(Rails.formEnableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n return $(Rails.linkDisableSelector).forEach(function (el) {\n if (getData(el, 'ujs:disabled')) {\n return enableElement(el);\n }\n });\n });\n delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n delegate(document, Rails.linkClickSelector, 'click', disableElement);\n delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n return setTimeout(function () {\n return disableElement(e);\n }, 13);\n });\n delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n document.addEventListener('DOMContentLoaded', loadCSPNonce);\n return window._rails_loaded = true;\n };\n\n if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n Rails.start();\n }\n }).call(this);\n }).call(this);\n\n if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n module.exports = Rails;\n } else if (typeof define === \"function\" && define.amd) {\n define(Rails);\n }\n}).call(this);","function _typeof(obj) { \"@babel/helpers - typeof\"; if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nTurbolinks 5.2.0\nCopyright © 2018 Basecamp, LLC\n */\n(function () {\n var t = this;\n (function () {\n (function () {\n this.Turbolinks = {\n supported: function () {\n return null != window.history.pushState && null != window.requestAnimationFrame && null != window.addEventListener;\n }(),\n visit: function visit(t, r) {\n return e.controller.visit(t, r);\n },\n clearCache: function clearCache() {\n return e.controller.clearCache();\n },\n setProgressBarDelay: function setProgressBarDelay(t) {\n return e.controller.setProgressBarDelay(t);\n }\n };\n }).call(this);\n }).call(t);\n var e = t.Turbolinks;\n (function () {\n (function () {\n var t,\n r,\n n,\n o = [].slice;\n e.copyObject = function (t) {\n var e, r, n;\n r = {};\n\n for (e in t) {\n n = t[e], r[e] = n;\n }\n\n return r;\n }, e.closest = function (e, r) {\n return t.call(e, r);\n }, t = function () {\n var t, e;\n return t = document.documentElement, null != (e = t.closest) ? e : function (t) {\n var e;\n\n for (e = this; e;) {\n if (e.nodeType === Node.ELEMENT_NODE && r.call(e, t)) return e;\n e = e.parentNode;\n }\n };\n }(), e.defer = function (t) {\n return setTimeout(t, 1);\n }, e.throttle = function (t) {\n var e;\n return e = null, function () {\n var r;\n return r = 1 <= arguments.length ? o.call(arguments, 0) : [], null != e ? e : e = requestAnimationFrame(function (n) {\n return function () {\n return e = null, t.apply(n, r);\n };\n }(this));\n };\n }, e.dispatch = function (t, e) {\n var r, o, i, s, a, u;\n return a = null != e ? e : {}, u = a.target, r = a.cancelable, o = a.data, i = document.createEvent(\"Events\"), i.initEvent(t, !0, r === !0), i.data = null != o ? o : {}, i.cancelable && !n && (s = i.preventDefault, i.preventDefault = function () {\n return this.defaultPrevented || Object.defineProperty(this, \"defaultPrevented\", {\n get: function get() {\n return !0;\n }\n }), s.call(this);\n }), (null != u ? u : document).dispatchEvent(i), i;\n }, n = function () {\n var t;\n return t = document.createEvent(\"Events\"), t.initEvent(\"test\", !0, !0), t.preventDefault(), t.defaultPrevented;\n }(), e.match = function (t, e) {\n return r.call(t, e);\n }, r = function () {\n var t, e, r, n;\n return t = document.documentElement, null != (e = null != (r = null != (n = t.matchesSelector) ? n : t.webkitMatchesSelector) ? r : t.msMatchesSelector) ? e : t.mozMatchesSelector;\n }(), e.uuid = function () {\n var t, e, r;\n\n for (r = \"\", t = e = 1; 36 >= e; t = ++e) {\n r += 9 === t || 14 === t || 19 === t || 24 === t ? \"-\" : 15 === t ? \"4\" : 20 === t ? (Math.floor(4 * Math.random()) + 8).toString(16) : Math.floor(15 * Math.random()).toString(16);\n }\n\n return r;\n };\n }).call(this), function () {\n e.Location = function () {\n function t(t) {\n var e, r;\n null == t && (t = \"\"), r = document.createElement(\"a\"), r.href = t.toString(), this.absoluteURL = r.href, e = r.hash.length, 2 > e ? this.requestURL = this.absoluteURL : (this.requestURL = this.absoluteURL.slice(0, -e), this.anchor = r.hash.slice(1));\n }\n\n var e, r, n, o;\n return t.wrap = function (t) {\n return t instanceof this ? t : new this(t);\n }, t.prototype.getOrigin = function () {\n return this.absoluteURL.split(\"/\", 3).join(\"/\");\n }, t.prototype.getPath = function () {\n var t, e;\n return null != (t = null != (e = this.requestURL.match(/\\/\\/[^\\/]*(\\/[^?;]*)/)) ? e[1] : void 0) ? t : \"/\";\n }, t.prototype.getPathComponents = function () {\n return this.getPath().split(\"/\").slice(1);\n }, t.prototype.getLastPathComponent = function () {\n return this.getPathComponents().slice(-1)[0];\n }, t.prototype.getExtension = function () {\n var t, e;\n return null != (t = null != (e = this.getLastPathComponent().match(/\\.[^.]*$/)) ? e[0] : void 0) ? t : \"\";\n }, t.prototype.isHTML = function () {\n return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n }, t.prototype.isPrefixedBy = function (t) {\n var e;\n return e = r(t), this.isEqualTo(t) || o(this.absoluteURL, e);\n }, t.prototype.isEqualTo = function (t) {\n return this.absoluteURL === (null != t ? t.absoluteURL : void 0);\n }, t.prototype.toCacheKey = function () {\n return this.requestURL;\n }, t.prototype.toJSON = function () {\n return this.absoluteURL;\n }, t.prototype.toString = function () {\n return this.absoluteURL;\n }, t.prototype.valueOf = function () {\n return this.absoluteURL;\n }, r = function r(t) {\n return e(t.getOrigin() + t.getPath());\n }, e = function e(t) {\n return n(t, \"/\") ? t : t + \"/\";\n }, o = function o(t, e) {\n return t.slice(0, e.length) === e;\n }, n = function n(t, e) {\n return t.slice(-e.length) === e;\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t, e) {\n return function () {\n return _t.apply(e, arguments);\n };\n };\n\n e.HttpRequest = function () {\n function r(r, n, o) {\n this.delegate = r, this.requestCanceled = t(this.requestCanceled, this), this.requestTimedOut = t(this.requestTimedOut, this), this.requestFailed = t(this.requestFailed, this), this.requestLoaded = t(this.requestLoaded, this), this.requestProgressed = t(this.requestProgressed, this), this.url = e.Location.wrap(n).requestURL, this.referrer = e.Location.wrap(o).absoluteURL, this.createXHR();\n }\n\n return r.NETWORK_FAILURE = 0, r.TIMEOUT_FAILURE = -1, r.timeout = 60, r.prototype.send = function () {\n var t;\n return this.xhr && !this.sent ? (this.notifyApplicationBeforeRequestStart(), this.setProgress(0), this.xhr.send(), this.sent = !0, \"function\" == typeof (t = this.delegate).requestStarted ? t.requestStarted() : void 0) : void 0;\n }, r.prototype.cancel = function () {\n return this.xhr && this.sent ? this.xhr.abort() : void 0;\n }, r.prototype.requestProgressed = function (t) {\n return t.lengthComputable ? this.setProgress(t.loaded / t.total) : void 0;\n }, r.prototype.requestLoaded = function () {\n return this.endRequest(function (t) {\n return function () {\n var e;\n return 200 <= (e = t.xhr.status) && 300 > e ? t.delegate.requestCompletedWithResponse(t.xhr.responseText, t.xhr.getResponseHeader(\"Turbolinks-Location\")) : (t.failed = !0, t.delegate.requestFailedWithStatusCode(t.xhr.status, t.xhr.responseText));\n };\n }(this));\n }, r.prototype.requestFailed = function () {\n return this.endRequest(function (t) {\n return function () {\n return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE);\n };\n }(this));\n }, r.prototype.requestTimedOut = function () {\n return this.endRequest(function (t) {\n return function () {\n return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE);\n };\n }(this));\n }, r.prototype.requestCanceled = function () {\n return this.endRequest();\n }, r.prototype.notifyApplicationBeforeRequestStart = function () {\n return e.dispatch(\"turbolinks:request-start\", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n }, r.prototype.notifyApplicationAfterRequestEnd = function () {\n return e.dispatch(\"turbolinks:request-end\", {\n data: {\n url: this.url,\n xhr: this.xhr\n }\n });\n }, r.prototype.createXHR = function () {\n return this.xhr = new XMLHttpRequest(), this.xhr.open(\"GET\", this.url, !0), this.xhr.timeout = 1e3 * this.constructor.timeout, this.xhr.setRequestHeader(\"Accept\", \"text/html, application/xhtml+xml\"), this.xhr.setRequestHeader(\"Turbolinks-Referrer\", this.referrer), this.xhr.onprogress = this.requestProgressed, this.xhr.onload = this.requestLoaded, this.xhr.onerror = this.requestFailed, this.xhr.ontimeout = this.requestTimedOut, this.xhr.onabort = this.requestCanceled;\n }, r.prototype.endRequest = function (t) {\n return this.xhr ? (this.notifyApplicationAfterRequestEnd(), null != t && t.call(this), this.destroy()) : void 0;\n }, r.prototype.setProgress = function (t) {\n var e;\n return this.progress = t, \"function\" == typeof (e = this.delegate).requestProgressed ? e.requestProgressed(this.progress) : void 0;\n }, r.prototype.destroy = function () {\n var t;\n return this.setProgress(1), \"function\" == typeof (t = this.delegate).requestFinished && t.requestFinished(), this.delegate = null, this.xhr = null;\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t2, e) {\n return function () {\n return _t2.apply(e, arguments);\n };\n };\n\n e.ProgressBar = function () {\n function e() {\n this.trickle = t(this.trickle, this), this.stylesheetElement = this.createStylesheetElement(), this.progressElement = this.createProgressElement();\n }\n\n var r;\n return r = 300, e.defaultCSS = \".turbolinks-progress-bar {\\n position: fixed;\\n display: block;\\n top: 0;\\n left: 0;\\n height: 3px;\\n background: #0076ff;\\n z-index: 9999;\\n transition: width \" + r + \"ms ease-out, opacity \" + r / 2 + \"ms \" + r / 2 + \"ms ease-in;\\n transform: translate3d(0, 0, 0);\\n}\", e.prototype.show = function () {\n return this.visible ? void 0 : (this.visible = !0, this.installStylesheetElement(), this.installProgressElement(), this.startTrickling());\n }, e.prototype.hide = function () {\n return this.visible && !this.hiding ? (this.hiding = !0, this.fadeProgressElement(function (t) {\n return function () {\n return t.uninstallProgressElement(), t.stopTrickling(), t.visible = !1, t.hiding = !1;\n };\n }(this))) : void 0;\n }, e.prototype.setValue = function (t) {\n return this.value = t, this.refresh();\n }, e.prototype.installStylesheetElement = function () {\n return document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n }, e.prototype.installProgressElement = function () {\n return this.progressElement.style.width = 0, this.progressElement.style.opacity = 1, document.documentElement.insertBefore(this.progressElement, document.body), this.refresh();\n }, e.prototype.fadeProgressElement = function (t) {\n return this.progressElement.style.opacity = 0, setTimeout(t, 1.5 * r);\n }, e.prototype.uninstallProgressElement = function () {\n return this.progressElement.parentNode ? document.documentElement.removeChild(this.progressElement) : void 0;\n }, e.prototype.startTrickling = function () {\n return null != this.trickleInterval ? this.trickleInterval : this.trickleInterval = setInterval(this.trickle, r);\n }, e.prototype.stopTrickling = function () {\n return clearInterval(this.trickleInterval), this.trickleInterval = null;\n }, e.prototype.trickle = function () {\n return this.setValue(this.value + Math.random() / 100);\n }, e.prototype.refresh = function () {\n return requestAnimationFrame(function (t) {\n return function () {\n return t.progressElement.style.width = 10 + 90 * t.value + \"%\";\n };\n }(this));\n }, e.prototype.createStylesheetElement = function () {\n var t;\n return t = document.createElement(\"style\"), t.type = \"text/css\", t.textContent = this.constructor.defaultCSS, t;\n }, e.prototype.createProgressElement = function () {\n var t;\n return t = document.createElement(\"div\"), t.className = \"turbolinks-progress-bar\", t;\n }, e;\n }();\n }.call(this), function () {\n var t = function t(_t3, e) {\n return function () {\n return _t3.apply(e, arguments);\n };\n };\n\n e.BrowserAdapter = function () {\n function r(r) {\n this.controller = r, this.showProgressBar = t(this.showProgressBar, this), this.progressBar = new e.ProgressBar();\n }\n\n var n, o, i;\n return i = e.HttpRequest, n = i.NETWORK_FAILURE, o = i.TIMEOUT_FAILURE, r.prototype.visitProposedToLocationWithAction = function (t, e) {\n return this.controller.startVisitToLocationWithAction(t, e);\n }, r.prototype.visitStarted = function (t) {\n return t.issueRequest(), t.changeHistory(), t.loadCachedSnapshot();\n }, r.prototype.visitRequestStarted = function (t) {\n return this.progressBar.setValue(0), t.hasCachedSnapshot() || \"restore\" !== t.action ? this.showProgressBarAfterDelay() : this.showProgressBar();\n }, r.prototype.visitRequestProgressed = function (t) {\n return this.progressBar.setValue(t.progress);\n }, r.prototype.visitRequestCompleted = function (t) {\n return t.loadResponse();\n }, r.prototype.visitRequestFailedWithStatusCode = function (t, e) {\n switch (e) {\n case n:\n case o:\n return this.reload();\n\n default:\n return t.loadResponse();\n }\n }, r.prototype.visitRequestFinished = function (t) {\n return this.hideProgressBar();\n }, r.prototype.visitCompleted = function (t) {\n return t.followRedirect();\n }, r.prototype.pageInvalidated = function () {\n return this.reload();\n }, r.prototype.showProgressBarAfterDelay = function () {\n return this.progressBarTimeout = setTimeout(this.showProgressBar, this.controller.progressBarDelay);\n }, r.prototype.showProgressBar = function () {\n return this.progressBar.show();\n }, r.prototype.hideProgressBar = function () {\n return this.progressBar.hide(), clearTimeout(this.progressBarTimeout);\n }, r.prototype.reload = function () {\n return window.location.reload();\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t4, e) {\n return function () {\n return _t4.apply(e, arguments);\n };\n };\n\n e.History = function () {\n function r(e) {\n this.delegate = e, this.onPageLoad = t(this.onPageLoad, this), this.onPopState = t(this.onPopState, this);\n }\n\n return r.prototype.start = function () {\n return this.started ? void 0 : (addEventListener(\"popstate\", this.onPopState, !1), addEventListener(\"load\", this.onPageLoad, !1), this.started = !0);\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"popstate\", this.onPopState, !1), removeEventListener(\"load\", this.onPageLoad, !1), this.started = !1) : void 0;\n }, r.prototype.push = function (t, r) {\n return t = e.Location.wrap(t), this.update(\"push\", t, r);\n }, r.prototype.replace = function (t, r) {\n return t = e.Location.wrap(t), this.update(\"replace\", t, r);\n }, r.prototype.onPopState = function (t) {\n var r, n, o, i;\n return this.shouldHandlePopState() && (i = null != (n = t.state) ? n.turbolinks : void 0) ? (r = e.Location.wrap(window.location), o = i.restorationIdentifier, this.delegate.historyPoppedToLocationWithRestorationIdentifier(r, o)) : void 0;\n }, r.prototype.onPageLoad = function (t) {\n return e.defer(function (t) {\n return function () {\n return t.pageLoaded = !0;\n };\n }(this));\n }, r.prototype.shouldHandlePopState = function () {\n return this.pageIsLoaded();\n }, r.prototype.pageIsLoaded = function () {\n return this.pageLoaded || \"complete\" === document.readyState;\n }, r.prototype.update = function (t, e, r) {\n var n;\n return n = {\n turbolinks: {\n restorationIdentifier: r\n }\n }, history[t + \"State\"](n, null, e);\n }, r;\n }();\n }.call(this), function () {\n e.HeadDetails = function () {\n function t(t) {\n var e, r, n, s, a, u;\n\n for (this.elements = {}, n = 0, a = t.length; a > n; n++) {\n u = t[n], u.nodeType === Node.ELEMENT_NODE && (s = u.outerHTML, r = null != (e = this.elements)[s] ? e[s] : e[s] = {\n type: i(u),\n tracked: o(u),\n elements: []\n }, r.elements.push(u));\n }\n }\n\n var e, r, n, o, i;\n return t.fromHeadElement = function (t) {\n var e;\n return new this(null != (e = null != t ? t.childNodes : void 0) ? e : []);\n }, t.prototype.hasElementWithKey = function (t) {\n return t in this.elements;\n }, t.prototype.getTrackedElementSignature = function () {\n var t, e;\n return function () {\n var r, n;\n r = this.elements, n = [];\n\n for (t in r) {\n e = r[t].tracked, e && n.push(t);\n }\n\n return n;\n }.call(this).join(\"\");\n }, t.prototype.getScriptElementsNotInDetails = function (t) {\n return this.getElementsMatchingTypeNotInDetails(\"script\", t);\n }, t.prototype.getStylesheetElementsNotInDetails = function (t) {\n return this.getElementsMatchingTypeNotInDetails(\"stylesheet\", t);\n }, t.prototype.getElementsMatchingTypeNotInDetails = function (t, e) {\n var r, n, o, i, s, a;\n o = this.elements, s = [];\n\n for (n in o) {\n i = o[n], a = i.type, r = i.elements, a !== t || e.hasElementWithKey(n) || s.push(r[0]);\n }\n\n return s;\n }, t.prototype.getProvisionalElements = function () {\n var t, e, r, n, o, i, s;\n r = [], n = this.elements;\n\n for (e in n) {\n o = n[e], s = o.type, i = o.tracked, t = o.elements, null != s || i ? t.length > 1 && r.push.apply(r, t.slice(1)) : r.push.apply(r, t);\n }\n\n return r;\n }, t.prototype.getMetaValue = function (t) {\n var e;\n return null != (e = this.findMetaElementByName(t)) ? e.getAttribute(\"content\") : void 0;\n }, t.prototype.findMetaElementByName = function (t) {\n var r, n, o, i;\n r = void 0, i = this.elements;\n\n for (o in i) {\n n = i[o].elements, e(n[0], t) && (r = n[0]);\n }\n\n return r;\n }, i = function i(t) {\n return r(t) ? \"script\" : n(t) ? \"stylesheet\" : void 0;\n }, o = function o(t) {\n return \"reload\" === t.getAttribute(\"data-turbolinks-track\");\n }, r = function r(t) {\n var e;\n return e = t.tagName.toLowerCase(), \"script\" === e;\n }, n = function n(t) {\n var e;\n return e = t.tagName.toLowerCase(), \"style\" === e || \"link\" === e && \"stylesheet\" === t.getAttribute(\"rel\");\n }, e = function e(t, _e) {\n var r;\n return r = t.tagName.toLowerCase(), \"meta\" === r && t.getAttribute(\"name\") === _e;\n }, t;\n }();\n }.call(this), function () {\n e.Snapshot = function () {\n function t(t, e) {\n this.headDetails = t, this.bodyElement = e;\n }\n\n return t.wrap = function (t) {\n return t instanceof this ? t : \"string\" == typeof t ? this.fromHTMLString(t) : this.fromHTMLElement(t);\n }, t.fromHTMLString = function (t) {\n var e;\n return e = document.createElement(\"html\"), e.innerHTML = t, this.fromHTMLElement(e);\n }, t.fromHTMLElement = function (t) {\n var r, n, o, i;\n return o = t.querySelector(\"head\"), r = null != (i = t.querySelector(\"body\")) ? i : document.createElement(\"body\"), n = e.HeadDetails.fromHeadElement(o), new this(n, r);\n }, t.prototype.clone = function () {\n return new this.constructor(this.headDetails, this.bodyElement.cloneNode(!0));\n }, t.prototype.getRootLocation = function () {\n var t, r;\n return r = null != (t = this.getSetting(\"root\")) ? t : \"/\", new e.Location(r);\n }, t.prototype.getCacheControlValue = function () {\n return this.getSetting(\"cache-control\");\n }, t.prototype.getElementForAnchor = function (t) {\n try {\n return this.bodyElement.querySelector(\"[id='\" + t + \"'], a[name='\" + t + \"']\");\n } catch (e) {}\n }, t.prototype.getPermanentElements = function () {\n return this.bodyElement.querySelectorAll(\"[id][data-turbolinks-permanent]\");\n }, t.prototype.getPermanentElementById = function (t) {\n return this.bodyElement.querySelector(\"#\" + t + \"[data-turbolinks-permanent]\");\n }, t.prototype.getPermanentElementsPresentInSnapshot = function (t) {\n var e, r, n, o, i;\n\n for (o = this.getPermanentElements(), i = [], r = 0, n = o.length; n > r; r++) {\n e = o[r], t.getPermanentElementById(e.id) && i.push(e);\n }\n\n return i;\n }, t.prototype.findFirstAutofocusableElement = function () {\n return this.bodyElement.querySelector(\"[autofocus]\");\n }, t.prototype.hasAnchor = function (t) {\n return null != this.getElementForAnchor(t);\n }, t.prototype.isPreviewable = function () {\n return \"no-preview\" !== this.getCacheControlValue();\n }, t.prototype.isCacheable = function () {\n return \"no-cache\" !== this.getCacheControlValue();\n }, t.prototype.isVisitable = function () {\n return \"reload\" !== this.getSetting(\"visit-control\");\n }, t.prototype.getSetting = function (t) {\n return this.headDetails.getMetaValue(\"turbolinks-\" + t);\n }, t;\n }();\n }.call(this), function () {\n var t = [].slice;\n\n e.Renderer = function () {\n function e() {}\n\n var r;\n return e.render = function () {\n var e, r, n, o;\n return n = arguments[0], r = arguments[1], e = 3 <= arguments.length ? t.call(arguments, 2) : [], o = function (t, e, r) {\n r.prototype = t.prototype;\n var n = new r(),\n o = t.apply(n, e);\n return Object(o) === o ? o : n;\n }(this, e, function () {}), o.delegate = n, o.render(r), o;\n }, e.prototype.renderView = function (t) {\n return this.delegate.viewWillRender(this.newBody), t(), this.delegate.viewRendered(this.newBody);\n }, e.prototype.invalidateView = function () {\n return this.delegate.viewInvalidated();\n }, e.prototype.createScriptElement = function (t) {\n var e;\n return \"false\" === t.getAttribute(\"data-turbolinks-eval\") ? t : (e = document.createElement(\"script\"), e.textContent = t.textContent, e.async = !1, r(e, t), e);\n }, r = function r(t, e) {\n var r, n, o, i, s, a, u;\n\n for (i = e.attributes, a = [], r = 0, n = i.length; n > r; r++) {\n s = i[r], o = s.name, u = s.value, a.push(t.setAttribute(o, u));\n }\n\n return a;\n }, e;\n }();\n }.call(this), function () {\n var t,\n r,\n n = function n(t, e) {\n function r() {\n this.constructor = t;\n }\n\n for (var n in e) {\n o.call(e, n) && (t[n] = e[n]);\n }\n\n return r.prototype = e.prototype, t.prototype = new r(), t.__super__ = e.prototype, t;\n },\n o = {}.hasOwnProperty;\n\n e.SnapshotRenderer = function (e) {\n function o(t, e, r) {\n this.currentSnapshot = t, this.newSnapshot = e, this.isPreview = r, this.currentHeadDetails = this.currentSnapshot.headDetails, this.newHeadDetails = this.newSnapshot.headDetails, this.currentBody = this.currentSnapshot.bodyElement, this.newBody = this.newSnapshot.bodyElement;\n }\n\n return n(o, e), o.prototype.render = function (t) {\n return this.shouldRender() ? (this.mergeHead(), this.renderView(function (e) {\n return function () {\n return e.replaceBody(), e.isPreview || e.focusFirstAutofocusableElement(), t();\n };\n }(this))) : this.invalidateView();\n }, o.prototype.mergeHead = function () {\n return this.copyNewHeadStylesheetElements(), this.copyNewHeadScriptElements(), this.removeCurrentHeadProvisionalElements(), this.copyNewHeadProvisionalElements();\n }, o.prototype.replaceBody = function () {\n var t;\n return t = this.relocateCurrentBodyPermanentElements(), this.activateNewBodyScriptElements(), this.assignNewBody(), this.replacePlaceholderElementsWithClonedPermanentElements(t);\n }, o.prototype.shouldRender = function () {\n return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical();\n }, o.prototype.trackedElementsAreIdentical = function () {\n return this.currentHeadDetails.getTrackedElementSignature() === this.newHeadDetails.getTrackedElementSignature();\n }, o.prototype.copyNewHeadStylesheetElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadStylesheetElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(t));\n }\n\n return o;\n }, o.prototype.copyNewHeadScriptElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadScriptElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(this.createScriptElement(t)));\n }\n\n return o;\n }, o.prototype.removeCurrentHeadProvisionalElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getCurrentHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.removeChild(t));\n }\n\n return o;\n }, o.prototype.copyNewHeadProvisionalElements = function () {\n var t, e, r, n, o;\n\n for (n = this.getNewHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n t = n[e], o.push(document.head.appendChild(t));\n }\n\n return o;\n }, o.prototype.relocateCurrentBodyPermanentElements = function () {\n var e, n, o, i, s, a, u;\n\n for (a = this.getCurrentBodyPermanentElements(), u = [], e = 0, n = a.length; n > e; e++) {\n i = a[e], s = t(i), o = this.newSnapshot.getPermanentElementById(i.id), r(i, s.element), r(o, i), u.push(s);\n }\n\n return u;\n }, o.prototype.replacePlaceholderElementsWithClonedPermanentElements = function (t) {\n var e, n, o, i, s, a, u;\n\n for (u = [], o = 0, i = t.length; i > o; o++) {\n a = t[o], n = a.element, s = a.permanentElement, e = s.cloneNode(!0), u.push(r(n, e));\n }\n\n return u;\n }, o.prototype.activateNewBodyScriptElements = function () {\n var t, e, n, o, i, s;\n\n for (i = this.getNewBodyScriptElements(), s = [], e = 0, o = i.length; o > e; e++) {\n n = i[e], t = this.createScriptElement(n), s.push(r(n, t));\n }\n\n return s;\n }, o.prototype.assignNewBody = function () {\n return document.body = this.newBody;\n }, o.prototype.focusFirstAutofocusableElement = function () {\n var t;\n return null != (t = this.newSnapshot.findFirstAutofocusableElement()) ? t.focus() : void 0;\n }, o.prototype.getNewHeadStylesheetElements = function () {\n return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);\n }, o.prototype.getNewHeadScriptElements = function () {\n return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);\n }, o.prototype.getCurrentHeadProvisionalElements = function () {\n return this.currentHeadDetails.getProvisionalElements();\n }, o.prototype.getNewHeadProvisionalElements = function () {\n return this.newHeadDetails.getProvisionalElements();\n }, o.prototype.getCurrentBodyPermanentElements = function () {\n return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot);\n }, o.prototype.getNewBodyScriptElements = function () {\n return this.newBody.querySelectorAll(\"script\");\n }, o;\n }(e.Renderer), t = function t(_t5) {\n var e;\n return e = document.createElement(\"meta\"), e.setAttribute(\"name\", \"turbolinks-permanent-placeholder\"), e.setAttribute(\"content\", _t5.id), {\n element: e,\n permanentElement: _t5\n };\n }, r = function r(t, e) {\n var r;\n return (r = t.parentNode) ? r.replaceChild(e, t) : void 0;\n };\n }.call(this), function () {\n var t = function t(_t6, e) {\n function n() {\n this.constructor = _t6;\n }\n\n for (var o in e) {\n r.call(e, o) && (_t6[o] = e[o]);\n }\n\n return n.prototype = e.prototype, _t6.prototype = new n(), _t6.__super__ = e.prototype, _t6;\n },\n r = {}.hasOwnProperty;\n\n e.ErrorRenderer = function (e) {\n function r(t) {\n var e;\n e = document.createElement(\"html\"), e.innerHTML = t, this.newHead = e.querySelector(\"head\"), this.newBody = e.querySelector(\"body\");\n }\n\n return t(r, e), r.prototype.render = function (t) {\n return this.renderView(function (e) {\n return function () {\n return e.replaceHeadAndBody(), e.activateBodyScriptElements(), t();\n };\n }(this));\n }, r.prototype.replaceHeadAndBody = function () {\n var t, e;\n return e = document.head, t = document.body, e.parentNode.replaceChild(this.newHead, e), t.parentNode.replaceChild(this.newBody, t);\n }, r.prototype.activateBodyScriptElements = function () {\n var t, e, r, n, o, i;\n\n for (n = this.getScriptElements(), i = [], e = 0, r = n.length; r > e; e++) {\n o = n[e], t = this.createScriptElement(o), i.push(o.parentNode.replaceChild(t, o));\n }\n\n return i;\n }, r.prototype.getScriptElements = function () {\n return document.documentElement.querySelectorAll(\"script\");\n }, r;\n }(e.Renderer);\n }.call(this), function () {\n e.View = function () {\n function t(t) {\n this.delegate = t, this.htmlElement = document.documentElement;\n }\n\n return t.prototype.getRootLocation = function () {\n return this.getSnapshot().getRootLocation();\n }, t.prototype.getElementForAnchor = function (t) {\n return this.getSnapshot().getElementForAnchor(t);\n }, t.prototype.getSnapshot = function () {\n return e.Snapshot.fromHTMLElement(this.htmlElement);\n }, t.prototype.render = function (t, e) {\n var r, n, o;\n return o = t.snapshot, r = t.error, n = t.isPreview, this.markAsPreview(n), null != o ? this.renderSnapshot(o, n, e) : this.renderError(r, e);\n }, t.prototype.markAsPreview = function (t) {\n return t ? this.htmlElement.setAttribute(\"data-turbolinks-preview\", \"\") : this.htmlElement.removeAttribute(\"data-turbolinks-preview\");\n }, t.prototype.renderSnapshot = function (t, r, n) {\n return e.SnapshotRenderer.render(this.delegate, n, this.getSnapshot(), e.Snapshot.wrap(t), r);\n }, t.prototype.renderError = function (t, r) {\n return e.ErrorRenderer.render(this.delegate, r, t);\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t7, e) {\n return function () {\n return _t7.apply(e, arguments);\n };\n };\n\n e.ScrollManager = function () {\n function r(r) {\n this.delegate = r, this.onScroll = t(this.onScroll, this), this.onScroll = e.throttle(this.onScroll);\n }\n\n return r.prototype.start = function () {\n return this.started ? void 0 : (addEventListener(\"scroll\", this.onScroll, !1), this.onScroll(), this.started = !0);\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"scroll\", this.onScroll, !1), this.started = !1) : void 0;\n }, r.prototype.scrollToElement = function (t) {\n return t.scrollIntoView();\n }, r.prototype.scrollToPosition = function (t) {\n var e, r;\n return e = t.x, r = t.y, window.scrollTo(e, r);\n }, r.prototype.onScroll = function (t) {\n return this.updatePosition({\n x: window.pageXOffset,\n y: window.pageYOffset\n });\n }, r.prototype.updatePosition = function (t) {\n var e;\n return this.position = t, null != (e = this.delegate) ? e.scrollPositionChanged(this.position) : void 0;\n }, r;\n }();\n }.call(this), function () {\n e.SnapshotCache = function () {\n function t(t) {\n this.size = t, this.keys = [], this.snapshots = {};\n }\n\n var r;\n return t.prototype.has = function (t) {\n var e;\n return e = r(t), e in this.snapshots;\n }, t.prototype.get = function (t) {\n var e;\n if (this.has(t)) return e = this.read(t), this.touch(t), e;\n }, t.prototype.put = function (t, e) {\n return this.write(t, e), this.touch(t), e;\n }, t.prototype.read = function (t) {\n var e;\n return e = r(t), this.snapshots[e];\n }, t.prototype.write = function (t, e) {\n var n;\n return n = r(t), this.snapshots[n] = e;\n }, t.prototype.touch = function (t) {\n var e, n;\n return n = r(t), e = this.keys.indexOf(n), e > -1 && this.keys.splice(e, 1), this.keys.unshift(n), this.trim();\n }, t.prototype.trim = function () {\n var t, e, r, n, o;\n\n for (n = this.keys.splice(this.size), o = [], t = 0, r = n.length; r > t; t++) {\n e = n[t], o.push(delete this.snapshots[e]);\n }\n\n return o;\n }, r = function r(t) {\n return e.Location.wrap(t).toCacheKey();\n }, t;\n }();\n }.call(this), function () {\n var t = function t(_t8, e) {\n return function () {\n return _t8.apply(e, arguments);\n };\n };\n\n e.Visit = function () {\n function r(r, n, o) {\n this.controller = r, this.action = o, this.performScroll = t(this.performScroll, this), this.identifier = e.uuid(), this.location = e.Location.wrap(n), this.adapter = this.controller.adapter, this.state = \"initialized\", this.timingMetrics = {};\n }\n\n var n;\n return r.prototype.start = function () {\n return \"initialized\" === this.state ? (this.recordTimingMetric(\"visitStart\"), this.state = \"started\", this.adapter.visitStarted(this)) : void 0;\n }, r.prototype.cancel = function () {\n var t;\n return \"started\" === this.state ? (null != (t = this.request) && t.cancel(), this.cancelRender(), this.state = \"canceled\") : void 0;\n }, r.prototype.complete = function () {\n var t;\n return \"started\" === this.state ? (this.recordTimingMetric(\"visitEnd\"), this.state = \"completed\", \"function\" == typeof (t = this.adapter).visitCompleted && t.visitCompleted(this), this.controller.visitCompleted(this)) : void 0;\n }, r.prototype.fail = function () {\n var t;\n return \"started\" === this.state ? (this.state = \"failed\", \"function\" == typeof (t = this.adapter).visitFailed ? t.visitFailed(this) : void 0) : void 0;\n }, r.prototype.changeHistory = function () {\n var t, e;\n return this.historyChanged ? void 0 : (t = this.location.isEqualTo(this.referrer) ? \"replace\" : this.action, e = n(t), this.controller[e](this.location, this.restorationIdentifier), this.historyChanged = !0);\n }, r.prototype.issueRequest = function () {\n return this.shouldIssueRequest() && null == this.request ? (this.progress = 0, this.request = new e.HttpRequest(this, this.location, this.referrer), this.request.send()) : void 0;\n }, r.prototype.getCachedSnapshot = function () {\n var t;\n return !(t = this.controller.getCachedSnapshotForLocation(this.location)) || null != this.location.anchor && !t.hasAnchor(this.location.anchor) || \"restore\" !== this.action && !t.isPreviewable() ? void 0 : t;\n }, r.prototype.hasCachedSnapshot = function () {\n return null != this.getCachedSnapshot();\n }, r.prototype.loadCachedSnapshot = function () {\n var t, e;\n return (e = this.getCachedSnapshot()) ? (t = this.shouldIssueRequest(), this.render(function () {\n var r;\n return this.cacheSnapshot(), this.controller.render({\n snapshot: e,\n isPreview: t\n }, this.performScroll), \"function\" == typeof (r = this.adapter).visitRendered && r.visitRendered(this), t ? void 0 : this.complete();\n })) : void 0;\n }, r.prototype.loadResponse = function () {\n return null != this.response ? this.render(function () {\n var t, e;\n return this.cacheSnapshot(), this.request.failed ? (this.controller.render({\n error: this.response\n }, this.performScroll), \"function\" == typeof (t = this.adapter).visitRendered && t.visitRendered(this), this.fail()) : (this.controller.render({\n snapshot: this.response\n }, this.performScroll), \"function\" == typeof (e = this.adapter).visitRendered && e.visitRendered(this), this.complete());\n }) : void 0;\n }, r.prototype.followRedirect = function () {\n return this.redirectedToLocation && !this.followedRedirect ? (this.location = this.redirectedToLocation, this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation, this.restorationIdentifier), this.followedRedirect = !0) : void 0;\n }, r.prototype.requestStarted = function () {\n var t;\n return this.recordTimingMetric(\"requestStart\"), \"function\" == typeof (t = this.adapter).visitRequestStarted ? t.visitRequestStarted(this) : void 0;\n }, r.prototype.requestProgressed = function (t) {\n var e;\n return this.progress = t, \"function\" == typeof (e = this.adapter).visitRequestProgressed ? e.visitRequestProgressed(this) : void 0;\n }, r.prototype.requestCompletedWithResponse = function (t, r) {\n return this.response = t, null != r && (this.redirectedToLocation = e.Location.wrap(r)), this.adapter.visitRequestCompleted(this);\n }, r.prototype.requestFailedWithStatusCode = function (t, e) {\n return this.response = e, this.adapter.visitRequestFailedWithStatusCode(this, t);\n }, r.prototype.requestFinished = function () {\n var t;\n return this.recordTimingMetric(\"requestEnd\"), \"function\" == typeof (t = this.adapter).visitRequestFinished ? t.visitRequestFinished(this) : void 0;\n }, r.prototype.performScroll = function () {\n return this.scrolled ? void 0 : (\"restore\" === this.action ? this.scrollToRestoredPosition() || this.scrollToTop() : this.scrollToAnchor() || this.scrollToTop(), this.scrolled = !0);\n }, r.prototype.scrollToRestoredPosition = function () {\n var t, e;\n return t = null != (e = this.restorationData) ? e.scrollPosition : void 0, null != t ? (this.controller.scrollToPosition(t), !0) : void 0;\n }, r.prototype.scrollToAnchor = function () {\n return null != this.location.anchor ? (this.controller.scrollToAnchor(this.location.anchor), !0) : void 0;\n }, r.prototype.scrollToTop = function () {\n return this.controller.scrollToPosition({\n x: 0,\n y: 0\n });\n }, r.prototype.recordTimingMetric = function (t) {\n var e;\n return null != (e = this.timingMetrics)[t] ? e[t] : e[t] = new Date().getTime();\n }, r.prototype.getTimingMetrics = function () {\n return e.copyObject(this.timingMetrics);\n }, n = function n(t) {\n switch (t) {\n case \"replace\":\n return \"replaceHistoryWithLocationAndRestorationIdentifier\";\n\n case \"advance\":\n case \"restore\":\n return \"pushHistoryWithLocationAndRestorationIdentifier\";\n }\n }, r.prototype.shouldIssueRequest = function () {\n return \"restore\" === this.action ? !this.hasCachedSnapshot() : !0;\n }, r.prototype.cacheSnapshot = function () {\n return this.snapshotCached ? void 0 : (this.controller.cacheSnapshot(), this.snapshotCached = !0);\n }, r.prototype.render = function (t) {\n return this.cancelRender(), this.frame = requestAnimationFrame(function (e) {\n return function () {\n return e.frame = null, t.call(e);\n };\n }(this));\n }, r.prototype.cancelRender = function () {\n return this.frame ? cancelAnimationFrame(this.frame) : void 0;\n }, r;\n }();\n }.call(this), function () {\n var t = function t(_t9, e) {\n return function () {\n return _t9.apply(e, arguments);\n };\n };\n\n e.Controller = function () {\n function r() {\n this.clickBubbled = t(this.clickBubbled, this), this.clickCaptured = t(this.clickCaptured, this), this.pageLoaded = t(this.pageLoaded, this), this.history = new e.History(this), this.view = new e.View(this), this.scrollManager = new e.ScrollManager(this), this.restorationData = {}, this.clearCache(), this.setProgressBarDelay(500);\n }\n\n return r.prototype.start = function () {\n return e.supported && !this.started ? (addEventListener(\"click\", this.clickCaptured, !0), addEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.start(), this.startHistory(), this.started = !0, this.enabled = !0) : void 0;\n }, r.prototype.disable = function () {\n return this.enabled = !1;\n }, r.prototype.stop = function () {\n return this.started ? (removeEventListener(\"click\", this.clickCaptured, !0), removeEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.stop(), this.stopHistory(), this.started = !1) : void 0;\n }, r.prototype.clearCache = function () {\n return this.cache = new e.SnapshotCache(10);\n }, r.prototype.visit = function (t, r) {\n var n, o;\n return null == r && (r = {}), t = e.Location.wrap(t), this.applicationAllowsVisitingLocation(t) ? this.locationIsVisitable(t) ? (n = null != (o = r.action) ? o : \"advance\", this.adapter.visitProposedToLocationWithAction(t, n)) : window.location = t : void 0;\n }, r.prototype.startVisitToLocationWithAction = function (t, r, n) {\n var o;\n return e.supported ? (o = this.getRestorationDataForIdentifier(n), this.startVisit(t, r, {\n restorationData: o\n })) : window.location = t;\n }, r.prototype.setProgressBarDelay = function (t) {\n return this.progressBarDelay = t;\n }, r.prototype.startHistory = function () {\n return this.location = e.Location.wrap(window.location), this.restorationIdentifier = e.uuid(), this.history.start(), this.history.replace(this.location, this.restorationIdentifier);\n }, r.prototype.stopHistory = function () {\n return this.history.stop();\n }, r.prototype.pushHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.push(this.location, this.restorationIdentifier);\n }, r.prototype.replaceHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.replace(this.location, this.restorationIdentifier);\n }, r.prototype.historyPoppedToLocationWithRestorationIdentifier = function (t, r) {\n var n;\n return this.restorationIdentifier = r, this.enabled ? (n = this.getRestorationDataForIdentifier(this.restorationIdentifier), this.startVisit(t, \"restore\", {\n restorationIdentifier: this.restorationIdentifier,\n restorationData: n,\n historyChanged: !0\n }), this.location = e.Location.wrap(t)) : this.adapter.pageInvalidated();\n }, r.prototype.getCachedSnapshotForLocation = function (t) {\n var e;\n return null != (e = this.cache.get(t)) ? e.clone() : void 0;\n }, r.prototype.shouldCacheSnapshot = function () {\n return this.view.getSnapshot().isCacheable();\n }, r.prototype.cacheSnapshot = function () {\n var t, r;\n return this.shouldCacheSnapshot() ? (this.notifyApplicationBeforeCachingSnapshot(), r = this.view.getSnapshot(), t = this.lastRenderedLocation, e.defer(function (e) {\n return function () {\n return e.cache.put(t, r.clone());\n };\n }(this))) : void 0;\n }, r.prototype.scrollToAnchor = function (t) {\n var e;\n return (e = this.view.getElementForAnchor(t)) ? this.scrollToElement(e) : this.scrollToPosition({\n x: 0,\n y: 0\n });\n }, r.prototype.scrollToElement = function (t) {\n return this.scrollManager.scrollToElement(t);\n }, r.prototype.scrollToPosition = function (t) {\n return this.scrollManager.scrollToPosition(t);\n }, r.prototype.scrollPositionChanged = function (t) {\n var e;\n return e = this.getCurrentRestorationData(), e.scrollPosition = t;\n }, r.prototype.render = function (t, e) {\n return this.view.render(t, e);\n }, r.prototype.viewInvalidated = function () {\n return this.adapter.pageInvalidated();\n }, r.prototype.viewWillRender = function (t) {\n return this.notifyApplicationBeforeRender(t);\n }, r.prototype.viewRendered = function () {\n return this.lastRenderedLocation = this.currentVisit.location, this.notifyApplicationAfterRender();\n }, r.prototype.pageLoaded = function () {\n return this.lastRenderedLocation = this.location, this.notifyApplicationAfterPageLoad();\n }, r.prototype.clickCaptured = function () {\n return removeEventListener(\"click\", this.clickBubbled, !1), addEventListener(\"click\", this.clickBubbled, !1);\n }, r.prototype.clickBubbled = function (t) {\n var e, r, n;\n return this.enabled && this.clickEventIsSignificant(t) && (r = this.getVisitableLinkForNode(t.target)) && (n = this.getVisitableLocationForLink(r)) && this.applicationAllowsFollowingLinkToLocation(r, n) ? (t.preventDefault(), e = this.getActionForLink(r), this.visit(n, {\n action: e\n })) : void 0;\n }, r.prototype.applicationAllowsFollowingLinkToLocation = function (t, e) {\n var r;\n return r = this.notifyApplicationAfterClickingLinkToLocation(t, e), !r.defaultPrevented;\n }, r.prototype.applicationAllowsVisitingLocation = function (t) {\n var e;\n return e = this.notifyApplicationBeforeVisitingLocation(t), !e.defaultPrevented;\n }, r.prototype.notifyApplicationAfterClickingLinkToLocation = function (t, r) {\n return e.dispatch(\"turbolinks:click\", {\n target: t,\n data: {\n url: r.absoluteURL\n },\n cancelable: !0\n });\n }, r.prototype.notifyApplicationBeforeVisitingLocation = function (t) {\n return e.dispatch(\"turbolinks:before-visit\", {\n data: {\n url: t.absoluteURL\n },\n cancelable: !0\n });\n }, r.prototype.notifyApplicationAfterVisitingLocation = function (t) {\n return e.dispatch(\"turbolinks:visit\", {\n data: {\n url: t.absoluteURL\n }\n });\n }, r.prototype.notifyApplicationBeforeCachingSnapshot = function () {\n return e.dispatch(\"turbolinks:before-cache\");\n }, r.prototype.notifyApplicationBeforeRender = function (t) {\n return e.dispatch(\"turbolinks:before-render\", {\n data: {\n newBody: t\n }\n });\n }, r.prototype.notifyApplicationAfterRender = function () {\n return e.dispatch(\"turbolinks:render\");\n }, r.prototype.notifyApplicationAfterPageLoad = function (t) {\n return null == t && (t = {}), e.dispatch(\"turbolinks:load\", {\n data: {\n url: this.location.absoluteURL,\n timing: t\n }\n });\n }, r.prototype.startVisit = function (t, e, r) {\n var n;\n return null != (n = this.currentVisit) && n.cancel(), this.currentVisit = this.createVisit(t, e, r), this.currentVisit.start(), this.notifyApplicationAfterVisitingLocation(t);\n }, r.prototype.createVisit = function (t, r, n) {\n var o, i, s, a, u;\n return i = null != n ? n : {}, a = i.restorationIdentifier, s = i.restorationData, o = i.historyChanged, u = new e.Visit(this, t, r), u.restorationIdentifier = null != a ? a : e.uuid(), u.restorationData = e.copyObject(s), u.historyChanged = o, u.referrer = this.location, u;\n }, r.prototype.visitCompleted = function (t) {\n return this.notifyApplicationAfterPageLoad(t.getTimingMetrics());\n }, r.prototype.clickEventIsSignificant = function (t) {\n return !(t.defaultPrevented || t.target.isContentEditable || t.which > 1 || t.altKey || t.ctrlKey || t.metaKey || t.shiftKey);\n }, r.prototype.getVisitableLinkForNode = function (t) {\n return this.nodeIsVisitable(t) ? e.closest(t, \"a[href]:not([target]):not([download])\") : void 0;\n }, r.prototype.getVisitableLocationForLink = function (t) {\n var r;\n return r = new e.Location(t.getAttribute(\"href\")), this.locationIsVisitable(r) ? r : void 0;\n }, r.prototype.getActionForLink = function (t) {\n var e;\n return null != (e = t.getAttribute(\"data-turbolinks-action\")) ? e : \"advance\";\n }, r.prototype.nodeIsVisitable = function (t) {\n var r;\n return (r = e.closest(t, \"[data-turbolinks]\")) ? \"false\" !== r.getAttribute(\"data-turbolinks\") : !0;\n }, r.prototype.locationIsVisitable = function (t) {\n return t.isPrefixedBy(this.view.getRootLocation()) && t.isHTML();\n }, r.prototype.getCurrentRestorationData = function () {\n return this.getRestorationDataForIdentifier(this.restorationIdentifier);\n }, r.prototype.getRestorationDataForIdentifier = function (t) {\n var e;\n return null != (e = this.restorationData)[t] ? e[t] : e[t] = {};\n }, r;\n }();\n }.call(this), function () {\n !function () {\n var t, e;\n if ((t = e = document.currentScript) && !e.hasAttribute(\"data-turbolinks-suppress-warning\")) for (; t = t.parentNode;) {\n if (t === document.body) return console.warn(\"You are loading Turbolinks from a